Famicom cartridge technical information - Bandai LZ93D50 standard

概要

LZ93D50 は 1990年頃から Bandai から製造されたカートリッジに搭載されているメモリコントローラ。FCG-3 は俗称で、実際に記載されたものは見つかっていない。

この配線は Program ROM, Character ROM, EEPROM を持つ標準的な基板の配線の説明であって、例外的な配線は別文書に記載する。EEPROM のアクセス方法も3通り存在し、うち2種類をこの文書で記載する。

wiring information

PCB

  • name: DRAGON BALL Z-B
  • device: LZ93D50, Program ROM, Character ROM, serial EEPROM (0x100byte)

memory controller

[label]
BANDAI
LZ93D50
9129 7T

[pinout]
Shrink PDIP-52pin
 1 ?                   |52 s? +5V
 2 ?                   |51 ?  ?
 3 o Program ROM EN#   |50 ?  ?
 4 s?+5V               |49 s? +5V
 5 i CPU PHI2          |48 ?  ?
 6 i CPU A13           |47 o  Program ROM A17
 7 i CPU A14           |46 o  Program ROM A15
 8 i CPU A3            |45 o  Program ROM A14
 9 i CPU A2            |44 o  Program ROM A16
10 i CPU A1            |43 i  CPU D7
11 i CPU A0            |42 i  CPU D6
12 i CPU ROMSEL#       |41 i  CPU D5
13 i CPU D0            |40 io CPU D4
14 i CPU D1            |39 i  CPU D3
15 i CPU D2            |38 o  CPU IRQ#
16 i CPU R/W           |37 o  VRAM A10
17 i PPU RD#           |36 o  Character ROM A17
18 o Character ROM A15 |35 o  Character ROM A14
19 o Character ROM A12 |34 o  Character ROM A13
20 i PPU A10           |33 o  Character ROM A11
21 i PPU A11           |32 o  Character ROM A16
22 i PPU A12           |31 o  Character ROM A10
23 i PPU A13           |30 o  Character ROM EN#
24 s GND               |29 ?  ?
25 ?                   |28 o  I2C SCL
26 s GND               |27 IO I2C SDA

[凡例]
?: unknown and no connection
s: power supply
i: input
o: output
io: input and output, push pull
IO: input and output, open drain

Program ROM

[label]
BANDAI'91
K-GUNDAM-2
PRG
9139 D

[logical assignments]
A17:14 = Program ROM A17:14
A13:0  = CPU A13:0
D7:0 = CPU D7:0
EN# = Program ROM EN#

Character ROM

[label]
BANDAI'91
K-GUNDAM-2
CHR
9139 D

[logical assignments]
A17:10 = Character ROM A17:10
A9:0   = PPU A9:0
D7:0   = PPU D7:0
EN# = Character ROM EN#

serial EEPROM

[label]
X24C02P (Xicor)
128

[logical assignments]
A2:0 = 3'b000
WC# = GND
SCL = I2C SCL (from LZ93D50)
SDA = I2C SDA (from R)

                  v  [R 22kohm] - [+5V]
[LZ93D50 27 pin] <-> [R 1.4kohm] <-> [XC24C02 SDA]

software specification

memory map

[CPU - read]
$6000       I2C and external device input
$6001-$7fff $6000 の mirror
$8000-$bfff Program ROM bank #0 (switchable)
$c000-$ffff Program ROM bank #1 (fixed)

[CPU - write]
$8000 Character ROM bank #0 register
$8001 Character ROM bank #1 register
$8002 Character ROM bank #2 register
$8003 Character ROM bank #3 register
$8004 Character ROM bank #4 register
$8005 Character ROM bank #5 register
$8006 Character ROM bank #6 register
$8007 Character ROM bank #7 register
$8008 Program ROM bank #0 register
$8009 Nametable register
$800a IRQ control register
$800b IRQ countner register #0
$800c IRQ countner register #1
$800d I2C control port
$800e-$800f おそらく未定義で未使用
$8010-$ffff $8000-$800f の mirror

[PPU - read/write]
FCG-1, FCG-2 と同じ

register

[I2C and external device input]
address: $6000 (read)
bit assignments
----------------
4   I2C SDA input

[Character ROM bank #0-#7 register]
address: $8000-$8007 (write)
data bit assignments は FCG-1, FCG-2 と同じ

[Program ROM bank #0 register]
address: $8008 (write)
data bit assignments は FCG-1, FCG-2 と同じ

[Nametable register]
address: $8009 (write)
data bit assignments は FCG-1, FCG-2 と同じ

[IRQ xxx register]
address: $800a, $800b, $800c (write)
data bit assignments は FCG-1, FCG-2 と同じ

[I2C control/output port]
address: $800d (write)
bit assignments
----------------
7   SDA direction  0:write(LZ93D50->EEPROM), 1:read(EEPROM->LZ93D50)
6   I2C SDA output
5   I2C SCL output

考察

FCG-1, FCG-2 からの変更点はレジスタアドレスの変更と、セーブデータ向けのインタフェースの追加である。ROM data のバス衝突を改善し、 ROM 領域の write へレジスタアドレスを移行している。またFCG-2 を使ったゲームでは RPG のゲームが増えたものの長いパスワードを入力させられる場面が多く、やや時代遅れであった。

EEPROM は X24C01, X24C02 (Xicor 製)の2種類で、配線の違いは X24C02 に I2C address の設定入力が追加されただけである。容量及び、通信プロトコルは異なり、互換性もない。

EEPROM のアクセス方法

I2C EEPROM は現在でも生産と改良が続けられているデバイスで、他社製のデータシートだと辻褄があわないので、 Xicor X24C01, X24C02 のデータシートを見ること。 (→ 添付ファイル参照 x24c01.pdf x24c02.pdf)
この項目では正式な文書を見ながら、該当カートリッジへの実装を補足する。

X24C01

他社製 IC と異なり I2C address を持たない。データプロトコルは EEPROM 内部 RAM のアドレスを指定する。
Dragon Ball Z (初代)のプログラムでは、address と data を LSB->MSB として入力しているが単なるバグ。 read / write がゲームプログラムのみかつ 1 byte 単位で完結しているので、ゲームプログラムとしては問題はない。
sequential read で全てを一度に読み出すと、data は EEPROM 内部の address 順に出てくるのでこの場合は問題になる。(実機で確認済み)

2023年8月追記分: 再現度が高いと思われるエミュレータの Mesen, Mesen2 でも X24C01 の bit の並びの対応は逆順のまま実装されている. 先述と重複になるがゲームプログラムでは 1 byte 単位 read, write だけを利用しているので問題にはならないが、エミュレータとして明らかな実装の間違いのまま放置されている.

X24C02

I2C address を持ち、一般的な I2C serial EEPROM となる。 Dragon Ball ZII では MSB->LSB の順番に入力している。