INES Mapper 091: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
mNo edit summary
(Add submapper (http://forums.nesdev.com/viewtopic.php?f=9&t=15240&p=231790#p231790))
Line 1: Line 1:
[[Category:iNES Mappers|091]][[Category:Mappers with fixed-timing scanline IRQs]]
[[Category:iNES Mappers|091]][[Category:Mappers with fixed-timing scanline IRQs]]
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:
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)
{| class="wikitable"
* ''Street Fighter III'' (title screen hack of previous game, J.Y. Company)
! colspan="3" | INES Mapper 091 submapper table
* ''Dragon Ball Z Super Butouden 2'' (J.Y. Company)
|-
* ''Mortal Kombat II'' (early release, J.Y. Company)
! Submapper # !! Board !! Games
A multicart version with an additional outer bank register also exists:
|-
* ''1995 Super HiK 4-in-1'' (JY-016)
| 0 || JY830623C|| ''Street Fighter 3'', ''Mortal Kombat II'', ''Dragon Ball Z 2'', ''Mario & Sonic 2''
* ''1995 Super HiK 4-in-1'' (JY-017)
|-
| 0 || YY840238C|| ''1995 Super HIK 4-in-1 (JY-016)'', ''1995 Super HiK 4-in-1 (JY-017)''
|-
| 1 || EJ-006-1 || ''Super Fighter III''
|}
 
Submapper 0 has a PA12-based IRQ counter and hard-wired mirroring; submapper 1 an M2-based IRQ counter and selectable mirroring.


=Banks=
=Banks=
Line 19: Line 25:


=Registers=
=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)==
==CHR-ROM Bank Select ($6000-$6003, write)==
Mask: $F007 (original board), $F003 (J.Y. Company clone board)
Mask: $F003/$F007 (submapper 0/1)
* $6000: Select 2 KiB CHR-ROM bank at PPU $0000-$07FF
* $6000: Select 2 KiB CHR-ROM bank at PPU $0000-$07FF
* $6001: Select 2 KiB CHR-ROM bank at PPU $0800-$0FFF
* $6001: Select 2 KiB CHR-ROM bank at PPU $0800-$0FFF
Line 29: Line 32:
* $6003: Select 2 KiB CHR-ROM bank at PPU $1800-$1FFF
* $6003: Select 2 KiB CHR-ROM bank at PPU $1800-$1FFF


==Nametable Mirroring Select ($6004-$6005, write, original board only)==
==Nametable Mirroring Select ($6004-$6005, write, submapper 1 only)==
Mask: $F007 (original board), registers do not exist (J.Y. Company clone board)
Mask: $F007
* $6004: Select horizontal mirroring, value ignored
* $6004: Select horizontal mirroring, value ignored
* $6005: Select vertical mirroring, value ignored
* $6005: Select vertical mirroring, value ignored


==IRQ Counter Register ($6006-$6007 (LSB/MSB), write, original board only)==
==IRQ Counter Register ($6006-$6007, write, submapper 1 only)==
Mask: $F007 (original board), registers do not exist (J.Y. Company clone board)
Mask: $F007


These registers set the M2-based IRQ counter on the original board variant.
* $6006: Set IRQ Counter LSB
* $6007: Set IRQ Counter MSB


==PRG-ROM Bank Select ($7000-$7001, write)==
==PRG-ROM Bank Select ($7000-$7001, write)==
Mask: $F007 (original board), $F003 (J.Y. Company clone board)
Mask: $F003/$F007 (submapper 0/1)
* $7000: Select 8 KiB PRG-ROM bank at CPU $8000-$9FFF
* $7000: Select 8 KiB PRG-ROM bank at CPU $8000-$9FFF
* $7001: Select 8 KiB PRG-ROM bank at CPU $A000-$BFFF
* $7001: Select 8 KiB PRG-ROM bank at CPU $A000-$BFFF


==IRQ Stop/Acknowledge ($7006, write)==
==IRQ Stop/Acknowledge ($7006, write)==
Mask: $F007 (original board), $F003 (J.Y. Company clone board)
Mask: $F003 (submapper 0)/$F007 (submapper 1)


Value is ignored on both boards.
Value is ignored..


==IRQ Start/Reset ($7007, write)==
==IRQ Start/Reset ($7007, write)==
Mask: $F007 (original board), $F003 (J.Y. Company clone board)
Mask: $F003/$F007 (submapper 0/1)


Value is ignored on both boards.
Value is ignored.


==Outer Bank register ($8000-$9FFF, write)==
==Outer Bank register ($8000-$9FFF, write, submapper 0 only)==
Mask: register does not exist (original board), unknown (J.Y. Company clone board)
Mask: unknown
  A~FEDC BA98 7654 3210
  A~FEDC BA98 7654 3210
   -------------------
   -------------------
Line 62: Line 66:
                   ++-- Select outer 128 KiB PRG-ROM bank (PRG A17-A18)
                   ++-- Select outer 128 KiB PRG-ROM bank (PRG A17-A18)
=Notes=
=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.
* Submapper 0: the IRQ counter is a binary counter clocked by PPU A12, and simply counts a fixed number of 64 unfiltered rises of PPU A12.
* 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.
* Submapper 1: the IRQ counter is a binary counter clocked by the M2 signal with a factor of 5/4, meaning counting down by five every fourth M2 cycle.
* 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.
* Submapper 1's ''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 was not adjusted for the simpler hardware and thus will fail some tests.
* The commonly available ROM image of ''Super Fighter III'' is a mapper hack for [[INES Mapper 197]].
* 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 ==
* [http://www.romhacking.net/documents/362/ NES Mapper list] by Disch.
*[http://nesdev.org/mappers.zip Comprehensive NES Mapper Document] by \Firebug\. Information on mapper's initial state is innacurate.

Revision as of 21:52, 23 January 2019

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.

INES Mapper 091 submapper table
Submapper # Board Games
0 JY830623C Street Fighter 3, Mortal Kombat II, Dragon Ball Z 2, Mario & Sonic 2
0 YY840238C 1995 Super HIK 4-in-1 (JY-016), 1995 Super HiK 4-in-1 (JY-017)
1 EJ-006-1 Super Fighter III

Submapper 0 has a PA12-based IRQ counter and hard-wired mirroring; submapper 1 an M2-based IRQ counter and selectable mirroring.

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

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

Mask: $F003/$F007 (submapper 0/1)

  • $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, submapper 1 only)

Mask: $F007

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

IRQ Counter Register ($6006-$6007, write, submapper 1 only)

Mask: $F007

  • $6006: Set IRQ Counter LSB
  • $6007: Set IRQ Counter MSB

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

Mask: $F003/$F007 (submapper 0/1)

  • $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: $F003 (submapper 0)/$F007 (submapper 1)

Value is ignored..

IRQ Start/Reset ($7007, write)

Mask: $F003/$F007 (submapper 0/1)

Value is ignored.

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

Mask: unknown

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

  • Submapper 0: the IRQ counter is a binary counter clocked by PPU A12, and simply counts a fixed number of 64 unfiltered rises of PPU A12.
  • Submapper 1: the IRQ counter is a binary counter clocked by the M2 signal with a factor of 5/4, meaning counting down by five every fourth M2 cycle.
  • Submapper 1's 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 was not adjusted for the simpler hardware and thus will fail some tests.
  • The commonly available ROM image of Super Fighter III is a mapper hack for INES Mapper 197.