LIST 21 ============================================================================ ;##### RAM Map ##### org 8000h ; ← RAM領域に変数を定義 data ds 4 ;##### I/O Map ##### sio_a equ 0018h ; ← 内蔵SIOのアドレス定義 sio_b equ 001ah ;##### RESET ##### org 0000h ; ← リセットするとここから始まる ld sp,09fffh ; ← スタックポインタをセット di ; ← 割り込みを禁止 jp main ; ← メインに飛ぶ ;##### NMI ##### org 0066h ; ← (NMIは来ないが一応入れておく) retn ;##### Main ##### main: ld a,00011000b ; ← SIO[A]チャンネルリセット out (sio_a+1),a ld a,00011000b ; ← SIO[B]チャンネルリセット out (sio_b+1),a ; (本来はここで各種の初期化) loop: call sw_check ; ← スイッチ入力を[data]に格納 jr loop sw_check: xor a ; ← データ領域をゼロクリア ld (data+0),a ld (data+1),a ld (data+2),a ld (data+3),a ld a,00000000b ; ← SIO[A]制御レジスタ[0]を選択 out (sio_a+1),a in a,(sio_a+1) ; ← 制御レジスタの状態を入力 ld b,a ld a,00000000b ; ← SIO[B]制御レジスタ[0]を選択 out (sio_b+1),a in a,(sio_b+1) ; ← 制御レジスタの状態を入力 ld c,a ld a,1 bit 3,b ; DCDA check jr z,_sw_1 ld (data+0),a ; pin 9 の状態が bit 0 に入る _sw_1: bit 5,b ; CTSA check jr z,_sw_2 ld (data+1),a ; pin 10 の状態が bit 0 に入る _sw_2: bit 3,c ; DCDB check jr z,_sw_3 ld (data+2),a ; pin 12 の状態が bit 0 に入る _sw_3: bit 5,c ; CTSB check jr z,_sw_4 ld (data+3),a ; pin 11 の状態が bit 0 に入る _sw_4: ret end ============================================================================