1 ;-------------------------------------------------------- 2 ; File Created by SDCC : free open source ISO C Compiler 3 ; Version 4.5.0 #15242 (Linux) 4 ;-------------------------------------------------------- 5 .module main 6 7 .optsdcc -mz80 sdcccall(1) 8 ;-------------------------------------------------------- 9 ; Public variables in this module 10 ;-------------------------------------------------------- 11 .globl _main 12 .globl _delay_ms 13 .globl _io_in 14 .globl _io_out 15 ;-------------------------------------------------------- 16 ; special function registers 17 ;-------------------------------------------------------- 18 ;-------------------------------------------------------- 19 ; ram data 20 ;-------------------------------------------------------- 21 .area _DATA 22 ;-------------------------------------------------------- 23 ; ram data 24 ;-------------------------------------------------------- 25 .area _INITIALIZED 26 ;-------------------------------------------------------- 27 ; absolute external ram data 28 ;-------------------------------------------------------- 29 .area _DABS (ABS) 30 ;-------------------------------------------------------- 31 ; global & static initialisations 32 ;-------------------------------------------------------- 33 .area _HOME 34 .area _GSINIT 35 .area _GSFINAL 36 .area _GSINIT 37 ;-------------------------------------------------------- 38 ; Home 39 ;-------------------------------------------------------- 40 .area _HOME 41 .area _HOME 42 ;-------------------------------------------------------- 43 ; code 44 ;-------------------------------------------------------- 45 .area _CODE 46 ;main.c:19: static void acia_init(void) 47 ; --------------------------------- 48 ; Function acia_init 49 ; --------------------------------- 00000000 50 _acia_init: 51 ;main.c:21: io_out(ACIA_CTRL_STATUS, ACIA_CMD_MASTER_RESET); 00000000 2E 03 [ 7] 52 ld l, #0x03 00000002 3E 20 [ 7] 53 ld a, #0x20 00000004 CDr00r00 [17] 54 call _io_out 55 ;main.c:22: io_out(ACIA_CTRL_STATUS, ACIA_CMD_8N1_DIV16); 00000007 2E 15 [ 7] 56 ld l, #0x15 00000009 3E 20 [ 7] 57 ld a, #0x20 58 ;main.c:23: } 0000000B C3r00r00 [10] 59 jp _io_out 60 ;main.c:25: static uint8_t acia_status(void) 61 ; --------------------------------- 62 ; Function acia_status 63 ; --------------------------------- 0000000E 64 _acia_status: 65 ;main.c:27: return io_in(ACIA_CTRL_STATUS); 0000000E 3E 20 [ 7] 66 ld a, #0x20 67 ;main.c:28: } 00000010 C3r00r00 [10] 68 jp _io_in 69 ;main.c:30: static void acia_putc(uint8_t value) 70 ; --------------------------------- 71 ; Function acia_putc 72 ; --------------------------------- 00000013 73 _acia_putc: 00000013 6F [ 4] 74 ld l, a 75 ;main.c:32: while ((acia_status() & ACIA_STATUS_TDRE) == 0) { 00000014 76 00101$: 00000014 E5 [11] 77 push hl 00000015 CDr0Er00 [17] 78 call _acia_status 00000018 E1 [10] 79 pop hl 00000019 CB 4F [ 8] 80 bit 1, a 0000001B 28 F7 [12] 81 jr Z, 00101$ 82 ;main.c:34: io_out(ACIA_DATA, value); 0000001D 3E 21 [ 7] 83 ld a, #0x21 84 ;main.c:35: } 0000001F C3r00r00 [10] 85 jp _io_out 86 ;main.c:37: static uint8_t acia_getc_nonblocking(uint8_t *value) 87 ; --------------------------------- 88 ; Function acia_getc_nonblocking 89 ; --------------------------------- 00000022 90 _acia_getc_nonblocking: 91 ;main.c:39: if ((acia_status() & ACIA_STATUS_RDRF) == 0) { 00000022 E5 [11] 92 push hl 00000023 CDr0Er00 [17] 93 call _acia_status 00000026 E1 [10] 94 pop hl 00000027 0F [ 4] 95 rrca 00000028 38 02 [12] 96 jr C, 00102$ 97 ;main.c:40: return 0; 0000002A AF [ 4] 98 xor a, a 0000002B C9 [10] 99 ret 0000002C 100 00102$: 101 ;main.c:43: *value = io_in(ACIA_DATA); 0000002C E5 [11] 102 push hl 0000002D 3E 21 [ 7] 103 ld a, #0x21 0000002F CDr00r00 [17] 104 call _io_in 00000032 E1 [10] 105 pop hl 00000033 77 [ 7] 106 ld (hl), a 107 ;main.c:44: return 1; 00000034 3E 01 [ 7] 108 ld a, #0x01 109 ;main.c:45: } 00000036 C9 [10] 110 ret 111 ;main.c:47: static void acia_puts(const char *text) 112 ; --------------------------------- 113 ; Function acia_puts 114 ; --------------------------------- 00000037 115 _acia_puts: 116 ;main.c:49: while (*text) { 00000037 117 00101$: 00000037 7E [ 7] 118 ld a, (hl) 00000038 B7 [ 4] 119 or a, a 00000039 C8 [11] 120 ret Z 121 ;main.c:50: acia_putc((uint8_t)*text++); 0000003A 23 [ 6] 122 inc hl 0000003B E5 [11] 123 push hl 0000003C CDr13r00 [17] 124 call _acia_putc 0000003F E1 [10] 125 pop hl 126 ;main.c:52: } 00000040 18 F5 [12] 127 jr 00101$ 128 ;main.c:54: void main(void) 129 ; --------------------------------- 130 ; Function main 131 ; --------------------------------- 00000042 132 _main:: 00000042 F5 [11] 133 push af 134 ;main.c:57: uint8_t ch = 0; 00000043 FD 21 00 00 [14] 135 ld iy, #0 00000047 FD 39 [15] 136 add iy, sp 00000049 FD 36 00 00 [19] 137 ld 0 (iy), #0x00 138 ;main.c:59: io_out(PIO_A_CTRL, 0x0F); 0000004D 2E 0F [ 7] 139 ld l, #0x0f 0000004F 3E 42 [ 7] 140 ld a, #0x42 00000051 CDr00r00 [17] 141 call _io_out 142 ;main.c:60: io_out(PIO_A_DATA, 0x00); 00000054 2E 00 [ 7] 143 ld l, #0x00 00000056 3E 40 [ 7] 144 ld a, #0x40 00000058 CDr00r00 [17] 145 call _io_out 146 ;main.c:62: acia_init(); 0000005B CDr00r00 [17] 147 call _acia_init 148 ;main.c:63: acia_puts("ACIA 6850 test ready\r\n"); 0000005E 21rCAr00 [10] 149 ld hl, #___str_0 00000061 CDr37r00 [17] 150 call _acia_puts 00000064 FD 21 01 00 [14] 151 ld iy, #1 00000068 FD 39 [15] 152 add iy, sp 0000006A FD 36 00 00 [19] 153 ld 0 (iy), #0x00 0000006E 154 00106$: 155 ;main.c:66: uint8_t status = acia_status(); 0000006E CDr0Er00 [17] 156 call _acia_status 157 ;main.c:68: if (acia_getc_nonblocking(&ch)) { 00000071 21 00 00 [10] 158 ld hl, #0 00000074 39 [11] 159 add hl, sp 00000075 CDr22r00 [17] 160 call _acia_getc_nonblocking 00000078 B7 [ 4] 161 or a, a 00000079 28 2A [12] 162 jr Z, 00104$ 163 ;main.c:69: io_out(PIO_A_DATA, ch); 0000007B FD 21 00 00 [14] 164 ld iy, #0 0000007F FD 39 [15] 165 add iy, sp 00000081 FD 6E 00 [19] 166 ld l, 0 (iy) 00000084 3E 40 [ 7] 167 ld a, #0x40 00000086 CDr00r00 [17] 168 call _io_out 169 ;main.c:70: acia_putc(ch); 00000089 21 00 00 [10] 170 ld hl, #0 0000008C 39 [11] 171 add hl, sp 0000008D 7E [ 7] 172 ld a, (hl) 0000008E CDr13r00 [17] 173 call _acia_putc 174 ;main.c:71: if (ch == '\r') { 00000091 21 00 00 [10] 175 ld hl, #0 00000094 39 [11] 176 add hl, sp 00000095 7E [ 7] 177 ld a, (hl) 00000096 D6 0D [ 7] 178 sub a, #0x0d 00000098 20 05 [12] 179 jr NZ, 00102$ 180 ;main.c:72: acia_putc('\n'); 0000009A 3E 0A [ 7] 181 ld a, #0x0a 0000009C CDr13r00 [17] 182 call _acia_putc 0000009F 183 00102$: 184 ;main.c:74: delay_ms(50); 0000009F 21 32 00 [10] 185 ld hl, #0x0032 000000A2 CDr00r00 [17] 186 call _delay_ms 000000A5 187 00104$: 188 ;main.c:77: acia_putc((uint8_t)('0' + (cnt & 0x07))); 000000A5 21 01 00 [10] 189 ld hl, #1 000000A8 39 [11] 190 add hl, sp 000000A9 7E [ 7] 191 ld a, (hl) 000000AA E6 07 [ 7] 192 and a, #0x07 000000AC C6 30 [ 7] 193 add a, #0x30 000000AE CDr13r00 [17] 194 call _acia_putc 195 ;main.c:78: acia_puts("\r\n"); 000000B1 21rE1r00 [10] 196 ld hl, #___str_1 000000B4 CDr37r00 [17] 197 call _acia_puts 198 ;main.c:79: cnt++; 000000B7 FD 21 01 00 [14] 199 ld iy, #1 000000BB FD 39 [15] 200 add iy, sp 000000BD FD 34 00 [23] 201 inc 0 (iy) 202 ;main.c:80: delay_ms(250); 000000C0 21 FA 00 [10] 203 ld hl, #0x00fa 000000C3 CDr00r00 [17] 204 call _delay_ms 000000C6 18 A6 [12] 205 jr 00106$ 206 ;main.c:82: } 000000C8 F1 [10] 207 pop af 000000C9 C9 [10] 208 ret 000000CA 209 ___str_0: 000000CA 41 43 49 41 20 36 38 210 .ascii "ACIA 6850 test ready" 35 30 20 74 65 73 74 20 72 65 61 64 79 000000DE 0D 211 .db 0x0d 000000DF 0A 212 .db 0x0a 000000E0 00 213 .db 0x00 000000E1 214 ___str_1: 000000E1 0D 215 .db 0x0d 000000E2 0A 216 .db 0x0a 000000E3 00 217 .db 0x00 218 .area _CODE 219 .area _INITIALIZER 220 .area _CABS (ABS)