diff options
Diffstat (limited to 'sw/z80/drivers/build/usart.lst')
-rw-r--r-- | sw/z80/drivers/build/usart.lst | 440 |
1 files changed, 440 insertions, 0 deletions
diff --git a/sw/z80/drivers/build/usart.lst b/sw/z80/drivers/build/usart.lst new file mode 100644 index 0000000..65365fe --- /dev/null +++ b/sw/z80/drivers/build/usart.lst @@ -0,0 +1,440 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.6.0 #9615 (Linux) + 4 ;-------------------------------------------------------- + 5 .module usart + 6 .optsdcc -mz80 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl _usart_word_length + 12 .globl _usart_set_baudrate + 13 .globl _usart_set_parity + 14 .globl _usart_set_stop_bits + 15 .globl _usart_set_autoflow + 16 .globl _usart_init + 17 .globl _usart_transmit + 18 .globl _usart_receive + 19 .globl _usart_write + 20 .globl _usart_read + 21 ;-------------------------------------------------------- + 22 ; special function registers + 23 ;-------------------------------------------------------- + 24 ;-------------------------------------------------------- + 25 ; ram data + 26 ;-------------------------------------------------------- + 27 .area _DATA + 28 ;-------------------------------------------------------- + 29 ; ram data + 30 ;-------------------------------------------------------- + 31 .area _INITIALIZED + 0000 32 __usart: + 0000 33 .ds 2 + 34 ;-------------------------------------------------------- + 35 ; absolute external ram data + 36 ;-------------------------------------------------------- + 37 .area _DABS (ABS) + 38 ;-------------------------------------------------------- + 39 ; global & static initialisations + 40 ;-------------------------------------------------------- + 41 .area _HOME + 42 .area _GSINIT + 43 .area _GSFINAL + 44 .area _GSINIT + 45 ;-------------------------------------------------------- + 46 ; Home + 47 ;-------------------------------------------------------- + 48 .area _HOME + 49 .area _HOME + 50 ;-------------------------------------------------------- + 51 ; code + 52 ;-------------------------------------------------------- + 53 .area _CODE + 54 ;usart.c:5: void usart_set_baudrate(uint16_t baudrate) + 55 ; --------------------------------- + 56 ; Function usart_set_baudrate + 57 ; --------------------------------- + 0000 58 _usart_set_baudrate:: + 0000 DD E5 [15] 59 push ix + 0002 DD 21 00 00 [14] 60 ld ix,#0 + 0006 DD 39 [15] 61 add ix,sp + 62 ;usart.c:8: _usart->LCR.divisor_latch_access = 1; + 0008 2Ar00r00 [16] 63 ld hl,(__usart) + 000B 01 04 00 [10] 64 ld bc,#0x0004 + 000E 09 [11] 65 add hl,bc + 000F 7E [ 7] 66 ld a,(hl) + 0010 F6 80 [ 7] 67 or a,#0x80 + 0012 77 [ 7] 68 ld (hl),a + 69 ;usart.c:9: _usart->buffer = 0x00FF & baudrate; // LSBs + 0013 2Ar00r00 [16] 70 ld hl,(__usart) + 0016 DD 4E 04 [19] 71 ld c,4 (ix) + 0019 71 [ 7] 72 ld (hl),c + 73 ;usart.c:10: memcpy(&_usart->IER, &(baudrate >>8), 1); + 001A ED 5Br00r00 [20] 74 ld de,(__usart) + 001E 13 [ 6] 75 inc de + 001F DD 6E 05 [19] 76 ld l,5 (ix) + 0022 26 00 [ 7] 77 ld h,#0x00 + 0024 7E [ 7] 78 ld a, (hl) + 0025 12 [ 7] 79 ld (de), a + 80 ;usart.c:12: _usart->LCR.divisor_latch_access = 0; + 0026 2Ar00r00 [16] 81 ld hl,(__usart) + 0029 01 04 00 [10] 82 ld bc,#0x0004 + 002C 09 [11] 83 add hl,bc + 002D 7E [ 7] 84 ld a,(hl) + 002E E6 7F [ 7] 85 and a,#0x7f + 0030 77 [ 7] 86 ld (hl),a + 0031 DD E1 [14] 87 pop ix + 0033 C9 [10] 88 ret + 89 ;usart.c:15: void usart_set_parity(int mode) + 90 ; --------------------------------- + 91 ; Function usart_set_parity + 92 ; --------------------------------- + 0034 93 _usart_set_parity:: + 94 ;usart.c:18: _usart->LCR.even_parity = 1; + 0034 2Ar00r00 [16] 95 ld hl,(__usart) + 0037 01 04 00 [10] 96 ld bc,#0x0004 + 003A 09 [11] 97 add hl,bc + 98 ;usart.c:17: if (mode == USART_PARITY_EVEN) { + 003B FD 21 02 00 [14] 99 ld iy,#2 + 003F FD 39 [15] 100 add iy,sp + 0041 FD 7E 00 [19] 101 ld a,0 (iy) + 0044 3D [ 4] 102 dec a + 0045 20 0C [12] 103 jr NZ,00104$ + 0047 FD 7E 01 [19] 104 ld a,1 (iy) + 004A B7 [ 4] 105 or a, a + 004B 20 06 [12] 106 jr NZ,00104$ + 107 ;usart.c:18: _usart->LCR.even_parity = 1; + 004D 7E [ 7] 108 ld a,(hl) + 004E F6 10 [ 7] 109 or a,#0x10 + 0050 77 [ 7] 110 ld (hl),a + 0051 18 17 [12] 111 jr 00105$ + 0053 112 00104$: + 113 ;usart.c:20: else if (mode == USART_PARITY_ODD) { + 0053 FD 21 02 00 [14] 114 ld iy,#2 + 0057 FD 39 [15] 115 add iy,sp + 0059 FD 7E 00 [19] 116 ld a,0 (iy) + 005C D6 02 [ 7] 117 sub a, #0x02 + 005E 20 0A [12] 118 jr NZ,00105$ + 0060 FD 7E 01 [19] 119 ld a,1 (iy) + 0063 B7 [ 4] 120 or a, a + 0064 20 04 [12] 121 jr NZ,00105$ + 122 ;usart.c:21: _usart->LCR.even_parity = 0; + 0066 7E [ 7] 123 ld a,(hl) + 0067 E6 EF [ 7] 124 and a,#0xef + 0069 77 [ 7] 125 ld (hl),a + 006A 126 00105$: + 127 ;usart.c:24: _usart->LCR.parity = (mode == USART_PARITY_NONE) ? 0 : 1; + 006A 2Ar00r00 [16] 128 ld hl,(__usart) + 006D 01 04 00 [10] 129 ld bc,#0x0004 + 0070 09 [11] 130 add hl,bc + 0071 FD 21 02 00 [14] 131 ld iy,#2 + 0075 FD 39 [15] 132 add iy,sp + 0077 FD 7E 00 [19] 133 ld a,0 (iy) + 007A 07 [ 4] 134 rlca + 007B 07 [ 4] 135 rlca + 007C 07 [ 4] 136 rlca + 007D E6 F8 [ 7] 137 and a,#0xf8 + 007F E6 08 [ 7] 138 and a,#0x08 + 0081 4F [ 4] 139 ld c,a + 0082 7E [ 7] 140 ld a,(hl) + 0083 E6 F7 [ 7] 141 and a,#0xf7 + 0085 B1 [ 4] 142 or a,c + 0086 77 [ 7] 143 ld (hl),a + 0087 C9 [10] 144 ret + 145 ;usart.c:27: void usart_set_stop_bits(int count) + 146 ; --------------------------------- + 147 ; Function usart_set_stop_bits + 148 ; --------------------------------- + 0088 149 _usart_set_stop_bits:: + 150 ;usart.c:29: _usart->LCR.stop_bits = (count == USART_STOP_BITS_1) ? 0 : 1; + 0088 ED 4Br00r00 [20] 151 ld bc,(__usart) + 008C 03 [ 6] 152 inc bc + 008D 03 [ 6] 153 inc bc + 008E 03 [ 6] 154 inc bc + 008F 03 [ 6] 155 inc bc + 0090 FD 21 02 00 [14] 156 ld iy,#2 + 0094 FD 39 [15] 157 add iy,sp + 0096 FD 7E 00 [19] 158 ld a,0 (iy) + 0099 D6 0A [ 7] 159 sub a, #0x0a + 009B 20 0A [12] 160 jr NZ,00103$ + 009D FD 7E 01 [19] 161 ld a,1 (iy) + 00A0 B7 [ 4] 162 or a, a + 00A1 20 04 [12] 163 jr NZ,00103$ + 00A3 3E 01 [ 7] 164 ld a,#0x01 + 00A5 18 01 [12] 165 jr 00104$ + 00A7 166 00103$: + 00A7 AF [ 4] 167 xor a,a + 00A8 168 00104$: + 00A8 EE 01 [ 7] 169 xor a, #0x01 + 00AA 87 [ 4] 170 add a, a + 00AB 87 [ 4] 171 add a, a + 00AC E6 04 [ 7] 172 and a,#0x04 + 00AE 6F [ 4] 173 ld l,a + 00AF 0A [ 7] 174 ld a,(bc) + 00B0 E6 FB [ 7] 175 and a,#0xfb + 00B2 B5 [ 4] 176 or a,l + 00B3 02 [ 7] 177 ld (bc),a + 00B4 C9 [10] 178 ret + 179 ;usart.c:32: void usart_word_length(int length) + 180 ; --------------------------------- + 181 ; Function usart_word_length + 182 ; --------------------------------- + 00B5 183 _usart_word_length:: + 184 ;usart.c:34: _usart->LCR.word_length = length; + 00B5 2Ar00r00 [16] 185 ld hl,(__usart) + 00B8 01 04 00 [10] 186 ld bc,#0x0004 + 00BB 09 [11] 187 add hl,bc + 00BC FD 21 02 00 [14] 188 ld iy,#2 + 00C0 FD 39 [15] 189 add iy,sp + 00C2 FD 7E 00 [19] 190 ld a,0 (iy) + 00C5 E6 03 [ 7] 191 and a,#0x03 + 00C7 4F [ 4] 192 ld c,a + 00C8 7E [ 7] 193 ld a,(hl) + 00C9 E6 FC [ 7] 194 and a,#0xfc + 00CB B1 [ 4] 195 or a,c + 00CC 77 [ 7] 196 ld (hl),a + 00CD C9 [10] 197 ret + 198 ;usart.c:37: void usart_set_autoflow(int mode) + 199 ; --------------------------------- + 200 ; Function usart_set_autoflow + 201 ; --------------------------------- + 00CE 202 _usart_set_autoflow:: + 203 ;usart.c:39: _usart->MCR.autoflow = (mode == USART_AUTOFLOW_OFF) ? 0 : 1; + 00CE 2Ar00r00 [16] 204 ld hl,(__usart) + 00D1 01 0C 00 [10] 205 ld bc,#0x000c + 00D4 09 [11] 206 add hl,bc + 00D5 FD 21 02 00 [14] 207 ld iy,#2 + 00D9 FD 39 [15] 208 add iy,sp + 00DB FD 7E 00 [19] 209 ld a,0 (iy) + 00DE E6 01 [ 7] 210 and a,#0x01 + 00E0 4F [ 4] 211 ld c,a + 00E1 7E [ 7] 212 ld a,(hl) + 00E2 E6 FE [ 7] 213 and a,#0xfe + 00E4 B1 [ 4] 214 or a,c + 00E5 77 [ 7] 215 ld (hl),a + 216 ;usart.c:40: _usart->MCR.data_terminal_ready = (mode == USART_AUTOFLOW_ALL); + 00E6 2Ar00r00 [16] 217 ld hl,(__usart) + 00E9 01 05 00 [10] 218 ld bc,#0x0005 + 00EC 09 [11] 219 add hl,bc + 00ED FD 7E 00 [19] 220 ld a,0 (iy) + 00F0 D6 03 [ 7] 221 sub a, #0x03 + 00F2 20 0A [12] 222 jr NZ,00103$ + 00F4 FD 7E 01 [19] 223 ld a,1 (iy) + 00F7 B7 [ 4] 224 or a, a + 00F8 20 04 [12] 225 jr NZ,00103$ + 00FA 3E 01 [ 7] 226 ld a,#0x01 + 00FC 18 01 [12] 227 jr 00104$ + 00FE 228 00103$: + 00FE AF [ 4] 229 xor a,a + 00FF 230 00104$: + 00FF E6 01 [ 7] 231 and a,#0x01 + 0101 4F [ 4] 232 ld c,a + 0102 7E [ 7] 233 ld a,(hl) + 0103 E6 FE [ 7] 234 and a,#0xfe + 0105 B1 [ 4] 235 or a,c + 0106 77 [ 7] 236 ld (hl),a + 0107 C9 [10] 237 ret + 238 ;usart.c:43: inline void usart_init(uint16_t baudrate, int parity, int stop_bits) + 239 ; --------------------------------- + 240 ; Function usart_init + 241 ; --------------------------------- + 0108 242 _usart_init:: + 243 ;usart.c:45: usart_set_baudrate(baudrate); + 0108 C1 [10] 244 pop bc + 0109 E1 [10] 245 pop hl + 010A E5 [11] 246 push hl + 010B C5 [11] 247 push bc + 010C E5 [11] 248 push hl + 010D CDr00r00 [17] 249 call _usart_set_baudrate + 0110 F1 [10] 250 pop af + 251 ;usart.c:46: usart_set_parity(parity); + 0111 21 04 00 [10] 252 ld hl, #4 + 0114 39 [11] 253 add hl, sp + 0115 4E [ 7] 254 ld c, (hl) + 0116 23 [ 6] 255 inc hl + 0117 46 [ 7] 256 ld b, (hl) + 0118 C5 [11] 257 push bc + 0119 CDr34r00 [17] 258 call _usart_set_parity + 011C F1 [10] 259 pop af + 260 ;usart.c:47: usart_set_stop_bits(stop_bits); + 011D 21 06 00 [10] 261 ld hl, #6 + 0120 39 [11] 262 add hl, sp + 0121 4E [ 7] 263 ld c, (hl) + 0122 23 [ 6] 264 inc hl + 0123 46 [ 7] 265 ld b, (hl) + 0124 C5 [11] 266 push bc + 0125 CDr88r00 [17] 267 call _usart_set_stop_bits + 268 ;usart.c:48: usart_set_autoflow(USART_AUTOFLOW_OFF); + 0128 21 00 00 [10] 269 ld hl, #0x0000 + 012B E3 [19] 270 ex (sp),hl + 012C CDrCEr00 [17] 271 call _usart_set_autoflow + 012F F1 [10] 272 pop af + 0130 C9 [10] 273 ret + 274 ;usart.c:51: void usart_transmit(uint8_t data) + 275 ; --------------------------------- + 276 ; Function usart_transmit + 277 ; --------------------------------- + 0131 278 _usart_transmit:: + 279 ;usart.c:53: _usart->buffer = data; + 0131 2Ar00r00 [16] 280 ld hl,(__usart) + 0134 FD 21 02 00 [14] 281 ld iy,#2 + 0138 FD 39 [15] 282 add iy,sp + 013A FD 7E 00 [19] 283 ld a,0 (iy) + 013D 77 [ 7] 284 ld (hl),a + 285 ;usart.c:54: while (_usart->LSR.transmitter_holder_empty == 0); // wait + 013E 286 00101$: + 013E 2Ar00r00 [16] 287 ld hl,(__usart) + 0141 01 0D 00 [10] 288 ld bc,#0x000d + 0144 09 [11] 289 add hl,bc + 0145 7E [ 7] 290 ld a,(hl) + 0146 07 [ 4] 291 rlca + 0147 07 [ 4] 292 rlca + 0148 07 [ 4] 293 rlca + 0149 30 F3 [12] 294 jr NC,00101$ + 014B C9 [10] 295 ret + 296 ;usart.c:57: uint8_t usart_receive() + 297 ; --------------------------------- + 298 ; Function usart_receive + 299 ; --------------------------------- + 014C 300 _usart_receive:: + 301 ;usart.c:59: return _usart->buffer; + 014C 2Ar00r00 [16] 302 ld hl,(__usart) + 014F 6E [ 7] 303 ld l,(hl) + 0150 C9 [10] 304 ret + 305 ;usart.c:62: int usart_write(uint8_t *data, size_t size) + 306 ; --------------------------------- + 307 ; Function usart_write + 308 ; --------------------------------- + 0151 309 _usart_write:: + 0151 DD E5 [15] 310 push ix + 0153 DD 21 00 00 [14] 311 ld ix,#0 + 0157 DD 39 [15] 312 add ix,sp + 0159 F5 [11] 313 push af + 314 ;usart.c:64: uint8_t *dp = data; + 015A DD 7E 04 [19] 315 ld a,4 (ix) + 015D DD 77 FE [19] 316 ld -2 (ix),a + 0160 DD 7E 05 [19] 317 ld a,5 (ix) + 0163 DD 77 FF [19] 318 ld -1 (ix),a + 319 ;usart.c:66: while (size--) { + 0166 DD 4E 06 [19] 320 ld c,6 (ix) + 0169 DD 46 07 [19] 321 ld b,7 (ix) + 016C 322 00104$: + 016C 59 [ 4] 323 ld e, c + 016D 50 [ 4] 324 ld d, b + 016E 0B [ 6] 325 dec bc + 016F 7A [ 4] 326 ld a,d + 0170 B3 [ 4] 327 or a,e + 0171 28 1E [12] 328 jr Z,00106$ + 329 ;usart.c:67: _usart->buffer = *(dp++); + 0173 ED 5Br00r00 [20] 330 ld de,(__usart) + 0177 E1 [10] 331 pop hl + 0178 E5 [11] 332 push hl + 0179 7E [ 7] 333 ld a,(hl) + 017A DD 34 FE [23] 334 inc -2 (ix) + 017D 20 03 [12] 335 jr NZ,00126$ + 017F DD 34 FF [23] 336 inc -1 (ix) + 0182 337 00126$: + 0182 12 [ 7] 338 ld (de),a + 339 ;usart.c:68: while (_usart->LSR.transmitter_empty); + 0183 340 00101$: + 0183 2Ar00r00 [16] 341 ld hl,(__usart) + 0186 11 0D 00 [10] 342 ld de,#0x000d + 0189 19 [11] 343 add hl,de + 018A 7E [ 7] 344 ld a,(hl) + 018B 07 [ 4] 345 rlca + 018C 07 [ 4] 346 rlca + 018D 30 DD [12] 347 jr NC,00104$ + 018F 18 F2 [12] 348 jr 00101$ + 0191 349 00106$: + 350 ;usart.c:72: return size; + 0191 69 [ 4] 351 ld l, c + 0192 60 [ 4] 352 ld h, b + 0193 DD F9 [10] 353 ld sp, ix + 0195 DD E1 [14] 354 pop ix + 0197 C9 [10] 355 ret + 356 ;usart.c:75: int usart_read(uint8_t *buffer, size_t count) + 357 ; --------------------------------- + 358 ; Function usart_read + 359 ; --------------------------------- + 0198 360 _usart_read:: + 0198 DD E5 [15] 361 push ix + 019A DD 21 00 00 [14] 362 ld ix,#0 + 019E DD 39 [15] 363 add ix,sp + 01A0 21 FA FF [10] 364 ld hl,#-6 + 01A3 39 [11] 365 add hl,sp + 01A4 F9 [ 6] 366 ld sp,hl + 367 ;usart.c:77: uint8_t *bp = buffer; + 01A5 DD 7E 04 [19] 368 ld a,4 (ix) + 01A8 DD 77 FC [19] 369 ld -4 (ix),a + 01AB DD 7E 05 [19] 370 ld a,5 (ix) + 01AE DD 77 FD [19] 371 ld -3 (ix),a + 372 ;usart.c:80: while (count--) { + 01B1 DD 4E 06 [19] 373 ld c,6 (ix) + 01B4 DD 46 07 [19] 374 ld b,7 (ix) + 01B7 21 00 00 [10] 375 ld hl,#0x0000 + 01BA E3 [19] 376 ex (sp), hl + 01BB 377 00105$: + 01BB 59 [ 4] 378 ld e, c + 01BC 50 [ 4] 379 ld d, b + 01BD 0B [ 6] 380 dec bc + 01BE 7A [ 4] 381 ld a,d + 01BF B3 [ 4] 382 or a,e + 01C0 28 55 [12] 383 jr Z,00107$ + 384 ;usart.c:81: *(bp++) = _usart->buffer; + 01C2 2Ar00r00 [16] 385 ld hl,(__usart) + 01C5 5E [ 7] 386 ld e,(hl) + 01C6 DD 6E FC [19] 387 ld l,-4 (ix) + 01C9 DD 66 FD [19] 388 ld h,-3 (ix) + 01CC 73 [ 7] 389 ld (hl),e + 01CD DD 34 FC [23] 390 inc -4 (ix) + 01D0 20 03 [12] 391 jr NZ,00123$ + 01D2 DD 34 FD [23] 392 inc -3 (ix) + 01D5 393 00123$: + 01D5 ED 5Br00r00 [20] 394 ld de,(__usart) + 395 ;usart.c:83: if (_usart->LSR.framing_error || _usart->LSR.parity_error) { + 01D9 21 0D 00 [10] 396 ld hl,#0x000d + 01DC 19 [11] 397 add hl,de + 01DD DD 75 FE [19] 398 ld -2 (ix),l + 01E0 DD 74 FF [19] 399 ld -1 (ix),h + 01E3 DD 6E FE [19] 400 ld l,-2 (ix) + 01E6 DD 66 FF [19] 401 ld h,-1 (ix) + 01E9 7E [ 7] 402 ld a,(hl) + 01EA 0F [ 4] 403 rrca + 01EB 0F [ 4] 404 rrca + 01EC 0F [ 4] 405 rrca + 01ED E6 01 [ 7] 406 and a,#0x01 + 01EF 20 0D [12] 407 jr NZ,00101$ + 01F1 DD 6E FE [19] 408 ld l,-2 (ix) + 01F4 DD 66 FF [19] 409 ld h,-1 (ix) + 01F7 7E [ 7] 410 ld a,(hl) + 01F8 0F [ 4] 411 rrca + 01F9 0F [ 4] 412 rrca + 01FA E6 01 [ 7] 413 and a,#0x01 + 01FC 28 0F [12] 414 jr Z,00102$ + 01FE 415 00101$: + 416 ;usart.c:84: bp--; // delete last byte (?) + 01FE DD 6E FC [19] 417 ld l,-4 (ix) + 0201 DD 66 FD [19] 418 ld h,-3 (ix) + 0204 2B [ 6] 419 dec hl + 0205 DD 75 FC [19] 420 ld -4 (ix),l + 0208 DD 74 FD [19] 421 ld -3 (ix),h + 020B 18 AE [12] 422 jr 00105$ + 020D 423 00102$: + 424 ;usart.c:86: read_count++; + 020D DD 34 FA [23] 425 inc -6 (ix) + 0210 20 A9 [12] 426 jr NZ,00105$ + 0212 DD 34 FB [23] 427 inc -5 (ix) + 0215 18 A4 [12] 428 jr 00105$ + 0217 429 00107$: + 430 ;usart.c:90: return read_count; + 0217 E1 [10] 431 pop hl + 0218 E5 [11] 432 push hl + 0219 DD F9 [10] 433 ld sp, ix + 021B DD E1 [14] 434 pop ix + 021D C9 [10] 435 ret + 436 .area _CODE + 437 .area _INITIALIZER + 0000 438 __xinit___usart: + 0000 00 40 439 .dw #0x4000 + 440 .area _CABS (ABS) |