2020.9.15
前へ
次へ
ホームページトップへ戻る

[新連載]復活!TINY BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
すべてはここからはじまりました。
中日電工も。
40年前を振り返りつつ新連載です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜



[第91回]


●ファイルSAVE/LOAD

TINY BASICにはユーザープログラムをSAVE/LOADする機能はありません。
ということは毎回プログラムを最初から入力しなければならないということになります。
その昔のTK−80モニタプログラムにはデータSAVE/LOADの機能がありました。
もっともソフトウェアだけでハード回路は自分で作る必要がありましたが。
8255を利用してデータをパラレル−シリアル変換して入出力するようになっていました。
8255の先にパルスを音声信号に変換する回路を組んでそれをカセットテープレコーダのマイク/イヤホン端子に接続するなどという方法でプログラムやデータをカセットテープに記録したものでした。
マシン語プログラムに比べればBASICプログラムをキー入力するのは簡単だとはいうものの、少し長いプログラムになれば、せっかく入力したプログラムを保存しておけないというのはいかにも残念です。

ND80Z3.5はRAMのバックアップ機能がありますから、とりあえず作成したプログラム1本だけならRAMにバックアップしておくことはできるのですが、TINY BASICは起動時にテキストエリアの情報をクリアしてしまうので、バックアップしておいてもそれを使うことができません。
もっとも実際にはテキストエリアそのものをクリアするのではなくて、テキストプログラムのエンドアドレスを管理しているTXTUNFをクリアしているだけなのですが([第89回])。
とはいうものの、TINY BASICを起動するときにTXTUNFをクリアしないようにするなどのプログラム変更は必要になります。
今までの「中日電工版」TINY BASICは基本的にはオリジナル版のTINY BASICのまま、どうしても変更が必要なキー入力部分と表示出力部分のみを、それも必要最低限の機能に限って変更して作成しました。
しかしあれこれ考えてみますと、オリジナルのTINY BASICの仕様から離れて、せめて少しは使い易いように最低限の機能追加をすべきでありましょう。

ということで、今回のテーマのファイルSAVE/LOADなのですが、これが言うほど簡単なことではないのです。
ZB3BASICにはユーザープログラムのSAVE/LOAD用に/SAVEコマンドと/LOADコマンドがあります。
そいつを使えばいいじゃないか、と思われるかも知れませんが、残念ながら使えません。
ZB3BASICはファイルとして保存するときにはTXTファイルとして保存しますが、それをRAMにLOADするときには内部コードに変換します。
内部コードではなくて文字コードのままRAMに書き込む形のTINY BASICにはZB3BASICの/SAVE、/LOADは使うことができません。
参考までにZB3BASICでBASICプログラムがメモリに収められている様子を下に示します。



ZB3BASICのユーザープログラムエリアの開始アドレスは801Cです。
801Cと801Dには0A 00があって、それが行番号10であることを示しています。
行番号20はというと、アドレス802D、802Eの14 00が行番号20を示しています。
行番号30はアドレス8037、8038の1E 00が行番号30を示しています。
しかしTINY BASICに共通しているのはその行番号部分だけで、そのほかのどこにもFORもTOもPRINTもNEXTもありません。
そもそも最初の入力時にはp.、n.と入力したのにLIST表示のときにはちゃんとPRINT、NEXTと表示されています。
ZB3BASICではプログラムを入力するときにASCII文字からその命令の内部コードに変換してメモリエリアに格納し、それをLIST表示したりSAVEするときには内部コードからもとのASCII文字列に変換しています。
ちなみにFORの内部コードは84、PRINTは81、NEXTは85とそれぞれ1バイトのコードに変換されています。
また変数名や数値も内部処理用の値に変換されています。
こうすることで実行時の速度アップをはかっています。

余談になってしまいました。
そういうことなのでZB3BASICの/SAVE、/LOADを使うことはできません。
それならばTINY BASICのコマンドとしてSAVE、LOADを作ったらどうなのか、ということなのですが、それもちょっとむつかしいのです。
「中日電工版」TINY BASICはZB3BASICの機能を一部利用する形で動いています。
SAVE、LOADということになれば当然USBを経由してWindowsマシンのハードディスクにファイルを作成することになります。
実はZB3BASICでのファイル作成機能はほとんどWindowsマシン側のC++プログラムが担っています。
既存のZB3BASICの/SAVE、/LOAD機能が利用できないので、別にTINY BASIC用のSAVE、LOAD機能を作るということになると、Windows側のC++プログラム(ZB3.EXE)に手を加えるということになります。
それはしたくありません。
TINY BASICと同じようにZB3BASICの機能を利用して動作するZB3DOS(CP/M互換DOS)の場合にはC++プログラムをCP/M用に変更したプログラムを用意しました。
それはZB3DOS(CP/M互換DOS)にはそうするだけの価値があるからです。
TINY BASICには価値がないとまではいいませんが、そのためにWindows側のC++プログラムに手を加えるというのは、ちょっとなんだかなあという感じになってしまいます。
スタンダートのZB3BASICシステムのままで、なんとかTINY BASICにSAVE、LOADの機能を持たせることはできないだろうか。
あれこれ考えてちょいと悩みましたが、やっぱり間に合わせ的な解決法しかありませんでした。
まあ、とにかくなんとかSAVE、LOADできればいいではないか、という辺りの機能に落ち着きました。

今回は余計なことを書いたりしたこともあって時間がなくなってしまいました。
具体的な機能については次回に書くことにいたします。

復活!TINY BASIC[第91回]
2020.9.15upload

前へ
次へ
ホームページトップへ戻る