User Tools

Site Tools


base:more_hexadecimal_to_decimal_conversion

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Last revisionBoth sides next revision
base:more_hexadecimal_to_decimal_conversion [2017-03-18 09:14] – BinBcd for values up to 99 verzbase:more_hexadecimal_to_decimal_conversion [2019-08-16 01:42] verz
Line 136: Line 136:
 BIN .DW  12345 BIN .DW  12345
 BCD .DS  3 BCD .DS  3
 +</code>
 +
 +This is the same routine, just unrolled. It gains 250 cycles for that (30%).
 +Using zero pages variables the gain is of 116 cycles more.
 +<code>
 +;-------------------------------
 +; Converts a 16bit number in BCD
 +;-------------------------------
 +;
 +;  call it with the value in bin
 +;-------------------------------
 +BINBCD16
 +        SED             ; Switch to decimal mode        2
 +        LDA #0          ; Ensure the result is clear    2
 +        STA bcd+0;                                      4
 +        STA bcd+1;                                      4
 +        STA bcd+2;                                      4       16
 + 
 +        LDX #6;                                               2
 +CNVBIT1          
 +        ASL bin+0       ; Shift out one bit             6
 +        ROL bin+1       ;                               6
 +;        LDA bcd+0      ; And add into result          
 +        ADC bcd+0       ;                               4
 +        STA bcd+0       ;                               4
 +;        LDA bcd+1      ; propagating any carry
 +;        ADC bcd+1
 +;        STA bcd+1
 +;        LDA bcd+2      ; ... thru whole result
 +;        ADC bcd+2
 +;        STA bcd+2
 +        DEX             ; And repeat for next bit       2
 +        BNE CNVBIT1     ;                                     25*6-1=149
 + 
 +        LDX #7;                                               2
 +CNVBIT2
 +        ASL bin+0      ; Shift out one bit              6
 +        ROL bin+1       ;                               6
 +        LDA bcd+0      ; And add into result            4
 +        ADC bcd+0       ;                               4
 +        STA bcd+0       ;                               4
 +        LDA bcd+1      ; propagating any carry          4
 +        ADC bcd+1       ;                               4
 +        STA bcd+1       ;                               4
 +;        LDA bcd+2      ; ... thru whole result
 +;        ADC bcd+2
 +;        STA bcd+2
 +        DEX             ; And repeat for next bit       2
 +        BNE CNVBIT2     ;                                     41*7-1=286
 + 
 +        LDX #3;                                               2
 +CNVBIT3
 +        ASL bin+0       ; Shift out one bit             6
 +        ROL bin+1       ;                               6
 +        LDA bcd+0      ; And add into result            4
 +        ADC bcd+0       ;                               4
 +        STA bcd+0       ;                               4
 +        LDA bcd+1      ; propagating any carry          4
 +        ADC bcd+1       ;                               4
 +        STA bcd+1       ;                               4
 +        LDA bcd+2      ; ... thru whole result          4
 +        ADC bcd+2       ;                               4
 +        STA bcd+2       ;                               4
 +        DEX             ; And repeat for next bit       2
 +        BNE CNVBIT3     ;                                     53*3-1=158
 + 
 +        CLD             ; Back to binary                2       2; tot 615
 +       
 +        rts             ; All Done.                            
 </code> </code>
base/more_hexadecimal_to_decimal_conversion.txt · Last modified: 2019-08-16 01:44 by verz