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

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



[第100回]


●スクリーンエディタ版ソースファイルとバイナリファイル(2)

スクリーンエディタ版は[第97回]でダウンロード用にリンクをつけて最初の部分の説明を少しだけしたのですが、その後に「スクリーンエディタなし版」の最終版を作成したことで、「スクリーンエディタ版」も関連する部分を一部手直ししました。
「スクリーンエディタなし版」と比較して説明をするつもりですので、プログラム内の位置がずれているだけとか、ラベル表記が異なっているだけとかといったところを手直しして同じにできるところを補正しました。
そういうことですので[第97回]のプログラム(tinybs3d.bin)と動作は同じです。
ですからそのまま使っていただいても問題はありません。
ただ以下の説明では手直し後のソースプログラムを使いますから、必要と思われる方は以下のリンクからダウンロードをしてください。
[2020.10.2注記]
下記のプログラム(tinybs3e)にバグがみつかりました。
詳しくは[第102回]を参照願います。
[注記ここまで]

エンドコードの問題を回避するためとウイルスチェッカーにダウンロードを拒否されないために拡張子を変更してあります。
ダウンロード後に
tx2→txt
bbb→bin
に変更してお使いください。
詳しくは[第87回]および[第41回][第42回]をご参照ください。
またダウンロード後のアセンブル作業や、ZB3BASICにロードして実行する手順などについては[第33回]を参照願います。

1)「中日電工版」TINY BASIC(スクリーンエディタ版)の最終版ソースプログラムです。
拡張子を本来のtxtからtx2に変えてあります。
ダウンロード後に拡張子をtxtに変更してください。
テキストファイルですからメモ帳、TeraPadなどのテキストエディタで開けます。
ND80Z3.5などに附属の8080アセンブラASM80.comにかけてバイナリファイルを作ります。

tinybs3e.tx2

2)tinybs3e.txtをASM80.comにかけて作成したバイナリファイルです。
拡張子を本来のbinからbbbに変えてあります。
ダウンロード後に拡張子をbinに変更してください。

tinybs3e.bbb

プログラムの説明です。
スクリーンエディタなし版(tinybs2e.txt)とスクリーンエディタ版(tinybs3e.txt)をWinMergeで比較して異なっている部分について説明します。

プログラムの最初の部分です。

ここは前回の説明とほぼ同じです。
前回書きましたように「スクリーンエディタなし版」(tinybs2e.txt)では入力バッファのサイズは64字ですが今回の「スクリーンエディタ版」(tinybs3e.txt)ではZB3BASICのスクリーンエディタに合わせて80字にしました。
もう一箇所異なっているところがあります。
上図の一番下のところで「スクリーンエディタ版」(tinybs3e.txt)ではJMP BREAKを追加しています。
これについては下のほうで説明します。

次の変更部分です。
ここはINPUT命令の入力部分です。

スクリーンエディタはカーソルを画面の上下方向にも移動できます。
しかしINPUT命令の入力のときにそのように操作することは入力エラーの原因になります。
INPUT命令の入力時には基本的にはスクリーンエディタ機能を使わずその行のなかだけでBSやInsertを使って入力文字を訂正する程度のことに限定した使い方をすべきです。
しかしシステムプログラムの仕様なのでINPUT命令での入力時にもスクリーンエディタが働いてしまいます。
スクリーンエディタは[Enter]の入力によってそのときのカーソルがある行の1行分の文字がデータとして入力されます。
無用なトラブルを避けるためINPUT文の入力では入力文字の中に’:’(コード3A)があることを確認して、そこから右側にある文字を入力データとします。
コード3Aが無いときはWHAT?を表示します。

GETLNはプログラム行入力またはINPUT文での入力のためのサブルーチンです。


MVI A,01
CALL SOUT
はスクリーンエディタでの入力をシステムに要求するための命令です。
そのあとの
CALL SIN
で最後のCRコード(0D)までの80文字が1文字ずつ読み込まれます。
[Ctrl]+[B]が入力されるとZフラグが立ってそこで入力は打ち切られます。
スクリーンエディタの場合[Ctrl]+[B]を入力しても’^B’は表示されません。
なお全部読み終わったあと1回だけ
CALL SIN
をダミー実行します。

下はCHKIOの変更部分です。

CHKIOはスクリーンエディタ版では上で説明したスクリーンエディタ入力に置き換えたため不要になりました。

スクリーンエディタ版はコマンドテーブルに”ZB3”が追加されています。
スクリーンエディタなし版ではZB3BASICに戻るために[Ctrl]+[Z]を使います。
しかしスクリーンエディタ入力では[Ctrl]+[Z]は使えません。
その代わりとしてZB3[Enter]を使います。
コマンド”ZB3”を入力したときのジャンプ先は805Dです。
今回の最初のところで「後で説明します」と書いた”JMP BREAK”があるアドレスがそのジャンプ先です。
下はTINYBS3Eのアセンブルリストのその部分です。
アドレス805DにJMP BREAKがあります。
そのジャンプ先の”BREAK”は上の画面の下の方にあるBREAK:です。

804B C3F083    JMP XP12;"#"
804E C3F683     JMP XP13;">"
8051 C30584     JMP XP15;"="
8054 C3FD83     JMP XP14;"<="
8057 C30B84     JMP XP16;"<"
805A C31184     JMP XP17
              ;
805D C34787     JMP BREAK
8060 3100A0   START2:LXI SP,STACK


一番下のところにも左右が不一致ということで表示されている部分があります。

ここは今回の説明を書いていてはじめて気が付きました。
ソースプログラムを修正する過程で;ENDの下に余分な改行が残ってしまったようです。

このままでも支障はありません。
このためだけにソースプログラムを直してリンクも付け直すというのはいかにも無駄作業ですので、この次にプログラムの変更が必要になったときにでもついでに削除することにします。

復活!TINY BASIC[第100回]
2020.9.28upload

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