This program attempts to identify which variant of iNES Mapper 78 it's running on. Mapper 78 is used by two Famicom games by IREM, which use discrete logic boards that are identical except for their nametable mirroring behavior.
7654 3210
CCCC MPPP
|||| |+++- Select 16 KiB PRG ROM bank at CPU $8000
|||| | ($C000 window is fixed to the last bank)
|||| +---- Mirroring (see below)
++++------ Select 8 KiB CHR ROM bank at PPU $0000
The NES 2.0 submapper distinguishes the two variants. 78.1 is Uchuusen Cosmo Carrier, with switchable 1-screen mirroring.
- Bit 3 false (0): Use VRAM $000-$3FF for all nametables
- Bit 3 true (1): Use VRAM $400-$7FF for all nametables
78.3 is Holy Diver, with switchable horizontal or vertical mirroring.
- Bit 3 false (0): VRAM A10 = PA11, or horizontal mirroring
- Bit 3 true (1): VRAM A10 = PA10, or vertical mirroring
The sense of bit 3 of 78.3 is 0=PA11, 1=PA10. This matches that of bit 0 of byte 6 of the iNES header as well as Disk System mirroring. It's inverted compared to most other mappers (FDS, MMC1-4, VRC2/4/7, FME-7, Action 52).
After performing these steps:
- Clear mapper bit 3 by writing $00
- Write 1 to $2C00 then 0 to $2000
- Set mapper bit 3 by writing $08
- Write 0 to $2000 then 1 to $2C00
- Clear mapper bit 3 by writing $00
- Read $2000, $2400, $2800, $2C00
- Set mapper bit 3 by writing $08
- Read $2000, $2400, $2800, $2C00
These results are likely:
00110011: Fixed horizontal mirroring01010101: Fixed vertical mirroring00001111: 78.1 (1-screen selected by D3)00110101: 78.3 (D3=0 horizontal, D3=1 vertical)
As of 2017-11-20:
- Mesen 0.9.3 correctly distinguishes the two.
- FCEUX 2.2.3 treats everything as 78.1.
Copyright 2017 Damian Yerrick. This is free software under the zlib
License (see LICENSE).