MC6800 ROMモニタ自作 その20 ~VDGTESTとMC1372復活劇~

MC6800 ROMモニタMC6800 ROMモニタ自作 その20 ~VDGTESTとMC1372復活劇~

前回は、SBC-IOの拡張RAMにワークを逃がして、電大版Tiny BASICを動かす話でした。今回はその続きで、K68-VDGを使って画面に何か出してみよう、という回です。Issue #70のロードマップでも、K68-VDGによるVRAM装備は「スタンドアロン機への第一歩」として置いてあった話で、$A000-$BFFF をK68-VDG VRAM候補として予約していました。

ROMモニタ側の実装そのものは、わりとあっさり終わりました。問題は、そのあとの実機テストでした。

VDGTESTコマンドとprofileを足した

K68-VDGはVDG設定用レジスタが $8110、VRAMが $A000-$BFFF または $C000-$DFFF のどちらかになります。SBC-IOと組み合わせるか、K6802-SBCに直接挿すかで配置が変わるので、profileを2つ用意しました。

  • sbcio_vdg: SBC-IO拡張RAMが $C000-$DFFF、K68-VDG VRAMは $A000-$BFFF
  • k6802_vdg: K6802-SBC + K68-VDG構成。ワークRAMを $A000-$BFFF に置き、K68-VDG VRAMは $C000-$DFFF

これに合わせて VDGTEST というコマンドを追加しました。やることは単純で、$8110 にVDG mode $00 を書いて、VRAMを $60(K68-VDGのフォントで空白)で埋めて、先頭に MC6800 MONITOR K68-VDG という固定文字列を書くだけです。

] MAP
MAP K6802 VDG
RAM 0000-7FFF
USER 0000-7FFF
WORK A000-BFFF
SD A000
MON A200
MIK A300
STK BFFF
VRAM C000-DFFF
VDG 8110
ROM E000-FFFF
] VDGTEST
OK
]

base / sbcio profileでは VDGTEST? を返します。MAP のヘッダも MAP SBCIO VDG / MAP K6802 VDG と書き分けて、RAMTEST の許可範囲もVRAM側を外しました。VDG VRAMはRAMTESTで触らない、というルールです。

K6802-SBCで先に動かしてみる

実機テストはK6802-SBC(64kB RAM載せ替え済)+ K68-VDGから始めました。SBC-IO構成より配線が少なくて、検証が早いはずです。K68-VDGはRCA出力なので、手元の小型HDMI変換器に通してモニタに出します。

ターミナル側でROMモニタにつないで、VDGTEST を叩きます。

そしてモニタを見ると、出ました。MC6800 MONITOR K68-VDG が左上にちゃんと並んでいます。あっさりです。

ここまでは順調でした。順調すぎて、ちょっと油断したかもしれません。

SBC6800+SBC-IO+K68-VDGに組み替える

次は本命の sbcio_vdg profileです。SBC6800にSBC-IOを乗せて、その上にK68-VDGを乗せます。

K68-VDG(REV1.2)はデフォルトでVRAMが $C000-$DFFF 側になっています。SBC-IO構成ではSD/FATワークやスタックを $C000-$DFFF に置きたいので、K68-VDGのVRAMを $A000-$BFFF 側に切り替えます。これはK68-VDG基板裏のソルダジャンパで設定します。

これだけだとSBC-IOのRAMが $A000-$BFFF にもデコードされていて、K68-VDG VRAMと喧嘩します。なのでSBC-IO側でも $A000 領域をディセーブルするソルダジャンパを切り替えます。

これで論理的には、SBC-IOのRAMが $C000-$DFFF、K68-VDGのVRAMが $A000-$BFFF、両者が重ならない構成になります。組み上げた全景がこちら。

なかなか壮観です。さあ、sbcio_vdg profileのROMで起動して、VDGTEST を叩きます。

NO SIGNAL

…画面が出ません。

NO SIGNAL です。HDMI変換側が信号を検出していません。ターミナル側では MAPVDGTEST も期待通りに動いて、OK を返します。VRAMをダンプしても、ちゃんと 4D 43 36 38 30 30 ...MC6800 の文字列が書かれています。ソフトとしては、書くべきところに書けています。

ということは、映像出力側です。念のためK6802-SBC + K68-VDGの構成に戻してみました。さっきは一発で映ったやつです。…映りません。NO SIGNALです。おや。さっき映ったよね?

ここで「あ、これはK68-VDG側のハードだ」と腹をくくりました。SBC-IOへの組み換えの間に、K68-VDG側に何かが起きた、という感じです。

犯人はMC1372だった

K68-VDGの映像出力は、MC6847(VDG本体)とMC1372(NTSCコンポジット変換)のペアで作っています。MC6847は出ていて、MC1372が変な状態だと、NTSC信号として出ません。MC1372のあたりを見ます。

足が薄黒く酸化していました。古いICにはよくある現象です。普段はそれでも動いてしまうのですが、たぶん組み換えで何回か抜き差ししたりしているうちに、接触が悪くなって、ある閾値を超えてダメになったのだと思います。

対処は地味です。MC1372を一度抜いて、ICの足をアルコールで拭いて、ハンダゴテで足にハンダメッキし直して、戻す。これだけで、映りました。

sbcio_vdg profileでも、MC6800 MONITOR K68-VDG がちゃんと出ました。

K6802-SBC側もハンダクラックだった

これで sbcio_vdg 側は復活したのですが、念のためK6802-SBC + K68-VDGにも戻してみました。…まだ少し怪しい。映ったり、映らなかったり。こちらはMC1372周辺の他の部品でした。よく見ると、MC1372周りの何ヶ所かにハンダクラックっぽいものがあったので、再ハンダしました。それで、こちらも安定しました。

まとめ

  • ROMモニタにK68-VDG用のprofile (sbcio_vdg / k6802_vdg) と VDGTEST コマンドを足した
  • K6802-SBC + K68-VDG では一発で表示できた
  • SBC6800 + SBC-IO + K68-VDG に組み替えたら NO SIGNAL になった
  • K6802-SBC構成に戻しても NO SIGNAL になった
  • 原因はMC1372の足の酸化 + 周辺のハンダクラックだった
  • IC足のアルコール清掃 + ハンダメッキ、周辺の再ハンダで両構成とも復活

ソフト側はあっさり、ハード側で半日。前回の「結局イモハンダ」とよく似た展開です。教訓は「古いMC1372は足を見ろ」と「組み換えの前後で映りが変わったら、まずアナログ側」というあたりです。VDGそのものが死ぬよりは、MC1372側のほうがだいたい先にダメになる、という感触も得ました。

次にやること

K68-VDGが両profile(sbcio_vdg / k6802_vdg)で安定して映るようになったので、ここから先は実用方向です。2nd ACIA経由のキーボード入力(Issue #78 / PR #93 で先行PoC済み)、K68-VDGを標準出力に組み込んだ簡易コンソール化、VDG出力 + キーボード入力でスタンドアロン機っぽい構成に寄せる、というあたりを順に進めます。

ただ、その前にもう一度。古いICの足は、ちゃんと見ましょう。今回の教訓です。

MC6800 ROMモニタSBC6800