110 lines
1.4 KiB
ArmAsm
110 lines
1.4 KiB
ArmAsm
|
|
;
|
|
; CBM/CMD filesystem - helper routine to get the next file block
|
|
;
|
|
|
|
|
|
fs_cbm_nextfileblock:
|
|
|
|
; Fetch the next track/sector
|
|
|
|
lda PAR_SECTOR
|
|
and #$01
|
|
bne @part_2
|
|
|
|
@part_1:
|
|
|
|
; We were reading from the 1st half of the buffer
|
|
|
|
ldx SHARED_BUF_1+1
|
|
lda SHARED_BUF_1+0
|
|
bra @common_chk
|
|
|
|
@part_2:
|
|
|
|
; We were reading from the 2nd half of the buffer
|
|
|
|
ldx SHARED_BUF_1+$100+1
|
|
lda SHARED_BUF_1+$100+0
|
|
|
|
@common_chk:
|
|
|
|
bne fs_cbm_nextfileblock_common_load
|
|
|
|
; FALLTROUGH
|
|
|
|
fs_cbm_nextfileblock_eof:
|
|
|
|
lda #$00 ; end of file
|
|
sec
|
|
rts
|
|
|
|
fs_cbm_nextfileblock_common_load:
|
|
|
|
sta PAR_TRACK
|
|
stx PAR_SECTOR
|
|
|
|
; FALLTROUGH
|
|
|
|
fs_cbm_nextfileblock_got_ts:
|
|
|
|
; Load next track/sector
|
|
|
|
jsr lowlevel_readsector ; XXX handle read errors
|
|
|
|
; Store pointer and amount of data ready to fetch
|
|
|
|
lda #$FE
|
|
sta FD_ACPTR_LEN+0
|
|
lda #$00
|
|
sta FD_ACPTR_LEN+1
|
|
|
|
lda #$02
|
|
sta FD_ACPTR_PTR+0
|
|
lda #>SHARED_BUF_1
|
|
sta FD_ACPTR_PTR+1
|
|
|
|
lda PAR_SECTOR
|
|
and #$01
|
|
bne @part_2
|
|
|
|
@part_1:
|
|
|
|
; Sector with data is located in the 1st half of the buffer
|
|
|
|
lda SHARED_BUF_1+0
|
|
bne @exit
|
|
|
|
; Less than a full sector is used
|
|
|
|
lda SHARED_BUF_1+1
|
|
bra @not_full_buf
|
|
|
|
@part_2:
|
|
|
|
; Sector with data is located in the 2nd half of the buffer
|
|
|
|
inc FD_ACPTR_PTR+1
|
|
|
|
lda SHARED_BUF_1+$100+0
|
|
bne @exit
|
|
|
|
; Less than a full sector is used
|
|
|
|
lda SHARED_BUF_1+$100+1
|
|
|
|
@not_full_buf:
|
|
|
|
dec
|
|
cmp #$FF
|
|
beq fs_cbm_nextfileblock_eof
|
|
|
|
sta FD_ACPTR_LEN+0
|
|
|
|
; FALLTROUGH
|
|
|
|
@exit:
|
|
|
|
clc
|
|
rts
|