SUNSOFT-4 の再調査
21, 26pin についてご指摘をいただいたので再調査したら間違ってた。
1 i CPU PHI2 |40 s +5V 2 i CPU ROMCS# |39 i CPU R/W 3 i CPU A14 |38 i CPU D6 4 i CPU A13 |37 i CPU D5 5 i CPU A12 |36 i CPU D4 6 i PPU A13# |35 i CPU D3 7 i PPU A12 |34 i CPU D2 8 i PPU A11 |33 i CPU D1 9 i PPU A10 |32 i CPU D0 10 s GND |31 i OR A (PPU RD#) 11 o Program ROM EN# |30 i OR B (Charcter ROM CE#) 12 o Charcter ROM A17 |29 o OR Y (Charcter ROM EN#) 13 o Charcter ROM A16 |28 o VRAM CS# 14 o Charcter ROM A15 |27 o Charcter ROM CE# 15 o Charcter ROM A14 |26 o ? (Work RAM CS1#) 16 o Charcter ROM A13 |25 o Program ROM A14 17 o Charcter ROM A12 |24 o Program ROM A15 18 o Charcter ROM A11 |23 o Program ROM A16 19 o CHR/nametable A10|22 o Program ROM A17 20 s GND |21 o ? (Work RAM CS2) 19 pin: Charcter ROM A10, edge connector VRAM A10 に接続 21 pin: 正論理, おそらく制御レジスタも関係する 26 pin: 負論理, おそらく $6000-$7fff で有効になる edge connector の CPU IRQ#, PPU A13, PPU WR# は基板内部に未接続 SUNSOFT-4 には CPU D7 は未接続
メイン基板の ROM も外して確認完了。
1 x NC/ +5V |32 s Vcc/ +5V 2 i CE/ Program ROM A17 |31 ? NC?/ +5V |24 i A16/ Program ROM A16 |22 i OE#/ Program ROM EN# 2pin: 正論理
Subcartridge の 3pin, 4pin が下記のようになることが判明。
- 3pin: 制御レジスタがあれば、$6000-$7fff への write strobe
- 4pin: bank active for page #0 to 7
ここまで情報が揃うと、 Workram enable register がありそうで、それが無効の場合は SUNSOFT-6 への書き込みが有効になる。
SUNSOFT-6
最後に起動しない部分の逆アセンブルをしたら、読めてきた。
- sta $6000 は SUNSOFT-6 へ書き込む。SUNSOFT-6 はデータバスがつながっていないので、A を初期化していないことがわかる。
- このサブルーチンの戻り値は A で、 0,1,$ff となっているので、 $ff を返す部分で $01 を無理矢理返したら挙動が変わった。
- "SUNSOFT" のフッタスキャンはどうやら1度目で失敗するとカートリッジなし、フッタが見つかると何度か読み直して途中で失敗すると正常とみなし、常に成功すると「でーたかせっとがまちがっています」とエラーを出す。
- SUNSOFT-6 はプロテクトの IC ということが判明。
- $6000 を write すると ROM が読み出し可能になるが、一定時間経過後に読めなくなる。
- 変なループや、冗長的な "SUNSOFT" の読み出しはどうもこれが原因らしい。
エミュレーションのソースを書くにはめんどいので、元のプログラム($c004 から) を書き換え、サブカートリッジ付きでのエミュレーションに成功。
90年版の大洋もどきが定位置の最下位から3位になっている異常状態が楽しめたり、下の2チームのマークが変わっている。
あとは WORKRAM 制御レジスタを見つければ終わり。