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 19: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
  • 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.