INES Mapper 215

From NESdev Wiki
Revision as of 21:16, 23 May 2018 by NewRisingSun (talk | contribs)
Jump to navigationJump to search

iNES Mapper 215 combines four different MMC3-clone-bearing boards with scrambled register addresses and indices, an outer PRG/CHR-ROM bank register, and an NROM-like PRG-ROM register that can override the MMC3 clone's PRG-ROM bank.

  • Subtype 1: Fixed scrambling pattern #4, NROM Override Register at $6000; basically INES Mapper 114 but with a different scrambling pattern. Used by:
    • Boogerman (SuperGame, not to be confused with Boogerman II by Rex Soft)
  • Subtype 2: Selectable scrambling pattern via $5007, NROM Override/Mode Register at $5000, Outer Bank Register at $5001. UNIF board name UNL-8237. Used by:
    • Earthworm Jim 2
    • Mortal Kombat 3 (SuperGame, not Extra 60, not to be confused by similarly-named games from other developers)
    • Pocahontas Part 2
    • Mortal Kombat 3 Extra 60
    • 2-in-1: Aladdin, EarthWorm Jim 2
    • 2-in-1: EarthWorm Jim 2, Boogerman
    • 3-in-1: Boogerman, Adventure Island 3, Double Dragon 3
    • 5-in-1: Aladdin, EarthWorm Jim 2, Garo Densetsu Special, Silkworm, Contra Force
    • 6-in-1: EarthWorm Jim 2, Mortal Kombat 3, Double Dragon 3, Contra 3, The Jungle Book, Turtles Tournament Fighters
  • Subtype 3: Similar to Subtype 2, but with an extended Outer Bank Register at $5001 to accomodate 2 MiB PRG-/CHR-ROMs. UNIF board name UNL-8237A. Used by:
    • 9-in-1: The Lion King, EarthWorm Jim 2, Aladdin, Boogerman, Somari, Turtles Tournament Fighters, Mortal Kombat 3, Captain Tsubasa 2, Taito Basketball
  • Subtype 4: Fixed scrambling pattern #4, no NROM Override Register, Outer CHR-ROM Bank register at $6001, Outer PRG-ROM Bank register at $6007. Used by:
    • 2-in-1: Mortal Kombat 3 Extra 60, The Super Shinobi
    • (Mortal Kombat 3 Extra 60: both existing ROM images are just extracts of the 2-in-1 multicart.)

So far, no submappers have been proposed for the different subtypes, as they can coexist and be emulated under the same mapper number by:

  • powering-up in scrambling mode 4 (to accommodate Subtype 1 and Subtype 4);
  • emulating the NROM Override/Mode Register at both $5000 and $6000 (to accomodate Subtypes 1-3);
  • interpreting the bits of the Outer Bank Register at $5001 differently depending on ROM size (to differentiate Subtypes 2 and 3);
  • not emulating Subtype 4's Outer Bank registers at $6001 and $6007 at all, since the only known image retains Subtype 2 compatibility writes, including writing $04 to $5007.

Registers

NROM Override/Mode Register ($5000, Subtypes 2/3; $6000, Subtype 1)

Mask: $F007 (Subtype 2/3), probably $E001 (Subtype 1)

D~7654 3210
  ---------
  MCS. BBBb
  |||  ++++- Select 16 KiB PRG-ROM bank at CPU
  |||        $8000-$BFFF and $C000-$FFFF
  ||+------- 0: Do not replace bit 0 (NROM-128)
  ||         1: Replace bit 0 with CPU A14 (NROM-256)
  |+-------- 0: Do not replace PRG A14 and CHR A14 from the MMC3
  |          1: Replace PRG A14 and CHR A14 with $5001 bits 4 and 5, respectively (Subtypes 2/3 only)
  +--------- 0: Use PRG bank from MMC3; ignore $5000/$6000 bits 0-3/5
             1: Ignore PRG bank from MMC3; apply $5000/$6000 bits 0-3/5

Power-up value: $00

Outer Bank Register ($5001, Subtype 2)

Mask: $F007

D~7654 3210
  ---------
  ..cp CCPP
    || ||++- Select 256 KiB Outer PRG-ROM bank (PRG A18/A19)
    || ++--- Select 256 KiB Outer CHR-ROM bank (CHR A18/A19)
    |+------ Select 128 KiB Outer PRG-ROM bank (PRG A17) if $5000 bit 6=1
    +------- Select 128 KiB Outer CHR-ROM bank (CHR A17) if $5000 bit 6=1

Power-up value: $xF

Outer Bank Register ($5001, Subtype 3)

Mask: $F007

D~7654 3210
  ---------
  ..cp P.PP
       CCC.
    || +|++- Select 256 KiB Outer PRG-ROM bank (PRG A18-A20)
    || +++-- Select 256 KiB Outer CHR-ROM bank (CHR A18-A20)
    |+------ Select 128 KiB Outer PRG-ROM bank (PRG A17) if $5000 bit 6=1
    +------- Select 128 KiB Outer CHR-ROM bank (CHR A17) if $5000 bit 6=1

Power-up value: $xF

Scrambling Pattern Register ($5007, Subtypes 2 and 3)

Mask: $F007

D~7654 3210
  ---------
  .... .MMM
        +++- Select MMC3 register address and index scrambling mode (0-7)

Power-up value: Unknown; use $04 for compatibility with Subtype 1

Outer CHR-ROM Bank Register ($6001, Subtype 4)

Mask: $E007

D~7654 3210
  ---------
  .... ...+- Select 256 KiB CHR-ROM bank at PPU $0000-$1FFF

Since the only known Subtype 4 cartridge also retains compatibility writes to $5000/$5001/$5007, this register does not need to be emulated.

Outer PRG-ROM Bank Register ($6007, Subtype 4)

Mask: $E007

D~7654 3210
  ---------
  ..PP Pppp
    || |+++- Select Inner Bank Mask (4=128 KiB, i.e. $0F; 5=256 KiB, i.e. $1F)
    ++-+---- Select 64 KiB Outer Bank

Power-up Value: $25

The only known Subtype 4 cartridge uses the values $05 for the first 256 KiB game and $25 for the second 256 KiB game. Since it also retains compatibility writes to $5000/$5001/$5007, this register does not need to be emulated.

MMC3-compatible registers ($8000-$FFFF, write-only)

After unscrambling the address and the data written, these registers function the same as the MMC3's. The scrambled addresses correspond to the real address as follows:

$5007	-------------address written-----------
value	8000 8001 A000 A001 C000 C001 E000 E001
-----------------------------------------------	
0	8000 8001 A000 A001 C000 C001 E000 E001
1	A001 A000 8000 C000 8001 C001 E000 E001
2?	8000 8001 A000 A001 C000 C001 E000 E001
3	C001 8000 8001 A000 A001 E001 E000 C000
4	A001 8001 8000 C001 A000 C000 E000 E001
5?	8000 8001 A000 A001 C000 C001 E000 E001
6?	8000 8001 A000 A001 C000 C001 E000 E001
7?	8000 8001 A000 A001 C000 C001 E000 E001

? denotes $5xx7 values that according to the FCEUX source code are unused by all known games.

The data that is written to the low three bits of register $8000 corresponds to the real data as follows:

$5007	-value written-
value	0 1 2 3 4 5 6 7
-----------------------
0	0 1 2 3 4 5 6 7
1	0 2 6 1 7 3 4 5
2?	0 5 4 1 7 2 6 3
3	0 6 3 7 5 2 4 1
4	0 2 5 3 6 1 7 4
5?	0 1 2 3 4 5 6 7
6?	0 1 2 3 4 5 6 7
7?	0 1 2 3 4 5 6 7 

? denotes $5007 values that according to the FCEUX source code are unused by all known games. Note that bits 6 and 7 of register $8000 are kept as they are. The data written to $8001 and $A000-$FFFF is never scrambled.

Note

  • Games with only 256 KiB of CHR-ROM still use 512 KiB chips; the other 256 KiB usually contain leftover data from another game.
  • The Outer Bank Register is reset to its power-up value if a Reset has been detected via an interruption of the M2 signal. This makes it difficult to dump these cartridges using a Kazzo device.

Similar Mappers

  • INES Mapper 114 resembles Subtype 1 but with a different scrambling pattern.
  • NES 2.0 Mapper 258 has everything from Subtype 2 but adds readable protection registers in the $5000-$5007 range.