Difference between revisions of "Sega Mega Drive/Scrolling"
From Sega Retro
(Created page with "The Sega Mega Drive is able to '''scroll''' the background and foreground (planes B & A) independently, both horizontally and vertically. ==Horizontal scrolling== Horizon...") |
|||
Line 1: | Line 1: | ||
− | The [[Sega Mega Drive]] is able to '''scroll''' the background and foreground (planes B & A) independently, both horizontally and vertically. | + | The [[Sega Mega Drive]] is able to '''scroll''' the background and foreground ([[Sega Mega Drive/Planes|planes]] B & A) independently, both horizontally and vertically. |
==Horizontal scrolling== | ==Horizontal scrolling== | ||
Line 28: | Line 28: | ||
==Vertical scrolling== | ==Vertical scrolling== | ||
+ | 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: | ||
+ | |||
+ | {| | ||
+ | ! Type || Space in VSRAM || Format || Code | ||
+ | |- | ||
+ | | Whole screen | ||
+ | | 4 bytes | ||
+ | | <tt>FFFF BBBB</tt> | ||
+ | * 1st word controls foreground | ||
+ | * 2nd word controls background | ||
+ | | As above. | ||
+ | |- | ||
+ | | 16 pixel strips | ||
+ | | 64 ($40) bytes (256 pixel wide mode)<br>80 ($50) bytes (320 pixel wide mode) | ||
+ | | <tt>FFFF BBBB FFFF BBBB FFFF BBBB...</tt> | ||
+ | * Alternating words control foreground and background strips | ||
+ | | with whole screen horizontal:<pre>move.w #$8B04,($c00004).l</pre> | ||
+ | with 8 pixel horizontal:<pre>move.w #$8B06,($c00004).l</pre> | ||
+ | with scanline horizontal:<pre>move.w #$8B07,($c00004).l</pre> | ||
+ | |} | ||
[[Category:Sega Mega Drive|Scrolling]] | [[Category:Sega Mega Drive|Scrolling]] | ||
[[Category:Unofficial documentation]] | [[Category:Unofficial documentation]] |
Revision as of 15:56, 16 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 |