NES 2.0 Mapper 292

From NESdev Wiki
Jump to navigationJump to 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.