## 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 #\$04
clear:
sta result,y
dey
bcs 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
beq zero	// skip (speed up) when there's nothing to add
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:                          // decimal values for every bit in 16-bit figure
.byte 0,0,0,0,1 // %0000000000000001
.byte 0,0,0,0,2 // %0000000000000010
.byte 0,0,0,0,4 // %0000000000000100
.byte 0,0,0,0,8 // %0000000000001000
.byte 0,0,0,1,6 // %0000000000010000
.byte 0,0,0,3,2 // %0000000000100000
.byte 0,0,0,6,4 // %0000000001000000
.byte 0,0,1,2,8 // %0000000010000000
.byte 0,0,2,5,6 // %0000000100000000
.byte 0,0,5,1,2 // %0000001000000000
.byte 0,1,0,2,4 // %0000010000000000
.byte 0,2,0,4,8 // %0000100000000000
.byte 0,4,0,9,6 // %0001000000000000
.byte 0,8,1,9,2 // %0010000000000000
.byte 1,6,3,8,4 // %0100000000000000
.byte 3,2,7,6,8 // %1000000000000000

result:
.byte 0,0,0,0,0 // this is where the result will be
lobyte:
.byte \$b3       // demonstration value
hibyte:
.byte \$a9       // demonstration value```