LIST 22 ============================================================================ ;##### RAM Map ##### org 8000h ; ← RAM領域に変数を定義 buffer ds 2 data ds 2 ;##### 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 ; (本来はここで各種の初期化) ; 制御レジスタの設定は[buffer]へ loop: call port_out_a ; ← SIO[A]からのビット単位拡張出力 call port_out_b ; ← SIO[B]からのビット単位拡張出力 jr loop port_out_a: ld a,(data+0) ; bit0 に出力すべきデータがある rrca ; bit7 に移動 ld b,a ld a,(buffer+0) ; 制御レジスタの下7ビットの内容 and 01111111b ; に or b ; MSBの出力データを添える ld b,a ld a,00000101b ; ← SIO[A]制御レジスタ[5]を選択 out (sio_a+1),a ld a,b out (sio_a+1),a ; ← これで出力(CN2 pin8) ret port_out_b: ld a,(data+1) ; bit0 に出力すべきデータがある rrca ; bit7 に移動 ld b,a ld a,(buffer+1) ; 制御レジスタの下7ビットの内容 and 01111111b ; に or b ; MSBの出力データを添える ld b,a ld a,00000101b ; ← SIO[B]制御レジスタ[5]を選択 out (sio_b+1),a ld a,b out (sio_b+1),a ; ← これで出力(CN2 pin13) ret end ============================================================================