PC-G850VS / マシン語 5 / IOCS を使ってキー入力を判定する
IOCS:
- 0BE62H は、アキュムレーターにロードされた文字 (または ASCII コードで指定された文字) を (E,D) 座標に表示する。
- 0BE53H は、何かキーが押されたら、あらかじめ割り振ってあるキー番号 (ASCII コードではない) をアキュムレーターにロードする。
- 0BE56H は、アキュムレーターにロードされたキー番号を ASCII コードに変換してアキュムレーターにロードする。
- 0BFEEH は、アキュムレーターにロードされた文字 (または ASCII コードで指定された文字) を (E,D) 座標から B 個表示する。
- IOCS をコールするとレジスタの内容が破壊されるおそれがあるので、IOCS をコールする前に PUSH で待避しておき、コールし終わったら POP で戻す。
数字キーで文字 A を上下左右に動かすプログラム:
1 ORG 100H 2 CALL CLS 3;指定した座標に文字 A を表示する。 4 LD E,0 5 LD D,0 6LOOP: LD A,'A' 7 PUSH DE 8 CALL 0BE62H 9 POP DE 10;wait 処理 11 LD BC,10000 12L1: DEC BC 13 LD A,B 14 OR C 15 JP NZ,L1 16;表示した文字を消す。 17 XOR A 18 PUSH DE 19 CALL 0BE62H 20 POP DE 21;押した数字キーに応じて (E,D) 座標を動かす。 22 PUSH DE 23 CALL 0BE53H 24 CP 51H ;[ON] (BREAK) キー (キー番号 51H) が押されたらプログラムを止める。 25 RET Z ; 〃 26 CALL 0BE56H 27 POP DE 28 CP '4' 29 CALL Z,LEFT 30 CP '6' 31 CALL Z,RIGHT 32 CP '8' 33 CALL Z,UP 34 CP '2' 35 CALL Z,DOWN 36 JP LOOP 37; 38LEFT: DEC E 39 LD A,E 40 CP -1 ;画面の左端から 1 つ左の座標番号。 41 RET NZ 42 INC E ;注目座標が画面の左端からはみ出したら内側に戻す。 43 RET 44; 45RIGHT: INC E 46 LD A,E 47 CP 24 ;24 は横の文字数 (画面の右端から 1 つ右の座標番号)。 48 RET NZ 49 DEC E ;注目座標が画面の右端からはみ出したら内側に戻す。 50 RET 51; 52UP: DEC D 53 LD A,D 54 CP -1 ;画面の上端から 1 つ上の座標番号。 55 RET NZ 56 INC D ;注目座標が画面の上端からはみだ出したら内側に戻す。 57 RET 58; 59DOWN: INC D 60 LD A,D 61 CP 6 ;6 は縦の文字数 (画面の下端から 1 つ下の座標番号)。 62 RET NZ 63 DEC D ;注目座標が画面の下端からはみ出したら内側に戻す。 64 RET 65; 66CLS: XOR A 67 LD B,24*6 68 LD E,0 69 LD D,0 70 CALL 0BFEEH 71 RET
参考:
- ポケコンジャーナル 1994 年 2 月号、pp.71-72
- PC-850VSでZ80アセンブラ(1) Hello, Worldする - Qiita