Difference between revisions of "Sega Mega Drive/Scrolling"
From Sega Retro
Line 4: | Line 4: | ||
Horizontal scrolling is controlled by a table located in VRAM. The address for the table is set by [[Sega Mega Drive/VDP registers#0D|VDP register $0D]], while the format is set by [[Sega Mega Drive/VDP registers#0B|register $0B]]. There are three possible settings for this register: | Horizontal scrolling is controlled by a table located in VRAM. The address for the table is set by [[Sega Mega Drive/VDP registers#0D|VDP register $0D]], while the format is set by [[Sega Mega Drive/VDP registers#0B|register $0B]]. There are three possible settings for this register: | ||
− | {| | + | {|class="prettytable" |
! Type || Space in VRAM || Format || Code | ! Type || Space in VRAM || Format || Code | ||
|- | |- | ||
Line 30: | Line 30: | ||
The vertical scrolling table is located in VSRAM. Its format is set by [[Sega Mega Drive/VDP registers#0B|register $0B]]. There are only two types of vertical scrolling: whole screen and 16 pixel strips: | The vertical scrolling table is located in VSRAM. Its format is set by [[Sega Mega Drive/VDP registers#0B|register $0B]]. There are only two types of vertical scrolling: whole screen and 16 pixel strips: | ||
− | {| | + | {|class="prettytable" |
! Type || Space in VSRAM || Format || Code | ! Type || Space in VSRAM || Format || Code | ||
|- | |- |
Revision as of 18:16, 11 July 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.