INES Mapper 121: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
m (defaultsort)
(Remove confusing implementation-specific description regarding the (non-)effect of CHR A12 inversion on CHR A18.)
 
(One intermediate revision by one other user not shown)
Line 12: Line 12:
* ''Ultimate Mortal Kombat 4'' (hack of [[INES Mapper 123|''Mortal Kombat 3'']])
* ''Ultimate Mortal Kombat 4'' (hack of [[INES Mapper 123|''Mortal Kombat 3'']])
* ''幽☆遊☆白書 97 V'' (''Yū Yū Hakusho 97 V'', title screen hack of [[INES Mapper 115|''幽☆遊☆白書 Final'']])
* ''幽☆遊☆白書 97 V'' (''Yū Yū Hakusho 97 V'', title screen hack of [[INES Mapper 115|''幽☆遊☆白書 Final'']])
Only ''Street Fighter Zero 2 '97'' has 512 KiB of CHR-ROM; CHR A18 (the second half of CHR-ROM) is directly selected by PPU A12, regardless of what the MMC3 is set to do. This means that the "left" pattern table always uses the first and the "right" pattern table always uses the second 256 KiB half of CHR-ROM.


A9713 (512 KiB PRG-ROM):
A9713 (512 KiB PRG-ROM):
Line 50: Line 52:
               1: CHR A18=PPU A12
               1: CHR A18=PPU A12


On the A9711 board, either sprites or background tiles will come from the the second 256 KiB of CHR-ROM. Note that setting bit 7 will still also activate the MMC3 clone's CHR A12 inversion.


==MMC3-compatible registers ($8000-$FFFF)==
==MMC3-compatible registers ($8000-$FFFF)==

Latest revision as of 19:42, 29 December 2024

iNES Mapper 121 is used for the 卡聖 (Kǎshèng) A9711 and A9713 MMC3-clone-bearing protected boards.

A9711 (256 KiB PRG-ROM):

  • MK6 (title screen hack of 幽☆遊☆白書 Final)
  • Sonic & Knuckles 5 (hack of Somari, originally released by 哥德 (Gouder) on INES Mapper 116)
  • Sonic 3D Blast 6 (hack of Somari, originally released by 哥德 (Gouder) on INES Mapper 116)
  • Street Fighter Zero 2 '97 (not Street Fighter Zero 2)
  • Super Real Bout 97 (hack of 餓狼伝説 Special, originally released by 哥德 (Gouder) on INES Mapper 116)
  • The Panda Prince/Super Lion King 2/熊貓太子 (Xióngmāo Tàizǐ)
  • Ultimate Mortal Kombat 3 (hack of Mortal Kombat 3)
  • Ultimate Mortal Kombat 4 (hack of Mortal Kombat 3)
  • 幽☆遊☆白書 97 V (Yū Yū Hakusho 97 V, title screen hack of 幽☆遊☆白書 Final)

Only Street Fighter Zero 2 '97 has 512 KiB of CHR-ROM; CHR A18 (the second half of CHR-ROM) is directly selected by PPU A12, regardless of what the MMC3 is set to do. This means that the "left" pattern table always uses the first and the "right" pattern table always uses the second 256 KiB half of CHR-ROM.

A9713 (512 KiB PRG-ROM):

  • 3-in-1: Earthworm Jim 2+4, The Lion King

Registers

Protection Array Read ($5000-$5FFF)

Mask: probably $F000

Returns the value from the four-byte protection array ($83, $83, $42, $00) indexed by the previous write to $5000-$5FFF.

Protection Array Index ($5000-$5FFF)

Mask: probably $F000

D~7654 3210
  ---------
  .... ..II
         ++- Select index into protection array on next $5000-$5FFF read

FCEUX' source code claims that address bit 8 switches between two protection arrays, the second one being $00, $02, $02, $03.

Outer Bank Register ($5180, A9713 only)

Mask: $F180

D~7654 3210
  ---------
  M... ....
  +--------- Select outer 256 KiB PRG-ROM and CHR-ROM bank

CHR A18 Control ($8000-$9FFF, even; A9711 only)

Mask: $E001

D~7654 3210
  ---------
  M... ....
  +--------- Select CHR A18 Mode
              0: CHR A18=inverted PPU A12
              1: CHR A18=PPU A12


MMC3-compatible registers ($8000-$FFFF)

Mask: $E001, see MMC3.

Protection Latch ($8001)

Mask: $E003

If the previous write to the Protection Index register ($8003) selected indices $26, $28 or $2A, the value written to $8001 --- with the lower six bits reversed -- is immediately applied. Otherwise, it will only be applied upon the next write to the $8003. Regardless of the $8003 setting, the MMC3 clone will always receive the write as well.

Protection Index ($8003)

Mask: $E003

Bits 0-5 select a protection index register. If a valid index has been selected, the value previously written to $8001 --- with the lower six bits reversed --- is applied. If an invalid index has been selected, the $A000/$C000/$E000 banks selected via $8003 expire, and normal MMC3 PRG-ROM banking is restored.

  • Index $26: Select 8 KiB PRG-ROM bank at CPU $E000-$FFFF using current bit-reversed $8001 value, and apply subsequent writes to $8001 to this index as well.
  • Index $28: Select 8 KiB PRG-ROM bank at CPU $C000-$DFFF using current bit-reversed $8001 value, and apply subsequent writes to $8001 to this index as well.
  • Index $2A: Select 8 KiB PRG-ROM bank at CPU $A000-$BFFF using current bit-reversed $8001 value, and apply subsequent writes to $8001 to this index as well.
  • Index $2C: Select 8 KiB PRG-ROM bank at CPU $E000-$FFFF using current bit-reversed $8001 value if it is not zero, but do not apply subsequent writes to $8001 to this index.
  • Index $2F: Do nothing, but keep the $A000/$C000/$E000 banks previously selected via $8003.
  • Indices $20/$29/$2B/$3C/$3F: Select 8 KiB PRG-ROM bank at CPU $E000-$FFFF using current bit-reversed $8001 value, but do not apply subsequent writes to $8001 to this index.
  • All other indices: Restore normal MMC3 PRG-ROM banking.

Writing to $8003 also has the side effect of writing the same value to the MMC clone's $8000 register.

Errata

  • GoodNES 3.23b has several INES Mapper 121 images erroneously set to 187.

Similar Mappers

  • iNES Mapper 187 has the same CHR A18 behavior as the A9711 board, adds an NROM override register, and drops the complex protection.