📄 bcdhex.asm
字号:
.area BCD_HEX(data,abs)
.org 0x12f
.M_bcdbuf:: .ds 2
.M_hexbuf:: .ds 2
.M_temp:: .ds 7
.area BCDHEX(code,rel)
;|-------------------------------------------|
;| .Hex2Bcd::For 2 bytes |
;| .Input: |
;| ex: hex=1986 bcd=6534 |
;| 19 =>.M_hexbuf |
;| 86 =>.M_hexbuf+1 |
;| call .Hex2Bcd |
;| result: |
;| 65 =>.M_bcdbuf |
;| 34 =>.M_bcdbuf+1 |
;|-------------------------------------------|
;--------------------------------------------
.Hex2Bcd::
lda #01h
sta PP
lda #0
sta .M_bcdbuf
sta .M_bcdbuf+1
lda #8
sta .M_temp+1
lda .M_hexbuf
sta .M_temp
.JUMP1:
lda .M_temp
adda #0
rolc
sta .M_temp
lda .M_bcdbuf+1
call .Chk_DAA
addc .M_bcdbuf+1
call .DAA
sta .M_bcdbuf+1
lda .M_bcdbuf
call .Chk_DAA
addc .M_bcdbuf
call .DAA
sta .M_bcdbuf
lda .M_temp+1
deca
sta .M_temp+1
brnz .JUMP1
lda #8
sta .M_temp+1
lda .M_hexbuf+1
sta .M_temp
.JUMP2:
lda .M_temp
adda #0
rolc
sta .M_temp
lda .M_bcdbuf+1
call .Chk_DAA
addc .M_bcdbuf+1
call .DAA
sta .M_bcdbuf+1
lda .M_bcdbuf
call .Chk_DAA
addc .M_bcdbuf
call .DAA
sta .M_bcdbuf
lda .M_temp+1
deca
sta .M_temp+1
brnz .JUMP2
lda .M_bcdbuf
;sta0 .Hbuf
lda .M_bcdbuf+1
;sta0 .Lbuf
ret
;-------------------------------------------
.Chk_DAA:
sta .M_temp+2
lda OP1
sta .M_temp+3
lda .M_temp+2
sta .M_temp+4
addc .M_temp+4
brc .JUMP1$
anda #0xf0
adda #0
cmpe #0xa0
brc .JUMP1$
lda #0
sta .M_temp+6
br .JUMP2$
.JUMP1$:
lda #1
sta .M_temp+6
.JUMP2$:
lda .M_temp+4
anda #0x0f
adda #0
rolc
cmpe #0x0a
brc .JUMP3$
lda #0
sta .M_temp+5
br .JUMP4$
.JUMP3$:
lda #1
sta .M_temp+5
.JUMP4$:
lda .M_temp+3
sta OP1
lda .M_temp+2
ret
.DAA:
sta .M_temp+4
lda .M_temp+5
anda #1
brz .NO_ADD6
lda .M_temp+4
adda #0x06
sta .M_temp+4
.NO_ADD6:
lda .M_temp+6
anda #1
brnz .ADD60
lda .M_temp+4
ret
.ADD60:
lda .M_temp+4
adda #0x60
suba #0
sta .M_temp+4
ret
;|-------------------------------------------|
;| .Bcd2Hex::For 2 bytes |
;| .Input: |
;| ex: bcd=1986 hex=07c2 |
;| 19 =>.M_bcdbuf |
;| 86 =>.M_bcdbuf+1 |
;| call .Bcd2Hex |
;| result: |
;| 07 =>.M_hexbuf |
;| c2 =>.M_hexbuf+1 |
;|-------------------------------------------|
;--------------------------------------------
.Bcd2Hex::
lda #01h
sta PP
lda .M_bcdbuf
sta .M_hexbuf
lda .M_bcdbuf+1
sta .M_bcdbuf
call .bcdtohex
lda .M_bcdbuf
sta .M_hexbuf+1
lda .M_hexbuf
sta .M_bcdbuf
call .bcdtohex
lda .M_bcdbuf
sta .M_hexbuf
lda #0
sta .M_bcdbuf
sta .M_bcdbuf+1
lda .M_hexbuf
sta .M_temp
.JMP1:
cmpe #0
brz .JMP2
lda .M_bcdbuf+1
adda #100
sta .M_bcdbuf+1
lda .M_bcdbuf
addc #0
sta .M_bcdbuf
lda .M_temp
deca
sta .M_temp
br .JMP1
.JMP2:
lda .M_bcdbuf+1
adda .M_hexbuf+1
sta .M_bcdbuf+1
lda .M_bcdbuf
addc #0
sta .M_bcdbuf
lda .M_bcdbuf
sta .M_hexbuf
;sta0 .Hbuf
lda .M_bcdbuf+1
sta .M_hexbuf+1
;sta0 .Lbuf
ret
;----------------------bcd to hex-----------------------
.bcdtohex:: ;Onebyte
lda #0h
sta .M_bcdbuf+1
.bcd_1$: lda .M_bcdbuf
suba #16h
brnc .bcd_4$
sta .M_bcdbuf
anda #0fh
suba #0ah
brz .bcd_2$
brnc .bcd_3$
.bcd_2$: lda .M_bcdbuf
suba #06h
sta .M_bcdbuf
.bcd_3$: lda .M_bcdbuf+1
adda #10h
sta .M_bcdbuf+1
br .bcd_1$
.bcd_4$: lda .M_bcdbuf
anda #0f0h
cmpe #0h
brz .bcd_5$
lda .M_bcdbuf
suba #06h
sta .M_bcdbuf
.bcd_5$:
lda .M_bcdbuf
adda .M_bcdbuf+1
sta .M_bcdbuf
;sta0 .Lbuf
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -