126 lines
2.0 KiB
ArmAsm
126 lines
2.0 KiB
ArmAsm
|
|
; Set current status or error
|
|
|
|
|
|
; XXX add code for handling the LEDs
|
|
|
|
|
|
; .A = status to set
|
|
|
|
util_status_SD:
|
|
|
|
ldx #$00
|
|
stx SD_STATUS_IDX ; set first byte of status to read
|
|
ldx #$00 ; offset to status buffer
|
|
bra util_status_common
|
|
|
|
util_status_FD:
|
|
|
|
ldx #$00
|
|
stx FD_STATUS_IDX ; set first byte of status to read
|
|
ldx #$20 ; offset to status buffer
|
|
bra util_status_common
|
|
|
|
util_status_RD:
|
|
|
|
ldx #$00
|
|
stx RD_STATUS_IDX ; set first byte of status to read
|
|
ldx #$40 ; offset to status buffer
|
|
|
|
; FALLLTROUGH
|
|
|
|
util_status_common:
|
|
|
|
; Store the error number
|
|
|
|
taz
|
|
jsr util_status_store_number
|
|
jsr util_status_store_comma
|
|
|
|
; Store the status / error string
|
|
|
|
tza ; prepare helper routine
|
|
tay
|
|
lda dos_sts_tab_lo, y
|
|
sta par_LDA_nnnn_Y+0
|
|
lda dos_sts_tab_hi, y
|
|
sta par_LDA_nnnn_Y+1
|
|
|
|
ldy #$00 ; copy the string
|
|
@lp:
|
|
jsr code_LDA_nnnn_Y
|
|
beq @lp_end
|
|
sta XX_STATUS_STR, x
|
|
iny
|
|
inx
|
|
bra @lp
|
|
|
|
@lp_end:
|
|
|
|
; Store track and sector
|
|
|
|
jsr util_status_store_comma
|
|
lda PAR_TRACK
|
|
jsr util_status_store_number
|
|
jsr util_status_store_comma
|
|
lda PAR_SECTOR
|
|
jsr util_status_store_number
|
|
|
|
; Mark end of status and quit
|
|
|
|
lda #$00
|
|
sta XX_STATUS_STR, x
|
|
rts
|
|
|
|
util_status_store_comma:
|
|
|
|
ldy #','
|
|
sty XX_STATUS_STR, x
|
|
inx
|
|
rts
|
|
|
|
util_status_store_number:
|
|
|
|
; Check if number to store is 200 or above
|
|
|
|
cmp #200
|
|
bcc @store_00_199
|
|
ldy #'2'
|
|
sty XX_STATUS_STR, x
|
|
inx
|
|
sec
|
|
sbc #200
|
|
bra @store_00_99
|
|
|
|
@store_00_199: ; number to store is within 00-199 range
|
|
|
|
cmp #100
|
|
bcc @store_00_99
|
|
ldy #'1'
|
|
sty XX_STATUS_STR, x
|
|
inx
|
|
sec
|
|
sbc #100
|
|
|
|
@store_00_99: ; number to store is within 00-99 range - separate digits
|
|
|
|
ldy #'0'
|
|
@lp:
|
|
cmp #10
|
|
bcc @store_finalize
|
|
iny
|
|
sec
|
|
sbc #10
|
|
bra @lp
|
|
|
|
@store_finalize: ; first digit to store in .Y, second in .A (need no add '0')
|
|
|
|
sty XX_STATUS_STR, x
|
|
inx
|
|
clc
|
|
adc #'0'
|
|
sta XX_STATUS_STR, x
|
|
inx
|
|
|
|
rts
|