INES Mapper 100: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
(put caveats at top next to summary.)
m (defaultsort)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
[[Category:Bad iNES Mappers|100]][[Category:INES Mappers|100]][[Category:MMC3-like mappers]][[Category:Mappers with scanline IRQs]]
{{DEFAULTSORT:100}}[[Category:Bad iNES Mappers]][[Category:INES Mappers]][[Category:MMC3-like mappers]][[Category:Mappers with scanline IRQs]]
 
iNES Mapper 100 was assigned by fwNES<ref>FWNES98E.TXT, fwNES 0.302b, 1998/11/16, by FanWen Yang</ref> to denote [[Mapper hack|mapper hacks]] for the [[INES Mapper 004|MMC3]] emulation of Nesticle, an influential NES emulator for MS-DOS in the late 1990s. Nesticle did not directly support many of the custom ASICs by Irem, Konami and Namco, but did incorrectly emulate the MMC3 in a way that made it useful to run modified ROM images. Most of them use 512-byte trainers that must be loaded to CPU address $7000.
iNES Mapper 100 is used by some emulators to denote ROM images hacked for Nesticle's [[MMC3]] emulation. At some point, FCEUX lost support for this. It's also currently used as a magic number by Nestopia 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.
 


Nestopia uses iNES mapper 100 as a magic number for UNIF-only boards. Nintendulator uses this as a general-purpose debugging mapper, allowing PRG/CHR banks to be selected arbitrarily using a control dialog.
==Bankswitch Index Register ($8000)/Data Register ($8001)==
==Bankswitch Index Register ($8000)/Data Register ($8001)==
  Mask: $E001 (nominally)
  Mask: $E001 (nominally)
Line 28: Line 27:
  $85: 1 KiB CHR-ROM bank at PPU $0C00-$0FFF := 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.
On an actual MMC3, changing bits 6 and 7 in the index register would immediately apply the current content of all seven bank registers to their flipped meaning. Nesticle applies these bits only on the next $8001 write, which makes eight independent 1 KiB CHR-ROM banks available: 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.
 
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.

Latest revision as of 19:00, 24 April 2019

iNES Mapper 100 was assigned by fwNES[1] to denote mapper hacks for the MMC3 emulation of Nesticle, an influential NES emulator for MS-DOS in the late 1990s. Nesticle did not directly support many of the custom ASICs by Irem, Konami and Namco, but did incorrectly emulate the MMC3 in a way that made it useful to run modified ROM images. Most of them use 512-byte trainers that must be loaded to CPU address $7000.

Nestopia uses iNES mapper 100 as a magic number for UNIF-only boards. Nintendulator uses this as a general-purpose debugging mapper, allowing PRG/CHR banks to be selected arbitrarily using a control dialog.

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

On an actual MMC3, changing bits 6 and 7 in the index register would immediately apply the current content of all seven bank registers to their flipped meaning. Nesticle applies these bits only on the next $8001 write, which makes eight independent 1 KiB CHR-ROM banks available: 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.

  1. FWNES98E.TXT, fwNES 0.302b, 1998/11/16, by FanWen Yang