INES Mapper 091

From NESdev Wiki
Revision as of 21:15, 1 October 2018 by NewRisingSun (talk | contribs)
Jump to navigationJump to search

iNES Mapper 091 was used by the original release of Super Fighter III from an unknown publisher, but is more commonly known by a clone board from J.Y. Company:

  • Super Fighter III (original version, unknown publisher)
  • Street Fighter III (title screen hack of previous game, J.Y. Company)
  • Dragon Ball Z Super Butouden 2 (J.Y. Company)
  • Mortal Kombat II (early release, J.Y. Company)

A multicart version with an additional outer bank register also exists:

  • 1995 Super HiK 4-in-1 (JY-016)
  • 1995 Super HiK 4-in-1 (JY-017)

Banks

  • CPU $8000-$9FFF: 8 KiB switchable PRG-ROM bank
  • CPU $A000-$BFFF: 8 KiB switchable PRG-ROM bank
  • CPU $C000-$FFFF: 16 KiB PRG-ROM bank, hard-wired to last bank
  • PPU $0000-$07FF: 2 KiB switchable CHR-ROM bank
  • PPU $0800-$0FFF: 2 KiB switchable CHR-ROM bank
  • PPU $1000-$17FF: 2 KiB switchable CHR-ROM bank
  • PPU $1800-$1FFF: 2 KiB switchable CHR-ROM bank

Registers

The original Super Fighter III board uses a more specific address mask than the J.Y. Company clone board to accomodate more registers. The original Super Fighter III board has selectable mirroring, while the J.Y. Company clone boards have hard-wired mirroring.

CHR-ROM Bank Select ($6000-$6003, write)

Mask: $F007 (original board), $F003 (J.Y. Company clone board)

  • $6000: Select 2 KiB CHR-ROM bank at PPU $0000-$07FF
  • $6001: Select 2 KiB CHR-ROM bank at PPU $0800-$0FFF
  • $6002: Select 2 KiB CHR-ROM bank at PPU $1000-$17FF
  • $6003: Select 2 KiB CHR-ROM bank at PPU $1800-$1FFF

Nametable Mirroring Select ($6004-$6005, write, original board only)

Mask: $F007 (original board), registers do not exist (J.Y. Company clone board)

  • $6004: Select horizontal mirroring, value ignored
  • $6005: Select vertical mirroring, value ignored

IRQ Counter Register ($6006-$6007 (LSB/MSB), write, original board only)

Mask: $F007 (original board), registers do not exist (J.Y. Company clone board)

These registers set the M2-based IRQ counter on the original board variant.

PRG-ROM Bank Select ($7000-$7001, write)

Mask: $F007 (original board), $F003 (J.Y. Company clone board)

  • $7000: Select 8 KiB PRG-ROM bank at CPU $8000-$9FFF
  • $7001: Select 8 KiB PRG-ROM bank at CPU $A000-$BFFF

IRQ Stop/Acknowledge ($7006, write)

Mask: $F007 (original board), $F003 (J.Y. Company clone board)

Value is ignored on both boards.

IRQ Start/Reset ($7007, write)

Mask: $F007 (original board), $F003 (J.Y. Company clone board)

Value is ignored on both boards.

Outer Bank register ($8000-$9FFF, write)

Mask: register does not exist (original board), unknown (J.Y. Company clone board)

A~FEDC BA98 7654 3210
  -------------------
  .... .... .... .PPC
                  ||+- Select outer 512 KiB CHR-ROM bank (CHR A19)
                  ++-- Select outer 128 KiB PRG-ROM bank (PRG A17-A18)

Notes

  • On the original board, the IRQ is a binary counter clocked by the M2 signal with a factor of 5/4, meaning counting down by five every fourth M2 cycle.
  • On the clone board, the IRQ is implemented using a simple binary counter clocked by PPU A12, and simply counts 64 unfiltered rises of PPU A12.
  • The original Super Fighter III runs a hardware test when resetting with Select+Start+B pressed. The test exists in J.Y. Company's hacked versions as well but will fail some steps.
  • The commonly available ROM image of Super Fighter III is a mapper hack for INES Mapper 197.
  • No submapper has yet been proposed to differentiate the original board from J.Y.'s clone variant. All J.Y. Company single-game cartridges written for the clone board however carefully choose their write addresses to work on the original board as well, so emulating the $F007 address mask will run games for both board types. Emulators should use the mirroring bit from the NES header until the mirroring registers are written to, if ever. The two multicarts (512 KiB PRG/1024 KiB CHR) are the exception: they write to $6004 even though they want vertical mirroring, so this register needs to be ignored in their case.

See also