ファミスタ90の基板に flash memory を載せて動かした

前回の写真では Program ROM と物理的に干渉するのでやめようと思ったが、こんどいつやる気がでるかわからないのでやっといた。基板裏側に無理矢理配線するために、AM29F040B の足を反対に跳ね上げる(湘南モノレール)にして固定。

制御線はいつものように下記に配線。Work RAM は物理的に干渉するとか、なくても動く市販ソフトは多いので後回し。

Charcter ROM OE# = PPU RD#
Charcter ROM CE# = PPU A13

anago からの書き込みも問題なく行えるので市販ソフトを起動。転送モードは Program ROM 側は bottom, Charcter ROM 側は top のほうがよい。ハイドライド3, ファミスタ90は問題なし、マッピーキッズは音量が小さい上に手紙とマップとスロット画面がぐっちゃ、マインドシーカーはタイトル画面がぐっちゃ。

ソフト的に調べてみたところ、PPU area の 0x2000-0x2fff / name table に ROM を張れる他のマッパにあまりない機能を使ってるらしい。逆に PPU area の 0x000-0x1fff / pattern table に RAM を張れる機能にも問題がありそうだ。
後者の機能については、文書によっては 163 内蔵 RAM が提供と書いてあったが、163 に PPU WR# 端子が接続されてない以上それはない。よって本体の VRAM を 0x400 byte で切り換える機能と考えるのが現実的であろう。つまり、Charcter RAM mode を使うと nametable の半分が使えないので1画面モードのみで使うが発生してしまう。

話を戻す。この画面がぐっちゃになる不具合は Charcter ROM CE# を 163 からでている Charcter ROM OE# につなぐと発生しなくなるが、kazzo から書き込みができなくなる。よって CE# 信号をデコードし直さないといけない。
ここで本体の VRAM の接続を nesdev をみて確認すると下記になっている。

VRAM[10] = connecter_vram_A[10]
VRAM[9:0] = PPU[9:0]
VRAM_CS# = connecter_vram_cs#;
VRAM_OE# = PPU_RD#
VRAM_WE# = PPU_WR#

163 から出力されている VRAM_CS# はアドレスデコードだけで、 PPU_RD# が関係していない信号であることもわかったので下記の仕様にする。

  • PPU address が 0x3000 台の時は ROM を使用しない
  • それ以外のアドレスの時は VRAM_CS# の反転信号を出す

これを論理回路にすると NAND 2ゲートで都合良くできることがわかった。

Charcter ROM OE# = PPU RD#
Charcter ROM CE# = nand(vram_CS#, nand(PPU_A[13], PPU_A[12]))

このゲートを付けて直したところ、kazzo から書き込みできたし、ぐっちゃな画面も解消した。

いまカセットの状態。まだ改造が必要だとは 163 周りはハードルが高すぎる。

補足

この NAND ゲートを 163 を flash memory cartridge として動かす場合に必要であって、 EPROM を使う場合は素直に 163 からでている charcter ROM OE# をつないでよい。

その他

  • 音源周りはまだ未調査だが、小さい音量で 163 からの音が鳴っている。
  • 外部 Work RAM はまだつけていない (干渉するもののずらして無理矢理付ける予定)
  • King of Kings は画面がでないが音が出ているのでプログラムは動いている様子