LIST 24 ============================================================================ ;##### RAM Map ##### org 8000h ; ← RAM領域に変数を定義 led ds 1 timer ds 1 ;##### I/O Map ##### ctc_0 equ 0010h ; ← タイマのアドレス定義 pio_a equ 001ch ; ← 内蔵PIOのアドレス定義 ;##### RESET ##### org 0000h ; ← リセットするとここから始まる ld sp,09fffh ; ← スタックポインタをセット di ; ← 割り込みを禁止 jp main ; ← メインに飛ぶ ;##### NMI ##### org 0066h ; ← (NMIは来ないが一応入れておく) retn ;##### TIMER ##### org 0070h dw _timer_ ; ← タイマ割り込み処理 _timer_: ex af,af' ; ← レジスタを待避 ld a,(timer) inc a ld (timer),a cp 100 ; 10msec * 100 = 1sec jr c,_timer_pass xor a ld (timer),a ld a,(led) xor 11111111b ; ← LEDデータを反転して ld (led),a out (pio_a),a ; ← ポートから出力 _timer_pass: ex af,af' ; ← レジスタを復旧 ei ; ← 次の割り込みを許可 reti ;##### Main ##### main: ld a,70h ; ← 割り込みアドレスの設定 out (ctc_0),a ld a,10100101b ; Timer Mode out (ctc_0),a ld a,157 ; about 10msec out (ctc_0),a ld a,0cfh ; Mode 3 out (pio_a+1),a ld a,00000000b ; 0:Out / 1:In out (pio_a+1),a xor a ld (led),a ld (timer),a im 2 ; 内部I/O割り込みモード ei ; 割り込み許可 loop: jr loop ; ← メインルーチンは何もない!! end ============================================================================