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

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



[第92回]


●ファイルSAVE/LOAD(2)

前回からの続きです。
TINY BASICのテキストプログラムをSAVE、LOADする方法についてあれこれ検討してみたのですが、結局テキストエリアをそのままバイナリファイルとして保存してしまう、という方法しかありませんでした。
ZB3BASICのマシン語データのSAVE、LOAD機能、/SV、/LDを使うという方法です。
「中日電工版」TINY BASICのテキストエリアは9017〜9F66です。
現在のプログラムエンドのアドレスはTXTUNF(アドレス9015、9016)を見ればわかるのですが、SAVEする前に毎回それを見るのも面倒な話です。
プログラムでそのアドレスを参照してSAVEする範囲を指定することができればいいのですが、とにかく前回書きましたように現在のWindows側のC++プログラム(ZB3.EXE)にはそのようにする機能はついていませんので、マニュアルでSAVEするアドレスを指定するしかありません。
余り面倒なことはしたくありませんから、テキストプログラムだけではなくて、TINY BASICのワークエリアも含めてざっくりと9000〜9FFFまでSAVEしてしまいます。

一旦TINY BASICを終了してZB3BASICに戻ってから
/SV TEST1.TBF,9000,9FFF[Enter]
のように操作します。
SAVEされるファイルはBINファイルなのですが、TINY BASIC専用のデータファイルですから拡張子はTBFのようにするといいのではと思います。
上のアドレスの指定の場合作成されるファイルのサイズは4KBですが、ちょいとした短いプログラムの場合でしたら、たとえば
/SV SMPL1.TBF,9000,92FF[Enter]
などのように終わりのアドレスは適当かつ十分な値にしてもよいと思います。
開始アドレスは必要なのは9015からなのですが、9000を指定するようにしてください(理由は後で説明します)。

SAVEについてはTINY BASICのプログラムに手を加えるところはありません。
しかしLOADについては少し工夫が必要です。
上のようにしてSAVEしたバイナリファイルを(ZB3BASICのモードで)
/LD TEST1.TBF,9000[Enter]
と操作してメモリにLOADすると、RAMはSAVEしたときと同じ内容になるため、TINY BASICを起動すればそのまま以前と同じテキストプログラムを実行したりLIST表示したりすることができるはずなのですが、残念ながらTINY BASICは起動時にテキストプログラムのエンドアドレスを管理しているTXTUNFをクリアしてしまうため、せっかくテキストプログラムを再ロードしても見かけ上はNEWを実行したのと同じ結果になってしまってプログラムがクリアされてしまった状態になってしまいます。
ということは。
/LDコマンドでTBFファイルをロードしたときにはTINY BASICにエントリするときに、通常とは別のエントリアドレスにジャンプするようにして、そのときはTXTUNFをクリアしないようにすればよいことになります。

ということで、TINY BASICのエントリ部分をそのように書き換えて、通常の起動のときには
JP 8000[Enter]
でTINY BASICを起動しますが、/LDでTBFファイルをLOADしたときには、
JP 8060[Enter]
でTINY BASICを起動するようにしました。
下はそのように変更した「中日電工版」TINY BASICでテスト中のログです。

/ld tinybstd.bin,8000
loading TINYBSTD.BIN ...0857(2135)bytes loaded,from 8000 to 8856
>jp 8000

TINYBASIC

OK
)10FOR A=0 TO 10
)20P.A,
)30N.A
).
  10 FOR A=0 TO 10
  20 P.A,
  30 N.A

OK
)R.
     0     1     2     3     4     5     6     7     8     9    10
OK
)END of TINYBASIC
>/sv test2.tbf,9000,9fff
1000(4096)bytes saved
>jp 8000

TINYBASIC

OK
).

OK
)END of TINYBASIC
>/ld test2.tbf,9000
loading TEST2.TBF ...1000(4096)bytes loaded,from 9000 to 9FFF
>jp 8060

TINYBASIC

OK
).
  10 FOR A=0 TO 10
  20 P.A,
  30 N.A

OK
)R.
     0     1     2     3     4     5     6     7     8     9    10
OK
)END of TINYBASIC
>/exit
0000 00C3 - 
リモート接続を終了しました
logfile closed at Sun Sep 13 18:15:37 2020
OK


最初は普通にTINY BASICを起動してサンプルプログラムを入力して実行しました。
そのあと[Ctrl][Z]でZB3BASICに戻りました。
END of TINYBASIC
と表示されているところです。
そのあと
/SV TEST2.TBF,9000,9FFF[Enter]
と入力し、再び
JP 8000[Enter]
でTINY BASICに再エントリしました。
上で書きましたように普通にTINY BASICにエントリするとTXTUNFがクリアされてしまうためLISTコマンド(LISTコマンドは’.’だけでもよい)を入力してもプログラムリストは表示されません。
そこでもう一度TINY BASICを終了してZB3BASICに戻ったあと、
/LD TEST2.BTF,9000[Enter]
と入力しました。
さきほど保存したTEST2.TBFの中身が9000〜9FFFにロードされました。
そのあともう一度TINY BASICにエントリしますが、そのときに
JP 8000[Enter]
と入力してしまうとせっかくロードしたTXTUNFの値が消えてしまいます。
ここは
JP 8060[Enter]
と入力します。
見かけ上は通常と同じようにTINY BASICが起動しますが、そのあとLISTコマンド(’.’)やRUNコマンド(’R.’)を入力したところ、プログラムが正しくリスト表示され、また正常にプログラムが実行されました。

ちょっと面倒なところもありますが、これでTINY BASICにSAVE、LOADの機能が追加できました。
SAVE、LOADについてはまだ続きがあります。
次回に続きます。

復活!TINY BASIC[第92回]
2020.9.16upload

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