## Meta

This is an old revision of the document!

## 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:

```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 bit drops off, decimal value must be added
// if not, go to the next bit
txa
axs #\$05	// ILLEGAL OPCODE, alternatively use lines below
// sec
// sbc #\$05
// tax
bpl loop1
END:
rts

calculate:
clc
ldy #\$04
loop2:
lda table,x	// get decimal equivalent of bit in ASCII numbers
adc #\$00        // add carry, is set if the former addition ≥10
beq zero	// skip (speed up) when there's nothing to add
adc result,y	// add to whatever result we already have
cmp #\$3a	// ≥10 with the addition?
bcc notten      // if not, skip the subtraction
sbc #\$0a	// subtract 10
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```