Namco 108 の謎仕様

某プログラムの memory controller driver プログラムを Namco 108 系に移植しようとしたのですが、実機でうまくいきませんでした。不具合の原因を計測器を使って見ていたところ、勝手にバンクレジスタが書き換わって暴走していました。

  • CPU が address $8xxx の命令を実行した後、 stx や jsr 命令で address $0xxx を write すると、 レジスタ更新をしてしまうことがたまにある.(自分の試した条件では電源投入して30秒ぐらいは動くがそれ以降は誤動作率が高い)
  • 何本かソフトを調べたところ、既存の Namco で作られたソフトで 108 か 109 を使う場合は address $8000-$9fff で実行することはないので、この不具合を避けているようだ.

この場合に address $c000-$ffff の領域での実行が問題ないというのは、 108 の register address が $8000-$9fff であるというほうが理にかなっているのですが、 web 上で手に入る資料では register address $8000-$ffff と書いてあり謎です。

108 系の IC は名前がわかるものはほかに3種類あるのですが、 IC の型番別に register address の範囲と上記の不具合があるのかを調べた方が良いかと思います。ソフトの数も結構あるので全てのソフトで address $8000-$9fff に PC が入るかも調べるほうがよいと思います。

追記分

108 系は4年間ぐらい使われたソフトなので発売日基準で半年おきぐらいにソフトを眺めてみましたが、やはり PC を $8000-$9fff に置くソフトはありませんでした。ハードウェアとしては初期版の108以降のICでは修正されている気がしますが、ソフトではこの領域に命令を置くのをやめているようです。

確認すべき事項は下記だと思われます。

  • IC の revison 別の register address の適用範囲 ($c000-$ffff への write で register が変わるか)
  • PC $8000-$9fff で実行する MMC3 のソフト(追加されたレジスタへのwriteはすべてしないようにカスタマイズ)を動かしてみる

うーん... じつに面倒だ。