work on floppy directory within CBDOS
This commit is contained in:
1 parent
52b2686f0e
commit
f8c048fab3
5 files changed
+169
-27
No files matched your search
+26
-21
@@ -45,7 +45,7 @@
|
||||
; Helper subroutines to fetch data
|
||||
|
||||
!addr code_LDA_nnnn_Y = $8014 ; - LDA nnnn, Y instruction
|
||||
!addr par_LDA_nnnn_Y = $8015 ; - 2 bytes; address in buffer, ram disk
|
||||
!addr par_LDA_nnnn_Y = $8015 ; - 2 bytes; address
|
||||
!addr code_RTS_04 = $8017 ; - RTS instruction
|
||||
|
||||
; Parameters for utilities/helpers
|
||||
@@ -111,6 +111,8 @@
|
||||
|
||||
!addr SD_DESC = $8070 ; current file descriptor
|
||||
|
||||
!addr FD_DIRENT = $8071 ; directory entry to read, 0-15
|
||||
|
||||
|
||||
|
||||
; XXX Free space
|
||||
@@ -120,29 +122,32 @@
|
||||
; Various buffers, caches, and other large memory chunks
|
||||
;
|
||||
|
||||
; BAM cache for floppy drives; 2 KB (4 blocks) each, to cover up to ED floppies - XXX implementation to be written
|
||||
|
||||
!addr FD_BAM_CACHE_0 = $8200 ; - floppy drive 0
|
||||
!addr FD_BAM_CACHE_1 = $8600 ; - floppy drive 1
|
||||
|
||||
; General purpose buffers, 512 bytes each, each starts at page start - XXX dynamic alllocation to be written
|
||||
|
||||
!addr SHARED_BUF_0 = $8A00 ; XXX temporarily hardcoded for usage by SD card
|
||||
!addr SHARED_BUF_1 = $8C00 ; XXX temporarily hardcoded for usage by floppy
|
||||
!addr SHARED_BUF_2 = $8E00
|
||||
!addr SHARED_BUF_3 = $9000
|
||||
!addr SHARED_BUF_4 = $9200
|
||||
!addr SHARED_BUF_5 = $9400
|
||||
!addr SHARED_BUF_6 = $9600
|
||||
!addr SHARED_BUF_7 = $9800
|
||||
!addr SHARED_BUF_8 = $9A00
|
||||
!addr SHARED_BUF_9 = $9C00
|
||||
!addr SHARED_BUF_A = $9E00
|
||||
!addr SHARED_BUF_B = $A000
|
||||
!addr SHARED_BUF_C = $A200
|
||||
!addr SHARED_BUF_D = $A400
|
||||
!addr SHARED_BUF_E = $A600
|
||||
!addr SHARED_BUF_F = $A800
|
||||
!addr SHARED_BUF_0 = $8200 ; XXX temporarily hardcoded for usage by SD card
|
||||
!addr SHARED_BUF_1 = $8400 ; XXX temporarily hardcoded for usage by floppy
|
||||
!addr SHARED_BUF_2 = $8600
|
||||
!addr SHARED_BUF_3 = $8800
|
||||
!addr SHARED_BUF_4 = $8A00
|
||||
!addr SHARED_BUF_5 = $8C00
|
||||
!addr SHARED_BUF_6 = $8E00
|
||||
!addr SHARED_BUF_7 = $9000
|
||||
!addr SHARED_BUF_8 = $9200
|
||||
!addr SHARED_BUF_9 = $9400
|
||||
!addr SHARED_BUF_A = $9600
|
||||
!addr SHARED_BUF_B = $9800
|
||||
!addr SHARED_BUF_C = $9A00
|
||||
!addr SHARED_BUF_D = $9C00
|
||||
!addr SHARED_BUF_E = $9E00
|
||||
!addr SHARED_BUF_F = $A000
|
||||
|
||||
; BAM cache for floppy drives; 2 KB (4 blocks) each, to cover up to ED floppies
|
||||
|
||||
!addr FD_BAM_CACHE_0 = $A200 ; - floppy disk 0 BAM
|
||||
!addr SHARED_BUF_X0 = $A400 ; - buffer which can be used if disk is not ED
|
||||
!addr FD_BAM_CACHE_1 = $A600 ; - floppy disk 1 BAM
|
||||
!addr SHARED_BUF_X1 = $A800 ; - buffer which can be used if disk is not ED
|
||||
|
||||
; Memory shadow, needed for SD card support
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ dir_hdr: ; 32 bytes - header
|
||||
!byte $01, $01 ; link to the next line - dummy, will be regenerated by BASIC
|
||||
!byte $00, $00 ; line number 0
|
||||
!byte $12, $22 ; reverse mode, quote
|
||||
!pet " " ; space for disk/directory name XXX should be space, or shift+space?
|
||||
!pet " " ; space for disk/directory name
|
||||
!byte $22, $20 ; quote, space
|
||||
!pet " 2a" ; default ID, disk format
|
||||
!byte $00 ; end of the line
|
||||
@@ -20,7 +20,8 @@ dir_hdr_sd: ; 32 bytes - header
|
||||
!byte $01, $01 ; link to the next line - dummy, will be regenerated by BASIC
|
||||
!byte $00, $00 ; line number 0
|
||||
!byte $12, $22 ; reverse mode, quote
|
||||
!pet "sd card " ; space for disk/directory name XXX should be space, or shift+space?
|
||||
!pet "sd card" ; space for disk/directory name
|
||||
!byte $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0, $A0
|
||||
!byte $22, $20 ; quote, space
|
||||
!pet "fat32" ; filesystem
|
||||
!byte $00 ; end of the line
|
||||
|
||||
@@ -6,7 +6,15 @@
|
||||
|
||||
dev_fd_cmd_READ:
|
||||
|
||||
; XXX provide implementation
|
||||
lda SD_MODE
|
||||
cmp #$03
|
||||
+beq fs_1581_read_file
|
||||
|
||||
lda SD_DIR_PHASE
|
||||
cmp #$01
|
||||
+beq fs_1581_read_dir
|
||||
cmp #$02
|
||||
+beq fs_1581_read_dir_blocksfree
|
||||
|
||||
sec ; mark EOI
|
||||
rts
|
||||
@@ -64,10 +64,129 @@ fs_1581_read_dir_open:
|
||||
lda #$01
|
||||
sta FD_DIR_PHASE
|
||||
|
||||
; XXX copy 1st half of BAM
|
||||
; XXX preload the next entry
|
||||
; XXX copy 2nd half of BAM
|
||||
; Copy 1st BAM sector to the cache
|
||||
|
||||
ldx #$00
|
||||
@lp3:
|
||||
lda SHARED_BUF_1+$100, x
|
||||
sta FD_BAM_CACHE_0,x
|
||||
inx
|
||||
bne @lp3
|
||||
|
||||
; Load the next pair of sectors
|
||||
|
||||
lda #$02
|
||||
sta PAR_SECTOR
|
||||
|
||||
jsr dev_fd_util_readsector ; XXX handle read errors
|
||||
|
||||
; Copy 2nd BAM sector to the cache
|
||||
|
||||
ldx #$00
|
||||
@lp4:
|
||||
lda SHARED_BUF_1, x
|
||||
sta FD_BAM_CACHE_0+$100,x
|
||||
inx
|
||||
bne @lp4
|
||||
|
||||
; Set variables to point to the 1st directory entry in the 2nd sector of the buffer
|
||||
|
||||
lda #$08
|
||||
sta FD_DIRENT
|
||||
|
||||
; End
|
||||
|
||||
jmp dos_EXIT_CLC
|
||||
|
||||
|
||||
fs_1581_read_dir:
|
||||
|
||||
lda FD_DIRENT
|
||||
|
||||
; If first entry within sector - make sure it is present within the buffer
|
||||
|
||||
cmp #$08
|
||||
beq @get_sector_lo
|
||||
cmp #$10
|
||||
beq @get_sector_hi
|
||||
|
||||
; FALLTROUGH
|
||||
|
||||
fs_1581_read_dir_cont:
|
||||
|
||||
; Set address of the RAW directory entry
|
||||
|
||||
lda >SHARED_BUF_1
|
||||
sta par_LDA_nnnn_Y+1
|
||||
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
sta par_LDA_nnnn_Y+0
|
||||
|
||||
bcc @1
|
||||
inc par_LDA_nnnn_Y+1
|
||||
@1:
|
||||
; Set next directory entry
|
||||
|
||||
inc FD_DIRENT
|
||||
|
||||
; Copy data to parameter variables
|
||||
|
||||
; XXX most likely copying is not necessary (compare all CBM and CMD filesystems) -
|
||||
; XXX just make the hypervisor file system emulate these structures
|
||||
|
||||
ldy #$02 ; start from determining file type
|
||||
jsr code_LDA_nnnn_Y
|
||||
|
||||
tax
|
||||
and #%00111111 ; for checking, filter out special bits
|
||||
beq fs_1581_read_dir ; ignore deleted files
|
||||
cmp #$06
|
||||
bcs fs_1581_read_dir ; ignore unknown file types
|
||||
|
||||
stx PAR_FTYPE
|
||||
|
||||
ldy #$1E ; now get file size in blocks
|
||||
jsr code_LDA_nnnn_Y
|
||||
sta PAR_FSIZE_BLOCKS+0
|
||||
iny
|
||||
jsr code_LDA_nnnn_Y
|
||||
sta PAR_FSIZE_BLOCKS+0
|
||||
|
||||
ldy #$05 ; copy the file name
|
||||
@lp1:
|
||||
jsr code_LDA_nnnn_Y
|
||||
sta PAR_FNAME-5
|
||||
iny
|
||||
cpy #$15
|
||||
bne @lp1
|
||||
|
||||
;
|
||||
|
||||
; XXX
|
||||
|
||||
@get_sector_lo:
|
||||
|
||||
; XXX
|
||||
|
||||
|
||||
@get_sector_hi:
|
||||
|
||||
; XXX
|
||||
|
||||
|
||||
|
||||
|
||||
; XXX provide implementation
|
||||
|
||||
jmp dos_EXIT_SEC
|
||||
|
||||
|
||||
fs_1581_read_dir_blocksfree:
|
||||
|
||||
; XXX provide implementation
|
||||
|
||||
jmp dos_EXIT_SEC
|
||||
@@ -6,3 +6,12 @@
|
||||
|
||||
fs_1581_read_file_open:
|
||||
|
||||
; XXX provide implementation
|
||||
|
||||
jmp dos_EXIT_SEC
|
||||
|
||||
fs_1581_read_file:
|
||||
|
||||
; XXX provide implementation
|
||||
|
||||
jmp dos_EXIT_SEC
|
||||
Reference in new issue
Block a user