Eventually I want the kernel to be loaded from the SD card as well, but it still needs to separate from user programs. At some point there should be a folder just for the BIOS, which should read from the boot block of the SD card and start executing, and thats it.
71 lines
1.3 KiB
ArmAsm
71 lines
1.3 KiB
ArmAsm
.include "io.inc65"
|
|
|
|
.importzp sp, sreg
|
|
|
|
.export _hex_set_8
|
|
.export _hex_set_16
|
|
.export _hex_set_24
|
|
.export _hex_enable
|
|
.export _sw_read
|
|
.export _led_set
|
|
|
|
.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
|
|
|
|
; @out A: The Value of the switches
|
|
; Reads the current values of the switches.
|
|
_sw_read:
|
|
lda SW
|
|
ldx #$0
|
|
rts
|
|
|
|
; @in A: val
|
|
; @out A: 0 for success, 1 for failure
|
|
; Sets the LEDs
|
|
_led_set:
|
|
sta LED
|
|
rts |