INES Mapper 157: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
(→‎Read Serial EEPROM/Barcode ($6000-$7FFF read): I²C as an open-drain protocol. Any device can pull the data line low at any time; it's the job of the device that wanted the signal to be high to notice a collision.)
(only latch on this mapper, name the "one game")
Line 11: Line 11:
! Name !! External EEPROM !! [[NES_2.0#Byte_10_.28RAM_size.29|NES 2.0 Byte 10]]
! Name !! External EEPROM !! [[NES_2.0#Byte_10_.28RAM_size.29|NES 2.0 Byte 10]]
|-
|-
|''Battle Rush:: Build up Robot Tournament'' || 24C01 || 0x10
|''Battle Rush: Build up Robot Tournament'' || 24C01 || 0x10
|-
|-
|''Crayon Shin-chan: Ora to Poi Poi'' || - || 0x00
|''Crayon Shin-chan: Ora to Poi Poi'' || - || 0x00
Line 55: Line 55:
       +----- External EEPROM's I²C SCL
       +----- External EEPROM's I²C SCL


* CHR A13 OUT is provided on the subcartridge header, and is used in one game as an external I²C clock.
* CHR A13 OUT is provided on the subcartridge header, and is used in ''Battle Rush'' as an external I²C clock.
* PPU rendering must either be disabled during traffic to the external EEPROM, or the same value must be written to all four registers.
* PPU rendering must either be disabled during traffic to the external EEPROM, or the same value must be written to all four registers.
* Because the ASIC's PA12 and PA13 inputs are grounded, only registers $8000-$8003 instead of $8000-$8007 are relevant.
* Because the ASIC's PA12 and PA13 inputs are grounded, only registers $8000-$8003 instead of $8000-$8007 are relevant.
Line 91: Line 91:
* Writing to this register acknowledges a pending IRQ, and copies the latch to the actual counter.
* Writing to this register acknowledges a pending IRQ, and copies the latch to the actual counter.
* If a write to this register enables counting while the counter is holding a value of zero, an IRQ is generated immediately.
* If a write to this register enables counting while the counter is holding a value of zero, an IRQ is generated immediately.
==IRQ Latch/Counter ($800B-$800C write)==
==IRQ Latch ($800B-$800C write)==
  Mask: $800F
  Mask: $800F
   
   

Revision as of 15:35, 20 August 2018

iNES Mapper 157 is used for games using the Datach Joint ROM system. The Datach main unit is a device for insertion into the Famicom's cartridge port that provides a barcode scanner, and that accepts its own custom game cartridges. It contains an internal 256-byte serial EEPROM (24C02) that is shared among all Datach games.

One game, Battle Rush: Build up Robot Tournament, has an additional external 128-byte serial EEPROM (24C01) on the game cartridge. As part of that game's functionality is to transfer save data between the Datach main unit's EEPROM and the game cartridge's EEPROM, emulators should save each EEPROM's data to separate files, one for the main unit's EEPROM, and one for the game cartridge's EEPROM.

The NES 2.0 header's PRG-NVRAM field will only denote whether the game cartridge has an additional 128-byte serial EEPROM (byte 10 value 0x10) or not (byte 10 value 0x00). The Datach main unit's serial EEPROM is not included in the NES 2.0 header's PRG-NVRAM field, as that EEPROM is not part of the game cartridge, but instead shared among all games using this mapper.

Game List

Name External EEPROM NES 2.0 Byte 10
Battle Rush: Build up Robot Tournament 24C01 0x10
Crayon Shin-chan: Ora to Poi Poi - 0x00
Dragon Ball Z: Gekitou Tenkaichi Budoukai - 0x00
J-League Super Top Players - 0x00
SD Gundam Wars - 0x00
Ultraman Club: Spokon Fight!! - 0x00
Yuu Yuu Hakusho - Bakutou Ankoku Bujutsu-kai - 0x00

Banks

  • CPU $8000-$BFFF: 16 KiB switchable PRG ROM bank
  • CPU $C000-$FFFF: 16 KiB PRG ROM bank, fixed to the last bank
  • PPU $0000-$1FFF: 8 KiB unbanked CHR-RAM

Registers

Read Serial EEPROM/Barcode ($6000-$7FFF read)

Mask: $E000

7  bit  0
---- ----
xxxE Bxxx
|||| ||||
+++|-|+++- Open bus
   | +---- Serial data out from Barcode scanner
   +------ Data out from I²C EEPROMs
  • If there is both an internal and an external EEPROM, the Data out from both EEPROMs is ANDed.
  • Please see the FCEUX source code for a description of the barcode scanner's serial protocol.

External EEPROM Clock ($8000-$8003 write)

Mask: $800F

7  bit  0
---- ----
xxxx Cxxx
     |   
     +----- External EEPROM's I²C SCL
  • CHR A13 OUT is provided on the subcartridge header, and is used in Battle Rush as an external I²C clock.
  • PPU rendering must either be disabled during traffic to the external EEPROM, or the same value must be written to all four registers.
  • Because the ASIC's PA12 and PA13 inputs are grounded, only registers $8000-$8003 instead of $8000-$8007 are relevant.
  • No CHR banking is available.

PRG-ROM Bank Select ($8008 write)

Mask: $800F

7  bit  0
---- ----
.... PPPP
     ||||
     ++++-- Select 16 KiB PRG-ROM bank at CPU $8000-$BFFF   

Nametable Mirroring Type Select ($8009 write)

Mask: $800F

7  bit  0
---- ----
.... ..MM
       ||
       ++-- Select nametable mirroring type
             0: Vertical
             1: Horizontal
             2: One-screen, page 0
             3: One-screen, page 1

IRQ Control ($800A write)

Mask: $800F

7  bit  0
---- ----
.... ...C
        |
        +-- IRQ counter control
             0: Counting disabled
             1: Counting enabled
  • Writing to this register acknowledges a pending IRQ, and copies the latch to the actual counter.
  • If a write to this register enables counting while the counter is holding a value of zero, an IRQ is generated immediately.

IRQ Latch ($800B-$800C write)

Mask: $800F

   $C         $B
7  bit  0  7  bit  0
---- ----  ---- ----
CCCC CCCC  CCCC CCCC
|||| ||||  |||| ||||
++++-++++--++++-++++-- Counter value (little-endian)
  • If counting is enabled, the counter decreases on every M2 cycle. When it holds a value of zero, an IRQ is generated.
  • These registers modify a latch that will only be copied to the actual counter when register $xxxA is written to.

EEPROM Control ($800D write)

Mask: $800F

7  bit  0
---- ----
RDC. ....
|||
||+-------- Internal EEPROM's I²C SCL
|+--------- Both EEPROM's I²C SDA
+---------- Both EEPROM's Direction bit (1=Enable Read)
  • Please refer to generic I²C tutorials and the 24C01/24C02 datasheets on how to operate or emulate this register correctly.