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

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



[第16回]


●入力バッファとTEXTエリア

前回までのところで基本的なサブルーチンについて説明をしました。
これから先はいよいよTINY BASICのメインプログラムの説明をしていくことになりますが、さてどういう順序でどこから説明にかかっていくか、そこのところを決めかねてしばし迷っておりました。
やはりとりあえずは入力したユーザープログラムがどのようにして解読されていくかというあたりを最初に説明するのがよいのでは、というところに落ち着きました。

TINY BASICではキーボードから入力した文字列はまず入力バッファに入れられます。
最後に[Enter]キーを押すと入力の終わりを示す0Dコードが入力文字列の終わりに書き加えられます。
[Enter](0Dコード)の入力が合図となって、入力文字列の確認が行なわれます。
入力文字列の先頭に数字がある場合には、それを行番号とみなしてその数値から始まって最後の0DコードまでがTEXTエリアに入れられます。
先頭が数字ではない場合にはダイレクトコマンドと解釈されてコマンドの解読ルーチンに進みます。

具体的なプログラムの説明に入る前に、まずはその入力バッファとTEXTバッファについての説明が必要でしょう。
TINY BASICはND80Z3.5、ND8080などのZB3BASICの上で動作するように現在移植作業中です。
本当はいきなりTINY BASICが起動すると「昔のまま」ということになってそれはそれでよろしいのでしょうけれど、システムを作り上げるまでの間はいろいろデバッグが必要になってきます。
いきなりTINY BASICが走るシステムではそのデバッグができません。
それはなかなかにつらいことなので、当面のところはZB3BASICの上で動作するように考えています。
下はZB3BASICの起動後にTINY BASICをロードして実行を開始した画面です。



オリジナルのTINY BASICはアドレス0000から始まるプログラムですが、「ND80Z3.5版」TINY BASICはユーザーRAMエリアの先頭アドレス8000から始まります。
8000番地からロードしたあと、JP 8000でTINY BASICにエントリします。
オリジナルのTINY BASICではキー入力を促すマーク(プロンプトマーク)として”>”を表示します。
最初はそのまま実行していたのですが、ZB3BASICもプロンプトマークは”>”なのでTINY BASICが走っているのかZB3BASICなのか混乱してしまいます。
そこで「ND80Z3.5版」TINY BASICでは上の画像のように”)”を表示することにしました。

上の画像は簡単なサンプルプログラム
10 FOR A=0 to 10
20 P.A,
30 N.A
をキーボードから入力したあと、LISTコマンドを入力して確認し、そのあとRUNコマンドを入力してプログラムを実行したものです。
P.はPRINTの、N.はNEXTの、R.はRUNの省略形です。
さて、このとき入力したプログラムはどこにどのような形で格納されているのでしょうか?
そこはぜひとも知りたいところだと思います。

下は雑誌に掲載されたTINY BASICのプログラムリストの最後の部分です。



著者のシステムではROMは0000〜07FFの2KBでRAMは1000〜13FFの1KBです。
そのRAMの先頭の1000〜1016までがシステムのエリアとして使われています。
1017のTXTBGNがユーザープログラムの格納エリア(TEXTエリア)の先頭アドレスです。
1015、1016のTXTUNFに現在のユーザープログラムのエンドアドレスが入っています。
TEXTエリアの終わりは1366(TXTEND)です。
その1366から前に配列@(n)が2バイトずつ割り付けられていきます。

さて。
するとそのTEXTエリアを先頭から見ていけば、ユーザープログラムがどのようにメモリに格納されているのかを確かめることができるはずです。
しかしTINY BASICそのものにはユーザーがメモリを直接参照するような機能はありません。
上にも書きましたようにそういうことをするために、マシンランゲージのようなデバッグ機能が必要になってくるのです。
ND80Z3.5の場合1000〜のエリアはシステムROMエリアなのでRAMとして使うことができません。
そこで「ND80Z3.5版」では上の1000〜のRAMエリアを9000〜に移動しました。
これは当面の仮アドレスです。
そのうちまた移動することになるかも知れません。
そのように移動しましたので、TXTBGNは9017でTXTUNFは9015、9016になります。

メモリの中を見るためには一旦TINY BASICを終了しなければなりません。
オリジナルのTINY BASICはシステムブレイクとして[Ctrl][C]を使っています。
ZB3BASICで[Ctrl][C]を使うとUSB通信を終了してしまいますから使えません。
もっともTINY BASICの場合には[Ctrl][C]を使ってもTINY BASICが終了するわけではありません。
ユーザープログラムの実行を強制終了して最初のスタートポイントに戻るだけです。
「ND80Z3.5版」TINY BASICを終了してZB3BASICに戻る機能として[Ctrl][Z]を使うことにしました。
下の画像は先ほどの画面の最後の ) の表示のところで[Ctrl][Z]を入力してTINY BASICを終了したところです。



そのあとDMコマンドで9000〜のシステムワークエリアを確認しました。
9015、9016のTXTUNFには9034が入っています(2バイトの数やアドレスはこのようにL、Hの順でメモリに格納されることが多いです)。
上で書きましたようにTXTBGNは9017です。
そこであらためてDMコマンドで9010〜903Fのエリアを表示させてみました。
9033に0Dコードがあります。
このことからTXTUNFにはユーザープログラムの最終アドレス+1のアドレスが入っていることがわかります。
上のメモリダンプリストの右側にはメモリの中身をASCIIコードとみなしてその場合の文字が表示されています。
LISTコマンドで表示された通りの文字列が見えます。
ただしよく見ると各行の先頭の行番号の部分だけはASCII文字の数字ではなくて16進数に変換されています。
9017、9018には000A(=10)があります。
次の9027、9028には0014(=20)があります。
そして902E、902Fには001E(=30)があります。
各行の終わりには0Dコードがあります。

今回はマシン語デバッグツールのメモリダンプの機能をちょっと見ていただいただけですけれど、「便利だなあ」ということを実感していただけたのではないかと思います。

時間が無くなってしまいましたので途中ですが今回はここまでといたします。
次回に続きます。

復活!TINY BASIC[第16回]
2020.6.8upload

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