LIST 23 ============================================================================ ;##### RAM Map ##### org 8000h ; ← RAM領域に変数を定義 led ds 1 ;##### I/O Map ##### pio_a equ 001ch ; ← 内蔵PIOのアドレス定義 ;##### RESET ##### org 0000h ; ← リセットするとここから始まる ld sp,09fffh ; ← スタックポインタをセット di ; ← 割り込みを禁止 jp main ; ← メインに飛ぶ ;##### NMI ##### org 0066h ; ← (NMIは来ないが一応入れておく) retn ;##### Main ##### main: 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 loop: call led_display ; ← ほぼ1秒たたないと帰ってこない jr loop led_display: ld a,(led) xor 11111111b ; ← LEDデータを反転して ld (led),a out (pio_a),a ; ← ポートから出力 call nop_1sec ; ← ここでほぼ1秒、ひたすら待つ ret nop_1sec: call nop_100msec ; [nop_100msec]を10回コールするので、 call nop_100msec ; およそ1secかかる call nop_100msec call nop_100msec ; (正確にはリターン等が余分にかかる) call nop_100msec call nop_100msec call nop_100msec call nop_100msec call nop_100msec call nop_100msec ret nop_100msec: call nop_10msec ; [nop_10msec]を10回コールするので、 call nop_10msec ; およそ100msecかかる call nop_10msec call nop_10msec ; (正確にはリターン等が余分にかかる) call nop_10msec call nop_10msec call nop_10msec call nop_10msec call nop_10msec call nop_10msec ret nop_10msec: call nop_1msec ; [nop_1msec]を10回コールするので、 call nop_1msec ; およそ10msecかかる call nop_1msec call nop_1msec ; (正確にはリターン等が余分にかかる) call nop_1msec call nop_1msec call nop_1msec call nop_1msec call nop_1msec call nop_1msec ret nop_1msec: call nop_100 ; [nop_100]を10回コールするので、 call nop_100 ; およそ1msecかかる call nop_100 call nop_100 ; (正確にはリターン等が余分にかかる) call nop_100 call nop_100 call nop_100 call nop_100 call nop_100 call nop_100 ret nop_100: db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; NOP = 1μsec db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 100発で db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; およそ0.1msec ret end ============================================================================