MC6800 ROMモニタ自作 その19 ~イモハンダと電大版Tiny BASIC~

前回は、SBC-IO向けにメモリマップを整理しよう、という話をしました。SBC-IOには拡張RAMがあります。ROMモニタのワークやSD/FATのbufferを低いアドレスのRAMから逃がせば、BASICやユーザープログラムが使える領域が広くなります。
今回やりたかったのは、その流れで電大版Tiny BASICを動かすことです。
※電大版Tiny BASICのソースは、bit誌にフルソースが掲載されていたものですが、現在それを自分のGitHubへ再配布してよいかは判断が難しいところです。今回はソース全文や派生ソースをGitHubには上げないことにしました。
まずRAMTESTが安定しない
最初は、SBC-IOにメモリーを載せて、sbcio buildのROMで RAMTEST しました。
] RAMTEST C000-DFFF
RAMTEST C000-DFFF
NG CD15
うーむ、いきなりだめです。範囲を細かくしていくと、CD00 付近や DD00 付近で失敗したり、同じ範囲でも失敗アドレスが揺れたりしました。固定のアドレスデコード不良というより、バスが不安定な感じです。
LEDチカチカ用ICを外すと安定した

SBC-IOには、LEDチカチカ確認用に74LS173を載せていました。アドレスは $8000 側でデコードしているので、普通に考えるとRAMには悪さしないはずです。でも、外してみるとだいぶ安定しました。
最終的には、SBC6800の裏面にはんだ付けしていたSBC6800アダプターのA0-A16やD0-D8あたりに、イモハンダがいくつもあることに気づきました。そこを付け直したら、ようやく安定しました。
] RAMTEST 0100-7FFF
RAMTEST 0100-7FFF
OK
] RAMTEST C000-DFFF
RAMTEST C000-DFFF
OK
sbcio profileでワークを逃がす
ハードが安定したところで、次は本来の目的の作業です。電大版Tiny BASICは低いアドレスのRAMの上部を使います。そこで、ワークエリアが競合する MC6800 ROMモニタ側のワークを低いアドレスのRAMから逃がすソース修正を実施しました。$Cxxxxあたりへの移動であります。MAPコマンドで確認できます。
] MAP
MAP SBCIO
RAM 0000-7FFF
USER 0000-7FFF
WORK C000-DFFF
SD C000
MON C200
MIK C300
STK DFFF
ROM E000-FFFF

BASICが無応答になる
ここまで来て、電大版Tiny BASICをLOADして動かしてみました。でも、無応答でした。最初は、まだワークエリアがぶつかっているのかと思いました。ところが、調べてみると別の問題でした。
このBASICは元々、シリアルI/Oに使っているPIAが $8004 にいる前提で、実行中のBREAK確認をしています。一方、今のSBC-IO + ROMモニタでは、コンソールはMC6850 ACIAで、statusは $8018 です。ここはBASIC側をSBC-IO向けに見る必要がありました。
SBC6800版をベースにする
最初は手元のソースでACIAのステータスチェック対応だけを入れて試しました。すると、READY は出ましたが、LIST コマンドでエラーというか暴走して画面が崩れました。
これはBASICのコマンドテーブル側の違いでした。過去にSBC6800用に対応したバージョンのソースでは、コマンド文字列の終端表現なども修正していましたので、元のソースへパッチを足すより、SBC6800版をベースにしたほうがよさそうと判断しました。
コンソールI/OはACIA前提、スタックはSBC-IOの拡張RAMに合わせて $A047 / $A080 側、メモリ終端は起動時のメモリテストで決める、という方針にしました。
そして動いた
] LF D-BASIC2.HEX
OK
] G0100
READY
#10 FOR I=1 TO 5
#20 PRINT "HELLO DENDAI BASIC"
#30 NEXT I
#LIST
10 FOR I=1 TO 5
20 PRINT "HELLO DENDAI BASIC"
30 NEXT I
READY
#RUN
HELLO DENDAI BASIC
HELLO DENDAI BASIC
HELLO DENDAI BASIC
HELLO DENDAI BASIC
HELLO DENDAI BASIC
READY
#

今回のオチ
ようやく電大版BASICがSBC-IOのRAMで動きました。
最初はRAMTESTが不安定で、Dコマンドも怪しくて、BASICどころではありませんでした。そこからイモハンダを直して、sbcio profileでワーク$C000以降のアドレスへ逃がして、BASIC側のPIA前提をACIA前提へ直して、ようやく HELLO DENDAI BASIC まで来ました。
今回のBASICのソースは、以下のソースと bit誌のソースリストを参考にしました。
- Issue #76: https://github.com/kuninet/mc6800-rom-monitor/issues/76
- PR #91: https://github.com/kuninet/mc6800-rom-monitor/pull/91
次にやること
電大版Tiny BASICが動いたので、SBC-IO拡張RAMを使った実験がかなりやりやすくなりました。次は、K68-VDGで画面を出したり、2nd ACIAでキーボードをつないだり、少しずつスタンドアロン機っぽい方向へ進めたいです。
ただ、その前に、はんだ付けはちゃんと見ようと思います。今回の教訓ですw