INES Mapper 100: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
No edit summary
No edit summary
Line 29: Line 29:
Registers $8000/$8001 $00-$07 as well as registers $A000-$FFFF function identically to an actual Nintendo [[MMC3]], Registers $8000/$8001 $40-$85 do not.
Registers $8000/$8001 $00-$07 as well as registers $A000-$FFFF function identically to an actual Nintendo [[MMC3]], Registers $8000/$8001 $40-$85 do not.


Nesticle is an old but influential NES emulator for DOS. Its non-standard method of emulating the MMC3's PRG A14/CHR A12 inversion bits only during the next $8001 write had the side effect of making eight independent 1 KiB CHR-ROM banks available, by using registers $82-$85 to set four 1 KiB banks at CPU $0000-$0FFF and registers $02-$05 to set four more 1 KiB banks at CPU $1000-$1FFF. (This cannot be done with a real MMC3, because changing bits 6 and 7 in the index register would immediately apply the current content of all seven bank registers to their flipped meaning.) This resulted in several Japanese games' ROM images, that originally used mappers not supported by Nesticle, being hacked for it. All of these games have since been redumped and are available in their original unaltered form, which should be used instead.
Nesticle is an old but influential NES emulator for DOS. Its non-standard method of emulating the MMC3's PRG A14/CHR A12 inversion bits only during the next $8001 write had the side effect of making eight independent 1 KiB CHR-ROM banks available, by using registers $82-$85 to set four 1 KiB banks at CPU $0000-$0FFF and registers $02-$05 to set four more 1 KiB banks at CPU $1000-$1FFF. (This cannot be done with a real MMC3, because changing bits 6 and 7 in the index register would immediately apply the current content of all seven bank registers to their flipped meaning.) This resulted in several Japanese games' ROM images, that originally used mappers not supported by Nesticle, being hacked for it. Should an emulator wish to support such ROM images, it must also support 512-byte trainers loaded to $7000 if specified in the iNES header. All of these games have since been redumped and are available in their original unaltered form, which should be used instead.


At some point, FCEUX lost support for this. It's also currently used as a magic number by Nestopia-1.4.0 for "anything whose dumps only exist as UNIF (and therefore has no iNES mapper number assigned)". Nintendulator uses this as a general-purpose debugging mapper, allowing PRG/CHR banks to be selected arbitrarily using a control dialog.
At some point, FCEUX lost support for this. It's also currently used as a magic number by Nestopia-1.4.0 for "anything whose dumps only exist as UNIF (and therefore has no iNES mapper number assigned)". Nintendulator uses this as a general-purpose debugging mapper, allowing PRG/CHR banks to be selected arbitrarily using a control dialog.

Revision as of 20:09, 12 May 2018


iNES Mapper 100 is used by some emulators to denote ROM images hacked for Nesticle's MMC3 emulation.

Bankswitch Index Register ($8000)/Data Register ($8001)

Mask: $E001 (nominally)

$00: 1 KiB CHR-ROM bank at PPU $0000-$03FF := Value AND $FE
     1 KiB CHR-ROM bank at PPU $0400-$07FF := Value OR $01
$01: 1 KiB CHR-ROM bank at PPU $0800-$0BFF := Value AND $FE
     1 KiB CHR-ROM bank at PPU $0C00-$0FFF := Value OR $01
$02: 1 KiB CHR-ROM bank at PPU $1000-$13FF := Value
$03: 1 KiB CHR-ROM bank at PPU $1400-$17FF := Value
$04: 1 KiB CHR-ROM bank at PPU $1800-$1BFF := Value
$05: 1 KiB CHR-ROM bank at PPU $1C00-$1FFF := Value
$06: 8 KiB PRG-ROM bank at CPU $8000-$9FFF := Value
$07: 8 KiB PRG-ROM bank at CPU $A000-$BFFF := Value
$46: 8 KiB PRG-ROM bank at CPU $C000-$DFFF := Value
$47: 8 KiB PRG-ROM bank at CPU $A000-$BFFF := Value
$80: 1 KiB CHR-ROM bank at PPU $1000-$13FF := Value AND $FE
     1 KiB CHR-ROM bank at PPU $1400-$17FF := Value OR $01
$81: 1 KiB CHR-ROM bank at PPU $1800-$1BFF := Value AND $FE
     1 KiB CHR-ROM bank at PPU $1C00-$1FFF := Value OR $01
$82: 1 KiB CHR-ROM bank at PPU $0000-$03FF := Value
$83: 1 KiB CHR-ROM bank at PPU $0400-$07FF := Value
$84: 1 KiB CHR-ROM bank at PPU $0800-$0BFF := Value
$85: 1 KiB CHR-ROM bank at PPU $0C00-$0FFF := Value

Registers $8000/$8001 $00-$07 as well as registers $A000-$FFFF function identically to an actual Nintendo MMC3, Registers $8000/$8001 $40-$85 do not.

Nesticle is an old but influential NES emulator for DOS. Its non-standard method of emulating the MMC3's PRG A14/CHR A12 inversion bits only during the next $8001 write had the side effect of making eight independent 1 KiB CHR-ROM banks available, by using registers $82-$85 to set four 1 KiB banks at CPU $0000-$0FFF and registers $02-$05 to set four more 1 KiB banks at CPU $1000-$1FFF. (This cannot be done with a real MMC3, because changing bits 6 and 7 in the index register would immediately apply the current content of all seven bank registers to their flipped meaning.) This resulted in several Japanese games' ROM images, that originally used mappers not supported by Nesticle, being hacked for it. Should an emulator wish to support such ROM images, it must also support 512-byte trainers loaded to $7000 if specified in the iNES header. All of these games have since been redumped and are available in their original unaltered form, which should be used instead.

At some point, FCEUX lost support for this. It's also currently used as a magic number by Nestopia-1.4.0 for "anything whose dumps only exist as UNIF (and therefore has no iNES mapper number assigned)". Nintendulator uses this as a general-purpose debugging mapper, allowing PRG/CHR banks to be selected arbitrarily using a control dialog.