さて、いよいよブルーバックス「マイ・コンピューターを使う」に出ていた電大版TinyBASICを動かしてみたいと思います。
テストプログラムの稼働確認
まずは、そもそも作ったマイコンボードが正しく動くか確認しなければ、というわけでデータパックで提供していただいているHELLOを表示する機械語プログラムや、マイクロBASICなどを動かしてみます。
プログラムのロード方法
SBC6800ボードの機械語モニターMIKBUGを使って機械語プログラムをメモリーへ登録する方法は2種類あります。
コマンド | 操作法など |
---|---|
Mコマンド |
|
Lコマンド |
|
特定のアドレスにパッチを当てる場合はMコマンドで十分ですが、わたしのターミナルの設定かもしれないのですがバックスペース(BS)が効かないため一度間違うとプロンプトに戻ってアドレス入力からし直しとなります。長いプログラムの入力には向きません。
大昔のマイコンでは1ビットづつのトグルスイッチと確定ボタン?で機械語プログラムを入力していたという記事も読んだことがあるので、それから見たら何を贅沢な!という話だとは思いますが…
通常は親機のパソコンでモトローラSフォーマットで流し込みデータを準備しておいて、機械語モニタMIKBUGのLコマンドで一括流し込みというのが現実的です。モトローラSフォーマット参考URLにもあるとおり以下の形式になっています。
S1+長さ(2バイト)+アドレス(4バイト)+実データ+チェックサム // メモリーへのロードデータ S9 // ロード終了
参考 : モトローラSフォーマット
テストプログラム(HELLO.S)のロードと確認
まずデータパックにあるHELLO.Sを流し込んでみます。
適当なテキストエディタでHELLO.SをひらきクリップボードへCOPY。Lコマンドで入力待ちにした状態で内容をペーストで送信されます。
9600bpsフルスピードでもちゃんと取りこぼさないのが素敵です。
プログラムのスタートアドレスは $1F48-1F49 へMコマンドで書き込んでGコマンドで実行できます。
マイクロBASICのロードと確認
データパックにある MICBAS13.S をロードして、HELLO.Sのときと同様にスタートアドレスは $1F48-1F49 へMコマンドで書き込んでGコマンドで実行できます。
マルチステートメントなどは無いようですが、ちゃんと動くBASICがワンボードマイコンで動くと感動的です!
最終目的はブルーバックス巻末の電大版TinyBASICを動かして、可能であれば一緒に掲載されている BASICのSTARTTREKゲームを動かしてみたいので、、次に電大版TinyBASICの導入に向けた準備に入ります。
電大版TinyBASICを動かす
いよいよ電大版TinyBASICを動かしてみたいと思います。まずは、ロードできるようなSフォーマット形式をつくる準備です。
BASICインタープリタ(16進ダンプ)をテキストファイルへ
ブルーバックス「マイ・コンピューターを使う」の巻末には電大版TinyBASICの16進ダンプリストが出ています。移植に関するパッチアドレスなども詳細に出ていますのでSBC6800ポードで動作させることができそうです。
(あとでわかりましたが、他にもストレージパッチする場所が必要でした….)
まずは親機となるパソコン(私の場合はMac)のテキストエディタで以下のようなテキストファイルを作成しました。
4桁のアドレス+16進数をブランクでセパレーションした形式です。
0010 xx xx xx xx xx xx xx xx xx .....
0020 xx xx xx xx xx xx xx xx xx .....
:
ダンプリストは書籍が数十年前のもので劣化しているのに加えて、8(ハチ)と0(ゼロ)とか、B(ビー)とE(イー)とかが判然としない印字となっていてなかなか苦労しました。ダンプリストを入力するなんで数十年ぶりで老眼の私にはきつい作業でした。
またブルーバックス「マイ・コンピューターを使う」の巻末の電大版TinyBASICの16進ダンプリストには、I/O誌やASCII誌のダンプリストのような16バイトごとのチェックサムは付いてませんでした。よって、打鍵間違いは根性で1バイトづつチェックする必要があります。
モトローラSフォーマットへ変換
入力した16進ダンプのテキストファイルをモトローラSフォーマットへ変換すれば、SBC6800の機械語モニタMIKBUGが解釈してくれそうです。
ブランクセパレーションなのでawkで変換できるのでは?! と思って書き始めたのがこちら。酷いスクリプトですがちゃんと動きました。
チェックサムを計算させるところでGNU awkのライブラリ関数でなければダメな部分がありました。素直にRubyあたりで書いたほうがスッキリした気がします。….orz
ストレージパッチ箇所
ブルーバックス「マイ・コンピューターを使う」の巻末の電大版TinyBASICの記事には色々なマイコンに移植する際の「移植用番地表」がついています。本来はソースリストが手に入ればそのあたりも一発で直すことができるのですが、最低限動かすことができそうです。(後日、bit誌のコピーを入手してアセンブルにも挑戦してみました。そちらは別記事で….)
SBC6800はMIKBUG互換版を装備しているため、電大版TinyBASICの前提はクリアしています。その部分のパッチは必要ありません。電大版TinyBASICはMC6810メモリーを前提としている部分($A000からメモリーが装備されている前提)があるためその部分はパッチが必要です。
また、古風平凡さんのページ(MIKBUG プチ拡張 (Old MC6800))に、SBC6800特有の対応としてのパッチ箇所が書かれていました。そちらも参考にさせていだきました。
バッチ箇所
バッチ箇所 | パッチ内容 | パッチ内容 |
---|---|---|
スタックポインタ先頭($A047) x4箇所 | $1F47へ変更します | SBC6800では$A000⇒$1Fxx |
サブルーチンスタックの先頭アドレス($A080) x2箇所 | $1F80へ変更します | SBC6800では$A000⇒$1Fxx |
サブルーチンスタックのボトムアドレス($A04A) | $1F4Aへ変更します | SBC6800では$A000⇒$1Fxx |
PIAの DATAレジスタをアクセスしている部分 | 古風平凡さんのページを参考にさせていただき、PIAアクセス部分をACISアクセスサブルーチンを呼ぶように変更が必要です。 ☆この先の同じですが….参考にさせていただいたパッチ部分と、ブルーバックスのダンプリストアドレスはズレていますので、似たようなパターン部分をみつけて修正する必要があります。 |
[MIKBUG プチ拡張 (Old MC6800)] |
メモリの読み書きテスト部分、フリーメモリ指定 | 古風平凡さんのページを参考に、メモリー読み書きテスト部分をNOP($01)で潰す対応とRAM使用域のエンドアドレス($1EFFへ)変更が必要です。注) 今回はROM化しないのでスタートアドレス変更($0100)は行いません。 | [MIKBUG プチ拡張 (Old MC6800)] |
テレタイプの CR/LF時に必要なパディングキャラクタ($FF)外し | 古風平凡さんのページを参考に”$0D $0A $FFx5個 $00″という並びを見つけて $FFの最初のバイトを $00に変更しました。 ここを変更しなくても動きますが毎行 文字化けしたものが出て画面が汚くなります。 |
[MIKBUG プチ拡張 (Old MC6800)] |
SBC6800へのプログラム流し込みと実行
パッチをあてた16進ダンプテキストファイルから、モトローラSフォーマットを生成し、MIKBUGのLコマンドを使ってSBC6800のメモリーへ登録すれば電大版TinyBASICの起動準備完了です。
$1F48〜49の起動番地設定を Mコマンドで $0100 へ設定し Gコマンドで起動します。「READY」と「#」の入力促進プロンプトが出ればOKです!!
電大版TinyBASICが動きました!! ♬
コメント