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

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



[第11回]


●最も基本的なサブルーチン(2)

前回はTINY BASICのエントリ部分の概略について説明しただけで終ってしまいました。
今回は「最も基本的なサブルーチン」の具体的な内容についての説明をします。
TINY BASICの先頭部分には最も基本的なサブルーチンが置かれていて、それは1バイトCALL命令RST 0〜RST 7とそのほかに通常のCALL命令でCALLされる2つのサブルーチンが含まれている、ということを前回書きました。
前回はその部分全部を一括して表示したためにページの下の方にまとめて表示される結果となってしまい、その説明と画像が離れてしまいました。
今回はもう少し短い部分ごとに分割して表示しながら説明を加えていくことにします。



START(RST 0)
TINY BASICはアドレス0000からスタートします。
さいしょにSP(スタックポインタ)に1400をセットしたあとAレジスタにFFを入れて0642のイニシャライズルーチンにジャンプします。
INITについては後で見ていくことにします。
オリジナルのTINYBASICシステムではRAMは1000〜13FFのわずか1KBです。
オリジナルのTINYBASICシステムではスタックはそのRAMの一番後ろから前に消費していくように設定しています。
ですからSPの初期値は1400になります。
ここでAレジスタにFFをセットしていますが、これはINITルーチンでOCSWに入れる値です。
OCSWは文字を出力装置(プリンタ、ディスプレイなど)に出力する(OCSW≠0)か出力しない(OCSW=0)かを決めるスイッチとして使われています。
ND80Z3.5版では不要なのでこの部分は削除するつもりです。

TSTC(RST 1)
文字比較(TEST CHARACTER)ルーチンのエントリ部分です。
この部分だけ見ても何をやっているのかさっぱりわかりません。
入力バッファの現在の文字位置(DEレジスタ)の文字と特定の文字(たとえば ’,’(カンマ))とを比較するルーチンです。
じつに巧妙なテクニックが使われています。
それについてものちほど説明をするつもりです。
XTHLはスタックトップとHLレジスタを交換する命令です。
スタックトップには比較する文字が置かれたアドレスが入っています。
そのアドレスがHLレジスタに入ります。
RST 5はあとで出てきますがDEレジスタで示すアドレス(通常は入力バッファ)の文字をAレジスタに入れてリターンするルーチンです(その文字がブランク(スペース)の場合には次の文字が入れられる)。
そのAレジスタの文字とM(HLで示すメモリアドレスの中身)とを比較します。
比較の結果C、ZなどのフラグがON/OFFされます。
このあと0068(TC1)にジャンプします。

CRLF
RST 2の前のアドレス000Eに置かれた普通のCALL命令でCALLされるルーチンです。
Aレジスタに改行コード0Dを入れたあとすぐにOUT Cルーチンが実行されますから、結果として改行コード(0D)が出力装置に送られることになります。

OUT C(RST 2)
Aレジスタに入っている文字コードを出力装置に送ります。
OUT CはOUT CHARACTER(1文字出力)の意味で使われています。
最初にOCSWの値をチェックしたあとOC2(OUT C処理ルーチンの本体)にジャンプしています。
OCSWは上で説明しました。
ND80Z3.5版では使わないのでここは削除するつもりです。

EXPR(RST 3)
EXPRESSIONS(式計算)のエントリ部分です。
主にLET文で示された式を計算するときにCALLされますがそのほかPRINT文の中などでも使われます。。
ここは数式の計算規則(+−*/の順序など)に従った処理を行なう実に巧妙なプログラムの入口です。
本体部分についてはあとで説明をする予定です。
最初にEXPR2をCALLしています。
EXPR2は式計算サブルーチンです。
計算の結果がHLに入ります。
最初の計算の結果をスタックに保存してEXPR1(式計算の続き)にジャンプします。
式計算プログラムは複雑なつくりになっています。
EXPR1を説明する部分で詳しく説明するつもりです。
(EXPR1は[第68回]で説明をしています)

次回に続きます。

復活!TINY BASIC[第11回]
2020.5.30upload

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