Difference between revisions of "Sega Mega Drive/Scrolling"

From Sega Retro

Line 48: Line 48:
 
with scanline horizontal:<pre>move.w #$8B07,($c00004).l</pre>
 
with scanline horizontal:<pre>move.w #$8B07,($c00004).l</pre>
 
|}
 
|}
 +
 +
==Format==
 +
One word is used to define how much each scrollable unit (whole screen, strip or scanline) is shifted:
 +
 +
{{bitfield|0|0|0|0|0|0|S9-S8;2}}{{bitfield|S7-S0;8}}
 +
* '''S9-S0:''' Number of pixels to shift. Between 0 and 1024 ($400).
 +
* [[Sega Mega Drive/Planes|Nametables]] are at most 1024 pixels wide or tall.
  
 
[[Category:Sega Mega Drive|Scrolling]]
 
[[Category:Sega Mega Drive|Scrolling]]
 
[[Category:Unofficial documentation]]
 
[[Category:Unofficial documentation]]

Revision as of 16:43, 17 June 2018

The Sega Mega Drive is able to scroll the background and foreground (planes B & A) independently, both horizontally and vertically.

Horizontal scrolling

Horizontal scrolling is controlled by a table located in VRAM. The address for the table is set by VDP register $0D, while the format is set by register $0B. There are three possible settings for this register:

Type Space in VRAM Format Code
Whole screen 4 bytes FFFF BBBB
  • 1st word controls foreground
  • 2nd word controls background
move.w #$8B00,($c00004).l
8 pixel strips 112 ($70) bytes (NTSC)
120 ($78) bytes (PAL)
FFFF BBBB FFFF BBBB FFFF BBBB...
  • Alternating words control foreground and background strips
move.w #$8B02,($c00004).l
Per scanline 896 ($380) bytes (NTSC)
960 ($3C0) bytes (PAL)
FFFF BBBB FFFF BBBB FFFF BBBB...
  • Alternating words control foreground and background scanlines
move.w #$8B03,($c00004).l

Vertical scrolling

The vertical scrolling table is located in VSRAM. Its format is set by register $0B. There are only two types of vertical scrolling: whole screen and 16 pixel strips:

Type Space in VSRAM Format Code
Whole screen 4 bytes FFFF BBBB
  • 1st word controls foreground
  • 2nd word controls background
As above.
16 pixel strips 64 ($40) bytes (256 pixel wide mode)
80 ($50) bytes (320 pixel wide mode)
FFFF BBBB FFFF BBBB FFFF BBBB...
  • Alternating words control foreground and background strips
with whole screen horizontal:
move.w #$8B04,($c00004).l
with 8 pixel horizontal:
move.w #$8B06,($c00004).l
with scanline horizontal:
move.w #$8B07,($c00004).l

Format

One word is used to define how much each scrollable unit (whole screen, strip or scanline) is shifted:

7
6
5
4
3
2
1
0

0
0
0
0
0
0
S9-S8
7
6
5
4
3
2
1
0

S7-S0
  • S9-S0: Number of pixels to shift. Between 0 and 1024 ($400).
  • Nametables are at most 1024 pixels wide or tall.