Overview
Appendix B. Memory Mappers
This appendix explains how NES cartridges relied on dozens of different “memory mappers” (around a hundred variants) to extend the console’s basic capabilities. Each mapper corresponds to specific cartridge hardware and is identified by an iNES number supported by most emulators, making it easier to categorize and run games. The chapter provides a comprehensive list of mappers recorded at the time of writing, notes naming conventions, and focuses its detailed coverage on the most common configurations while pointing readers to established community references for deeper, per‑mapper nuances.
It moves from the simplest designs to the broadly used Nintendo ASICs. NROM establishes the baseline with 16–32 KiB of fixed PRG ROM, 8 KiB CHR (often RAM in practice), no bank switching, and solder‑pad mirroring. MMC1 significantly expands flexibility: up to hundreds of kilobytes of PRG and CHR, optional battery‑backed RAM, selectable mirroring, and either 16 KiB or 32 KiB PRG banking alongside 4 KiB CHR banks. MMC2 is a simpler, specialized mapper (famously used by Punch‑Out!!) with a small 8 KiB switchable PRG window and triggered 4 KiB CHR swaps. MMC3, widely used from 1988 onward, adds fine‑grained CHR banking (2 KiB and 1 KiB regions), mixed PRG windows (8K+8K+16K with fixed last bank), a scanline IRQ, and switchable mirroring, with optional PRG RAM for saves.
At the high end, MMC5 is the most feature‑rich Nintendo mapper: multiple PRG/CHR banking modes up to 1 MiB each, large WRAM mappable into the program space, a hardware multiplier, scanline and frame detection, per‑tile attribute expansion and extra nametable options (including fill and vertical split), separate CHR sets for background and 8×16 sprites, and extra audio channels. The chapter also covers UxROM (a straightforward, discrete‑logic design with a 16 KiB switchable bank plus a fixed 16 KiB bank and CHR RAM), and Konami’s VRC series: early VRC1 (8 KiB PRG and 4 KiB CHR banks), the more capable VRC2/VRC4 (1 KiB CHR banks, optional PRG RAM, CPU IRQs, flexible mirroring), and the later VRC7, which adds an FM sound engine along with three switchable 8 KiB PRG banks and eight 1 KiB CHR banks. The mapper list highlights further variations—multicarts, expansion audio (e.g., Namco 163, VRC6/7, MMC5), and MMC3‑like clones—illustrating the breadth of designs developers used and what emulators must account for.
FAQ
What is an NES memory mapper and why is it used?
A memory mapper is logic on the cartridge that remaps CPU/PPU address spaces. It enables larger games (by switching PRG/CHR banks), controls nametable mirroring, can add PRG RAM (saves), timers/IRQs for split-screen effects, and even extra audio on some boards.
What are iNES mapper numbers and how do they relate to mapper names?
iNES numbers are community IDs stored in .nes ROM headers and recognized by emulators. Each number corresponds to a hardware family/chip (e.g., 0=NROM, 1=MMC1, 2=UxROM, 4=MMC3, 5=MMC5, 9=MMC2, 85=VRC7). Names usually reflect the chipset on the cartridge.
Why doesn’t the book cover every mapper?
There are roughly 100 mapper types. The book focuses on the most popular, widely used configurations. For details on rarer boards, see the NesDev Wiki’s mapper pages.
How does NROM (Mapper 0) map memory?
NROM is the baseline, with no bank switching. PRG is 16 or 32 KiB: $8000–$BFFF holds the first 16 KiB, and $C000–$FFFF holds the last 16 KiB (or a mirror if only 16 KiB is present). CHR is 8 KiB. Mirroring is fixed by solder pads. Only “Family BASIC” variants had PRG RAM.
What can MMC1 (Mapper 1) do?
MMC1 supports large PRG (up to 256–512 KiB) and CHR (up to 128 KiB), optional 8 KiB battery-backed RAM, 16 KiB PRG bank switching (or 32 KiB mode), two 4 KiB CHR banks, and switchable mirroring modes. It has no IRQ or expansion audio.
What distinguishes MMC3 (Mapper 4) from earlier mappers?
MMC3 offers fine-grained banking and a scanline IRQ counter. PRG is arranged as two 8 KiB switchable banks plus a fixed 16 KiB bank; CHR is split into 2 KiB×2 and 1 KiB×4 switchable banks. Mirroring is switchable. It powered many late-era games.
Why is MMC5 (Mapper 5) considered the most advanced Nintendo ASIC?
MMC5 adds multiple PRG/CHR bank modes (up to 1 MiB each), up to 128 KB of WRAM mappable into program space, scanline/frame detection with IRQs, an 8×8 multiplier, enhanced nametables/attributes (including vertical split and fill mode), and extra sound channels.
How does UxROM (Mapper 2) work, and when would I use it?
UxROM is simple and common for homebrew: a 16 KiB switchable PRG bank at $8000–$BFFF and a 16 KiB fixed bank at $C000–$FFFF. It typically uses CHR RAM (the CPU uploads pattern data). There’s no IRQ or audio, and mirroring is fixed via solder pads.
What are mirroring, bank switching, and CHR ROM vs. CHR RAM?
Bank switching swaps which cartridge ROM/RAM segment appears in a fixed CPU/PPU window. Mirroring selects how two PPU nametables map to four addresses (horizontal, vertical, or single-screen). CHR ROM stores graphics in ROM (banked by the mapper); CHR RAM stores them in RAM written by the CPU.
Which mappers provide expansion audio or IRQ support?
Expansion audio appears on, for example, MMC5 (5), Namco 163 (19), Konami VRC6 (24/26), Sunsoft 5B/FME-7 variant (69), and VRC7 (85). IRQ timers are provided by MMC3 (4/118/119), Konami VRC2/VRC4 (21/22/23/25), MMC5 (5), and VRC7 (85).