INES Mapper 091: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
(Rewrite, incorporate original board version)
m (defaultsort)
 
(4 intermediate revisions by one other user not shown)
Line 1: Line 1:
[[Category:iNES Mappers|091]][[Category:Mappers with fixed-timing scanline IRQs]]
{{DEFAULTSORT:091}}[[Category:iNES Mappers]][[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
|-
| 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''
|}


The original ''Super Fighter III'' board has selectable mirroring, while the J.Y. Company clone board has hard-wired mirroring. Emulators should use the mirroring bit from the NES header until the mirroring registers are written to, if ever.
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 18: 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. All J.Y. Company games 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.
==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 27: 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


==Unknown registers ($6006-$6007, 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 two registers have an unknown meaning. Since they are written to together with registers $7006 and $7007, they might be related to the IRQ counter.
* $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, 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=
=Notes=
* 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. Emulating this seems to work with the single game released for the original board as well, though given the two unknown registers at $6006 and $6007, is likely not how the board really works.
* 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.
* 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: 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]].
* The commonly available ROM image of ''Super Fighter III'' is a mapper hack for [[INES Mapper 197]].
== 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.
* $6004: Select horizontal mirroring, value ignored

Latest revision as of 19:33, 24 April 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.