ワンポイントテクニック No.020 

KEY 0で自動化


 PC-E500シリーズには説明書に載っていない便利な命令(関数)がいくつかあります。その中の1つがKEY0です。
 KEY1〜KEY10はPFキーに書き込むための命令ですが、KEY0は入力バッファに書き込むための命令です。入力バッファが何か分かりにくいと言う人はKEY0に登録したものはポケコンが人間の代わりに入力してくれると考えれば良いでしょう。

10 KEY 0,"ABC":INPUT A$

これを実行するとABCと表示されてINPUTで入力待ち状態になっていますが、このABCはPRINTで表示されたものと異なり編集可能な状態であることが分かると思います。

 KEY0はどういう場面で使ったらいいのか難しそうなイメージがありますが、実は使いどころが多く便利な命令なのです。というのも、普段のプログラム実行中には使用できない命令を使ったりとかBASICプログラムを自己書き換えをしたりということが可能になるからです。
 フォント書き換えのあとのフォントの自動復帰はKEY0を使用せずにできないことはないですが、終了時自動的に行うというPSS準拠の形で作るならばKEY0を使った方が楽だし、同時キー入力を使用したプログラムを実行時はキー割り込みを無効化しますがもしもエラーが出た際にはBREAKさえ効かずリセットを押す必要があるのに対してKEY0によってキー割り込みを有効になるようにバッファに書き込んでおけば万一の際にもリセットを押す必要性が無くなります。
 プログラム自己書き換えが可能なのでALICEのように全自動でチェックサムをプログラム内に生成することも可能になっています。(KEY0無しではALICEを作るのは不可能)

 プログラム自己書き換えについては少し詳しく書いておきましょう。
 RUNモードとPROGRAMモードの切り替えにはCHR 0+CHR$ 5を使います。
 
10 KEY 0,CHR$ 0+CHR$ 5+"999PRINT"+CHR$ 34+"OCHAME"+CHR$ 34+CHR$ 13+CHR$ 0+CHR$ 5:END

これを実行すればプログラムリストに999 PRINT "OCHAME"というものが書き込まれます。
最初のCHR$ 0+CHR$ 5がPROGRAMモードからRUNモードへ切り替え、"999PRINT"+CHR$ 34+"OCHAME"+CHR$ 34+CHR$ 13が実際に書き込むもので(※リターンキーであるCHR$13を忘れないように!)最後のCHR$ 0+CHR$ 5がRUNモードからPROGRAMモードへの切り替えとなっています。ENDが実行された時点(通常のキー入力が可能になった時点)で入力バッファに書き込まれたものが自動的実行されるのです。

 これを少し応用すれば16進数ダンプデータを自動生成するプログラムも簡単に作れます。

10 INPUT "ADD START=",A$,"ADD END =";B$,"LINE=";L
20 A=VAL ("&"+A$):B=VAL ("&"+B$)
30 Z$=STR$ L+"DATA":FOR I=0TO 7:Z$=Z$+RIGHT$ ("0"+HEX$ PEEK (A+I),2):NEXT
40 KEY 0,CHR$ 0+CHR$ 5+"Z$"+CHR$ 13+CHR$ 0+CHR$ &AF+CHR$ 13+CHR$ 0+CHR$ 5+"G.50"+CHR$ 13:END
50 A=A+8:L=L+10:IFA<B THEN 30ELSE BEEP 1:PRINT "END":END

 生成開始するアドレス(&を付けない16進数で入力)、終了アドレス、生成開始するラインナンバーを入力すれば自動的に生成してくれます。例えばBFC00hBFCFFhのものを1000行から生成したい場合はBFC00BFCFF1000と入力すればOKです。
 自動実行するプログラムを作る場合は最後にGOTO文でどこにジャンプするのかを指定する必要があります。そうしないと1回実行しただけで終了してしまいますからね。


RETURN

inserted by FC2 system