INES Mapper 246: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
(alternative hypothesis for the existing dumps)
(rewrite)
Line 1: Line 1:
[[Category:iNES Mappers|246]]
{{DEFAULTSORT:246}}[[Category:iNES Mappers]]'''iNES Mapper 246''' denotes the '''G0151-1''' circuit board, used only for the Taiwanese game [[wikia:c:bootleggames:Feng_Shen_Bang|封神榜 (''Fēngshénbǎng: Fúmó Sān Tàizǐ'')]].
[[iNES Mapper 246]] seems to be a singleton for the Taiwanese game [[wikia:c:bootleggames:Feng_Shen_Bang|封神榜 (''Fēngshénbǎng: Fúmó Sān Tàizǐ'')]].


It provides 2 KiB of RAM from $6800-$6FFF.
=Banks=
 
*CPU $6800-$6FFF: 2 KiB PRG-RAM, battery-banked
  Mask:   $FFE7
*CPU $8000-$9FFF: 8 KiB PRG-ROM bank, switchable via $6000
 
*CPU $A000-$BFFF: 8 KiB PRG-ROM bank, switchable via $6001
  $6000-6003: PRG Regs
*CPU $C000-$DFFF: 8 KiB PRG-ROM bank, switchable via $6002
  $6004-6007: CHR Regs
*CPU $E000-$FFFF: 8 KiB PRG-ROM bank, switchable via $6003
 
*PPU $0000-$07FF: 2 KiB CHR-ROM bank, switchable via $6004
 
*PPU $0800-$0FFF: 2 KiB CHR-ROM bank, switchable via $6005
  CHR Setup:
*PPU $1000-$17FF: 2 KiB CHR-ROM bank, switchable via $6006
  ---------------------------
*PPU $1800-$1FFF: 2 KiB CHR-ROM bank, switchable via $6007
 
Nametable mirroring is hard-wired and set by the iNES header.
        $0000   $0400  $0800   $0C00  $1000   $1400  $1800   $1C00
=Registers=
      +---------------+---------------+---------------+---------------+
==PRG-ROM bank select ($6000-$6003), write==
      |    $6004    |    $6005    |    $6006    |     $6007    |
A~[0110 0000 000. .0rr] D~[..bb bbbb]
       +---------------+---------------+---------------+---------------+
                    ||      ++-++++- PRG A18..A13 of bank to select
 
                    ++--------------- CPU A14..A13 to switch
 
* When reading from CPU address $FFE4-$FFFF, PRG A17 is forced high, as if register $6003 were OR'd with $10.
  PRG Setup:
* Register $6003 is set to $FF at power-on/reset.
  ---------------------------
==CHR-ROM bank select ($6004-$6007), write==
 
A~[0110 0000 000. .1rr] D~[bbbb bbbb]
        $8000  $A000  $C000  $E000 
                    ||      ++-++++- CHR A18..A11 of bank to select
      +-------+-------+-------+-------+
                    ++--------------- PPU A12..A11 to switch
      | $6000 | $6001 | $6002 | $6003 |
=See also=
       +-------+-------+-------+-------+
 
 
  Powerup/Reset:
  ---------------------------
  $6003 set to $FF on cold boot. (All other registers probably also, but not required)
 
The present hardware seems to be:
* Four 74LS670 4 x 4bit dual-ported memory
* One GAL16V8
* PRG ROM (up to 2 MiB), CHR ROM (up to 512 KiB), PRG RAM (8 KiB)
* Miscellaneous resistors, diodes, and a battery to power the PRG RAM
 
There is additionally some weird behavior on reads from $FFE4-$FFFF:
* PRG ROM access when A15 through A5 plus A2 are all HIGH (i.e. (CPU address & 0xFFE4) == 0xFFE4 )  should instead occur from a bank where PRG A17 is high, i.e. ( [$6003] | $10 )
However, the existing dumps in GoodNES have been pre-patched to not require this. Or perhaps there were multiple releases, some with this behavior and some without.
 
See also:
* http://forums.nesdev.org/viewtopic.php?t=13969 Why does Fong Shen Bang only work in Famiclones?
* http://forums.nesdev.org/viewtopic.php?t=13969 Why does Fong Shen Bang only work in Famiclones?

Revision as of 15:54, 27 August 2024

iNES Mapper 246 denotes the G0151-1 circuit board, used only for the Taiwanese game 封神榜 (Fēngshénbǎng: Fúmó Sān Tàizǐ).

Banks

  • CPU $6800-$6FFF: 2 KiB PRG-RAM, battery-banked
  • CPU $8000-$9FFF: 8 KiB PRG-ROM bank, switchable via $6000
  • CPU $A000-$BFFF: 8 KiB PRG-ROM bank, switchable via $6001
  • CPU $C000-$DFFF: 8 KiB PRG-ROM bank, switchable via $6002
  • CPU $E000-$FFFF: 8 KiB PRG-ROM bank, switchable via $6003
  • PPU $0000-$07FF: 2 KiB CHR-ROM bank, switchable via $6004
  • PPU $0800-$0FFF: 2 KiB CHR-ROM bank, switchable via $6005
  • PPU $1000-$17FF: 2 KiB CHR-ROM bank, switchable via $6006
  • PPU $1800-$1FFF: 2 KiB CHR-ROM bank, switchable via $6007

Nametable mirroring is hard-wired and set by the iNES header.

Registers

PRG-ROM bank select ($6000-$6003), write

A~[0110 0000 000. .0rr] D~[..bb bbbb]
                    ||       ++-++++- PRG A18..A13 of bank to select
                    ++--------------- CPU A14..A13 to switch
  • When reading from CPU address $FFE4-$FFFF, PRG A17 is forced high, as if register $6003 were OR'd with $10.
  • Register $6003 is set to $FF at power-on/reset.

CHR-ROM bank select ($6004-$6007), write

A~[0110 0000 000. .1rr] D~[bbbb bbbb]
                    ||       ++-++++- CHR A18..A11 of bank to select
                    ++--------------- PPU A12..A11 to switch

See also