nearly complete floppy directory display
This commit is contained in:
1 parent
57bdda7eb5
commit
02588f4952
3 files changed
+87
-10
No files matched your search
@@ -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
|
||||
@@ -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:
|
||||
|
||||
|
||||
Reference in new issue
Block a user