Fixed bug where we forgot to restore x in _hex_set_8 if the idx check fails. We did remember to restore it if the check passed. Fixed bug where _hex_set_24 did not return 0.
55 lines
1.0 KiB
ArmAsm
55 lines
1.0 KiB
ArmAsm
.include "io.inc65"
|
|
|
|
.importzp sp, sreg
|
|
|
|
.export _hex_set_8
|
|
.export _hex_set_16
|
|
.export _hex_set_24
|
|
.export _hex_enable
|
|
|
|
.autoimport on
|
|
|
|
.code
|
|
|
|
; @in A: idx Stack[0]: val
|
|
; @out A: 0 for success, 1 for failure.
|
|
; Sets one of the 3 pairs of hex digits.
|
|
_hex_set_8:
|
|
phx
|
|
cmp #$3 ; If idx >= 3 then fail
|
|
bcc @1
|
|
plx
|
|
lda #$1
|
|
rts
|
|
@1: tax ; Move idx into x
|
|
jsr popa ; put val into a
|
|
sta SEVEN_SEG,x ; write to val
|
|
lda #$0
|
|
plx
|
|
rts
|
|
|
|
; @in A/X: val
|
|
; @out A: 0 for success, 1 for failure
|
|
; Sets the low 2 pairs of hex digits
|
|
_hex_set_16:
|
|
sta SEVEN_SEG
|
|
stx SEVEN_SEG+1
|
|
lda #$0
|
|
rts
|
|
|
|
; @in A/X/sreg: val
|
|
; @out A: 0 for success, 1 for failure
|
|
; Sets the 3 pairs of hex digits for a 24 bit value
|
|
_hex_set_24:
|
|
sta SEVEN_SEG
|
|
stx SEVEN_SEG+1
|
|
lda sreg
|
|
sta SEVEN_SEG+2
|
|
lda #$0
|
|
rts
|
|
|
|
; @in A: mask
|
|
; Set the mask for seven seg enables
|
|
_hex_enable:
|
|
sta SEVEN_SEG+3
|
|
rts |