1 1 ;--------------------------------------------------------
2 2 ; File Created by SDCC : FreeWare ANSI-C Compiler
3 3 ; Version 2.1.9Ga Sun Jan 16 17:31:32 2000
5 5 ;--------------------------------------------------------
7 7 ;--------------------------------------------------------
8 8 ; publics variables in this module
9 9 ;--------------------------------------------------------
10 10 .globl _ser_charAvail
11 11 .globl _ser_printString
14 14 .globl _ser_interrupt_handler
16 16 .globl _ser_rxBuffer
17 17 .globl _ser_txBuffer
18 18 .globl _ser_rxIndexOut
19 19 .globl _ser_rxIndexIn
20 20 .globl _ser_txIndexOut
21 21 .globl _ser_txIndexIn
22 22 ;--------------------------------------------------------
23 23 ; special function registers
24 24 ;--------------------------------------------------------
25 0080 25 G$P0$0$0 == 0x0080
27 0090 27 G$P1$0$0 == 0x0090
29 00A0 29 G$P2$0$0 == 0x00a0
31 00B0 31 G$P3$0$0 == 0x00b0
33 00D0 33 G$PSW$0$0 == 0x00d0
35 00E0 35 G$ACC$0$0 == 0x00e0
37 00F0 37 G$B$0$0 == 0x00f0
39 0081 39 G$SP$0$0 == 0x0081
41 0082 41 G$DPL$0$0 == 0x0082
43 0083 43 G$DPH$0$0 == 0x0083
45 0087 45 G$PCON$0$0 == 0x0087
46 0087 46 _PCON = 0x0087
47 0088 47 G$TCON$0$0 == 0x0088
48 0088 48 _TCON = 0x0088
49 0089 49 G$TMOD$0$0 == 0x0089
50 0089 50 _TMOD = 0x0089
51 008A 51 G$TL0$0$0 == 0x008a
53 008B 53 G$TL1$0$0 == 0x008b
55 008C 55 G$TH0$0$0 == 0x008c
57 008D 57 G$TH1$0$0 == 0x008d
59 008E 59 G$AUXR$0$0 == 0x008e
60 008E 60 _AUXR = 0x008e
61 00A8 61 G$IE$0$0 == 0x00a8
63 00B8 63 G$IP$0$0 == 0x00b8
65 0098 65 G$SCON$0$0 == 0x0098
66 0098 66 _SCON = 0x0098
67 0099 67 G$SBUF$0$0 == 0x0099
68 0099 68 _SBUF = 0x0099
69 00C8 69 G$T2CON$0$0 == 0x00c8
70 00C8 70 _T2CON = 0x00c8
71 00CB 71 G$RCAP2H$0$0 == 0x00cb
72 00CB 72 _RCAP2H = 0x00cb
73 00CA 73 G$RCAP2L$0$0 == 0x00ca
74 00CA 74 _RCAP2L = 0x00ca
75 75 ;--------------------------------------------------------
76 76 ; special function bits
77 77 ;--------------------------------------------------------
78 00D7 78 G$CY$0$0 == 0x00d7
80 00D6 80 G$AC$0$0 == 0x00d6
82 00D5 82 G$F0$0$0 == 0x00d5
84 00D4 84 G$RS1$0$0 == 0x00d4
86 00D3 86 G$RS0$0$0 == 0x00d3
88 00D2 88 G$OV$0$0 == 0x00d2
90 00D0 90 G$P$0$0 == 0x00d0
92 008F 92 G$TF1$0$0 == 0x008f
94 008E 94 G$TR1$0$0 == 0x008e
96 008D 96 G$TF0$0$0 == 0x008d
98 008C 98 G$TR0$0$0 == 0x008c
100 008B 100 G$IE1$0$0 == 0x008b
101 008B 101 _IE1 = 0x008b
102 008A 102 G$IT1$0$0 == 0x008a
103 008A 103 _IT1 = 0x008a
104 0089 104 G$IE0$0$0 == 0x0089
105 0089 105 _IE0 = 0x0089
106 0088 106 G$IT0$0$0 == 0x0088
107 0088 107 _IT0 = 0x0088
108 00AF 108 G$EA$0$0 == 0x00af
109 00AF 109 _EA = 0x00af
110 00AC 110 G$ES$0$0 == 0x00ac
111 00AC 111 _ES = 0x00ac
112 00AB 112 G$ET1$0$0 == 0x00ab
113 00AB 113 _ET1 = 0x00ab
114 00AA 114 G$EX1$0$0 == 0x00aa
115 00AA 115 _EX1 = 0x00aa
116 00A9 116 G$ET0$0$0 == 0x00a9
117 00A9 117 _ET0 = 0x00a9
118 00A8 118 G$EX0$0$0 == 0x00a8
119 00A8 119 _EX0 = 0x00a8
120 00BC 120 G$PS$0$0 == 0x00bc
121 00BC 121 _PS = 0x00bc
122 00BB 122 G$PT1$0$0 == 0x00bb
123 00BB 123 _PT1 = 0x00bb
124 00BA 124 G$PX1$0$0 == 0x00ba
125 00BA 125 _PX1 = 0x00ba
126 00B9 126 G$PT0$0$0 == 0x00b9
127 00B9 127 _PT0 = 0x00b9
128 00B8 128 G$PX0$0$0 == 0x00b8
129 00B8 129 _PX0 = 0x00b8
130 00B7 130 G$RD$0$0 == 0x00b7
131 00B7 131 _RD = 0x00b7
132 00B6 132 G$WR$0$0 == 0x00b6
133 00B6 133 _WR = 0x00b6
134 00B5 134 G$T1$0$0 == 0x00b5
135 00B5 135 _T1 = 0x00b5
136 00B4 136 G$T0$0$0 == 0x00b4
137 00B4 137 _T0 = 0x00b4
138 00B3 138 G$INT1$0$0 == 0x00b3
139 00B3 139 _INT1 = 0x00b3
140 00B2 140 G$INT0$0$0 == 0x00b2
141 00B2 141 _INT0 = 0x00b2
142 00B1 142 G$TXD$0$0 == 0x00b1
143 00B1 143 _TXD = 0x00b1
144 00B0 144 G$RXD$0$0 == 0x00b0
145 00B0 145 _RXD = 0x00b0
146 0090 146 G$P1_0$0$0 == 0x0090
147 0090 147 _P1_0 = 0x0090
148 0091 148 G$P1_1$0$0 == 0x0091
149 0091 149 _P1_1 = 0x0091
150 0092 150 G$P1_2$0$0 == 0x0092
151 0092 151 _P1_2 = 0x0092
152 0093 152 G$P1_3$0$0 == 0x0093
153 0093 153 _P1_3 = 0x0093
154 0094 154 G$P1_4$0$0 == 0x0094
155 0094 155 _P1_4 = 0x0094
156 0095 156 G$P1_5$0$0 == 0x0095
157 0095 157 _P1_5 = 0x0095
158 0096 158 G$P1_6$0$0 == 0x0096
159 0096 159 _P1_6 = 0x0096
160 0097 160 G$P1_7$0$0 == 0x0097
161 0097 161 _P1_7 = 0x0097
162 009F 162 G$SM0$0$0 == 0x009f
163 009F 163 _SM0 = 0x009f
164 009E 164 G$SM1$0$0 == 0x009e
165 009E 165 _SM1 = 0x009e
166 009D 166 G$SM2$0$0 == 0x009d
167 009D 167 _SM2 = 0x009d
168 009C 168 G$REN$0$0 == 0x009c
169 009C 169 _REN = 0x009c
170 009B 170 G$TB8$0$0 == 0x009b
171 009B 171 _TB8 = 0x009b
172 009A 172 G$RB8$0$0 == 0x009a
173 009A 173 _RB8 = 0x009a
174 0099 174 G$TI$0$0 == 0x0099
175 0099 175 _TI = 0x0099
176 0098 176 G$RI$0$0 == 0x0098
177 0098 177 _RI = 0x0098
178 00C8 178 G$T2CON_0$0$0 == 0x00c8
179 00C8 179 _T2CON_0 = 0x00c8
180 00C9 180 G$T2CON_1$0$0 == 0x00c9
181 00C9 181 _T2CON_1 = 0x00c9
182 00CA 182 G$T2CON_2$0$0 == 0x00ca
183 00CA 183 _T2CON_2 = 0x00ca
184 00CB 184 G$T2CON_3$0$0 == 0x00cb
185 00CB 185 _T2CON_3 = 0x00cb
186 00CC 186 G$T2CON_4$0$0 == 0x00cc
187 00CC 187 _T2CON_4 = 0x00cc
188 00CD 188 G$T2CON_5$0$0 == 0x00cd
189 00CD 189 _T2CON_5 = 0x00cd
190 00CE 190 G$T2CON_6$0$0 == 0x00ce
191 00CE 191 _T2CON_6 = 0x00ce
192 00CF 192 G$T2CON_7$0$0 == 0x00cf
193 00CF 193 _T2CON_7 = 0x00cf
194 194 ;--------------------------------------------------------
195 195 ; internal ram data
196 196 ;--------------------------------------------------------
197 197 .area DSEG (DATA)
198 198 ;--------------------------------------------------------
199 199 ; overlayable items in internal ram
200 200 ;--------------------------------------------------------
201 201 .area OSEG (OVR,DATA)
202 202 ;--------------------------------------------------------
203 203 ; indirectly addressable internal ram data
204 204 ;--------------------------------------------------------
205 205 .area ISEG (DATA)
206 206 ;--------------------------------------------------------
208 208 ;--------------------------------------------------------
210 0000 210 F_ser$ser_txBusy$0$0==.
211 0000 211 _ser_txBusy:
213 213 ;--------------------------------------------------------
214 214 ; external ram data
215 215 ;--------------------------------------------------------
216 216 .area XSEG (XDATA)
217 0000 217 G$ser_txIndexIn$0$0==.
218 0000 218 _ser_txIndexIn:
220 0001 220 G$ser_txIndexOut$0$0==.
221 0001 221 _ser_txIndexOut:
223 0002 223 G$ser_rxIndexIn$0$0==.
224 0002 224 _ser_rxIndexIn:
226 0003 226 G$ser_rxIndexOut$0$0==.
227 0003 227 _ser_rxIndexOut:
229 0004 229 G$ser_txBuffer$0$0==.
230 0004 230 _ser_txBuffer:
232 0104 232 G$ser_rxBuffer$0$0==.
233 0104 233 _ser_rxBuffer:
235 0204 235 _ser_putc_c_1_1:
237 0205 237 _ser_getc_tmp_1_1:
239 0206 239 _ser_printString_String_1_1:
241 0209 241 _ser_charAvail_ret_1_1:
243 243 ;--------------------------------------------------------
244 244 ; global & static initialisations
245 245 ;--------------------------------------------------------
246 246 .area GSINIT (CODE)
247 247 ;--------------------------------------------------------
249 249 ;--------------------------------------------------------
250 250 .area CSEG (CODE)
251 0000 251 G$ser_init$0$0 ==.
253 253 ; -----------------------------------------
254 254 ; function ser_init
255 255 ; -----------------------------------------
266 0000 C2 AC 266 clr _ES
268 0002 C2*00 268 clr _ser_txBusy
270 0004 90s00r00 270 mov dptr,#_ser_txIndexIn
271 271 ; Peephole 180 changed mov to clr
273 0008 F0 273 movx @dptr,a
275 0009 90s00r01 275 mov dptr,#_ser_txIndexOut
276 276 ; Peephole 180 changed mov to clr
278 000D F0 278 movx @dptr,a
280 000E 90s00r02 280 mov dptr,#_ser_rxIndexIn
281 281 ; Peephole 180 changed mov to clr
283 0012 F0 283 movx @dptr,a
285 0013 90s00r03 285 mov dptr,#_ser_rxIndexOut
286 286 ; Peephole 180 changed mov to clr
288 0017 F0 288 movx @dptr,a
290 0018 75 C8 30 290 mov _T2CON,#0x30
292 001B 75 CB FF 292 mov _RCAP2H,#0xff
294 001E 75 CA DD 294 mov _RCAP2L,#0xdd
296 0021 75 C8 34 296 mov _T2CON,#0x34
298 0024 75 98 50 298 mov _SCON,#0x50
300 300 ; Peephole 111 removed ljmp by inverse jump logic
301 0027 30 99 02 301 jnb _TI,00102$
304 002A C2 99 304 clr _TI
307 307 ; Peephole 111 removed ljmp by inverse jump logic
308 002C 30 98 02 308 jnb _RI,00104$
311 002F C2 98 311 clr _RI
314 0031 D2 AC 314 setb _ES
316 0033 316 C$_ser.c$79$1$1 ==.
317 0033 317 XG$ser_init$0$0 ==.
319 0034 319 G$ser_interrupt_handler$0$0 ==.
321 321 ; -----------------------------------------
322 322 ; function ser_interrupt_handler
323 323 ; -----------------------------------------
324 0034 324 _ser_interrupt_handler:
333 0034 C0 E0 333 push acc
334 0036 C0 F0 334 push b
335 0038 C0 82 335 push dpl
336 003A C0 83 336 push dph
337 003C C0 D0 337 push psw
338 003E 75 D0 08 338 mov psw,#0x08
340 0041 C2 AC 340 clr _ES
342 342 ; Peephole 111 removed ljmp by inverse jump logic
343 0043 30 99 27 343 jnb _TI,00105$
346 0046 C2 99 346 clr _TI
348 0048 90s00r01 348 mov dptr,#_ser_txIndexOut
349 004B E0 349 movx a,@dptr
351 004D 90s00r00 351 mov dptr,#_ser_txIndexIn
352 0050 E0 352 movx a,@dptr
353 353 ; Peephole 105 removed redundant mov
355 355 ; Peephole 132 changed ljmp to sjmp
356 356 ; Peephole 199 optimized misc jump sequence
357 0052 B5 0A 04 357 cjne a,ar2,00102$
358 358 ; Peephole 201 removed redundant sjmp
362 0055 C2*00 362 clr _ser_txBusy
363 363 ; Peephole 132 changed ljmp to sjmp
364 0057 80 14 364 sjmp 00105$
367 0059 90s00r01 367 mov dptr,#_ser_txIndexOut
368 005C 74 01 368 mov a,#0x01
370 005F F0 370 movx @dptr,a
372 0061 24r04 372 add a,#_ser_txBuffer
373 0063 F5 82 373 mov dpl,a
374 374 ; Peephole 180 changed mov to clr
376 0066 34s00 376 addc a,#(_ser_txBuffer >> 8)
377 0068 F5 83 377 mov dph,a
378 006A E0 378 movx a,@dptr
379 006B F5 99 379 mov _SBUF,a
382 382 ; Peephole 111 removed ljmp by inverse jump logic
383 006D 30 98 1B 383 jnb _RI,00107$
386 0070 C2 98 386 clr _RI
388 0072 90s00r02 388 mov dptr,#_ser_rxIndexIn
389 0075 E0 389 movx a,@dptr
391 0077 90s00r02 391 mov dptr,#_ser_rxIndexIn
392 007A 74 01 392 mov a,#0x01
394 007D F0 394 movx @dptr,a
396 007F 24r04 396 add a,#_ser_rxBuffer
397 0081 F5 82 397 mov dpl,a
398 398 ; Peephole 180 changed mov to clr
400 0084 34s01 400 addc a,#(_ser_rxBuffer >> 8)
401 0086 F5 83 401 mov dph,a
402 0088 E5 99 402 mov a,_SBUF
403 008A F0 403 movx @dptr,a
406 008B D2 AC 406 setb _ES
408 008D D0 D0 408 pop psw
409 008F D0 83 409 pop dph
410 0091 D0 82 410 pop dpl
412 0095 D0 E0 412 pop acc
413 0097 413 C$_ser.c$102$1$1 ==.
414 0097 414 XG$ser_interrupt_handler$0$0 ==.
416 0098 416 G$ser_putc$0$0 ==.
418 418 ; -----------------------------------------
419 419 ; function ser_putc
420 420 ; -----------------------------------------
431 0098 C0 82 431 push dpl
432 009A 90s02r04 432 mov dptr,#_ser_putc_c_1_1
433 009D D0 E0 433 pop acc
434 009F F0 434 movx @dptr,a
436 00A0 C2 AC 436 clr _ES
438 438 ; Peephole 111 removed ljmp by inverse jump logic
439 00A2 30*00 20 439 jnb _ser_txBusy,00102$
442 00A5 90s00r00 442 mov dptr,#_ser_txIndexIn
443 00A8 E0 443 movx a,@dptr
445 00AA 90s00r00 445 mov dptr,#_ser_txIndexIn
446 00AD 74 01 446 mov a,#0x01
448 00B0 F0 448 movx @dptr,a
450 00B2 24r04 450 add a,#_ser_txBuffer
452 452 ; Peephole 180 changed mov to clr
454 00B6 34s00 454 addc a,#(_ser_txBuffer >> 8)
456 00B9 90s02r04 456 mov dptr,#_ser_putc_c_1_1
457 00BC E0 457 movx a,@dptr
458 458 ; Peephole 136 removed redundant moves
460 00BE 8A 82 460 mov dpl,r2
461 00C0 8B 83 461 mov dph,r3
462 00C2 F0 462 movx @dptr,a
463 463 ; Peephole 132 changed ljmp to sjmp
464 00C3 80 08 464 sjmp 00103$
467 00C5 D2*00 467 setb _ser_txBusy
469 00C7 90s02r04 469 mov dptr,#_ser_putc_c_1_1
470 00CA E0 470 movx a,@dptr
471 00CB F5 99 471 mov _SBUF,a
474 00CD D2 AC 474 setb _ES
476 00CF 476 C$_ser.c$118$1$1 ==.
477 00CF 477 XG$ser_putc$0$0 ==.
479 00D0 479 G$ser_getc$0$0 ==.
481 481 ; -----------------------------------------
482 482 ; function ser_getc
483 483 ; -----------------------------------------
486 00D0 90s00r03 486 mov dptr,#_ser_rxIndexOut
487 00D3 E0 487 movx a,@dptr
489 00D5 90s00r02 489 mov dptr,#_ser_rxIndexIn
490 00D8 E0 490 movx a,@dptr
491 491 ; Peephole 105 removed redundant mov
493 00DA B5 02 02 493 cjne a,ar2,00107$
494 494 ; Peephole 132 changed ljmp to sjmp
495 00DD 80 19 495 sjmp 00102$
498 00DF 90s00r03 498 mov dptr,#_ser_rxIndexOut
499 00E2 74 01 499 mov a,#0x01
501 00E5 F0 501 movx @dptr,a
503 00E7 24r04 503 add a,#_ser_rxBuffer
504 00E9 F5 82 504 mov dpl,a
505 505 ; Peephole 180 changed mov to clr
507 00EC 34s01 507 addc a,#(_ser_rxBuffer >> 8)
508 00EE F5 83 508 mov dph,a
509 00F0 E0 509 movx a,@dptr
510 510 ; Peephole 100 removed redundant mov
512 00F2 90s02r05 512 mov dptr,#_ser_getc_tmp_1_1
513 00F5 F0 513 movx @dptr,a
514 514 ; Peephole 132 changed ljmp to sjmp
515 00F6 80 05 515 sjmp 00103$
518 00F8 90s02r05 518 mov dptr,#_ser_getc_tmp_1_1
519 519 ; Peephole 180 changed mov to clr
521 00FC F0 521 movx @dptr,a
524 00FD 90s02r05 524 mov dptr,#_ser_getc_tmp_1_1
525 0100 E0 525 movx a,@dptr
527 0102 8A 82 527 mov dpl,r2
529 0104 529 C$_ser.c$135$1$1 ==.
530 0104 530 XG$ser_getc$0$0 ==.
532 0105 532 G$ser_printString$0$0 ==.
534 534 ; -----------------------------------------
535 535 ; function ser_printString
536 536 ; -----------------------------------------
537 0105 537 _ser_printString:
539 0105 C0 F0 539 push b
540 0107 C0 83 540 push dph
541 0109 C0 82 541 push dpl
542 010B 90s02r06 542 mov dptr,#_ser_printString_String_1_1
543 010E D0 E0 543 pop acc
544 0110 F0 544 movx @dptr,a
545 0111 D0 E0 545 pop acc
547 0114 F0 547 movx @dptr,a
548 0115 D0 E0 548 pop acc
550 0118 F0 550 movx @dptr,a
552 0119 90s02r06 552 mov dptr,#_ser_printString_String_1_1
553 011C E0 553 movx a,@dptr
556 011F E0 556 movx a,@dptr
559 0122 E0 559 movx a,@dptr
562 0124 8A 82 562 mov dpl,r2
563 0126 8B 83 563 mov dph,r3
564 0128 8C F0 564 mov b,r4
565 012A 12s00r00 565 lcall __gptrget
567 012E 90s02r06 567 mov dptr,#_ser_printString_String_1_1
569 0132 F0 569 movx @dptr,a
572 0135 F0 572 movx @dptr,a
575 0138 F0 575 movx @dptr,a
577 577 ; Peephole 110 removed ljmp by inverse jump logic
578 013A 60 18 578 jz 00104$
582 013D BA 00 01 582 cjne r2,#0x00,00109$
585 0141 C0 02 585 push ar2
586 0143 C0 03 586 push ar3
587 0145 C0 04 587 push ar4
588 0147 8D 82 588 mov dpl,r5
589 0149 12s00r98 589 lcall _ser_putc
590 014C D0 04 590 pop ar4
591 014E D0 03 591 pop ar3
592 0150 D0 02 592 pop ar2
593 593 ; Peephole 132 changed ljmp to sjmp
594 0152 80 D0 594 sjmp 00101$
596 0154 596 C$_ser.c$143$1$1 ==.
597 0154 597 XG$ser_printString$0$0 ==.
599 0155 599 G$ser_charAvail$0$0 ==.
601 601 ; -----------------------------------------
602 602 ; function ser_charAvail
603 603 ; -----------------------------------------
604 0155 604 _ser_charAvail:
606 0155 90s02r09 606 mov dptr,#_ser_charAvail_ret_1_1
607 607 ; Peephole 180 changed mov to clr
609 0159 F0 609 movx @dptr,a
611 015A 90s00r03 611 mov dptr,#_ser_rxIndexOut
612 015D E0 612 movx a,@dptr
614 015F 90s00r02 614 mov dptr,#_ser_rxIndexIn
615 0162 E0 615 movx a,@dptr
616 616 ; Peephole 105 removed redundant mov
618 0164 B5 02 02 618 cjne a,ar2,00106$
619 619 ; Peephole 132 changed ljmp to sjmp
620 0167 80 06 620 sjmp 00102$
623 0169 90s02r09 623 mov dptr,#_ser_charAvail_ret_1_1
624 016C 74 01 624 mov a,#0x01
625 016E F0 625 movx @dptr,a
628 016F 90s02r09 628 mov dptr,#_ser_charAvail_ret_1_1
629 0172 E0 629 movx a,@dptr
631 0174 8A 82 631 mov dpl,r2
633 0176 633 C$_ser.c$155$1$1 ==.
634 0176 634 XG$ser_charAvail$0$0 ==.
636 636 .area CSEG (CODE)