[新連載]復活!TINY BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
すべてはここからはじまりました。
中日電工も。
40年前を振り返りつつ新連載です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第12回]
●最も基本的なサブルーチン(3)
前回の続きです。
今回はRST 4〜RST 6に割り当てられている基本的なサブルーチンについて説明します。
COMP(RST 4)
HLとDEの値を比較します。
8080にはAレジスタと他のレジスタ、定数とを比較する命令はありますが16ビットレジスタであるHLとDEとを比較する命令はありません。
そこでAレジスタを使って先にHとDを、次にLとEを比較します。
HL<DEのときにCフラグが立ちます。
HL=DEのときにZフラグが立ちます。
HL、DEは変化しませんがAレジスタの値は失われます。
IGNBLK(RST 5)
文字列を比較、確認するための前処理として使われます。
DEレジスタには比較を行なう文字列の現在位置のアドレスが入っています。
DEレジスタで示されるメモリアドレスの値をAレジスタに入れて、それがBLANK(スペース、文字コード20)でなければそのままリターンします。
このときAレジスタにはDEレジスタで示されるメモリアドレスの値が入ります。
BLANKのときはDEを+1して次のアドレスの文字をチェックします。
BLANKではない文字コードが出現するまで上の処理が繰り返し続けられます。
FINISH(RST 6)
命令の終わりを確認します。
命令の最後は ;(セミコロン)か0Dコードで終らなければなりません。
FIN(04B3)はそれを確認するサブルーチンです。
FINについては後でまた説明するつもりですが、最後が’;’か0Dのときはそれぞれの処理ルーチンへ行き、そうではないときはそのままリターンします。
FINをCALLしてそれがリターンしてきたときは、最後が’;’でも0Dでもなかったときということですから、WHAT?を表示するルーチンにJMPします。
(FINは[第23回]で説明をしています)
QWHAT(04C6)はWHAT?を表示するプログラムです。
ところで上のリストを確認しているときにおかしな文字コードがあることに気が付きました。
たとえばリストの最後0037にはDB ’G’があります。
DBは1バイトのデータをメモリに置くために使われるアセンブラの擬似命令です。
アセンブラによって0037番地には’G’の文字コード’47’が書き込まれます。
むむむ。
これはなんじゃいな?
何か特別の意味があるのか?
何かのテクニックか?
そう思ってさらにリストをよく見てみましたら、他にも同じようなところがあることに気が付きました。
001FにはDB ’W’が、そして0026にはDB ’AN’があります。
いずれもRST命令のプログラムの間の空きスペースに置かれています。
順に並べてみたところやっと「そういうことだったのか」と気が付きました。
秘密のテクニックではありませんでした。
「W」「AN」「G」
TINY BASICの開発者WANG博士の署名が埋め込まれていたのでした!
次回に続きます。
復活!TINY BASIC[第12回]
2020.5.31upload
前へ
次へ
ホームページトップへ戻る