LZ93D50 は 1990年頃から Bandai から製造されたカートリッジに搭載されているメモリコントローラ。FCG-3 は俗称で、実際に記載されたものは見つかっていない。
この配線は Program ROM, Character ROM, EEPROM を持つ標準的な基板の配線の説明であって、例外的な配線は別文書に記載する。EEPROM のアクセス方法も3通り存在し、うち2種類をこの文書で記載する。
この配線は Program ROM, Character ROM, EEPROM を持つ標準的な基板の配線の説明であって、例外的な配線は別文書に記載する。EEPROM のアクセス方法も3通り存在し、うち2種類をこの文書で記載する。
[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
[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#
[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#
[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]
[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 と同じ
[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 は X24C01, X24C02 (Xicor 製)の2種類で、配線の違いは X24C02 に I2C address の設定入力が追加されただけである。容量及び、通信プロトコルは異なり、互換性もない。
I2C EEPROM は現在でも生産と改良が続けられているデバイスで、他社製のデータシートだと辻褄があわないので、 Xicor X24C01, X24C02 のデータシートを見ること。 (→ 添付ファイル参照 x24c01.pdf x24c02.pdf)
この項目では正式な文書を見ながら、該当カートリッジへの実装を補足する。
この項目では正式な文書を見ながら、該当カートリッジへの実装を補足する。
他社製 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 だけを利用しているので問題にはならないが、エミュレータとして明らかな実装の間違いのまま放置されている.
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 だけを利用しているので問題にはならないが、エミュレータとして明らかな実装の間違いのまま放置されている.