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: | ||
+ | < | ||
+ | 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 // | ||
+ | // 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' | ||
+ | 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 | ||
+ | </ |
base/another_hexadecimal_to_decimal_conversion.txt · Last modified: 2020-11-14 23:05 by mace