Palo Alto Tiny BASICをZ80-COREに移植してみました。Palo Alto Tiny BASICのソースファイルはいろいろと見つけられるのですが、Z80用となると、思いのほか見つかりにくかったのですが、皆さんはどうですか?

ソースコードとしては、下記のTinyBasic_2.0gを使用しました。

当初TinyBasic_2.0gはほかのサイトで見つけたのですが、G80S_tinyBASIC_2_0gとセットにはなっていませんでした。このサイトのソースコードを比べてみると、SIOを使用したボードには明らかにG80S_tinyBASIC_2_0gの方が適しているのですが、移植を開始する際に見つけることができず、TinyBasic_2.0gをベースに使用しました。結局は、TinyBasic_2.0gをG80S_tinyBASIC_2_0g相当に書き換える作業を行ったことになります。:-(

TinyBasic_2.0gは2.0と書かれているようにPalo Alto Tiny BASICのVERSION 2.0をベースにしています。Palo Alto Tiny BASICのバージョンに関しては以下の記事をご覧ください。

移植作業

Z80-COREへの移植作業では、以下の様な修正を行いました。

  • コード、作業変数、BASICのプログラム格納領域などをZ80-COREに適したものに再配置する。
    • コード領域はアドレスの下位領域に:この領域の上にBASICのプログラムが格納される
    • 作業変数領域はアドレスの上位領域に:この領域の下に配列の領域が確保される
  • Z80-COREのモニタの機能を利用した入出力処理を組み込む。
    • 英文字の入力は、当時の利用環境に合わせ、小文字を入力しても大文字を入力するモニタルーチンを利用。
    • 文字の出力処理には、CRの出力にLFを自動的に付加する文字出力ルーチンを使用する。
  • RST命令による頻出処理のサブルーチンコールを通常のサブルーチンコールに書き換える。
  • 電子的なコンソールでは使うことがないので、文字出力の出力抑止機能を削除する。
  • オリジナルのソースコードでマクロ記述の部分が、生のコードで書かれている部分をマクロ記述に書き戻す。
  • Z80-CORE用の追加機能
    • 計時機能を組み込む。
    • タクトスイッチやLEDの入出力機能を組み込む。

結局のところ、VERSION2.0のコードを利用して、VERSION3.0での変更と同様な変更を行ったようなことになったようです。

異なる使用法を考慮し、コードの配置場所が異なる2つのバージョンを生成できるようにしました。

  • 全メモリがRAMに設定されている状態か、ROMに書き込めるようにしたバージョン
    • コードを1000Hから配置
  • ROMの配置状態でRAM領域に読み込み実行できるバージョン
    • コードを4000Hから配置