more CBDOS directory work, can now detect read-only files
This commit is contained in:
1 parent
0b5f2dcf2a
commit
230c20a7d0
2 files changed
+90
-32
No files matched your search
@@ -34,20 +34,22 @@ dir_end: ; 19 bytes
|
||||
|
||||
; File types / extensions
|
||||
|
||||
dir_ext_01: !pet "seq" ; SEQ
|
||||
dir_ext_02: !pet "prg" ; PRG
|
||||
dir_ext_03: !pet "usr" ; USR
|
||||
dir_ext_04: !pet "rel" ; REL
|
||||
dir_ext_05: !pet "dir" ; directory
|
||||
; dir_ext_06: !pet "tap" ; tape image
|
||||
; dir_ext_07: !pet "d67" ; CBM 2040 (DOS 1) - disk image
|
||||
; dir_ext_08: !pet "d64" ; CBM 1541 / 2031 / 3040 / 4040 - disk image
|
||||
; dir_ext_09: !pet "d71" ; CBM 1571 - disk image
|
||||
; dir_ext_0A: !pet "d81" ; CBM 1581 - disk image
|
||||
; dir_ext_0B: !pet "d80" ; CBM 8050 - disk image
|
||||
; dir_ext_0C: !pet "d81" ; CBM 8250 / 1001 - disk image
|
||||
; dir_ext_0D: !pet "d90" ; CBM D9060 / D9090 - hard disk image
|
||||
; dir_ext_0E: !pet "d1m" ; CMD FD 2000 / 4000 - disk image (DD)
|
||||
; dir_ext_0F: !pet "d2m" ; CMD FD 2000 / 4000 - disk image (HD)
|
||||
; dir_ext_10: !pet "d4m" ; CMD FD 4000 - disk image (ED)
|
||||
; dir_ext_11: !pet "dhd" ; CMD HD - hard disk image
|
||||
dir_types:
|
||||
|
||||
!pet "seq", $00 ; SEQ
|
||||
!pet "prg", $00 ; PRG
|
||||
!pet "usr", $00 ; USR
|
||||
!pet "rel", $00 ; REL
|
||||
!pet "dir", $00 ; directory
|
||||
; !pet "tap", $00 ; tape image
|
||||
; !pet "d67", $00 ; CBM 2040 (DOS 1) - disk image
|
||||
; !pet "d64", $00 ; CBM 1541 / 2031 / 3040 / 4040 - disk image
|
||||
; !pet "d71", $00 ; CBM 1571 - disk image
|
||||
; !pet "d81", $00 ; CBM 1581 - disk image
|
||||
; !pet "d80", $00 ; CBM 8050 - disk image
|
||||
; !pet "d81", $00 ; CBM 8250 / 1001 - disk image
|
||||
; !pet "d90", $00 ; CBM D9060 / D9090 - hard disk image
|
||||
; !pet "d1m", $00 ; CMD FD 2000 / 4000 - disk image (DD)
|
||||
; !pet "d2m", $00 ; CMD FD 2000 / 4000 - disk image (HD)
|
||||
; !pet "d4m", $00 ; CMD FD 4000 - disk image (ED)
|
||||
; !pet "dhd", $00 ; CMD HD - hard disk image
|
||||
@@ -67,7 +67,25 @@ fs_hvsr_read_dir:
|
||||
; - $00-$3F - file name
|
||||
; - $40 - file name length
|
||||
; - $51-$54 - file length
|
||||
; - $55 - file type and attributes
|
||||
; - $55-$56 - file type ($10 = dir, $20 = regular) and attributes ($01 for read-only)
|
||||
|
||||
; Drop some strange (unknown) file types
|
||||
|
||||
lda SD_DIRENT+$55
|
||||
bne fs_hvsr_read_dir
|
||||
|
||||
; Retrieve read-only status, store mark in SD_DIRENT+$FE
|
||||
|
||||
lda SD_DIRENT+$56
|
||||
and #$01
|
||||
bne @rdonly
|
||||
lda #$00
|
||||
+skip_2_bytes_trash_nvz
|
||||
|
||||
@rdonly:
|
||||
|
||||
lda #'<'
|
||||
sta SD_DIRENT+$FF
|
||||
|
||||
; Validate/fix characters in file name
|
||||
|
||||
@@ -98,9 +116,36 @@ fs_hvsr_read_dir:
|
||||
dex
|
||||
bpl @lp1
|
||||
|
||||
; Validate file name length
|
||||
; Determine type (file/directory), store marker offset in SD_DIRENT+$FE
|
||||
|
||||
; XXX check for directory!
|
||||
lda SD_DIRENT+$56
|
||||
and #$FE
|
||||
|
||||
; XXX code below does not work
|
||||
;cmp #$20
|
||||
;beq @cklen_file ; branch on file
|
||||
;cmp #$10
|
||||
;bne fs_hvsr_read_dir ; this type is unknown
|
||||
|
||||
bra @cklen_file ; XXX temporary
|
||||
|
||||
@cklen_dir:
|
||||
|
||||
; Validate file name length (directories)
|
||||
|
||||
lda SD_DIRENT+$40
|
||||
beq fs_hvsr_read_dir
|
||||
cmp #$11
|
||||
bcs fs_hvsr_read_dir
|
||||
|
||||
; Set type offset for directory in SD_DIRENT+$FF
|
||||
|
||||
lda #$10
|
||||
bra @all_prepared
|
||||
|
||||
@cklen_file:
|
||||
|
||||
; Validate file name length (regular files)
|
||||
|
||||
lda SD_DIRENT+$40
|
||||
sec
|
||||
@@ -113,15 +158,19 @@ fs_hvsr_read_dir:
|
||||
sta SD_DIRENT+$40 ; store corrected file name length
|
||||
tax
|
||||
|
||||
; Detect file type (+64 for read-only, +128 = damaged)
|
||||
; Detect file type
|
||||
|
||||
lda SD_DIRENT, x
|
||||
cmp #$2E
|
||||
bne fs_hvsr_read_dir ; 3-character extension is required!
|
||||
+bne fs_hvsr_read_dir ; 3-character extension is required!
|
||||
|
||||
; XXX temporary; detect file type by extension instead
|
||||
lda #$04 ; XXX temporary; detect file type by extension instead
|
||||
|
||||
; Try to prepare output row, starting from SD_DIRENT+$80
|
||||
@all_prepared:
|
||||
|
||||
sta SD_DIRENT+$FF ; store offset to file type in SD_DIRENT+$FF
|
||||
|
||||
; Prepare output entry, starting from SD_DIRENT+$80
|
||||
|
||||
lda #$01 ; link to the next line - dummy, will be regenerated by BASIC
|
||||
sta SD_DIRENT+$80
|
||||
@@ -162,20 +211,27 @@ fs_hvsr_read_dir:
|
||||
sta SD_DIRENT+$80, x
|
||||
inx
|
||||
|
||||
; XXX put read-only mark if needed
|
||||
; No 'damaged' mark make sense for this filesystem
|
||||
|
||||
ldy #$03 ; XXX select proper file type instead
|
||||
lda dir_ext_01+0, y
|
||||
ldy SD_DIRENT+$FF ; put file type
|
||||
|
||||
@lp3:
|
||||
|
||||
lda dir_types, y
|
||||
beq @lp3_done
|
||||
sta SD_DIRENT+$80, x
|
||||
inx
|
||||
lda dir_ext_01+1, y
|
||||
sta SD_DIRENT+$80, x
|
||||
inx
|
||||
lda dir_ext_01+2, y
|
||||
iny
|
||||
bra @lp3
|
||||
|
||||
@lp3_done:
|
||||
|
||||
lda SD_DIRENT+$FE ; read-only mark (if needed)
|
||||
beq @skipro
|
||||
sta SD_DIRENT+$80, x
|
||||
inx
|
||||
|
||||
; No 'damaged' mark is needed here; put ending 0 and provide pointer
|
||||
@skipro:
|
||||
|
||||
lda #$00
|
||||
sta SD_DIRENT+$80, x
|
||||
|
||||
Reference in new issue
Block a user