antoine-source/scsi2/BCD.S

192 lines
3.2 KiB
ArmAsm

*
* Playing with BCD
*
* (c) 2018, Brutal Deluxe Software
*
xc
xc
mx %00
org $1000
lst off
*---
clc
xce
rep #$30
lda #$1000
jsr BCD2HEX
lda #$9999
jsr BCD2HEX
lda #$270f
jsr HEX2BCD
sec
xce
sep #$30
rts
*---
mx %00
BCD2HEX pha
* milliers
and #$f000
lsr
lsr
lsr
xba
tax
lda tblBM,x
sta result
* centaines
lda 1,s
and #$0f00
asl
xba
tax
lda tblBC,x
clc
adc result
sta result
* dizaines
lda 1,s
and #$00f0
lsr
lsr
lsr
tax
lda tblBD,x
clc
adc result
sta result
* unites
lda 1,s
and #$000f
asl
tax
lda tblBU,x
clc
adc result
sta result
plx
jmp printME
*--- BCD 2 HEX table
tblBM dw 0000,1000,2000,3000,4000,5000,6000,7000,8000,9000
tblBC dw 0000,0100,0200,0300,0400,0500,0600,0700,0800,0900
tblBD dw 0000,0010,0020,0030,0040,0050,0060,0070,0080,0090
tblBU dw 0000,0001,0002,0003,0004,0005,0006,0007,0008,0009
*---
HEX2BCD pha
* Step 1
and #$f000
lsr
lsr
lsr
xba
tax
lda tblH1,x
sta result
* Step 2
lda 1,s
and #$0f00
asl
xba
tax
sed
lda tblH2,x
clc
adc result
sta result
cld
* Step 3
lda 1,s
and #$00f0
lsr
lsr
lsr
tax
sed
lda tblH3,x
clc
adc result
sta result
cld
* Step 4
lda 1,s
and #$000f
asl
tax
sed
lda tblH4,x
clc
adc result
sta result
cld
exit plx
jmp printME
*--- HEX 2 BCD table
tblH1 dw $0000,$4096,$8192
tblH2 dw $0000,$0256,$0512,$0768,$1024,$1280,$1536,$1792
dw $2048,$2304,$2560,$2816,$3072,$3328,$3584,$3840
tblH3 dw $0000,$0016,$0032,$0048,$0064,$0080,$0096,$0112
dw $0128,$0144,$0160,$0176,$0192,$0208,$0224,$0240
tblH4 dw $0000,$0001,$0002,$0003,$0004,$0005,$0006,$0007
dw $0008,$0009,$0010,$0011,$0012,$0013,$0014,$0015
*---
printME sta result
sec
xce
sep #$30
lda result+1
jsr $fdda
lda result
jsr $fdda
lda #$8d
jsr $fded
clc
xce
rep #$30
rts
*---
result ds 2