ROM dumper からの ROM 以外へのアクセス

半年前から集中力が続かずあきらめ気味になっていたのですが、わりと新しい MCUファミコンカセットをつなぐ機器の第1回試作が終わりました. 第5回ぐらいまで試作はある予定なので完成する自信が全くありません. ですので期待しないでください.

今回はPCとMCUは仮想シリアルポートの形をとり teraterm などで簡単なコマンドプロンプトから ROM, RAM, 内部レジスタがみれるようにしています. (専用ソフトは今後作る予定です)

ASIC 内蔵の SRAM

今の所わかったのは旧設計の kazzo でもできていたカセット上の ROM や RAM (例外あり)に関しては新設計でも問題なく読み書きができています. それとは対照的に Namco 163 の内蔵SRAM(兼音源パラメータ)や MMC5 の Exteded RAM (CPU address $5c00-$5fff) はアクセスできていないのもかわりません.

163 のほうは電源投入直後は address regsiter と auto increment が動作しているようなのですがそれが停まってしまうようで RAM として使えていません. ですのでマインドシーカーのセーブデータ書き換えもできません.

MMC5 のほうは宇宙警備隊と同じレジスタをいじってるつもりですがまったく動いている様子がありません.

今回メモリアクセスの波形だけはそこそこマシにしているので以前から波形の再現精度が悪いので動かないと予想していたのですが別の理由のようです. 他のレジスタも全部キレイに初期化となると簡易コマンドではやってられません.

IRQ counter

163 のφ2カウンタはちゃんと動きました. ただこれはロジックアナライザで波形をみればどのタイミングで IRQ の線が L レベルになるのかがわかるのですが、 MCU で検出してタイミングをユーザーに使える方法が思いつきません.

MMC3 の PPU A12 カウンタはまったく動きません. 偶然に1度Lになって IRQ 禁止レジスタで H にしたのを計測できただけです. MMC3 の場合は CPU と PPU のバスを並列にみて動かしてるので、CPU と PPU のバスをつなげてしまっている設計では難しいのかもしれません.

MMC3 の IRQ のためのカウンタの仕組みは nesdev wiki やそこに貼ってあるリンクでゲートレベルでわかるのですが、それをおっかけてもちゃんと動かないのであれば、やはり ROM dumper としては無理なのか... と諦め気味です.

音源 (未着手)

音源はMHz単位のクロックを停めることなく供給し続けてそれを分周して可聴域の信号をつくるわけですから、リクエストが来るまでφ2が停まってる ROM dumper としてはこれも要求される性能が全然足りないと認識しています.

VRC7 なんかはφ2ではなく Xtal で供給しているのですが、音楽としてのリアルタイム性をもった仕組みを作るのは私の知識では大変です.

すいません

2日ぐらい前は USB や ROM アクセスが早く動くのでとても楽しかったのですがそれ以上は高いレベルを要求しすぎたのかちょっと残念になってしまいました. でも後日は気分を切り替えて楽しい紹介をしたいと思います.