LIST 3 ============================================================================ アセンブル結果ファイル[TEST.LST]の内容 ;##### RAM Map ##### 8000 org 8000h 8000 disp ds 1 8001 sw ds 1 8002 timer ds 2 8004 counter ds 1 ;##### I/O Map ##### 001C pio_a equ 001ch 001E pio_b equ 001eh ;##### RESET ##### 0000 org 0000h 0000 31 FF 9F ld sp,09fffh 0003 F3 di 0004 C3 68 00 jp main ;##### INT / NMI ##### 0066 org 0066h 0066 ED 45 retn ;##### Main ##### 0068 main: 0068 3E CF ld a,0cfh ; Mode 3 006A D3 1D out (pio_a+1),a 006C 3E 00 ld a,00000000b ; 0:Out / 1:In 006E D3 1D out (pio_a+1),a 0070 3E CF ld a,0cfh ; Mode 3 0072 D3 1F out (pio_b+1),a 0074 3E E0 ld a,11100000b ; 0:Out / 1:In 0076 D3 1F out (pio_b+1),a 0078 3E FF ld a,11111111b 007A D3 1E out (pio_b+0),a 007C 3E F8 ld a,11111000b 007E D3 1E out (pio_b+0),a 0080 3E FF ld a,11111111b 0082 D3 1E out (pio_b+0),a 0084 AF xor a 0085 32 04 80 ld (counter),a 0088 loop: 0088 CD 97 00 call wait_long 008B 3A 04 80 ld a,(counter) 008E 3C inc a 008F 32 04 80 ld (counter),a 0092 CD 32 01 call led_display 0095 18 F1 jr loop ;##### Subroutines ##### 0097 wait_long: 0097 3E 32 ld a,50 0099 32 02 80 ld (timer+0),a 009C _w_loop_1: 009C CD CF 00 call sw_scan 009F 3A 01 80 ld a,(sw) 00A2 FE 00 cp 0 00A4 28 04 jr z,_pass 00A6 AF xor a 00A7 32 04 80 ld (counter),a 00AA _pass: 00AA CD B9 00 call wait_short 00AD 3A 02 80 ld a,(timer+0) 00B0 3D dec a 00B1 32 02 80 ld (timer+0),a 00B4 FE 00 cp 0 00B6 20 E4 jr nz,_w_loop_1 00B8 C9 ret 00B9 wait_short: 00B9 3E 0A ld a,10 00BB 32 03 80 ld (timer+1),a 00BE _w_loop_2: 00BE 00 nop 00BF 00 nop 00C0 00 nop 00C1 00 nop 00C2 00 nop 00C3 3A 03 80 ld a,(timer+1) 00C6 3D dec a 00C7 32 03 80 ld (timer+1),a 00CA FE 00 cp 0 00CC 20 F0 jr nz,_w_loop_2 00CE C9 ret 00CF sw_scan: 00CF DB 1E in a,(pio_b) 00D1 E6 E0 and 11100000b 00D3 CB 3F srl a 00D5 CB 3F srl a 00D7 CB 3F srl a 00D9 CB 3F srl a 00DB CB 3F srl a 00DD EE FF xor 11111111b 00DF E6 07 and 00000111b 00E1 32 01 80 ld (sw),a 00E4 C9 ret 00E5 led_disp_0: 00E5 3A 00 80 ld a,(disp) 00E8 4F ld c,a 00E9 06 00 ld b,0 00EB 21 27 01 ld hl,table_0 00EE 09 add hl,bc 00EF 7E ld a,(hl) 00F0 D3 1C out (pio_a),a 00F2 3E FE ld a,11111110b 00F4 D3 1E out (pio_b+0),a 00F6 3E FF ld a,11111111b 00F8 D3 1E out (pio_b+0),a 00FA C9 ret 00FB led_disp_1: 00FB 3A 00 80 ld a,(disp) 00FE 4F ld c,a 00FF 06 00 ld b,0 0101 21 27 01 ld hl,table_0 0104 09 add hl,bc 0105 7E ld a,(hl) 0106 D3 1C out (pio_a),a 0108 3E FD ld a,11111101b 010A D3 1E out (pio_b+0),a 010C 3E FF ld a,11111111b 010E D3 1E out (pio_b+0),a 0110 C9 ret 0111 led_disp_2: 0111 3A 00 80 ld a,(disp) 0114 4F ld c,a 0115 06 00 ld b,0 0117 21 27 01 ld hl,table_0 011A 09 add hl,bc 011B 7E ld a,(hl) 011C D3 1C out (pio_a),a 011E 3E FB ld a,11111011b 0120 D3 1E out (pio_b+0),a 0122 3E FF ld a,11111111b 0124 D3 1E out (pio_b+0),a 0126 C9 ret 0127 table_0: 0127 F5 05 D3 57 db 11110101b,00000101b,11010011b,01010111b 012B 27 76 F6 65 db 00100111b,01110110b,11110110b,01100101b 012F F7 77 00 db 11110111b,01110111b,00000000b 0132 led_display: 0132 3A 04 80 ld a,(counter) 0135 4F ld c,a 0136 06 00 ld b,0 0138 21 66 01 ld hl,table_1 013B 09 add hl,bc 013C 7E ld a,(hl) 013D 32 00 80 ld (disp),a 0140 CD E5 00 call led_disp_0 0143 3A 04 80 ld a,(counter) 0146 4F ld c,a 0147 06 00 ld b,0 0149 21 66 02 ld hl,table_2 014C 09 add hl,bc 014D 7E ld a,(hl) 014E 32 00 80 ld (disp),a 0151 CD FB 00 call led_disp_1 0154 3A 04 80 ld a,(counter) 0157 4F ld c,a 0158 06 00 ld b,0 015A 21 66 03 ld hl,table_3 015D 09 add hl,bc 015E 7E ld a,(hl) 015F 32 00 80 ld (disp),a 0162 CD 11 01 call led_disp_2 0165 C9 ret 0166 table_1: 0166 00 01 02 03 db 0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9 016A 04 05 06 07 016E 08 09 00 01 0172 02 03 04 05 0176 06 07 08 09 017A 00 01 02 03 db 0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9 017E 04 05 06 07 0182 08 09 00 01 0186 02 03 04 05 018A 06 07 08 09   (...中略...) 0456 02 02 02 02 db 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 045A 02 02 02 02 045E 02 02 02 02 0462 02 02 02 02 0466 end ============================================================================