User Tools

Site Tools


base:another_hexadecimal_to_decimal_conversion
no way to compare when less than two revisions

Differences

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


Next revision
base:another_hexadecimal_to_decimal_conversion [2015-04-17 04:30] – external edit 127.0.0.1
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: 2020-11-14 23:05 by mace