nearly complete floppy directory display

This commit is contained in:
FeralChild64 committed 2021-03-05 21:44:55 +01:00
1 parent 57bdda7eb5
commit 02588f4952
3 files changed
+87 -10

No files matched your search

+13 -6
View File
@@ -109,12 +109,12 @@
!addr FD_STATUS_IDX = $806E ; - floppy
!addr RD_STATUS_IDX = $806F ; - ram disk
; Various, most likely to be reworked
!addr SD_DESC = $8070 ; current file descriptor
!addr FD_DIRENT = $8071 ; directory entry to read, 0-15
; XXX Free space
@@ -173,9 +173,16 @@
!addr FD_STATUS_BUF = $AEC0 ; - floppy
!addr RD_STATUS_BUF = $AEF0 ; - ram disk
; Common DMA list
; Shared buffer metadata tables, 18 bytes each
!addr DMAJOB_LIST = $AF20 ; 15 bytes, a general purpose DMA list
!addr BUFTAB_UNIT = $AF20 ; which unit the buffer is assigned to
!addr BUFTAB_DEV = $AF32 ; which device within the unit
!addr BUFTAB_TRACK = $AF44 ; which track (or other kind of handle)
!addr BUFTAB_SECTOR = $AF56 ; which sector is stored in the first half of the buffer
; Common DMA list, 15 bytes
!addr DMAJOB_LIST = $AF68
!addr DMAJOB_SRC_MB = DMAJOB_LIST+2
!addr DMAJOB_DST_MB = DMAJOB_LIST+4
!addr DMAJOB_SIZE = DMAJOB_LIST+7 ; keep $0200 here
@@ -183,7 +190,7 @@
!addr DMAJOB_DST_ADDR = DMAJOB_LIST+12
;
; Reserved 20 KB for floppy track buffers + some area for track metadata
; Reserved 20 KB for floppy track buffers + some area still free
;
!addr XX_REMAINING = $AF2F
!addr XX_REMAINING = $AF87
@@ -81,5 +81,15 @@ dev_fd_util_readsector:
jsr util_dma_launch_from_hwbuf ; execute DMA job
; Fill-in metadata for buffer #1
lda #$00
sta BUFTAB_DEV+1
lda PAR_TRACK
sta BUFTAB_TRACK+1
lda PAR_SECTOR
and #%11111110
sta BUFTAB_SECTOR+1
clc
rts
+64 -4
View File
@@ -94,6 +94,13 @@ fs_1581_read_dir_open:
lda #$08
sta FD_DIRENT
; Make sure the 1st sector in buffer points to 2nd one
lda #40
sta SHARED_BUF_1+0
lda #03
sta SHARED_BUF_1+1
; End
jmp dos_EXIT_CLC
@@ -108,7 +115,7 @@ fs_1581_read_dir:
cmp #$08
beq @get_sector_lo
cmp #$10
beq @get_sector_hi
+beq @get_sector_hi
; FALLTROUGH
@@ -188,15 +195,68 @@ fs_1581_read_dir:
@get_sector_lo:
; XXX provide implementation
; Check if this was the last sector
lda SHARED_BUF_1+0
beq fs_1581_read_dir_blocksfree
lda SHARED_BUF_1+1
cmp #$FF
beq fs_1581_read_dir_blocksfree
; Transition from 1st half of the buffer, to (possibly) the second one
lda SHARED_BUF_1+0
cmp BUFTAB_TRACK+1
bne @get_sector_lo_next
lda SHARED_BUF_1+1
dec
cmp BUFTAB_SECTOR+1
bne @get_sector_lo_next
; It's OK, we can transition to the upper half of the buffer
lda FD_DIRENT
bra @cont
jmp @cont
@get_sector_lo_next:
lda SHARED_BUF_1+0
sta PAR_TRACK
lda SHARED_BUF_1+1
sta PAR_SECTOR
bra @get_sector_common
@get_sector_hi:
; XXX provide implementation
; Check if this was the last sector
lda SHARED_BUF_1+$100+0
beq fs_1581_read_dir_blocksfree
lda SHARED_BUF_1+$100+1
cmp #$FF
beq fs_1581_read_dir_blocksfree
; Load new sector
lda SHARED_BUF_1+$100+0
sta PAR_TRACK
lda SHARED_BUF_1+$100+1
sta PAR_SECTOR
@get_sector_common:
jsr dev_fd_util_readsector ; XXX handle read errors
; Set new FD_DIRENT
lda PAR_SECTOR
and #$01
beq @2
lda #$08
@2:
sta FD_DIRENT
jmp @cont
fs_1581_read_dir_blocksfree: