bfirsh / bfirsh/jsnes

Mapper coverage: status and roadmap

Open
#568 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
JavaScript
Stars
6.4k
Forks
857
PR merge metrics
No merged PRs in 30d

Description

## Current Status

jsnes supports **21 mappers** covering approximately **88% of all NES games** (~2,130 of ~2,418 cataloged cartridges in NesCartDB).

### Supported Mappers

| Mapper | Name | Games |
|--------|------|-------|
| 0 | NROM | ~247 |
| 1 | MMC1 (SxROM) | ~677 |
| 2 | UxROM | ~267 |
| 3 | CNROM | ~155 |
| 4 | MMC3 (TxROM) | ~587 |
| 5 | MMC5 (ExROM) | ~24 |
| 7 | AxROM | ~75 |
| 9 | MMC2 (PxROM) | ~2 |
| 11 | Color Dreams | ~31 |
| 34 | BNROM/NINA-001 | ~3 |
| 38 | Crime Busters | ~1 |
| 66 | GxROM | ~11 |
| 71 | Camerica/Codemasters | ~15 |
| 79 | NINA-003/006 | ~7 |
| 94 | UN1ROM | ~1 |
| 118 | TxSROM (MMC3) | ~5 |
| 119 | TQROM (MMC3) | ~2 |
| 140 | Jaleco JF-11/14 | ~3 |
| 180 | UNROM (Crazy Climber) | ~1 |
| 240 | Unlicensed | ~3 |
| 241 | BxROM variant | ~2 |

## Unsupported Mappers Roadmap

### Priority 1 — High impact, easy to implement

These are the biggest coverage gaps with straightforward implementations. Adding all of these would push coverage to ~93%.

| Mapper | Name | Games | Difficulty | Notes |
|--------|------|-------|------------|-------|
| **206** | Namcot 108/MIMIC-1 | ~44 | Easy | Simplified MMC3 (no IRQ, no WRAM protect). Since we have mapper 4, this is mostly a subset. Games: Gauntlet (Tengen), Fantasy Zone, Super Xevious, Indiana Jones (Tengen), Family Pinball, etc. |
| **10** | MMC4 (FxROM) | ~3 | Easy | Nearly identical to MMC2 (mapper 9) which we already have. Gets us Fire Emblem (Famicom), Fire Emblem Gaiden. |
| **87** | Discrete logic | ~4 | Easy | Trivial CHR bank switching. |
| **185** | CNROM with protection | ~6 | Easy | Mapper 3 with a copy-protection check on CHR bank selection. |
| **152** | Bandai discrete | ~4 | Easy | Simple PRG/CHR switching + single-screen mirroring. Similar to mapper 70. |
| **184** | Sunsoft-1 | ~3 | Easy | Simple CHR bank switching. |
| **113** | NINA-03/06 (HES) | ~4 | Easy | Similar to mapper 79 which we already have. |
| **78** | Irem 74HC161/32 | ~2 | Easy | Simple discrete logic. Holy Diver (JP). |
| **13** | CPROM | ~1 | Easy | CHR RAM with 4KB bank switching. Only game: Videomation. |

### Priority 2 — Medium impact, moderate difficulty

Important for Japanese game coverage and Konami titles.

| Mapper | Name | Games | Difficulty | Notes |
|--------|------|-------|------------|-------|
| **33** | Taito TC0190 | ~8 | Medium | PRG/CHR switching, similar to simplified MMC3. Flintstones: Rescue of Dino & Hoppy (JP mapper). |
| **48** | Taito TC0690 | ~6 | Medium | Like mapper 33 but adds IRQ counter. Flintstones: Surprise at Dinosaur Peak (JP), Jetsons (JP). |
| **75** | VRC1 | ~6 | Medium | Konami mapper. Exciting Boxing, Tetsuwan Atom (Astro Boy). |
| **21/23/25** | VRC2/VRC4 family | ~16 combined | Medium | Three mapper numbers, all variants of the same Konami chip. Ganbare Goemon series, Contra (JP), Twinbee 3, Bio Miracle Bokutte Upa. Implement one framework to cover all three. |
| **22** | VRC2a | ~2 | Medium | Covered if VRC2/4 framework is built. |
| **64** | Tengen RAMBO-1 | ~5 | Medium | MMC3 variant with extra features (more granular CHR banking, different IRQ). Klax, Shinobi. |
| **32** | Irem G-101 | ~5 | Medium | PRG switching with selectable modes. Major League (JP), Image Fight (JP). |
| **65** | Irem H-3001 | ~3 | Medium | PRG/CHR switching with IRQ. Spartan X 2 (Hammerin' Harry). |
| **67** | Sunsoft-3 | ~3 | Medium | PRG/CHR switching with IRQ. Fantasy Zone II (JP). |
| **68** | Sunsoft-4 | ~5 | Medium | PRG/CHR switching with nametable remapping. After Burner, Nantettatte Baseball. |
| **73** | VRC3 | ~1 | Medium | IRQ counter, PRG switching only. Salamander (Life Force JP). |
| **76** | Namco 109 | ~1 | Medium | Simplified Namcot 108. Megami Tensei. |
| **232** | Camerica Quattro | ~3 | Medium | Multicart with outer/inner bank switching. Quattro Adventure/Arcade/Sports. |
| **47** | MMC3 multicart | ~1 | Easy | MMC3 with a bank-select latch for multicart. Super Spike V'Ball + Nintendo World Cup. |
| **41** | Caltron 6-in-1 | ~1 | Easy | Simple multicart. |
| **228** | Action 52 | ~2 | Medium | Multicart with unusual PRG/CHR/mirroring scheme. Action 52, Cheetah Men II. |
| **210** | Namco 175/340 | ~12 | Medium | Related to Namco 163 but without expansion audio. Simpler to implement than mapper 19. Wagyan Land series, Splatterhouse (JP variant). |

### Priority 3 — Niche but notable, complex implementations

These require expansion audio or complex hardware emulation.

| Mapper | Name | Games | Difficulty | Notes |
|--------|------|-------|------------|-------|
| **69** | Sunsoft FME-7/5B | ~9 | Hard | Complex mapper with IRQ. 5B variant adds AY-3-8910 expansion audio (3 channels). Batman: Return of the Joker, Gimmick! (cult classic). |
| **19** | Namco 163 | ~20 | Hard | Expansion audio (up to 8 wavetable channels), IRQ counter, complex banking. Splatterhouse: Wanpaku Graffiti, Megami Tensei II, Rolling Thunder. |
| **24/26** | VRC6 | ~3 | Hard | Konami mapper with expansion audio (2 pulse + 1 sawtooth channels). Akumajou Densetsu (JP Castlevania III). |
| **16** | Bandai FCG | ~14 | Hard | Requires serial EEPROM (24C02) read/write protocol emulation. Dragon Ball Z series (Famicom). |
| **18** | Jaleco SS8806 | ~15 | Hard | Complex PRG/CHR banking with IRQ. Holy Diver (JP), Moero TwinBee. |
| **85** | VRC7 | ~2 | Very Hard | Konami mapper with OPLL FM synthesis expansion audio (6 FM channels). Lagrange Point, Tiny Toon Adventures 2 (JP). Technically fascinating but very complex. |

## Coverage Projections

| Milestone | Mappers Added | Cumulative Coverage |
|-----------|--------------|-------------------|
| Current (21 mappers) | — | ~88% |
| + Priority 1 (9 easy mappers) | 206, 10, 87, 185, 152, 184, 113, 78, 13 | ~93% |
| + Priority 2 core (VRC2/4, 33/48, 64, 210) | 21, 22, 23, 25, 33, 48, 64, 210 | ~95% |
| + Priority 3 (expansion audio mappers) | 69, 19, 24, 26, 16, 18, 85 | ~98% |

## Data Sources

Game counts are approximate, sourced from [NesCartDB](http://bootgod.dyndns.org), the [NESdev Wiki mapper list](https://www.nesdev.org/wiki/List_of_mappers), and [NESdev forum statistics](https://forums.nesdev.org/viewtopic.php?t=15635).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Contributor guide

No contributing guide indexed for this repository

Research direction

The issue provides a broad mapper roadmap but names no files, tests, or implementation entry point. Start by locating the existing mapper implementations and tests, then scope one mapper from the list with maintainer guidance. Done should include the selected mapper, coverage behavior, and tests for supported games or mapper operations.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
game-dev
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.