INES Mapper 108

From Nesdev wiki
Jump to: navigation, search

NES 2.0 Mapper 108 denotes at least four different PCBs used for FDS-to-cartridge conversions. All have nametable mirroring hard-wired.

Submapper 1: DH-08

Used by Whirlwind Manu's first release of Taito's Bubble Bobble (LH31), and is a modified version of Kaiser's cartridge conversion, originally for INES Mapper 142.

Banks:

  • CPU $6000-$7FFF: Switchable 8 KiB bank
  • CPU $8000-$FFFF: Fixed to last 32 KiB of PRG-ROM
  • PPU $0000-$1FFF: Unbanked 8 KiB CHR-RAM

Registers:

  • CPU $F000-$FFFF: Select 8 KiB PRG-ROM bank at CPU $6000-$7FFF. The game retains writes outside this address range, which must be ignored for the game not to crash.

Submapper 2

Used by Whirlwind Manu's later release of Taito's Bubble Bobble (LH31) that replaces CHR-RAM with CHR-ROM. UNIF board name is UNL-BB.

Banks:

  • CPU $6000-$7FFF: Switchable 8 KiB bank
  • CPU $8000-$FFFF: Fixed to last 32 KiB of PRG-ROM
  • PPU $0000-$1FFF: Switchable 8 KiB CHR-ROM bank

Registers:

  • CPU $E000-$FFFF: Select 8 KiB PRG-ROM bank at CPU $6000-$7FFF *and* 8 KiB CHR-ROM bank at PPU $0000-$1FFF. The game retains writes outside this address range, which must be ignored for the game not to crash.

Submapper 3

Submapper 1 but with the PRG-ROM switch responding in the full CPU $8000-$FFFF address range, which is required for both games to function:

  • Falsion (LH54)
  • Meikyuu Jiin Dababa (LH28)

Banks:

  • CPU $6000-$7FFF: Switchable 8 KiB bank
  • CPU $8000-$FFFF: Fixed to last 32 KiB of PRG-ROM
  • PPU $0000-$1FFF: Unbanked 8 KiB CHR-RAM

Registers:

  • CPU $8000-$FFFF: Select 8 KiB PRG-ROM bank at CPU $6000-$7FFF

Submapper 4

Like Submapper 2, but with the CHR-ROM switch responding in the full CPU $8000-$FFFF address range, and PRG-ROM banks being fixed. UNIF board name is also UNL-BB.

  • Pro Wrestling (LE05)

Banks:

  • CPU $6000-$7FFF: 8 KiB bank, fixed to last 8 KiB
  • CPU $8000-$FFFF: Fixed to last 32 KiB of PRG-ROM
  • PPU $0000-$1FFF: Switchable 8 KiB CHR-ROM bank

Registers:

  • CPU $8000-$FFFF: Select 8 KiB CHR-ROM bank at PPU $0000-$1FFF

Heuristics

FCEUX and Mesen manage to emulate all four PCBs without disambiguation by heuristically considering the addresses that all games write to:

if((addr & 0x9000) == 0x8000 || addr >= 0xF000){
	//A version of Bubble Bobble expects writes to $F000+ to switch the PRG banks
	_prgReg = _chrReg = value;
} else {
	//For ProWres
	_chrReg = value & 0x01;
}

To disambiguate the four different PCBs in advance:

  • CHR-RAM -> Submappers 1 or 3
    • Horizontal Mirroring -> Submapper 1, otherwise 3
  • CHR-ROM -> Submappers 2 or 4
    • More than 16 KiB of CHR-ROM -> Submapper 2, otherwise 4