struct / union in initializer, RFE #901.
[sdcc.git] / sdcc / device / lib / pic16 / libc / utils / cnvfrac.S
blob4487f54e113576e8287adc5447b215f418361a63
1 ;--------------------------------------------------------------------------
2 ;  cnvfrac.S - conversion routine of 24 bits floating point to ASCII
4 ;  Copyright (C) 2004, Vangelis Rokas <vrokas at otenet.gr>
6 ;  This library is free software; you can redistribute it and/or modify it
7 ;  under the terms of the GNU General Public License as published by the
8 ;  Free Software Foundation; either version 2, or (at your option) any
9 ;  later version.
11 ;  This library is distributed in the hope that it will be useful,
12 ;  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 ;  GNU General Public License for more details.
16 ;  You should have received a copy of the GNU General Public License 
17 ;  along with this library; see the file COPYING. If not, write to the
18 ;  Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
19 ;   MA 02110-1301, USA.
21 ;  As a special exception, if you link this library with other files,
22 ;  some of which are compiled with SDCC, to produce an executable,
23 ;  this library does not by itself cause the resulting executable to
24 ;  be covered by the GNU General Public License. This exception does
25 ;  not however invalidate any other reasons why the executable file
26 ;  might be covered by the GNU General Public License.
27 ;--------------------------------------------------------------------------
29         radix dec
30         list
31         nolist
34 WREG    equ     0xfe8
35 POSTINC0        equ     0xfee
36 POSTDEC1        equ     0xfe5
37 PREINC1 equ     0xfe4
38 STATUS  equ     0xfd8
41         global  _convert_frac
44 .registers      udata_ovr       0x000
45 r0x00   res     1
46 r0x01   res     1
47 r0x02   res     1
48 r0x03   res     1
49 round_digit     res     1
50 d0x00   res     1
51 d0x01   res     1
52 d0x02   res     1
53 d0x03   res     1
54 d0x04   res     1
55 d0x05   res     1
56 d0x06   res     1
57 d0x07   res     1
58 d0x08   res     1
59 d0x09   res     1
60 d0x10   res     1
61 d0x11   res     1
62 d0x12   res     1
63 d0x13   res     1
64 d0x14   res     1
65 d0x15   res     1
66 d0x16   res     1
67 d0x17   res     1
68 d0x18   res     1
69 d0x19   res     1
70 d0x20   res     1
71 d0x21   res     1
72 d0x22   res     1
73 d0x23   res     1
74 d0x24   res     1
77 S__convert_frac code
78 _convert_frac:
80         movff   d0x00, POSTDEC1
81         movff   d0x01, POSTDEC1
82         movff   d0x02, POSTDEC1
83         movff   d0x03, POSTDEC1
84         movff   d0x04, POSTDEC1
85         movff   d0x05, POSTDEC1
86         movff   d0x06, POSTDEC1
87         movff   d0x07, POSTDEC1
88         movff   d0x08, POSTDEC1
89         movff   d0x09, POSTDEC1
90         movff   d0x10, POSTDEC1
91         movff   d0x11, POSTDEC1
92         movff   d0x12, POSTDEC1
93         movff   d0x13, POSTDEC1
94         movff   d0x14, POSTDEC1
95         movff   d0x15, POSTDEC1
96         movff   d0x16, POSTDEC1
97         movff   d0x17, POSTDEC1
98         movff   d0x18, POSTDEC1
99         movff   d0x19, POSTDEC1
100         movff   d0x20, POSTDEC1
101         movff   d0x21, POSTDEC1
102         movff   d0x22, POSTDEC1
103         movff   d0x23, POSTDEC1
104         movff   d0x24, POSTDEC1
107 ; adding digit 0
108 ;       movff   0xf7f, 0xfe8
110         movlw   0
112         btfsc   r0x00, 0                ; bit 0
113         addlw   5
116         clrf    d0x01
118         addlw   -10
119         bnc     @2
120         incf    d0x01, f
121         bra     @1
123         addlw   10
124         movwf   d0x00
127         decfsz  round_digit, f
128         bra     @3
129         addlw   251
130         bnc     @3
131         incf    d0x01, f
135 ; adding digit 1
136         movf    d0x01, w
138         btfsc   r0x00, 0                ; bit 0
139         addlw   2
141         btfsc   r0x00, 1                ; bit 1
142         addlw   5
145         clrf    d0x02
147         addlw   -10
148         bnc     @5
149         incf    d0x02, f
150         bra     @4
152         addlw   10
153         movwf   d0x01
156         decfsz  round_digit, f
157         bra     @6
158         addlw   251
159         bnc     @6
160         incf    d0x02, f
164 ; adding digit 2
165         movf    d0x02, w
167         btfsc   r0x00, 0                ; bit 0
168         addlw   6
170         btfsc   r0x00, 1                ; bit 1
171         addlw   2
173         btfsc   r0x00, 2                ; bit 2
174         addlw   5
177         clrf    d0x03
179         addlw   -10
180         bnc     @8
181         incf    d0x03, f
182         bra     @7
184         addlw   10
185         movwf   d0x02
188         decfsz  round_digit, f
189         bra     @9
190         addlw   251
191         bnc     @9
192         incf    d0x03, f
196 ; adding digit 3
197         movf    d0x03, w
199         btfsc   r0x00, 1                ; bit 1
200         addlw   1
202         btfsc   r0x00, 2                ; bit 2
203         addlw   2
205         btfsc   r0x00, 3                ; bit 3
206         addlw   5
209         clrf    d0x04
210 @10:
211         addlw   -10
212         bnc     @11
213         incf    d0x04, f
214         bra     @10
215 @11:
216         addlw   10
217         movwf   d0x03
220         decfsz  round_digit, f
221         bra     @12
222         addlw   251
223         bnc     @12
224         incf    d0x04, f
226 @12:
228 ; adding digit 4
229         movf    d0x04, w
231         btfsc   r0x00, 0                ; bit 0
232         addlw   9
234         btfsc   r0x00, 1                ; bit 1
235         addlw   8
237         btfsc   r0x00, 2                ; bit 2
238         addlw   6
240         btfsc   r0x00, 3                ; bit 3
241         addlw   2
243         btfsc   r0x00, 4                ; bit 4
244         addlw   5
247         clrf    d0x05
248 @13:
249         addlw   -10
250         bnc     @14
251         incf    d0x05, f
252         bra     @13
253 @14:
254         addlw   10
255         movwf   d0x04
258         decfsz  round_digit, f
259         bra     @15
260         addlw   251
261         bnc     @15
262         incf    d0x05, f
264 @15:
266 ; adding digit 5
267         movf    d0x05, w
269         btfsc   r0x00, 0                ; bit 0
270         addlw   3
272         btfsc   r0x00, 1                ; bit 1
273         addlw   7
275         btfsc   r0x00, 2                ; bit 2
276         addlw   5
278         btfsc   r0x00, 3                ; bit 3
279         addlw   1
281         btfsc   r0x00, 4                ; bit 4
282         addlw   2
284         btfsc   r0x00, 5                ; bit 5
285         addlw   5
288         clrf    d0x06
289 @16:
290         addlw   -10
291         bnc     @17
292         incf    d0x06, f
293         bra     @16
294 @17:
295         addlw   10
296         movwf   d0x05
299         decfsz  round_digit, f
300         bra     @18
301         addlw   251
302         bnc     @18
303         incf    d0x06, f
305 @18:
307 ; adding digit 6
308         movf    d0x06, w
310         btfsc   r0x00, 0                ; bit 0
311         addlw   5
313         btfsc   r0x00, 2                ; bit 2
314         addlw   1
316         btfsc   r0x00, 3                ; bit 3
317         addlw   3
319         btfsc   r0x00, 4                ; bit 4
320         addlw   6
322         btfsc   r0x00, 5                ; bit 5
323         addlw   2
325         btfsc   r0x00, 6                ; bit 6
326         addlw   5
329         clrf    d0x07
330 @19:
331         addlw   -10
332         bnc     @20
333         incf    d0x07, f
334         bra     @19
335 @20:
336         addlw   10
337         movwf   d0x06
340         decfsz  round_digit, f
341         bra     @21
342         addlw   251
343         bnc     @21
344         incf    d0x07, f
346 @21:
348 ; adding digit 7
349         movf    d0x07, w
351         btfsc   r0x00, 0                ; bit 0
352         addlw   7
354         btfsc   r0x00, 1                ; bit 1
355         addlw   5
357         btfsc   r0x00, 5                ; bit 5
358         addlw   1
360         btfsc   r0x00, 6                ; bit 6
361         addlw   2
363         btfsc   r0x00, 7                ; bit 7
364         addlw   5
367         clrf    d0x08
368 @22:
369         addlw   -10
370         bnc     @23
371         incf    d0x08, f
372         bra     @22
373 @23:
374         addlw   10
375         movwf   d0x07
378         decfsz  round_digit, f
379         bra     @24
380         addlw   251
381         bnc     @24
382         incf    d0x08, f
384 @24:
386 ; adding digit 8
387         movf    d0x08, w
389         btfsc   r0x00, 0                ; bit 0
390         addlw   7
392         btfsc   r0x00, 1                ; bit 1
393         addlw   5
395         btfsc   r0x00, 2                ; bit 2
396         addlw   1
398         btfsc   r0x00, 3                ; bit 3
399         addlw   2
401         btfsc   r0x00, 4                ; bit 4
402         addlw   4
404         btfsc   r0x00, 5                ; bit 5
405         addlw   8
407         btfsc   r0x00, 6                ; bit 6
408         addlw   6
410         btfsc   r0x00, 7                ; bit 7
411         addlw   2
413         btfsc   r0x01, 0                ; bit 8
414         addlw   5
417         clrf    d0x09
418 @25:
419         addlw   -10
420         bnc     @26
421         incf    d0x09, f
422         bra     @25
423 @26:
424         addlw   10
425         movwf   d0x08
428         decfsz  round_digit, f
429         bra     @27
430         addlw   251
431         bnc     @27
432         incf    d0x09, f
434 @27:
436 ; adding digit 9
437         movf    d0x09, w
439         btfsc   r0x00, 0                ; bit 0
440         addlw   4
442         btfsc   r0x00, 1                ; bit 1
443         addlw   9
445         btfsc   r0x00, 2                ; bit 2
446         addlw   9
448         btfsc   r0x00, 3                ; bit 3
449         addlw   8
451         btfsc   r0x00, 4                ; bit 4
452         addlw   6
454         btfsc   r0x00, 5                ; bit 5
455         addlw   2
457         btfsc   r0x00, 6                ; bit 6
458         addlw   5
460         btfsc   r0x00, 7                ; bit 7
461         addlw   1
463         btfsc   r0x01, 0                ; bit 8
464         addlw   2
466         btfsc   r0x01, 1                ; bit 9
467         addlw   5
470         clrf    d0x10
471 @28:
472         addlw   -10
473         bnc     @29
474         incf    d0x10, f
475         bra     @28
476 @29:
477         addlw   10
478         movwf   d0x09
481         decfsz  round_digit, f
482         bra     @30
483         addlw   251
484         bnc     @30
485         incf    d0x10, f
487 @30:
489 ; adding digit 10
490         movf    d0x10, w
492         btfsc   r0x00, 0                ; bit 0
493         addlw   4
495         btfsc   r0x00, 1                ; bit 1
496         addlw   8
498         btfsc   r0x00, 2                ; bit 2
499         addlw   7
501         btfsc   r0x00, 3                ; bit 3
502         addlw   5
504         btfsc   r0x00, 4                ; bit 4
505         addlw   1
507         btfsc   r0x00, 5                ; bit 5
508         addlw   3
510         btfsc   r0x00, 6                ; bit 6
511         addlw   6
513         btfsc   r0x00, 7                ; bit 7
514         addlw   3
516         btfsc   r0x01, 0                ; bit 8
517         addlw   6
519         btfsc   r0x01, 1                ; bit 9
520         addlw   2
522         btfsc   r0x01, 2                ; bit 10
523         addlw   5
526         clrf    d0x11
527 @31:
528         addlw   -10
529         bnc     @32
530         incf    d0x11, f
531         bra     @31
532 @32:
533         addlw   10
534         movwf   d0x10
537         decfsz  round_digit, f
538         bra     @33
539         addlw   251
540         bnc     @33
541         incf    d0x11, f
543 @33:
545 ; adding digit 11
546         movf    d0x11, w
548         btfsc   r0x00, 0                ; bit 0
549         addlw   6
551         btfsc   r0x00, 1                ; bit 1
552         addlw   2
554         btfsc   r0x00, 2                ; bit 2
555         addlw   5
557         btfsc   r0x00, 3                ; bit 3
558         addlw   1
560         btfsc   r0x00, 4                ; bit 4
561         addlw   3
563         btfsc   r0x00, 5                ; bit 5
564         addlw   6
566         btfsc   r0x00, 6                ; bit 6
567         addlw   2
569         btfsc   r0x00, 7                ; bit 7
570         addlw   5
572         btfsc   r0x01, 1                ; bit 9
573         addlw   1
575         btfsc   r0x01, 2                ; bit 10
576         addlw   2
578         btfsc   r0x01, 3                ; bit 11
579         addlw   5
582         clrf    d0x12
583 @34:
584         addlw   -10
585         bnc     @35
586         incf    d0x12, f
587         bra     @34
588 @35:
589         addlw   10
590         movwf   d0x11
593         decfsz  round_digit, f
594         bra     @36
595         addlw   251
596         bnc     @36
597         incf    d0x12, f
599 @36:
601 ; adding digit 12
602         movf    d0x12, w
604         btfsc   r0x00, 0                ; bit 0
605         addlw   4
607         btfsc   r0x00, 1                ; bit 1
608         addlw   9
610         btfsc   r0x00, 2                ; bit 2
611         addlw   8
613         btfsc   r0x00, 3                ; bit 3
614         addlw   7
616         btfsc   r0x00, 4                ; bit 4
617         addlw   4
619         btfsc   r0x00, 5                ; bit 5
620         addlw   8
622         btfsc   r0x00, 6                ; bit 6
623         addlw   7
625         btfsc   r0x00, 7                ; bit 7
626         addlw   4
628         btfsc   r0x01, 0                ; bit 8
629         addlw   9
631         btfsc   r0x01, 1                ; bit 9
632         addlw   8
634         btfsc   r0x01, 2                ; bit 10
635         addlw   6
637         btfsc   r0x01, 3                ; bit 11
638         addlw   2
640         btfsc   r0x01, 4                ; bit 12
641         addlw   5
644         clrf    d0x13
645 @37:
646         addlw   -10
647         bnc     @38
648         incf    d0x13, f
649         bra     @37
650 @38:
651         addlw   10
652         movwf   d0x12
655         decfsz  round_digit, f
656         bra     @39
657         addlw   251
658         bnc     @39
659         incf    d0x13, f
661 @39:
663 ; adding digit 13
664         movf    d0x13, w
666         btfsc   r0x00, 2                ; bit 2
667         addlw   1
669         btfsc   r0x00, 3                ; bit 3
670         addlw   3
672         btfsc   r0x00, 4                ; bit 4
673         addlw   7
675         btfsc   r0x00, 5                ; bit 5
676         addlw   4
678         btfsc   r0x00, 6                ; bit 6
679         addlw   9
681         btfsc   r0x00, 7                ; bit 7
682         addlw   9
684         btfsc   r0x01, 0                ; bit 8
685         addlw   8
687         btfsc   r0x01, 1                ; bit 9
688         addlw   7
690         btfsc   r0x01, 2                ; bit 10
691         addlw   5
693         btfsc   r0x01, 3                ; bit 11
694         addlw   1
696         btfsc   r0x01, 4                ; bit 12
697         addlw   2
699         btfsc   r0x01, 5                ; bit 13
700         addlw   5
703         clrf    d0x14
704 @40:
705         addlw   -10
706         bnc     @41
707         incf    d0x14, f
708         bra     @40
709 @41:
710         addlw   10
711         movwf   d0x13
714         decfsz  round_digit, f
715         bra     @42
716         addlw   251
717         bnc     @42
718         incf    d0x14, f
720 @42:
722 ; adding digit 14
723         movf    d0x14, w
725         btfsc   r0x00, 0                ; bit 0
726         addlw   6
728         btfsc   r0x00, 1                ; bit 1
729         addlw   2
731         btfsc   r0x00, 2                ; bit 2
732         addlw   4
734         btfsc   r0x00, 3                ; bit 3
735         addlw   8
737         btfsc   r0x00, 4                ; bit 4
738         addlw   6
740         btfsc   r0x00, 5                ; bit 5
741         addlw   3
743         btfsc   r0x00, 6                ; bit 6
744         addlw   6
746         btfsc   r0x00, 7                ; bit 7
747         addlw   3
749         btfsc   r0x01, 0                ; bit 8
750         addlw   7
752         btfsc   r0x01, 1                ; bit 9
753         addlw   5
755         btfsc   r0x01, 2                ; bit 10
756         addlw   1
758         btfsc   r0x01, 3                ; bit 11
759         addlw   3
761         btfsc   r0x01, 4                ; bit 12
762         addlw   6
764         btfsc   r0x01, 5                ; bit 13
765         addlw   2
767         btfsc   r0x01, 6                ; bit 14
768         addlw   5
771         clrf    d0x15
772 @43:
773         addlw   -10
774         bnc     @44
775         incf    d0x15, f
776         bra     @43
777 @44:
778         addlw   10
779         movwf   d0x14
782         decfsz  round_digit, f
783         bra     @45
784         addlw   251
785         bnc     @45
786         incf    d0x15, f
788 @45:
790 ; adding digit 15
791         movf    d0x15, w
793         btfsc   r0x00, 0                ; bit 0
794         addlw   9
796         btfsc   r0x00, 1                ; bit 1
797         addlw   9
799         btfsc   r0x00, 2                ; bit 2
800         addlw   8
802         btfsc   r0x00, 3                ; bit 3
803         addlw   6
805         btfsc   r0x00, 4                ; bit 4
806         addlw   3
808         btfsc   r0x00, 5                ; bit 5
809         addlw   7
811         btfsc   r0x00, 6                ; bit 6
812         addlw   4
814         btfsc   r0x00, 7                ; bit 7
815         addlw   9
817         btfsc   r0x01, 0                ; bit 8
818         addlw   8
820         btfsc   r0x01, 1                ; bit 9
821         addlw   7
823         btfsc   r0x01, 2                ; bit 10
824         addlw   5
826         btfsc   r0x01, 5                ; bit 13
827         addlw   1
829         btfsc   r0x01, 6                ; bit 14
830         addlw   2
832         btfsc   r0x01, 7                ; bit 15
833         addlw   5
836         clrf    d0x16
837 @46:
838         addlw   -10
839         bnc     @47
840         incf    d0x16, f
841         bra     @46
842 @47:
843         addlw   10
844         movwf   d0x15
847         decfsz  round_digit, f
848         bra     @48
849         addlw   251
850         bnc     @48
851         incf    d0x16, f
853 @48:
855 ; adding digit 16
856         movf    d0x16, w
858         btfsc   r0x00, 0                ; bit 0
859         addlw   5
861         btfsc   r0x00, 1                ; bit 1
862         addlw   1
864         btfsc   r0x00, 2                ; bit 2
865         addlw   3
867         btfsc   r0x00, 3                ; bit 3
868         addlw   7
870         btfsc   r0x00, 4                ; bit 4
871         addlw   5
873         btfsc   r0x00, 6                ; bit 6
874         addlw   1
876         btfsc   r0x00, 7                ; bit 7
877         addlw   2
879         btfsc   r0x01, 0                ; bit 8
880         addlw   5
882         btfsc   r0x01, 1                ; bit 9
883         addlw   1
885         btfsc   r0x01, 2                ; bit 10
886         addlw   3
888         btfsc   r0x01, 3                ; bit 11
889         addlw   7
891         btfsc   r0x01, 4                ; bit 12
892         addlw   4
894         btfsc   r0x01, 5                ; bit 13
895         addlw   8
897         btfsc   r0x01, 6                ; bit 14
898         addlw   6
900         btfsc   r0x01, 7                ; bit 15
901         addlw   2
903         btfsc   r0x02, 0                ; bit 16
904         addlw   5
907         clrf    d0x17
908 @49:
909         addlw   -10
910         bnc     @50
911         incf    d0x17, f
912         bra     @49
913 @50:
914         addlw   10
915         movwf   d0x16
918         decfsz  round_digit, f
919         bra     @51
920         addlw   251
921         bnc     @51
922         incf    d0x17, f
924 @51:
926 ; adding digit 17
927         movf    d0x17, w
929         btfsc   r0x00, 1                ; bit 1
930         addlw   1
932         btfsc   r0x00, 2                ; bit 2
933         addlw   2
935         btfsc   r0x00, 3                ; bit 3
936         addlw   4
938         btfsc   r0x00, 4                ; bit 4
939         addlw   9
941         btfsc   r0x00, 5                ; bit 5
942         addlw   9
944         btfsc   r0x00, 6                ; bit 6
945         addlw   8
947         btfsc   r0x00, 7                ; bit 7
948         addlw   6
950         btfsc   r0x01, 0                ; bit 8
951         addlw   2
953         btfsc   r0x01, 1                ; bit 9
954         addlw   5
956         btfsc   r0x01, 4                ; bit 12
957         addlw   1
959         btfsc   r0x01, 5                ; bit 13
960         addlw   2
962         btfsc   r0x01, 6                ; bit 14
963         addlw   5
965         btfsc   r0x01, 7                ; bit 15
966         addlw   1
968         btfsc   r0x02, 0                ; bit 16
969         addlw   2
971         btfsc   r0x02, 1                ; bit 17
972         addlw   5
975         clrf    d0x18
976 @52:
977         addlw   -10
978         bnc     @53
979         incf    d0x18, f
980         bra     @52
981 @53:
982         addlw   10
983         movwf   d0x17
986         decfsz  round_digit, f
987         bra     @54
988         addlw   251
989         bnc     @54
990         incf    d0x18, f
992 @54:
994 ; adding digit 18
995         movf    d0x18, w
997         btfsc   r0x00, 5                ; bit 5
998         addlw   1
1000         btfsc   r0x00, 6                ; bit 6
1001         addlw   3
1003         btfsc   r0x00, 7                ; bit 7
1004         addlw   7
1006         btfsc   r0x01, 0                ; bit 8
1007         addlw   5
1009         btfsc   r0x01, 2                ; bit 10
1010         addlw   1
1012         btfsc   r0x01, 3                ; bit 11
1013         addlw   2
1015         btfsc   r0x01, 4                ; bit 12
1016         addlw   4
1018         btfsc   r0x01, 5                ; bit 13
1019         addlw   8
1021         btfsc   r0x01, 6                ; bit 14
1022         addlw   6
1024         btfsc   r0x01, 7                ; bit 15
1025         addlw   3
1027         btfsc   r0x02, 0                ; bit 16
1028         addlw   6
1030         btfsc   r0x02, 1                ; bit 17
1031         addlw   2
1033         btfsc   r0x02, 2                ; bit 18
1034         addlw   5
1037         clrf    d0x19
1038 @55:
1039         addlw   -10
1040         bnc     @56
1041         incf    d0x19, f
1042         bra     @55
1043 @56:
1044         addlw   10
1045         movwf   d0x18
1048         decfsz  round_digit, f
1049         bra     @57
1050         addlw   251
1051         bnc     @57
1052         incf    d0x19, f
1054 @57:
1056 ; adding digit 19
1057         movf    d0x19, w
1059         btfsc   r0x01, 0                ; bit 8
1060         addlw   1
1062         btfsc   r0x01, 1                ; bit 9
1063         addlw   3
1065         btfsc   r0x01, 2                ; bit 10
1066         addlw   6
1068         btfsc   r0x01, 3                ; bit 11
1069         addlw   2
1071         btfsc   r0x01, 4                ; bit 12
1072         addlw   4
1074         btfsc   r0x01, 5                ; bit 13
1075         addlw   8
1077         btfsc   r0x01, 6                ; bit 14
1078         addlw   7
1080         btfsc   r0x01, 7                ; bit 15
1081         addlw   5
1083         btfsc   r0x02, 1                ; bit 17
1084         addlw   1
1086         btfsc   r0x02, 2                ; bit 18
1087         addlw   2
1089         btfsc   r0x02, 3                ; bit 19
1090         addlw   5
1093         clrf    d0x20
1094 @58:
1095         addlw   -10
1096         bnc     @59
1097         incf    d0x20, f
1098         bra     @58
1099 @59:
1100         addlw   10
1101         movwf   d0x19
1104         decfsz  round_digit, f
1105         bra     @60
1106         addlw   251
1107         bnc     @60
1108         incf    d0x20, f
1110 @60:
1112 ; adding digit 20
1113         movf    d0x20, w
1115         btfsc   r0x01, 3                ; bit 11
1116         addlw   1
1118         btfsc   r0x01, 4                ; bit 12
1119         addlw   2
1121         btfsc   r0x01, 5                ; bit 13
1122         addlw   4
1124         btfsc   r0x01, 6                ; bit 14
1125         addlw   9
1127         btfsc   r0x01, 7                ; bit 15
1128         addlw   9
1130         btfsc   r0x02, 0                ; bit 16
1131         addlw   9
1133         btfsc   r0x02, 1                ; bit 17
1134         addlw   8
1136         btfsc   r0x02, 2                ; bit 18
1137         addlw   6
1139         btfsc   r0x02, 3                ; bit 19
1140         addlw   2
1142         btfsc   r0x02, 4                ; bit 20
1143         addlw   5
1146         clrf    d0x21
1147 @61:
1148         addlw   -10
1149         bnc     @62
1150         incf    d0x21, f
1151         bra     @61
1152 @62:
1153         addlw   10
1154         movwf   d0x20
1157         decfsz  round_digit, f
1158         bra     @63
1159         addlw   251
1160         bnc     @63
1161         incf    d0x21, f
1163 @63:
1165 ; adding digit 21
1166         movf    d0x21, w
1168         btfsc   r0x01, 7                ; bit 15
1169         addlw   1
1171         btfsc   r0x02, 0                ; bit 16
1172         addlw   3
1174         btfsc   r0x02, 1                ; bit 17
1175         addlw   7
1177         btfsc   r0x02, 2                ; bit 18
1178         addlw   5
1180         btfsc   r0x02, 3                ; bit 19
1181         addlw   1
1183         btfsc   r0x02, 4                ; bit 20
1184         addlw   2
1186         btfsc   r0x02, 5                ; bit 21
1187         addlw   5
1190         clrf    d0x22
1191 @64:
1192         addlw   -10
1193         bnc     @65
1194         incf    d0x22, f
1195         bra     @64
1196 @65:
1197         addlw   10
1198         movwf   d0x21
1201         decfsz  round_digit, f
1202         bra     @66
1203         addlw   251
1204         bnc     @66
1205         incf    d0x22, f
1207 @66:
1209 ; adding digit 22
1210         movf    d0x22, w
1212         btfsc   r0x02, 2                ; bit 18
1213         addlw   1
1215         btfsc   r0x02, 3                ; bit 19
1216         addlw   3
1218         btfsc   r0x02, 4                ; bit 20
1219         addlw   6
1221         btfsc   r0x02, 5                ; bit 21
1222         addlw   2
1224         btfsc   r0x02, 6                ; bit 22
1225         addlw   5
1228         clrf    d0x23
1229 @67:
1230         addlw   -10
1231         bnc     @68
1232         incf    d0x23, f
1233         bra     @67
1234 @68:
1235         addlw   10
1236         movwf   d0x22
1239         decfsz  round_digit, f
1240         bra     @69
1241         addlw   251
1242         bnc     @69
1243         incf    d0x23, f
1245 @69:
1247 ; adding digit 23
1248         movf    d0x23, w
1250         btfsc   r0x02, 5                ; bit 21
1251         addlw   1
1253         btfsc   r0x02, 6                ; bit 22
1254         addlw   2
1256         btfsc   r0x02, 7                ; bit 23
1257         addlw   5
1260         clrf    d0x24
1261 @70:
1262         addlw   -10
1263         bnc     @71
1264         incf    d0x24, f
1265         bra     @70
1266 @71:
1267         addlw   10
1268         movwf   d0x23
1271         decfsz  round_digit, f
1272         bra     @72
1273         addlw   251
1274         bnc     @72
1275         incf    d0x24, f
1277 @72:
1280 ; finalization
1281 @73:
1282         addlw   48
1283         movwf   POSTINC0
1284         movf    d0x22, w
1285 @74:
1286         addlw   48
1287         movwf   POSTINC0
1288         movf    d0x21, w
1289 @75:
1290         addlw   48
1291         movwf   POSTINC0
1292         movf    d0x20, w
1293 @76:
1294         addlw   48
1295         movwf   POSTINC0
1296         movf    d0x19, w
1297 @77:
1298         addlw   48
1299         movwf   POSTINC0
1300         movf    d0x18, w
1301 @78:
1302         addlw   48
1303         movwf   POSTINC0
1304         movf    d0x17, w
1305 @79:
1306         addlw   48
1307         movwf   POSTINC0
1308         movf    d0x16, w
1309 @80:
1310         addlw   48
1311         movwf   POSTINC0
1312         movf    d0x15, w
1313 @81:
1314         addlw   48
1315         movwf   POSTINC0
1316         movf    d0x14, w
1317 @82:
1318         addlw   48
1319         movwf   POSTINC0
1320         movf    d0x13, w
1321 @83:
1322         addlw   48
1323         movwf   POSTINC0
1324         movf    d0x12, w
1325 @84:
1326         addlw   48
1327         movwf   POSTINC0
1328         movf    d0x11, w
1329 @85:
1330         addlw   48
1331         movwf   POSTINC0
1332         movf    d0x10, w
1333 @86:
1334         addlw   48
1335         movwf   POSTINC0
1336         movf    d0x09, w
1337 @87:
1338         addlw   48
1339         movwf   POSTINC0
1340         movf    d0x08, w
1341 @88:
1342         addlw   48
1343         movwf   POSTINC0
1344         movf    d0x07, w
1345 @89:
1346         addlw   48
1347         movwf   POSTINC0
1348         movf    d0x06, w
1349 @90:
1350         addlw   48
1351         movwf   POSTINC0
1352         movf    d0x05, w
1353 @91:
1354         addlw   48
1355         movwf   POSTINC0
1356         movf    d0x04, w
1357 @92:
1358         addlw   48
1359         movwf   POSTINC0
1360         movf    d0x03, w
1361 @93:
1362         addlw   48
1363         movwf   POSTINC0
1364         movf    d0x02, w
1365 @94:
1366         addlw   48
1367         movwf   POSTINC0
1368         movf    d0x01, w
1369 @95:
1370         addlw   48
1371         movwf   POSTINC0
1372         movf    d0x00, w
1373 @96:
1374         addlw   48
1375         movwf   POSTINC0
1377         movlw   23
1379         movff   PREINC1, d0x24
1380         movff   PREINC1, d0x23
1381         movff   PREINC1, d0x22
1382         movff   PREINC1, d0x21
1383         movff   PREINC1, d0x20
1384         movff   PREINC1, d0x19
1385         movff   PREINC1, d0x18
1386         movff   PREINC1, d0x17
1387         movff   PREINC1, d0x16
1388         movff   PREINC1, d0x15
1389         movff   PREINC1, d0x14
1390         movff   PREINC1, d0x13
1391         movff   PREINC1, d0x12
1392         movff   PREINC1, d0x11
1393         movff   PREINC1, d0x10
1394         movff   PREINC1, d0x09
1395         movff   PREINC1, d0x08
1396         movff   PREINC1, d0x07
1397         movff   PREINC1, d0x06
1398         movff   PREINC1, d0x05
1399         movff   PREINC1, d0x04
1400         movff   PREINC1, d0x03
1401         movff   PREINC1, d0x02
1402         movff   PREINC1, d0x01
1403         movff   PREINC1, d0x00
1404         return
1406         end
1408 ; Conversion table
1410 ;00     0.5000000000000000000000000     5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1411 ;01     0.2500000000000000000000000     2 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1412 ;02     0.1250000000000000000000000     1 2 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1413 ;03     0.0625000000000000000000000     0 6 2 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1414 ;04     0.0312500000000000000000000     0 3 1 2 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1415 ;05     0.0156250000000000000000000     0 1 5 6 2 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1416 ;06     0.0078125000000000000000000     0 0 7 8 1 2 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1417 ;07     0.0039062500000000000000000     0 0 3 9 0 6 2 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1418 ;08     0.0019531250000000000000000     0 0 1 9 5 3 1 2 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1419 ;09     0.0009765625000000000000000     0 0 0 9 7 6 5 6 2 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
1420 ;10     0.0004882812500000000000000     0 0 0 4 8 8 2 8 1 2 5 0 0 0 0 0 0 0 0 0 0 0 0 0 
1421 ;11     0.0002441406250000000000000     0 0 0 2 4 4 1 4 0 6 2 5 0 0 0 0 0 0 0 0 0 0 0 0 
1422 ;12     0.0001220703125000000000000     0 0 0 1 2 2 0 7 0 3 1 2 5 0 0 0 0 0 0 0 0 0 0 0 
1423 ;13     0.0000610351562500000000000     0 0 0 0 6 1 0 3 5 1 5 6 2 5 0 0 0 0 0 0 0 0 0 0 
1424 ;14     0.0000305175781250000000000     0 0 0 0 3 0 5 1 7 5 7 8 1 2 5 0 0 0 0 0 0 0 0 0 
1425 ;15     0.0000152587890625000000000     0 0 0 0 1 5 2 5 8 7 8 9 0 6 2 5 0 0 0 0 0 0 0 0 
1426 ;16     0.0000076293945312500000000     0 0 0 0 0 7 6 2 9 3 9 4 5 3 1 2 5 0 0 0 0 0 0 0 
1427 ;17     0.0000038146972656250000000     0 0 0 0 0 3 8 1 4 6 9 7 2 6 5 6 2 5 0 0 0 0 0 0 
1428 ;18     0.0000019073486328125000000     0 0 0 0 0 1 9 0 7 3 4 8 6 3 2 8 1 2 5 0 0 0 0 0 
1429 ;19     0.0000009536743164062500000     0 0 0 0 0 0 9 5 3 6 7 4 3 1 6 4 0 6 2 5 0 0 0 0 
1430 ;20     0.0000004768371582031250000     0 0 0 0 0 0 4 7 6 8 3 7 1 5 8 2 0 3 1 2 5 0 0 0 
1431 ;21     0.0000002384185791015625000     0 0 0 0 0 0 2 3 8 4 1 8 5 7 9 1 0 1 5 6 2 5 0 0 
1432 ;22     0.0000001192092895507812500     0 0 0 0 0 0 1 1 9 2 0 9 2 8 9 5 5 0 7 8 1 2 5 0 
1433 ;23     0.0000000596046447753906250     0 0 0 0 0 0 0 5 9 6 0 4 6 4 4 7 7 5 3 9 0 6 2 5