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

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



[第82回]


●ERROR処理(2)

前回からの続きです。



前回はダイレクトモードとINPUT文での入力エラーの処理について説明をしました。
今回はそれ以外の普通の命令行でのエラー処理について説明します。
アドレス04E3から下のプログラムです。
04E3 CALL PRTLN
で行番号を含むテキスト行を表示します。
PRTLNは[第49回]で説明しました。
この場合テキスト行全体が表示されるのではなくて、エラーが発生した位置までが表示されます。
アドレス04D1、04D2でエラー発生位置に0を書き込んでいます。
PRTLNでは
05E0 SUB A
でAレジスタを0にした上でCALL PRTSTGを実行します([第49回]参照)。
PRTSTGは0DコードかAレジスタと同じコードがみつかるところまで文字表示を行ないます。
そのためエラーが発生したところまでが表示されます。
04E6 DCX D
04E7 POP PSW
04E8 STAX D
でスタックに保存しておいたエラー発生位置の文字コードをもとに戻します。

04E9 MVI A,3FH
04EB RST 2
で”?”を表示します。
3Fは?の文字コードです。
RST 2は[第11回]で説明しました。
Aレジスタに入れた文字コードに対応する文字を表示します。

04EC SUB A
04ED CALL PRTSTG
でエラーが発生したテキスト行位置から後ろの残りの文字列を表示します。
そのあと
04F0 JMP RSTART
でRSTART:にジャンプします。
RSTARTは[第27回]で説明しました。

復活!TINY BASIC[第82回]
2020.9.6upload

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