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 15: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
|
move.w #$8B00,($c00004).l |
8 pixel strips | 112 ($70) bytes (NTSC) 120 ($78) bytes (PAL) |
FFFF BBBB FFFF BBBB FFFF BBBB...
|
move.w #$8B02,($c00004).l |
Per scanline | 896 ($380) bytes (NTSC) 960 ($3C0) bytes (PAL) |
FFFF BBBB FFFF BBBB FFFF BBBB...
|
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
|
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...
|
with whole screen horizontal:move.w #$8B04,($c00004).lwith 8 pixel horizontal: move.w #$8B06,($c00004).lwith 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.