Scrolling
Moving through game worlds
Scrolling techniques expanded game worlds beyond single screens, from smooth hardware-assisted movement to creative software solutions that defined platformers and shooters.
Overview
Single screens limited game worlds. Scrolling broke that barrier, letting players explore environments larger than the display. Different platforms handled scrolling differently — some with dedicated hardware (NES, MD, SNES, Amiga), others requiring clever programming on every frame (Spectrum, early Apple II). The technique became fundamental to platformers, shooters, RPGs, and almost every genre that wants to imply a world.
This entry is the umbrella overview. See Hardware Scroll for register-level detail per platform, Software Scroll for CPU-driven techniques, and Parallax Scrolling for multi-layer depth.
Fast facts
- Purpose: Display worlds larger than the screen.
- Methods: Hardware (cheap, instant) or software (expensive, flexible).
- Directions: Horizontal, vertical, multi-directional, parallax.
- Challenge: Memory bandwidth and CPU usage; the trick is updating only the newly-revealed edge.
Scrolling types
| Type | Direction | Example genres |
|---|---|---|
| Horizontal | Left/right | Platformers (Mario, Sonic), beat-em-ups (Final Fight) |
| Vertical | Up/down | Vertical shooters (1942, Xevious) |
| Multi-directional | Any | Adventure (Zelda), action-RPG (Diablo) |
| Parallax | Multiple layers at different speeds | Depth illusion (Shadow of the Beast) |
| Free-scrolling 8-way | Any | Top-down shooters, RTS games |
Hardware approaches
| Platform | Method | Smoothness |
|---|---|---|
| C64 (VIC-II) | $D016 bits 0-2 = X scroll (0-7 px), $D011 bits 0-2 = Y scroll | Per-pixel smooth |
| NES (PPU) | $2005 for X/Y scroll, $2000 for nametable select | Per-pixel; nametable mirroring extends viewport |
| Amiga | BPLCON1 fine scroll + bitplane pointer coarse scroll, often via Copper | Per-pixel, scriptable per scanline |
| Mega Drive (VDP) | Two scroll planes (A, B), per-line / per-cell scroll values | Per-pixel, per-line, per-cell — extremely flexible |
| SNES (PPU) | Up to 4 BG layers (modes 0-1) with independent scroll registers | Per-pixel per layer; combine with HDMA for crazy effects |
| Master System (VDP) | Single nametable + scroll register | Per-pixel |
| Game Boy (PPU) | SCX, SCY scroll registers | Per-pixel |
Software approaches
When the hardware doesn't help, the CPU does the work:
| Technique | Use case |
|---|---|
| Character-level scroll | 8-pixel increments — coarse but fast |
| Pixel scroll (full redraw) | Smooth but blits the entire screen each frame |
| Pre-shifted sprite tables | Pre-compute 8 horizontally-shifted sprite versions; pick by scroll position |
| Attribute-only scroll | Change colours rather than pixels (Spectrum) |
| Memory shifting | LDIR-style brute-force shift of screen RAM (Spectrum) |
The Spectrum is the canonical software-scroll platform — no hardware scroll register exists. Famous Spectrum software scrollers: R-Type, Cobra, Star Wars Trilogy, Cybernoid. Each developer's pre-shifted-sprite scheme is slightly different.
C64 techniques
The standard recipe: hardware fine scroll ($D016) for the smooth 0-7 pixel range, plus character-level coarse shift of screen memory when the fine scroll wraps:
| Method | Result |
|---|---|
$D016 only | Limited to 0-7 px range, then snaps |
| Screen-memory shift | 8-pixel coarse steps; visible "jump" |
| Combined fine + coarse | Full smooth scroll, like Turrican |
| VSP (Variable Screen Position) | $D016 mid-line writes give N+1 effective scroll modes; Mayhem in Monsterland trick |
NES capabilities
| Feature | Implementation |
|---|---|
| Nametables | Two in PPU VRAM, configurable as 4 logical via cartridge mirror mode |
| Scroll registers | $2005 (X then Y), $2000 bits 0-1 select base nametable |
| Mirroring | Horizontal / vertical / four-screen — decides how the 2 PPU nametables tile to fill 4 logical |
| Split scrolling | Sprite-zero hit + mid-frame $2005 rewrite gives status bar above scrolled gameplay |
| MMC3 IRQ | Per-scanline scroll changes for parallax-style effects (Battletoads, Mega Man 3+) |
Mega Drive approaches
The MD's two scroll planes (A and B) plus a Window plane give multi-layer flexibility:
- Plane A typically scrolls with the player, plane B scrolls slowly for parallax background.
- Per-line H-scroll table in VRAM lets each scanline have its own scroll value — gives arbitrary number of "layers" by varying scroll per row.
- Window plane is fixed (used for status bars, score displays).
Performance considerations
| Factor | Impact |
|---|---|
| Memory bandwidth | Software scroll moves a screen's worth of bytes per frame; check the budget |
| CPU cycles | Pre-shifted tables save runtime cost at memory cost |
| VBlank window | Edge updates fit in the brief vblank gap |
| Tile updates | Just-in-time tile streaming for newly-revealed area |