2016-07-29 18:51 — asano
今回はMC68kボード (概要編)で紹介したボードに搭載したソフトウェアの話です。
CP/M-68K上で動作させたソフトウェアまで含めるとキリが無いので、ボード上のROMに書き込んだものに限定します。そうするとモニタ、Tiny BASIC、CP/M-68Kの3つになります。
【モニタ】は最初に動かしたもの(ハードウェアのテスト用の無限ループ等を除いて)になります。ベースは「トランジスタ技術」誌の1985年4月号にアセンブラソースが掲載されたものです。その後少しずつ機能を追加して行き、MPUをMC68010に変更したときは対応するための修正をしています。
ただMC68kはバイナリを見ながらデバッグするような代物ではないので、もっぱらハードウェアの確認用に使用することが多かったです。後述のTiny BASICのデバッグ時も机上で行ってROMを書き換えてしまうことが多かったです。
【Tiny BASIC】はGordon Brandly「Tiny BASIC」『DDJ 68000プログラミングツールブック』DDJ編集部編,岩谷宏訳 のものを移植することから始めました。オリジナルの配布ページを発見しましたのでリンクを下に載せておきます。入出力部分が分離されているので移植自体は簡単です。その後、以下のような拡張を行っています。
- 予約語を中間コード化しました。定数のバイナリ化は行わないのでASCIIのままになります。
- IF~THEN~ 構文にELSE節を追加しました。
- READ, DATA構文を追加しました。DATAには通常定数しかかけませんが、私の拡張では式が書け、READ時にその式が評価されます。
- GOTO, GOSUB等の飛び先にラベルが使用できるようにしました。ラベルはTiny BASICの変数の伝統に習い、*A~*Zまでの26個です。これまでの行番号も計算型GOTOを含め使用可能です。
- 文字列変数「$」を導入しました。
他にもあったかもしれませんが、思い出せません。
その後CP/M-68K上で動作するバージョンに移行しました。こちらではCP/MファイルにSAVE, LOADできるようになっています。
ただCP/Mが使えるようになるとCコンパイラも使えるようになるわけで、Tiny BASICの出番も無くなり、拡張は止まってしまいました。せっかく搭載したMC68881を活用して浮動小数点の対応とかファイルへの入出力等も考えてはいたんですけど、幻に終わってしまいました。
【CP/M-68K】の移植は意外と容易でした。BIOSが呼び出されたらパラメータとデータをパソコンに送り、戻ってくるデータを受けるだけですから。パソコン側もCP/M-80が動いているので、そのままBIOS呼び出すだけになります。
あと普通とちょっと違っていたのは起動方法ですね。フロッピーディスクからIPL ⇒ CPMLDR.SYS ⇒ CPM.SYS と順にロードするのではなく、CPM.SYSにあたるものをROMに直接格納しているので一瞬で起動します。
問題はパソコンとの通信方法です。当初はRS-232の4800bps(だったかな)で繋がっていて、1文字入出力だけならともかく、ディスクのRead / Writeのデータもここを通るわけで、遅くてしょうがなかったです。コンパイルに1日かかることもザラでしたね。パラレルで接続できるようになってからは快適になりました。ソフトウェアでハンドシェイクしながらの転送なので、今から考えると遅いのですが、フロッピーのアクセスはもっと遅いので気になりません。
コメントを追加