INES Mapper 164: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
m (This is not Disch original notes anymore)
(rewrite)
Line 1: Line 1:
[[Category:iNES Mappers|164]]
{{DEFAULTSORT:164}}[[Category:iNES Mappers]][[Category:Mappers using $4020-$5FFF]][[Category:Mappers with CHR RAM]]
These notes are not very good. There is more information to be got. Check some emulator sources and please elaborate here.
'''iNES Mapper 164''' denotes the 燕城 (Yànchéng) '''cy2000-3''' circuit board, used for the following games:
* ''Final Fantasy 太空戰士 V'' (G-003)
* ''大話西游'' (Dàhuà Xīyóu, G-004)
* ''櫻桃小丸子'' (Chibi Maruku-chan, G-005)
* ''岳飛傳'' (Yuèfēi Zhuàn, G-006)
* ''Dark Seed - 黑暗之蛊'' (G-009)
* ''口袋精靈: 金'' (Pokémon: Gold Edition, not to be confused with several similarly-named ports of the same name)


  Those are **not** Disch's original notes: 
=Banks=
  ========================
* CPU $6000-$7FFF: 0-8 KiB unbanked PRG-RAM, not battery-backed
  =  Mapper 164          =
* CPU $8000-$BFFF: 16/32 KiB switchable PRG-ROM bank
  ========================
* PPU $0000-$1FFF: 8 KiB unbanked CHR-RAM
 
* Nametable mirroring: hard-wired
  Example Games:
The circuit board has address lines for 8 KiB of PRG-RAM, though all known carts mount either no or a 2 KiB RAM chip which is then mirrored three times across the respective address range. PRG-RAM is never battery-backed; all games save the game state to a 93C66 512-byte serial EEPROM.
  --------------------------
=Registers=
  Final Fantasy V
All registers are initialized to $00 on reset.
  Pokémon Red [宠物红](Waixing)
==PRG-ROM Bank Low/1 bpp Mode Switch ($5000, write)==
 
Mask: $FB00
 
  Registers:
  ---------------------------
 
  Range,Mask:  $5000-FFFF, $F300
 
    $5000, $D000: PRG reg (32k @ $8000)
 
  $6000-7FFF may have SRAM (not sure)
 
 
  On Reset
  ---------------------------
  Reg seems to contain $FF on powerup/reset
 
 
  Notes:
  ---------------------------
 
  Swapping is really simple -- the thing that is funky is the register range/mask.  $5000 and $D000 will access
  the register, however $5100, $5200, etc will not.
   
   
  FCEUX implements mapper 164 as:
D~7654 3210
  $5000: [.... LLLL]
  ---------
  $5100: [.... HHHH]
  C1QM PPPP
  $5300: 8-bit latch
  | +|-++++- PRG A18..A14 if M=0
  Writing to either $5000 or $5100 immediately switches a 32kB or 512kB chunk.
  |  | ++++- PRG A18..A15 if M=1
  Reading from $5100 or $5900 returns the value of the latch, but not $5500 or $5D00
  |  +------ PRG banking mode
  |          0: PRG A14..A18=QPPPP when CPU A14=0,
  |              PRG A14..A18=11111 when CPU A14=1 (UxROM, 16 KiB switchable bank)
  |          1: PRG A14=CPU A14, PRG A15..A18=PPPP (BxROM, 32 KiB switchable bank)
  +--------- 1 bpp video mode: when PPU A13=0 ...
              0: PPU A3=CPU A3, PPU A12=CPU A12 (disable 1 bpp mode)
              1: PPU A3=CPU A0, PPU A12=CPU A9, both latched during
                  last rise of PPU A13 during R/W (enable 1 bpp mode)
 
* 1 bpp mode is an all points-addressable video mode that allows the 8 KiB CHR-RAM to hold just enough data for an entire screen.
* Because this register is initialized to $00 on reset, thus clearing bit 4 which causes UxROM mode, the game's reset vectors will be at the end of 16 KiB bank #31.
==PRG-ROM Bank High ($5100, write)==
Mask: $FB00
D~7654 3210
  ---------
  .... ..PP
          ++- PRG A20..A19
==Microwire Interface ($5200, write)==
Mask: $FB00
   
   
  Nestopia implements mapper 164 as:
D~7654 3210
  $5000: [.ABC DLLL]
  ---------
  $5100: [.... ...H]
  ...S .C.D
  Writing to either immediately switches banks. The interpretation of the address depends on ABC:
      |  | +- 93C66 EEPROM DAT output
  C=0: Switch 16kB at $8000, address specified by HBDLLL; 16kB at $C000 switched to H11111.
      |  +--- 93C66 EEPROM CLK output
  A=0 C=1: undefined (noop)
      +------ 93C66 EEPROM CS output
  ABC=5: Switch 32kB at $8000, address specified by HDLLL
 
  ABC=7: Switch 16kB at $8000, address specified by HDDLLL; 16kB at $C000 switched to H11111. (Yes, D appears twice)
==Microwire Interface ($5200, read)==
Mask: $FB00
   
   
  Note that the copy of Final Fantasy V in GoodNES does not work correctly in Nestopia. This should ''not'' be taken as an indication that Nestopia's implementation is necessarily wrong.
D~7654 3210
  ---------
  .... .A..
        |
        |
        +--- 93C66 EEPROM DAT input (inverted)
==Unknown ($5300, write)==
Mask: $FB00
 
All games just write $00 to this register. Its meaning is certainly not the one seen in [[INES Mapper 162]]/163.
=See also=
* [[NES 2.0 Mapper 558]] is a later version which drops UxROM mode and connects the microwire interface to EEPROM differently.

Revision as of 14:53, 1 August 2020

iNES Mapper 164 denotes the 燕城 (Yànchéng) cy2000-3 circuit board, used for the following games:

  • Final Fantasy 太空戰士 V (G-003)
  • 大話西游 (Dàhuà Xīyóu, G-004)
  • 櫻桃小丸子 (Chibi Maruku-chan, G-005)
  • 岳飛傳 (Yuèfēi Zhuàn, G-006)
  • Dark Seed - 黑暗之蛊 (G-009)
  • 口袋精靈: 金 (Pokémon: Gold Edition, not to be confused with several similarly-named ports of the same name)

Banks

  • CPU $6000-$7FFF: 0-8 KiB unbanked PRG-RAM, not battery-backed
  • CPU $8000-$BFFF: 16/32 KiB switchable PRG-ROM bank
  • PPU $0000-$1FFF: 8 KiB unbanked CHR-RAM
  • Nametable mirroring: hard-wired

The circuit board has address lines for 8 KiB of PRG-RAM, though all known carts mount either no or a 2 KiB RAM chip which is then mirrored three times across the respective address range. PRG-RAM is never battery-backed; all games save the game state to a 93C66 512-byte serial EEPROM.

Registers

All registers are initialized to $00 on reset.

PRG-ROM Bank Low/1 bpp Mode Switch ($5000, write)

Mask: $FB00

D~7654 3210
  ---------
  C1QM PPPP
  | +|-++++- PRG A18..A14 if M=0
  |  | ++++- PRG A18..A15 if M=1
  |  +------ PRG banking mode
  |           0: PRG A14..A18=QPPPP when CPU A14=0,
  |              PRG A14..A18=11111 when CPU A14=1 (UxROM, 16 KiB switchable bank)
  |           1: PRG A14=CPU A14, PRG A15..A18=PPPP (BxROM, 32 KiB switchable bank)
  +--------- 1 bpp video mode: when PPU A13=0 ...
              0: PPU A3=CPU A3, PPU A12=CPU A12 (disable 1 bpp mode)
              1: PPU A3=CPU A0, PPU A12=CPU A9, both latched during
                 last rise of PPU A13 during R/W (enable 1 bpp mode)
  • 1 bpp mode is an all points-addressable video mode that allows the 8 KiB CHR-RAM to hold just enough data for an entire screen.
  • Because this register is initialized to $00 on reset, thus clearing bit 4 which causes UxROM mode, the game's reset vectors will be at the end of 16 KiB bank #31.

PRG-ROM Bank High ($5100, write)

Mask: $FB00

D~7654 3210
  ---------
  .... ..PP
         ++- PRG A20..A19

Microwire Interface ($5200, write)

Mask: $FB00

D~7654 3210
  ---------
  ...S .C.D
     |  | +- 93C66 EEPROM DAT output
     |  +--- 93C66 EEPROM CLK output
     +------ 93C66 EEPROM CS output

Microwire Interface ($5200, read)

Mask: $FB00

D~7654 3210
  ---------
  .... .A..
        |
        |
        +--- 93C66 EEPROM DAT input (inverted)

Unknown ($5300, write)

Mask: $FB00

All games just write $00 to this register. Its meaning is certainly not the one seen in INES Mapper 162/163.

See also

  • NES 2.0 Mapper 558 is a later version which drops UxROM mode and connects the microwire interface to EEPROM differently.