Initial revision
[fw/sdcc] / device / lib / large / vprintf.asm
1 ;--------------------------------------------------------
2 ; File Created by SDCC : FreeWare ANSI-C Compiler
3 ; Version 2.1.9Ga Sun Jan 16 17:31:39 2000
4
5 ;--------------------------------------------------------
6         .module vprintf
7 ;--------------------------------------------------------
8 ; publics variables in this module
9 ;--------------------------------------------------------
10         .globl _vprintf_PARM_2
11         .globl _vsprintf_PARM_3
12         .globl _vsprintf_PARM_2
13         .globl _radix
14         .globl _output_ptr
15         .globl _lsd
16         .globl _lower_case
17         .globl _output_to_string
18         .globl _value
19         .globl _vsprintf
20         .globl _vprintf
21 ;--------------------------------------------------------
22 ; special function registers
23 ;--------------------------------------------------------
24 ;--------------------------------------------------------
25 ; special function bits 
26 ;--------------------------------------------------------
27 ;--------------------------------------------------------
28 ; internal ram data
29 ;--------------------------------------------------------
30         .area   DSEG    (DATA)
31 G$value$0$0==.
32 _value:
33         .ds     0x0005
34 _vsprintf_sloc0_1_0:
35         .ds     0x0001
36 _vsprintf_sloc1_1_0:
37         .ds     0x0001
38 _vsprintf_sloc2_1_0:
39         .ds     0x0003
40 _vsprintf_sloc3_1_0:
41         .ds     0x0001
42 _vsprintf_sloc4_1_0:
43         .ds     0x0001
44 _vsprintf_sloc5_1_0:
45         .ds     0x0001
46 _vsprintf_sloc6_1_0:
47         .ds     0x0001
48 _vsprintf_sloc7_1_0:
49         .ds     0x0001
50 _vsprintf_sloc8_1_0:
51         .ds     0x0001
52 _vsprintf_sloc9_1_0:
53         .ds     0x0001
54 _vsprintf_sloc10_1_0:
55         .ds     0x0001
56 _vsprintf_sloc11_1_0:
57         .ds     0x0001
58 _vsprintf_sloc12_1_0:
59         .ds     0x0001
60 _vsprintf_sloc13_1_0:
61         .ds     0x0001
62 ;--------------------------------------------------------
63 ; overlayable items in internal ram 
64 ;--------------------------------------------------------
65         .area   OSEG    (OVR,DATA)
66 ;--------------------------------------------------------
67 ; indirectly addressable internal ram data
68 ;--------------------------------------------------------
69         .area   ISEG    (DATA)
70 ;--------------------------------------------------------
71 ; bit data
72 ;--------------------------------------------------------
73         .area   BSEG    (BIT)
74 G$output_to_string$0$0==.
75 _output_to_string:
76         .ds     0x0001
77 G$lower_case$0$0==.
78 _lower_case:
79         .ds     0x0001
80 G$lsd$0$0==.
81 _lsd:
82         .ds     0x0001
83 _vsprintf_left_justify_1_1:
84         .ds     0x0001
85 _vsprintf_zero_padding_1_1:
86         .ds     0x0001
87 _vsprintf_prefix_sign_1_1:
88         .ds     0x0001
89 _vsprintf_prefix_space_1_1:
90         .ds     0x0001
91 _vsprintf_signed_argument_1_1:
92         .ds     0x0001
93 _vsprintf_char_argument_1_1:
94         .ds     0x0001
95 _vsprintf_long_argument_1_1:
96         .ds     0x0001
97 ;--------------------------------------------------------
98 ; external ram data
99 ;--------------------------------------------------------
100         .area   XSEG    (XDATA)
101 G$output_ptr$0$0==.
102 _output_ptr:
103         .ds     0x0003
104 G$radix$0$0==.
105 _radix:
106         .ds     0x0001
107 _vsprintf_PARM_2:
108         .ds     0x0003
109 _vsprintf_PARM_3:
110         .ds     0x0001
111 _vsprintf_buf_1_1:
112         .ds     0x0003
113 _vsprintf_width_1_1:
114         .ds     0x0001
115 _vsprintf_length_1_1:
116         .ds     0x0001
117 _vsprintf_c_1_1:
118         .ds     0x0001
119 _vprintf_PARM_2:
120         .ds     0x0001
121 _vprintf_format_1_1:
122         .ds     0x0003
123 ;--------------------------------------------------------
124 ; global & static initialisations
125 ;--------------------------------------------------------
126         .area GSINIT (CODE)
127 ;--------------------------------------------------------
128 ; code
129 ;--------------------------------------------------------
130         .area CSEG (CODE)
131         Fvprintf$output_char$0$0 ==.
132 ;       vprintf.c 63
133 ;       -----------------------------------------
134 ;        function output_char
135 ;       -----------------------------------------
136 _output_char:
137         ar2 = 0x02
138         ar3 = 0x03
139         ar4 = 0x04
140         ar5 = 0x05
141         ar6 = 0x06
142         ar7 = 0x07
143         ar0 = 0x00
144         ar1 = 0x01
145         push    _bp
146         mov     _bp,sp
147 ;       vprintf.c 0
148         mov     r2,dpl
149 ;       vprintf.c 65
150 ; Peephole 111   removed ljmp by inverse jump logic
151         jnb  _output_to_string,00102$
152 00107$:
153 ;       vprintf.c 67
154         mov     dptr,#_output_ptr
155         movx    a,@dptr
156         mov     r3,a
157         inc     dptr
158         movx    a,@dptr
159         mov     r4,a
160         inc     dptr
161         movx    a,@dptr
162         mov     r5,a
163         mov     dptr,#_output_ptr
164         mov     a,#0x01
165         add     a,r3
166         movx    @dptr,a
167 ; Peephole 180   changed mov to clr
168         clr  a
169         addc    a,r4
170         inc     dptr
171         movx    @dptr,a
172         inc     dptr
173         mov     a,r5
174         movx    @dptr,a
175         mov     dpl,r3
176         mov     dph,r4
177         mov     b,r5
178         mov     a,r2
179         lcall   __gptrput
180 ; Peephole 132   changed ljmp to sjmp
181         sjmp 00104$
182 00102$:
183 ;       vprintf.c 71
184         mov     dpl,r2
185         lcall   _putchar
186 00104$:
187         mov     sp,_bp
188         pop     _bp
189         C$vprintf.c$73$1$1 ==.
190         XFvprintf$output_char$0$0 ==.
191         ret
192         Fvprintf$output_digit$0$0 ==.
193 ;       vprintf.c 77
194 ;       -----------------------------------------
195 ;        function output_digit
196 ;       -----------------------------------------
197 _output_digit:
198         push    _bp
199         mov     _bp,sp
200 ;       vprintf.c 79
201         mov     r2,dpl
202         clr     c
203         mov     a,#0x09
204         subb    a,r2
205         clr     a
206         rlc     a
207 ; Peephole 105   removed redundant mov
208         mov  r3,a
209         cjne    a,#0x01,00109$
210 00109$:
211         clr     a
212         rlc     a
213 ; Peephole 105   removed redundant mov
214         mov  r3,a
215 ; Peephole 110   removed ljmp by inverse jump logic
216         jz  00103$
217 00110$:
218         mov     a,#0x30
219         add     a,r2
220         mov     r3,a
221 ; Peephole 132   changed ljmp to sjmp
222         sjmp 00104$
223 00103$:
224 ; Peephole 111   removed ljmp by inverse jump logic
225         jnb  _lower_case,00105$
226 00111$:
227         mov     a,#0x57
228         add     a,r2
229         mov     r4,a
230 ; Peephole 132   changed ljmp to sjmp
231         sjmp 00106$
232 00105$:
233         mov     a,#0x37
234         add     a,r2
235         mov     r4,a
236 00106$:
237         mov     ar3,r4
238 00104$:
239         mov     dpl,r3
240         lcall   _output_char
241 00101$:
242         mov     sp,_bp
243         pop     _bp
244         C$vprintf.c$80$1$1 ==.
245         XFvprintf$output_digit$0$0 ==.
246         ret
247         Fvprintf$output_2digits$0$0 ==.
248 ;       vprintf.c 84
249 ;       -----------------------------------------
250 ;        function output_2digits
251 ;       -----------------------------------------
252 _output_2digits:
253         push    _bp
254         mov     _bp,sp
255 ;       vprintf.c 87
256         mov     r2,dpl
257 ;       vprintf.c 86
258         mov     a,r2
259         swap    a
260         anl     a,#0x0f
261         mov     r3,a
262         push    ar2
263         mov     dpl,r3
264         lcall   _output_digit
265         pop     ar2
266 ;       vprintf.c 87
267         anl     ar2,#0x0f
268         mov     dpl,r2
269         lcall   _output_digit
270 00101$:
271         mov     sp,_bp
272         pop     _bp
273         C$vprintf.c$88$1$1 ==.
274         XFvprintf$output_2digits$0$0 ==.
275         ret
276         Fvprintf$calculate_digit$0$0 ==.
277 ;       vprintf.c 92
278 ;       -----------------------------------------
279 ;        function calculate_digit
280 ;       -----------------------------------------
281 _calculate_digit:
282 ;       vprintf.c 96
283         mov     r2,#0x20
284 00103$:
285         cjne    r2,#0x00,00112$
286 ; Peephole 132   changed ljmp to sjmp
287         sjmp 00107$
288 00112$:
289 ;       vprintf.c 115
290           clr  c
291           mov  a,_value+0
292           rlc  a
293           mov  _value+0,a
294           mov  a,_value+1
295           rlc  a
296           mov  _value+1,a
297           mov  a,_value+2
298           rlc  a
299           mov  _value+2,a
300           mov  a,_value+3
301           rlc  a
302           mov  _value+3,a
303           mov  a,_value+4
304           rlc  a
305           mov  _value+4,a
306 ;       vprintf.c 117
307         mov     dptr,#_radix
308         movx    a,@dptr
309         mov     r3,a
310         clr     c
311         mov     a,0x0004 + _value
312         subb    a,r3
313 ; Peephole 132   changed ljmp to sjmp
314 ; Peephole 160   removed sjmp by inverse jump logic
315         jc   00105$
316 00113$:
317 ;       vprintf.c 119
318         clr     c
319         mov     a,0x0004 + _value
320         subb    a,r3
321         mov     0x0004 + _value,a
322 ;       vprintf.c 120
323         mov     a,#0x01
324         add     a,_value
325         mov     _value,a
326 00105$:
327 ;       vprintf.c 96
328         dec     r2
329 ; Peephole 132   changed ljmp to sjmp
330         sjmp 00103$
331 00107$:
332         C$vprintf.c$123$1$1 ==.
333         XFvprintf$calculate_digit$0$0 ==.
334         ret
335         G$vsprintf$0$0 ==.
336 ;       vprintf.c 127
337 ;       -----------------------------------------
338 ;        function vsprintf
339 ;       -----------------------------------------
340 _vsprintf:
341 ;       vprintf.c 0
342         push    b
343         push    dph
344         push    dpl
345         mov     dptr,#_vsprintf_buf_1_1
346         pop     acc
347         movx    @dptr,a
348         pop     acc
349         inc     dptr
350         movx    @dptr,a
351         pop     acc
352         inc     dptr
353         movx    @dptr,a
354 ;       vprintf.c 141
355         mov     dptr,#_vsprintf_buf_1_1
356         movx    a,@dptr
357         mov     r2,a
358         inc     dptr
359         movx    a,@dptr
360         mov     r3,a
361         inc     dptr
362         movx    a,@dptr
363         mov     r4,a
364         mov     dptr,#_output_ptr
365         mov     a,r2
366         movx    @dptr,a
367         inc     dptr
368         mov     a,r3
369         movx    @dptr,a
370         inc     dptr
371         mov     a,r4
372         movx    @dptr,a
373 ;       vprintf.c 142
374         mov     a,r2
375         orl     a,r3
376         orl     a,r4
377 ; Peephole 109   removed ljmp by inverse jump logic
378         jnz  00102$
379 00262$:
380 ;       vprintf.c 144
381         clr     _output_to_string
382 ; Peephole 132   changed ljmp to sjmp
383         sjmp 00237$
384 00102$:
385 ;       vprintf.c 148
386         setb    _output_to_string
387 ;       vprintf.c 151
388 00237$:
389 00193$:
390         mov     dptr,#_vsprintf_PARM_2
391         movx    a,@dptr
392         mov     r2,a
393         inc     dptr
394         movx    a,@dptr
395         mov     r3,a
396         inc     dptr
397         movx    a,@dptr
398         mov     r4,a
399         mov     a,#0x01
400         add     a,r2
401         mov     r5,a
402 ; Peephole 180   changed mov to clr
403         clr  a
404         addc    a,r3
405         mov     r6,a
406         mov     ar7,r4
407         mov     dptr,#_vsprintf_PARM_2
408         mov     a,r5
409         movx    @dptr,a
410         inc     dptr
411         mov     a,r6
412         movx    @dptr,a
413         inc     dptr
414         mov     a,r7
415         movx    @dptr,a
416         mov     dpl,r2
417         mov     dph,r3
418         mov     b,r4
419         lcall   __gptrget
420 ; Peephole 105   removed redundant mov
421         mov  _vsprintf_sloc0_1_0,a
422         jnz     00263$
423         ljmp    00195$
424 00263$:
425 ;       vprintf.c 153
426         mov     a,_vsprintf_sloc0_1_0
427         cjne    a,#0x25,00264$
428         sjmp    00265$
429 00264$:
430         ljmp    00191$
431 00265$:
432 ;       vprintf.c 155
433         clr     _vsprintf_left_justify_1_1
434 ;       vprintf.c 156
435         clr     _vsprintf_zero_padding_1_1
436 ;       vprintf.c 157
437         clr     _vsprintf_prefix_sign_1_1
438 ;       vprintf.c 158
439         clr     _vsprintf_prefix_space_1_1
440 ;       vprintf.c 159
441         clr     _vsprintf_signed_argument_1_1
442 ;       vprintf.c 160
443         mov     dptr,#_radix
444 ; Peephole 180   changed mov to clr
445         clr  a
446         movx    @dptr,a
447 ;       vprintf.c 161
448         clr     _vsprintf_char_argument_1_1
449 ;       vprintf.c 162
450         clr     _vsprintf_long_argument_1_1
451 ;       vprintf.c 163
452         mov     dptr,#_vsprintf_width_1_1
453 ; Peephole 180   changed mov to clr
454         clr  a
455         movx    @dptr,a
456 ;       vprintf.c 167
457 00104$:
458         mov     _vsprintf_sloc2_1_0,r5
459         mov     (_vsprintf_sloc2_1_0 + 1),r6
460         mov     (_vsprintf_sloc2_1_0 + 2),r7
461         inc     r5
462         cjne    r5,#0x00,00266$
463         inc     r6
464 00266$:
465         mov     dptr,#_vsprintf_PARM_2
466         mov     a,r5
467         movx    @dptr,a
468         inc     dptr
469         mov     a,r6
470         movx    @dptr,a
471         inc     dptr
472         mov     a,r7
473         movx    @dptr,a
474         mov     dpl,_vsprintf_sloc2_1_0
475         mov     dph,(_vsprintf_sloc2_1_0 + 1)
476         mov     b,(_vsprintf_sloc2_1_0 + 2)
477         lcall   __gptrget
478 ; Peephole 100   removed redundant mov
479         mov  r1,a
480         mov  dptr,#_vsprintf_c_1_1
481         movx @dptr,a
482 ;       vprintf.c 169
483         push    ar5
484         push    ar6
485         push    ar7
486         push    ar1
487         mov     dpl,r1
488         lcall   _isdigit
489         mov     _vsprintf_sloc1_1_0,dpl
490         pop     ar1
491         pop     ar7
492         pop     ar6
493         pop     ar5
494         mov     a,_vsprintf_sloc1_1_0
495 ; Peephole 110   removed ljmp by inverse jump logic
496         jz  00108$
497 00267$:
498 ;       vprintf.c 171
499         mov     dptr,#_vsprintf_width_1_1
500         movx    a,@dptr
501         mov     r2,a
502         mov     b,#0x0a
503         mov     a,r2
504         mul     ab
505         mov     _vsprintf_sloc5_1_0,a
506         mov     a,r1
507         add     a,#0xd0
508 ; Peephole 105   removed redundant mov
509         mov  _vsprintf_sloc3_1_0,a
510         add     a,_vsprintf_sloc5_1_0
511 ; Peephole 100   removed redundant mov
512         mov  r0,a
513         mov  dptr,#_vsprintf_width_1_1
514         movx @dptr,a
515 ;       vprintf.c 173
516         cjne    r0,#0x00,00268$
517         mov     a,#0x01
518         sjmp    00269$
519 00268$:
520         clr     a
521 00269$:
522 ; Peephole 105   removed redundant mov
523         mov  _vsprintf_sloc4_1_0,a
524         jnz     00270$
525         ljmp    00104$
526 00270$:
527 ;       vprintf.c 176
528         setb    _vsprintf_zero_padding_1_1
529 ;       vprintf.c 178
530         ljmp    00104$
531 00108$:
532 ;       vprintf.c 181
533         push    ar2
534         push    ar5
535         push    ar6
536         push    ar7
537         push    ar0
538         push    ar1
539         mov     dpl,r1
540         lcall   _islower
541         mov     _vsprintf_sloc6_1_0,dpl
542         pop     ar1
543         pop     ar0
544         pop     ar7
545         pop     ar6
546         pop     ar5
547         pop     ar2
548         mov     a,_vsprintf_sloc6_1_0
549         cjne    a,#0x01,00271$
550 00271$:
551         cpl     c
552         mov     _lower_case,c
553 ;       vprintf.c 182
554 ; Peephole 111   removed ljmp by inverse jump logic
555         jnb  _lower_case,00110$
556 00272$:
557 ;       vprintf.c 184
558         mov     a,#0xdf
559         anl     a,r1
560         mov     dptr,#_vsprintf_c_1_1
561         movx    @dptr,a
562 00110$:
563 ;       vprintf.c 187
564         mov     dptr,#_vsprintf_c_1_1
565         movx    a,@dptr
566         mov     r3,a
567         cjne    r3,#0x20,00273$
568         mov     a,#0x01
569         sjmp    00274$
570 00273$:
571         clr     a
572 00274$:
573 ; Peephole 105   removed redundant mov
574         mov  _vsprintf_sloc7_1_0,a
575         jz      00275$
576         ljmp    00113$
577 00275$:
578         cjne    r3,#0x2b,00276$
579         mov     a,#0x01
580         sjmp    00277$
581 00276$:
582         clr     a
583 00277$:
584 ; Peephole 105   removed redundant mov
585         mov  _vsprintf_sloc8_1_0,a
586         jz      00278$
587         ljmp    00112$
588 00278$:
589         cjne    r3,#0x2d,00279$
590         mov     a,#0x01
591         sjmp    00280$
592 00279$:
593         clr     a
594 00280$:
595 ; Peephole 105   removed redundant mov
596         mov  _vsprintf_sloc9_1_0,a
597 ; Peephole 132   changed ljmp to sjmp
598 ; Peephole 163   removed sjmp by inverse jump logic
599         jnz  00111$
600 00281$:
601         cjne    r3,#0x42,00282$
602         mov     a,#0x01
603         sjmp    00283$
604 00282$:
605         clr     a
606 00283$:
607 ; Peephole 105   removed redundant mov
608         mov  _vsprintf_sloc10_1_0,a
609 ; Peephole 132   changed ljmp to sjmp
610 ; Peephole 163   removed sjmp by inverse jump logic
611         jnz  00114$
612 00284$:
613         cjne    r3,#0x43,00285$
614         mov     a,#0x01
615         sjmp    00286$
616 00285$:
617         clr     a
618 00286$:
619 ; Peephole 105   removed redundant mov
620         mov  _vsprintf_sloc11_1_0,a
621 ; Peephole 109   removed ljmp by inverse jump logic
622         jnz  00116$
623 00287$:
624         cjne    r3,#0x44,00288$
625         mov     a,#0x01
626         sjmp    00289$
627 00288$:
628         clr     a
629 00289$:
630 ; Peephole 105   removed redundant mov
631         mov  _vsprintf_sloc12_1_0,a
632         jz      00290$
633         ljmp    00137$
634 00290$:
635         cjne    r3,#0x49,00291$
636         mov     a,#0x01
637         sjmp    00292$
638 00291$:
639         clr     a
640 00292$:
641 ; Peephole 105   removed redundant mov
642         mov  _vsprintf_sloc13_1_0,a
643         jz      00293$
644         ljmp    00137$
645 00293$:
646         cjne    r3,#0x4c,00294$
647         mov     a,#0x01
648         sjmp    00295$
649 00294$:
650         clr     a
651 00295$:
652 ; Peephole 105   removed redundant mov
653         mov  r4,a
654 ; Peephole 109   removed ljmp by inverse jump logic
655         jnz  00115$
656 00296$:
657         cjne    r3,#0x4f,00297$
658         ljmp    00139$
659 00297$:
660         cjne    r3,#0x50,00298$
661         ljmp    00133$
662 00298$:
663         cjne    r3,#0x53,00299$
664 ; Peephole 132   changed ljmp to sjmp
665         sjmp 00117$
666 00299$:
667         cjne    r3,#0x55,00300$
668         ljmp    00140$
669 00300$:
670         cjne    r3,#0x58,00301$
671         ljmp    00141$
672 00301$:
673         ljmp    00142$
674 ;       vprintf.c 190
675 00111$:
676         setb    _vsprintf_left_justify_1_1
677 ;       vprintf.c 191
678         ljmp    00104$
679 ;       vprintf.c 193
680 00112$:
681         setb    _vsprintf_prefix_sign_1_1
682 ;       vprintf.c 194
683         ljmp    00104$
684 ;       vprintf.c 196
685 00113$:
686         setb    _vsprintf_prefix_space_1_1
687 ;       vprintf.c 197
688         ljmp    00104$
689 ;       vprintf.c 199
690 00114$:
691         setb    _vsprintf_char_argument_1_1
692 ;       vprintf.c 200
693         ljmp    00104$
694 ;       vprintf.c 202
695 00115$:
696         setb    _vsprintf_long_argument_1_1
697 ;       vprintf.c 203
698         ljmp    00104$
699 ;       vprintf.c 206
700 00116$:
701         mov     dptr,#_vsprintf_PARM_3
702         movx    a,@dptr
703 ; Peephole 105   removed redundant mov
704         mov  r2,a
705         add     a,#0xff
706 ; Peephole 100   removed redundant mov
707         mov  r0,a
708         mov  dptr,#_vsprintf_PARM_3
709         movx @dptr,a
710         mov     ar2,@r0
711         push    ar3
712         mov     dpl,r2
713         lcall   _output_char
714         pop     ar3
715 ;       vprintf.c 207
716         ljmp    00143$
717 ;       vprintf.c 210
718 00117$:
719         mov     dptr,#_vsprintf_PARM_3
720         movx    a,@dptr
721 ; Peephole 105   removed redundant mov
722         mov  r2,a
723         add     a,#0xfd
724 ; Peephole 100   removed redundant mov
725         mov  r0,a
726         mov  dptr,#_vsprintf_PARM_3
727         movx @dptr,a
728         mov     ar2,@r0
729         inc     r0
730         mov     ar4,@r0
731         inc     r0
732         mov     ar5,@r0
733         dec     r0
734         dec     r0
735         mov     _value,r2
736         mov     (_value + 1),r4
737         mov     (_value + 2),r5
738 ;       vprintf.c 212
739         push    ar3
740         mov     dpl,r2
741         mov     dph,r4
742         mov     b,r5
743         lcall   _strlen
744         mov     r2,dpl
745         mov     r4,dph
746         pop     ar3
747         mov     _vsprintf_sloc13_1_0,r2
748 ;       vprintf.c 213
749 ; Peephole 112   removed ljmp by inverse jump logic
750         jb   _vsprintf_left_justify_1_1,00124$
751 00302$:
752         mov     dptr,#_vsprintf_width_1_1
753         movx    a,@dptr
754         mov     r4,a
755         clr     c
756         mov     a,_vsprintf_sloc13_1_0
757         subb    a,r4
758 ; Peephole 108   removed ljmp by inverse jump logic
759         jnc  00124$
760 00303$:
761 ;       vprintf.c 215
762         clr     c
763         mov     a,r4
764         subb    a,_vsprintf_sloc13_1_0
765         mov     r4,a
766 ;       vprintf.c 216
767 00118$:
768         mov     ar5,r4
769         dec     r4
770         mov     dptr,#_vsprintf_width_1_1
771         mov     a,r4
772         movx    @dptr,a
773         cjne    r5,#0x00,00304$
774         mov     a,#0x01
775         sjmp    00305$
776 00304$:
777         clr     a
778 00305$:
779 ; Peephole 105   removed redundant mov
780         mov  r6,a
781 ; Peephole 109   removed ljmp by inverse jump logic
782         jnz  00124$
783 00306$:
784 ;       vprintf.c 218
785         push    ar3
786         push    ar4
787         push    ar5
788         push    ar6
789         mov     dpl,#0x20
790         lcall   _output_char
791         pop     ar6
792         pop     ar5
793         pop     ar4
794         pop     ar3
795 ;       vprintf.c 222
796 ; Peephole 132   changed ljmp to sjmp
797         sjmp 00118$
798 00124$:
799         mov     r4,_value
800         mov     r5,(_value + 1)
801         mov     r6,(_value + 2)
802         mov     dpl,r4
803         mov     dph,r5
804         mov     b,r6
805         lcall   __gptrget
806 ; Peephole 105   removed redundant mov
807         mov  _vsprintf_sloc12_1_0,a
808 ; Peephole 110   removed ljmp by inverse jump logic
809         jz  00126$
810 00307$:
811 ;       vprintf.c 223
812         mov     a,#0x01
813         add     a,r4
814         mov     r0,a
815 ; Peephole 180   changed mov to clr
816         clr  a
817         addc    a,r5
818         mov     r1,a
819         mov     ar2,r6
820         mov     _value,r0
821         mov     (_value + 1),r1
822         mov     (_value + 2),r2
823         mov     dpl,r4
824         mov     dph,r5
825         mov     b,r6
826         lcall   __gptrget
827         mov     r7,a
828         push    ar2
829         push    ar3
830         push    ar4
831         push    ar5
832         push    ar6
833         push    ar7
834         push    ar0
835         push    ar1
836         mov     dpl,r7
837         lcall   _output_char
838         pop     ar1
839         pop     ar0
840         pop     ar7
841         pop     ar6
842         pop     ar5
843         pop     ar4
844         pop     ar3
845         pop     ar2
846 ; Peephole 132   changed ljmp to sjmp
847         sjmp 00124$
848 00126$:
849 ;       vprintf.c 225
850         jb      _vsprintf_left_justify_1_1,00308$
851         ljmp    00143$
852 00308$:
853         mov     dptr,#_vsprintf_width_1_1
854         movx    a,@dptr
855         mov     r2,a
856         clr     c
857         mov     a,_vsprintf_sloc13_1_0
858         subb    a,r2
859         jc      00309$
860         ljmp    00143$
861 00309$:
862 ;       vprintf.c 227
863         clr     c
864         mov     a,r2
865         subb    a,_vsprintf_sloc13_1_0
866         mov     r2,a
867 ;       vprintf.c 228
868 00127$:
869         mov     ar4,r2
870         dec     r2
871         mov     dptr,#_vsprintf_width_1_1
872         mov     a,r2
873         movx    @dptr,a
874         cjne    r4,#0x00,00310$
875         mov     a,#0x01
876         sjmp    00311$
877 00310$:
878         clr     a
879 00311$:
880 ; Peephole 105   removed redundant mov
881         mov  r5,a
882         jz      00312$
883         ljmp    00143$
884 00312$:
885 ;       vprintf.c 230
886         push    ar2
887         push    ar3
888         push    ar4
889         push    ar5
890         mov     dpl,#0x20
891         lcall   _output_char
892         pop     ar5
893         pop     ar4
894         pop     ar3
895         pop     ar2
896 ;       vprintf.c 236
897 ; Peephole 132   changed ljmp to sjmp
898         sjmp 00127$
899 00133$:
900         mov     dptr,#_vsprintf_PARM_3
901         movx    a,@dptr
902 ; Peephole 105   removed redundant mov
903         mov  r2,a
904         add     a,#0xfd
905 ; Peephole 100   removed redundant mov
906         mov  r0,a
907         mov  dptr,#_vsprintf_PARM_3
908         movx @dptr,a
909         mov     ar2,@r0
910         inc     r0
911         mov     ar4,@r0
912         inc     r0
913         mov     ar5,@r0
914         dec     r0
915         dec     r0
916         mov     _value,r2
917         mov     (_value + 1),r4
918         mov     (_value + 2),r5
919 ;       vprintf.c 238
920         clr     c
921         mov     a,#0x03
922         subb    a,0x0002 + _value
923 ; Peephole 108   removed ljmp by inverse jump logic
924         jnc  00200$
925 00313$:
926         mov     r2,#0x04
927 ; Peephole 132   changed ljmp to sjmp
928         sjmp 00201$
929 00200$:
930         mov     r2,0x0002 + _value
931 00201$:
932         mov     a,r2
933 ; Peephole 180   changed mov to clr
934 ; Peephole 186   optimized movc sequence
935         mov  dptr,#_memory_id
936         movc a,@a+dptr
937         mov     r2,a
938         push    ar3
939         mov     dpl,r2
940         lcall   _output_char
941         pop     ar3
942 ;       vprintf.c 239
943         push    ar3
944         mov     dpl,#0x3a
945         lcall   _output_char
946         pop     ar3
947 ;       vprintf.c 240
948         mov     a,0x0002 + _value
949 ; Peephole 110   removed ljmp by inverse jump logic
950         jz  00135$
951 00314$:
952         mov     a,0x0002 + _value
953         cjne    a,#0x03,00315$
954 ; Peephole 132   changed ljmp to sjmp
955         sjmp 00135$
956 00315$:
957 ;       vprintf.c 241
958         push    ar3
959         mov     dpl,0x0001 + _value
960         lcall   _output_2digits
961         pop     ar3
962 00135$:
963 ;       vprintf.c 242
964         push    ar3
965         mov     dpl,_value
966         lcall   _output_2digits
967         pop     ar3
968 ;       vprintf.c 243
969 ;       vprintf.c 247
970 ; Peephole 132   changed ljmp to sjmp
971         sjmp 00143$
972 00137$:
973         setb    _vsprintf_signed_argument_1_1
974 ;       vprintf.c 248
975         mov     dptr,#_radix
976         mov     a,#0x0a
977         movx    @dptr,a
978 ;       vprintf.c 249
979 ;       vprintf.c 252
980 ; Peephole 132   changed ljmp to sjmp
981         sjmp 00143$
982 00139$:
983         mov     dptr,#_radix
984         mov     a,#0x08
985         movx    @dptr,a
986 ;       vprintf.c 253
987 ;       vprintf.c 256
988 ; Peephole 132   changed ljmp to sjmp
989         sjmp 00143$
990 00140$:
991         mov     dptr,#_radix
992         mov     a,#0x0a
993         movx    @dptr,a
994 ;       vprintf.c 257
995 ;       vprintf.c 260
996 ; Peephole 132   changed ljmp to sjmp
997         sjmp 00143$
998 00141$:
999         mov     dptr,#_radix
1000         mov     a,#0x10
1001         movx    @dptr,a
1002 ;       vprintf.c 261
1003 ;       vprintf.c 265
1004 ; Peephole 132   changed ljmp to sjmp
1005         sjmp 00143$
1006 00142$:
1007         mov     dpl,r3
1008         lcall   _output_char
1009 ;       vprintf.c 267
1010 00143$:
1011 ;       vprintf.c 269
1012         mov     dptr,#_radix
1013         movx    a,@dptr
1014         mov     r2,a
1015         cjne    r2,#0x00,00316$
1016         ljmp    00193$
1017 00316$:
1018 ;       vprintf.c 275
1019 ; Peephole 111   removed ljmp by inverse jump logic
1020         jnb  _vsprintf_char_argument_1_1,00152$
1021 00317$:
1022 ;       vprintf.c 277
1023         mov     dptr,#_vsprintf_PARM_3
1024         movx    a,@dptr
1025 ; Peephole 105   removed redundant mov
1026         mov  r2,a
1027         add     a,#0xff
1028 ; Peephole 100   removed redundant mov
1029         mov  r0,a
1030         mov  dptr,#_vsprintf_PARM_3
1031         movx @dptr,a
1032         mov     ar2,@r0
1033         mov     a,r2
1034         rlc     a
1035         subb    a,acc
1036         mov     r3,a
1037         mov     r4,a
1038         mov     r5,a
1039         mov     _value,r2
1040         mov     (_value + 1),r3
1041         mov     (_value + 2),r4
1042         mov     (_value + 3),r5
1043 ;       vprintf.c 278
1044         jnb     _vsprintf_signed_argument_1_1,00318$
1045         ljmp    00153$
1046 00318$:
1047 ;       vprintf.c 280
1048         mov     0x0001 + _value,#0x00
1049 ;       vprintf.c 281
1050         mov     0x0002 + _value,#0x00
1051 ;       vprintf.c 282
1052         mov     0x0003 + _value,#0x00
1053         ljmp    00153$
1054 00152$:
1055 ;       vprintf.c 285
1056 ; Peephole 111   removed ljmp by inverse jump logic
1057         jnb  _vsprintf_long_argument_1_1,00149$
1058 00319$:
1059 ;       vprintf.c 287
1060         mov     dptr,#_vsprintf_PARM_3
1061         movx    a,@dptr
1062 ; Peephole 105   removed redundant mov
1063         mov  r2,a
1064         add     a,#0xfc
1065 ; Peephole 100   removed redundant mov
1066         mov  r0,a
1067         mov  dptr,#_vsprintf_PARM_3
1068         movx @dptr,a
1069         mov     ar2,@r0
1070         inc     r0
1071         mov     ar3,@r0
1072         inc     r0
1073         mov     ar4,@r0
1074         inc     r0
1075         mov     ar5,@r0
1076         dec     r0
1077         dec     r0
1078         dec     r0
1079         mov     _value,r2
1080         mov     (_value + 1),r3
1081         mov     (_value + 2),r4
1082         mov     (_value + 3),r5
1083 ; Peephole 132   changed ljmp to sjmp
1084         sjmp 00153$
1085 00149$:
1086 ;       vprintf.c 291
1087         mov     dptr,#_vsprintf_PARM_3
1088         movx    a,@dptr
1089 ; Peephole 105   removed redundant mov
1090         mov  r2,a
1091         add     a,#0xfe
1092 ; Peephole 100   removed redundant mov
1093         mov  r0,a
1094         mov  dptr,#_vsprintf_PARM_3
1095         movx @dptr,a
1096         mov     ar2,@r0
1097         inc     r0
1098         mov     ar3,@r0
1099         dec     r0
1100         mov     a,r3
1101         rlc     a
1102         subb    a,acc
1103         mov     r4,a
1104         mov     r5,a
1105         mov     _value,r2
1106         mov     (_value + 1),r3
1107         mov     (_value + 2),r4
1108         mov     (_value + 3),r5
1109 ;       vprintf.c 292
1110 ; Peephole 112   removed ljmp by inverse jump logic
1111         jb   _vsprintf_signed_argument_1_1,00153$
1112 00320$:
1113 ;       vprintf.c 294
1114         mov     0x0002 + _value,#0x00
1115 ;       vprintf.c 295
1116         mov     0x0003 + _value,#0x00
1117 00153$:
1118 ;       vprintf.c 299
1119 ; Peephole 111   removed ljmp by inverse jump logic
1120         jnb  _vsprintf_signed_argument_1_1,00158$
1121 00321$:
1122 ;       vprintf.c 301
1123         mov     a,(_value + 3)
1124 ; Peephole 111   removed ljmp by inverse jump logic
1125         jnb  acc.7,00155$
1126 00322$:
1127 ;       vprintf.c 302
1128         clr     c
1129         clr     a
1130         subb    a,_value
1131         mov     r2,a
1132         clr     a
1133         subb    a,(_value + 1)
1134         mov     r3,a
1135         clr     a
1136         subb    a,(_value + 2)
1137         mov     r4,a
1138         clr     a
1139         subb    a,(_value + 3)
1140         mov     r5,a
1141         mov     _value,r2
1142         mov     (_value + 1),r3
1143         mov     (_value + 2),r4
1144         mov     (_value + 3),r5
1145 ; Peephole 132   changed ljmp to sjmp
1146         sjmp 00158$
1147 00155$:
1148 ;       vprintf.c 304
1149         clr     _vsprintf_signed_argument_1_1
1150 00158$:
1151 ;       vprintf.c 307
1152         mov     dptr,#_vsprintf_length_1_1
1153 ; Peephole 180   changed mov to clr
1154         clr  a
1155         movx    @dptr,a
1156 ;       vprintf.c 308
1157         setb    _lsd
1158 ;       vprintf.c 309
1159         mov     r2,#0x00
1160 00162$:
1161         mov     a,_value
1162 ; Peephole 162   removed sjmp by inverse jump logic
1163         jz   00324$
1164 00323$:
1165 ; Peephole 132   changed ljmp to sjmp
1166         sjmp 00163$
1167 00324$:
1168         mov     a,0x0001 + _value
1169 ; Peephole 162   removed sjmp by inverse jump logic
1170         jz   00326$
1171 00325$:
1172 ; Peephole 132   changed ljmp to sjmp
1173         sjmp 00163$
1174 00326$:
1175 ;       vprintf.c 310
1176         mov     a,0x0002 + _value
1177 ; Peephole 162   removed sjmp by inverse jump logic
1178         jz   00328$
1179 00327$:
1180 ; Peephole 132   changed ljmp to sjmp
1181         sjmp 00163$
1182 00328$:
1183         mov     a,0x0003 + _value
1184         jnz     00329$
1185         mov     a,#0x01
1186         sjmp    00330$
1187 00329$:
1188         clr     a
1189 00330$:
1190         mov     r3,a
1191         mov     dptr,#_vsprintf_length_1_1
1192         mov     a,r2
1193         movx    @dptr,a
1194         mov     a,r3
1195 ; Peephole 109   removed ljmp by inverse jump logic
1196         jnz  00164$
1197 00331$:
1198 00163$:
1199 ;       vprintf.c 312
1200         mov     0x0004 + _value,#0x00
1201 ;       vprintf.c 313
1202         push    ar2
1203         lcall   _calculate_digit
1204         pop     ar2
1205 ;       vprintf.c 327
1206           jb   _lsd,1$
1207           pop  b                ; b = <lsd>
1208           mov  a,_value+4       ; a = <msd>
1209           swap a
1210           orl  b,a              ; b = <msd><lsd>
1211           push b
1212           sjmp 2$
1213 1$:
1214           mov  a,_value+4       ; a = <lsd>
1215           push acc
1216 2$:
1217 ;       vprintf.c 329
1218         inc     r2
1219 ;       vprintf.c 330
1220 ; Peephole 167   removed redundant bit moves (c not set to _lsd)
1221         cpl  _lsd 
1222 ; Peephole 132   changed ljmp to sjmp
1223         sjmp 00162$
1224 00164$:
1225 ;       vprintf.c 333
1226         mov     dptr,#_vsprintf_width_1_1
1227         movx    a,@dptr
1228         mov     r3,a
1229 ; Peephole 132   changed ljmp to sjmp
1230 ; Peephole 199   optimized misc jump sequence
1231         cjne r3,#0x00,00166$
1232 ; Peephole 201   removed redundant sjmp
1233 00332$:
1234 00333$:
1235 ;       vprintf.c 338
1236         mov     dptr,#_vsprintf_width_1_1
1237         mov     a,#0x01
1238         movx    @dptr,a
1239 00166$:
1240 ;       vprintf.c 342
1241 ; Peephole 112   removed ljmp by inverse jump logic
1242         jb   _vsprintf_zero_padding_1_1,00171$
1243 00334$:
1244 ;       vprintf.c 344
1245         inc     r2
1246         mov     dptr,#_vsprintf_width_1_1
1247         movx    a,@dptr
1248         mov     r3,a
1249 00167$:
1250         clr     c
1251         mov     a,r2
1252         subb    a,r3
1253         clr     a
1254         rlc     a
1255         mov     r2,a
1256         mov     dptr,#_vsprintf_width_1_1
1257         mov     a,r3
1258         movx    @dptr,a
1259         mov     a,r2
1260 ; Peephole 110   removed ljmp by inverse jump logic
1261         jz  00171$
1262 00335$:
1263 ;       vprintf.c 346
1264         push    ar3
1265         mov     dpl,#0x20
1266         lcall   _output_char
1267         pop     ar3
1268 ;       vprintf.c 347
1269         dec     r3
1270 ; Peephole 132   changed ljmp to sjmp
1271         sjmp 00167$
1272 00171$:
1273 ;       vprintf.c 351
1274 ; Peephole 111   removed ljmp by inverse jump logic
1275         jnb  _vsprintf_signed_argument_1_1,00180$
1276 00336$:
1277 ;       vprintf.c 353
1278         mov     dpl,#0x2d
1279         lcall   _output_char
1280 ;       vprintf.c 355
1281         mov     dptr,#_vsprintf_width_1_1
1282         movx    a,@dptr
1283 ; Peephole 105   removed redundant mov
1284         mov  r2,a
1285         add     a,#0xff
1286         mov     dptr,#_vsprintf_width_1_1
1287         movx    @dptr,a
1288 ; Peephole 132   changed ljmp to sjmp
1289         sjmp 00258$
1290 00180$:
1291 ;       vprintf.c 357
1292         mov     dptr,#_vsprintf_length_1_1
1293         movx    a,@dptr
1294         mov     r2,a
1295         cjne    r2,#0x00,00337$
1296 ; Peephole 132   changed ljmp to sjmp
1297         sjmp 00258$
1298 00337$:
1299 ;       vprintf.c 360
1300 ; Peephole 111   removed ljmp by inverse jump logic
1301         jnb  _vsprintf_prefix_sign_1_1,00175$
1302 00338$:
1303 ;       vprintf.c 362
1304         mov     dpl,#0x2b
1305         lcall   _output_char
1306 ;       vprintf.c 364
1307         mov     dptr,#_vsprintf_width_1_1
1308         movx    a,@dptr
1309 ; Peephole 105   removed redundant mov
1310         mov  r2,a
1311         add     a,#0xff
1312         mov     dptr,#_vsprintf_width_1_1
1313         movx    @dptr,a
1314 ; Peephole 132   changed ljmp to sjmp
1315         sjmp 00258$
1316 00175$:
1317 ;       vprintf.c 366
1318 ; Peephole 111   removed ljmp by inverse jump logic
1319         jnb  _vsprintf_prefix_space_1_1,00258$
1320 00339$:
1321 ;       vprintf.c 368
1322         mov     dpl,#0x20
1323         lcall   _output_char
1324 ;       vprintf.c 370
1325         mov     dptr,#_vsprintf_width_1_1
1326         movx    a,@dptr
1327 ; Peephole 105   removed redundant mov
1328         mov  r2,a
1329         add     a,#0xff
1330         mov     dptr,#_vsprintf_width_1_1
1331         movx    @dptr,a
1332 ;       vprintf.c 375
1333 00258$:
1334         mov     dptr,#_vsprintf_length_1_1
1335         movx    a,@dptr
1336         mov     r2,a
1337         mov     dptr,#_vsprintf_width_1_1
1338         movx    a,@dptr
1339         mov     r3,a
1340 00182$:
1341         mov     ar4,r3
1342         dec     r3
1343         clr     c
1344         mov     a,r2
1345         subb    a,r4
1346 ; Peephole 108   removed ljmp by inverse jump logic
1347         jnc  00260$
1348 00340$:
1349 ;       vprintf.c 377
1350 ; Peephole 111   removed ljmp by inverse jump logic
1351         jnb  _vsprintf_zero_padding_1_1,00202$
1352 00341$:
1353         mov     r4,#0x30
1354 ; Peephole 132   changed ljmp to sjmp
1355         sjmp 00203$
1356 00202$:
1357         mov     r4,#0x20
1358 00203$:
1359         push    ar2
1360         push    ar3
1361         mov     dpl,r4
1362         lcall   _output_char
1363         pop     ar3
1364         pop     ar2
1365 ;       vprintf.c 381
1366 ; Peephole 132   changed ljmp to sjmp
1367         sjmp 00182$
1368 00260$:
1369 00185$:
1370         mov     ar3,r2
1371         dec     r2
1372         mov     a,r3
1373         jnz     00342$
1374         ljmp    00193$
1375 00342$:
1376 ;       vprintf.c 383
1377 ; Peephole 167   removed redundant bit moves (c not set to _lsd)
1378         cpl  _lsd 
1379 ;       vprintf.c 398
1380           jb   _lsd,3$
1381           pop  acc              ; a = <msd><lsd>
1382           nop                   ; to disable the "optimizer"
1383           push acc
1384           swap a
1385           anl  a,#0x0F          ; a = <msd>
1386           sjmp 4$
1387 3$:
1388           pop  acc
1389           anl  a,#0x0F          ; a = <lsd>
1390 4$:
1391           mov  _value+4,a
1392 ;       vprintf.c 400
1393         push    ar2
1394         mov     dpl,0x0004 + _value
1395         lcall   _output_digit
1396         pop     ar2
1397 ; Peephole 132   changed ljmp to sjmp
1398         sjmp 00185$
1399 00191$:
1400 ;       vprintf.c 407
1401         mov     dpl,_vsprintf_sloc0_1_0
1402         lcall   _output_char
1403         ljmp    00193$
1404 00195$:
1405 ;       vprintf.c 413
1406 ; Peephole 111   removed ljmp by inverse jump logic
1407         jnb  _output_to_string,00198$
1408 00343$:
1409         mov     dpl,#0x00
1410         lcall   _output_char
1411 00198$:
1412         C$vprintf.c$414$1$1 ==.
1413         XG$vsprintf$0$0 ==.
1414         ret
1415         G$vprintf$0$0 ==.
1416 ;       vprintf.c 418
1417 ;       -----------------------------------------
1418 ;        function vprintf
1419 ;       -----------------------------------------
1420 _vprintf:
1421 ;       vprintf.c 420
1422         push    b
1423         push    dph
1424         push    dpl
1425         mov     dptr,#_vprintf_format_1_1
1426         pop     acc
1427         movx    @dptr,a
1428         pop     acc
1429         inc     dptr
1430         movx    @dptr,a
1431         pop     acc
1432         inc     dptr
1433         movx    @dptr,a
1434         mov     dptr,#_vprintf_format_1_1
1435         movx    a,@dptr
1436         mov     r2,a
1437         inc     dptr
1438         movx    a,@dptr
1439         mov     r3,a
1440         inc     dptr
1441         movx    a,@dptr
1442         mov     r4,a
1443         mov     dptr,#_vprintf_PARM_2
1444         movx    a,@dptr
1445         mov     r5,a
1446         mov     dptr,#_vsprintf_PARM_2
1447         mov     a,r2
1448         movx    @dptr,a
1449         inc     dptr
1450         mov     a,r3
1451         movx    @dptr,a
1452         inc     dptr
1453         mov     a,r4
1454         movx    @dptr,a
1455         mov     dptr,#_vsprintf_PARM_3
1456         mov     a,r5
1457         movx    @dptr,a
1458 ; Peephole 181   used 16 bit load of dptr
1459         mov  dptr,#0x0000
1460         mov     b,#0x00
1461         lcall   _vsprintf
1462         C$vprintf.c$421$1$1 ==.
1463         XG$vprintf$0$0 ==.
1464 ; Peephole 151   removed misc moves via dph, dpl before return
1465 00101$:
1466         ret
1467         .area   CSEG    (CODE)
1468 Fvprintf$memory_id$0$0 == .
1469 _memory_id:
1470         .ascii /IXCP-/
1471         .byte   0