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 revision Previous revision
Next revision
Previous revision
base:more_hexadecimal_to_decimal_conversion [2017-03-18 09:14]
verz BinBcd for values up to 99
base:more_hexadecimal_to_decimal_conversion [2019-08-16 01:44] (current)
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 page 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 ​      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 ​    ; ​                              ​3 ​      ​25*6-1=149
 + 
 +        LDX #7;                                         ​2 ​      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 ​    ; ​                              ​3 ​      ​41*7-1=286
 + 
 +        LDX #3;                                         ​2 ​      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 ​    ; ​                              ​3 ​      ​53*3-1=158
 + 
 +        CLD             ; Back to binary ​               2       2; tot 615
 +       
 +        rts             ; All Done.                            ​
 </​code>​ </​code>​
base/more_hexadecimal_to_decimal_conversion.1489824848.txt.gz ยท Last modified: 2017-03-18 09:14 by verz