Compatibility
Supported mappers, known limitations, and compatibility guidance.
Mapper support
Compatibility table
NESpresso32 supports mapper 0 (NROM), mapper 1 (MMC1), mapper 2 (UNROM), mapper 3 (CNROM), and mapper 4 (MMC3). Compatibility is not guaranteed even for supported mappers individual games may require specific timing or behavior not fully emulated.
No ROM download links are provided. Test with your own legally usable files or homebrew/test ROMs that permit use.
| Mapper | Name | Status | Coverage | Notes |
|---|---|---|---|---|
0 | NROM | Supported | Stable baseline | Best target for early builds and timing checks. Works well with small PRG/CHR layouts. |
1 | MMC1 | Supported | Core support | Serial register mapper with bank switching support for common MMC1 boards. |
2 | UNROM | Supported | Core support | PRG bank switching with CHR RAM. Suitable for many mid-size titles and homebrew builds. |
3 | CNROM | Supported | Core support | CHR bank switching support for compact games that use mapper 3 boards. |
4 | MMC3 | Supported | In progress validation | IRQ and bank-switching behavior are supported, with ongoing compatibility testing recommended. |
Notes on compatibility
Even within supported mappers, there are games that will not run correctly. Known problem areas:
- Games with unusual PRG/CHR size combinations may not load correctly
- PAL games flagged in the iNES header may run at wrong speed use
use_lib_force_ntsc_timing - Games with sprite-heavy scenes may show slowdown due to the ESP32 timing budget
- MMC3 IRQ timing is approximate some titles using raster effects may not work
The ROM browser in the OSD flags ROMs with unsupported mappers before you try to load them.
Frequently asked questions
Compatibility questions
- Which NES mappers are supported?
- NESpresso32 supports mapper 0 (NROM), mapper 1 (MMC1), mapper 2 (UNROM), mapper 3 (CNROM), and mapper 4 (MMC3). The OSD ROM browser flags ROMs with unsupported mappers before you try to load them.
- Does every NES game work?
- No. Compatibility is not guaranteed even for supported mappers. Games with unusual PRG/CHR size combinations, heavy sprite use, or strict timing dependencies may not run correctly on ESP32 hardware.
- Why can some MMC3 games show glitches?
- MMC3 uses a scanline counter driven by PPU A12 transitions to time IRQ interrupts. NESpresso32 MMC3 IRQ timing is approximate rather than cycle-accurate, which means games that rely on precise raster timing may show visual artifacts or incorrect behavior.
- Is Kirby's Adventure fully supported?
- Kirby's Adventure uses MMC3 and relies on timing-sensitive raster effects. Due to the approximate IRQ timing in the current MMC3 implementation, some effects may not behave correctly. The game may run but with visual glitches.
See the ROMs page for legal ROM guidance, or check open issues on GitHub for known bugs and progress.