VRAM A10 と VRAM CS#

dumper/programmer においてあまり重要ではない扱いになっている VRAM A10 と VRAM CS# 端子について最近の考察をお伝えします.

カートリッジ自動検出

既存の dumper soft ではカートリッジ自動検出は ROM data の hash (checksum) を算出してやっていますが、この方式は既存でないソフトにめっぽう弱く、個人的に嫌な思い出があるので絶対に私は実装しません. ほかの方法は模索していたのですがようやく思いつきました.

VRAM A10 の制御がレジスタ経由の場合(初期ハードのようなはんだづけ方式は不可)、はこのレジスタを操作すると自動検出ができるかもしれません.

例えば MMC3 の場合は CPU address $A000 (有効ビット A14:13, A0) で制御、 MMC1 の場合は CPU adress $8000 (有効ビット A14:13)で制御してるので反応がある方がハード検出できます. 基板によって接続 address bit だけを変更している VRC (2,4,6,7)もたぶん検出できそうです.
ただ、VRAM A10 をレジスタ制御アドレス基準なので誤動作もたくさんあるので大まかにハード製造メーカーを手動で指定して詳細は自動でということになりそうです.

(MMC3 系統の亜種チップと亜種基板を調べていて、その判別を自動でやろうと思っていたときに通常の MMC1 と MMC3 を判別するほうが簡単なことに気づきました)

アフターバーナー以外で nametable に ROM を割り振る方式

VRAM CS# をレジスタ制御できるのは SUNSOFT-4 と Namco の 163 と MMC5 ぐらいだと思われます. その中でもこの機能を使うソフトは少ないです.

最近マインドシーカーは互換機で動かないということを聞きました. これはタイトル画面で nametable を ROM にしているのが原因だと思われて、伝統的な互換機では VRAM CS# をちゃんと配線してない可能性は十分にあります. (Linuxの上でエミュレータを動かしてるだけのレトロフリークは話は別でちゃんと動くと思います)

いまでもマインドシーカーの苦行を楽しみたいのは個人的には謎ですが、タイトル画面以外はnametable が RAM なので最初だけが問題だとは思います.

特別な入力端子とする

現在設計中の dumper ではエッジコネクタから MCU への programming をしたいです. それを考えたところ 5V 入力が必須の入出力端子は実装が難しいのですが、出力端子はバススイッチを経由させればおそらく安全に MCU への programming 端子につなぐことができそうです.

VRAM CS# と XOR ゲート

現状 MCU とエッジコネクタのバスはシフトレジスタ経由で読んでいるのですが、そこで溢れてしまったのが VRAM A10 と VRAM CS# の2つです. VRAM A10 のほうは74165の DS 端子(べつの74165を連結する場合にいれるためにある) にねじ込んでいるのですが、 VRAM CS# はそれにも溢れて抵抗経由で MCU の GPIO につないでいます.

一応、その2入力をXOR gate を介して、74165.DS につなぐ方法も思いついてはいるのですが、入力の仕様が未知の場合の解析に弱いことと、他につかうレベルシフト兼反転ゲートが4つで空きがないという状態のため採用できていません.

あと2つぐらい入力端子があふれるのであれば IC を追加してシフトレジスタの入力を切り替えるとか74165を追加ということもできるのですが切替端子にGPIOを使ってたりICを増やすのも絶妙な状態でパズルがとけません.

2022年4月9日付補足: 74165のつもりで(74)161と書いていた部分を訂正しました.