NES 2.0 Mapper 292

From Nesdev wiki
Jump to: navigation, search

NES 2.0 Mapper 292 is used for the unlicensed game Dragon Fighter. Its PCB name is "BMW8544", its UNIF board name is UNL-DRAGONFIGHTER. It's an MMC3 clone with some extremely odd bankswitching that is poorly understood. The description below is based on the FCEUX source code, which sort-of runs the game, albeit with occasional graphical glitches.

Banks

  • CPU $8000-$9FFF: 8 KiB switchable PRG-ROM bank selected by writing to $6000.
  • CPU $A000-$BFFF: 8 KiB switchable PRG-ROM bank selected by MMC3 register $07, or fixed to last bank if PRG A14 inversion is active
  • CPU $C000-$DFFF: 8 KiB PRG-ROM bank, fixed to the second-last bank, or switchable PRG-ROM bank selected by MMC3 register $06 if PRG A14 inversion is active
  • CPU $E000-$FFFF: 8 KiB PRG-ROM bank, fixed to the last bank, or switchable PRG-ROM bank selected by MMC3 register $07 if PRG A14 inversion is active
  • PPU $0000-$07FF: 2 KiB switchable CHR-ROM bank selected by (MMC3 register 0 SHR 1) XOR the low CHR bank.
  • PPU $0800-$0FFF: 2 KiB switchable CHR-ROM bank selected by (MMC3 register 2 SHR 1) ORed with (bit 6 of the high CHR bank SHR 1).
  • PPU $1000-$1FFF: 4 KiB switchable CHR-ROM bank selected by bits 0-5 of the high CHR bank.

MMC3 CHR A12 inversion ($8000 bit 7) is not supported.

Registers

PRG Bank Register ($6000, write)

Mask: Probably $E001

Selects the 8 KiB PRG-ROM bank at CPU $8000-$9FFF.

CHR Bank Register ($6000, read)

Mask: Probably $E001

  • When this register is read and the PRG Bank AND $E0 is ==$C0, then the low CHR bank is replaced with the value previously written to CPU RAM at $006A.
  • When this register is read and the PRG Bank AND $E0 is !=$C0, then the high CHR bank is replaced with the value previously written to CPU RAM at $00FF.

MMC3-compatible registers ($8000-$FFFF)

Mask: $E001

Same as regular MMC3 except where noted.