summaryrefslogtreecommitdiffstats
path: root/sw/z80/drivers/build/usart.lst
blob: 65365fea61e267c2927edad09410013f9997847f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
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)