Files
open-roms/src/dos_m65/filesystem_cbm/fs_cbm_nextfileblock.s
T

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