User Tools

Site Tools


base:another_hexadecimal_to_decimal_conversion

Differences

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

Link to this comparison view

base:another_hexadecimal_to_decimal_conversion [2015-04-17 04:30] (current)
Line 1: Line 1:
 +===== Another Hexadecimal to Decimal Conversion =====
  
 +by Mace
 +
 +Garth Wilson used decimal mode in [[Hexadecimal to Decimal Conversion]] and the result was in 3 bytes in decimal mode. I needed plain ASCII, the following routine does just that, using more or less the same method as Garth used:
 +<​code>​
 +start:
 + lda #$30 // clear the result buffer
 + ldy #$00
 + clear:
 + sta result,y
 + iny
 + cpy #$05
 + bne clear
 + ldx #$4f
 +loop1:
 + clc
 + rol lobyte
 + rol hibyte
 + bcs calculate //​ when a bit drops off, it means we need to calculate
 + // if not, go to the next bit
 + txa
 + axs #$05 // ILLEGAL OPCODE, use the 3 lines below as alternative
 + // sec
 + // sbc #$05
 + // tax
 + cpx #$ff
 + bne loop1
 +END:
 + rts
 +
 +calculate:
 + clc
 + ldy #$04
 +loop2:
 + lda table,x // get the decimal equivalent of the bit in ASCII numbers
 + beq zero // skip (speed up) when there'​s nothing to add
 + adc result,y // add to whatever result we alread haven
 + cmp #$3a // passing 10 with the addition?
 + bcc notten
 + sbc #$0a // if so, subtract 10, carry will take care of overflow ​
 +notten:
 + sta result,y
 +zero:
 + dex
 + dey
 + bpl loop2 // loop until all 5 digits have been
 + jmp loop1
 +table:
 + .byte 0,0,0,0,1
 + .byte 0,0,0,0,2
 + .byte 0,0,0,0,4
 + .byte 0,0,0,0,8
 + .byte 0,0,0,1,6
 + .byte 0,0,0,3,2
 + .byte 0,0,0,6,4
 + .byte 0,0,1,2,8
 + .byte 0,0,2,5,6
 + .byte 0,0,5,1,2
 + .byte 0,1,0,2,4
 + .byte 0,2,0,4,8
 + .byte 0,4,0,9,6
 + .byte 0,8,1,9,2
 + .byte 1,6,3,8,4
 + .byte 3,2,7,6,8
 +
 +result:
 + .byte 0,0,0,0,0
 +lobyte:
 + .byte 11
 +hibyte:
 + .byte 0
 +</​code>​
base/another_hexadecimal_to_decimal_conversion.txt ยท Last modified: 2015-04-17 04:30 (external edit)