floppy directory display starts working
This commit is contained in:
1 parent
f8c048fab3
commit
57bdda7eb5
5 files changed
+173
-131
No files matched your search
@@ -6,11 +6,11 @@
|
|||||||
|
|
||||||
dev_fd_cmd_READ:
|
dev_fd_cmd_READ:
|
||||||
|
|
||||||
lda SD_MODE
|
lda FD_MODE
|
||||||
cmp #$03
|
cmp #$03
|
||||||
+beq fs_1581_read_file
|
+beq fs_1581_read_file
|
||||||
|
|
||||||
lda SD_DIR_PHASE
|
lda FD_DIR_PHASE
|
||||||
cmp #$01
|
cmp #$01
|
||||||
+beq fs_1581_read_dir
|
+beq fs_1581_read_dir
|
||||||
cmp #$02
|
cmp #$02
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ dev_fd_util_readsector:
|
|||||||
inc
|
inc
|
||||||
sta FDC_SECTOR ; $D085
|
sta FDC_SECTOR ; $D085
|
||||||
|
|
||||||
|
|
||||||
; Ask the controller to read the sector XXX how to detect errors, missing disk, etc.?
|
; Ask the controller to read the sector XXX how to detect errors, missing disk, etc.?
|
||||||
|
|
||||||
lda #$40
|
lda #$40
|
||||||
@@ -66,7 +65,7 @@ dev_fd_util_readsector:
|
|||||||
@lp3:
|
@lp3:
|
||||||
lda FDC_STATUS_A ; $D082
|
lda FDC_STATUS_A ; $D082
|
||||||
and #%01100000
|
and #%01100000
|
||||||
cmp #%01000000 ; XXX is this correct? .A seems to stay at $40 at this point
|
cmp #%01000000 ; XXX is this correct? .A seems to stay at $40 at this point
|
||||||
bne @lp3
|
bne @lp3
|
||||||
|
|
||||||
; Copy sector to buffer in RAM
|
; Copy sector to buffer in RAM
|
||||||
|
|||||||
@@ -112,12 +112,12 @@ fs_1581_read_dir:
|
|||||||
|
|
||||||
; FALLTROUGH
|
; FALLTROUGH
|
||||||
|
|
||||||
fs_1581_read_dir_cont:
|
@cont:
|
||||||
|
|
||||||
; Set address of the RAW directory entry
|
; Set address of the RAW directory entry
|
||||||
|
|
||||||
lda >SHARED_BUF_1
|
ldy #>SHARED_BUF_1
|
||||||
sta par_LDA_nnnn_Y+1
|
sty par_LDA_nnnn_Y+1
|
||||||
|
|
||||||
asl
|
asl
|
||||||
asl
|
asl
|
||||||
@@ -154,39 +154,70 @@ fs_1581_read_dir_cont:
|
|||||||
sta PAR_FSIZE_BLOCKS+0
|
sta PAR_FSIZE_BLOCKS+0
|
||||||
iny
|
iny
|
||||||
jsr code_LDA_nnnn_Y
|
jsr code_LDA_nnnn_Y
|
||||||
sta PAR_FSIZE_BLOCKS+0
|
sta PAR_FSIZE_BLOCKS+1
|
||||||
|
|
||||||
ldy #$05 ; copy the file name
|
ldy #$05 ; copy the file name
|
||||||
@lp1:
|
@lp1:
|
||||||
jsr code_LDA_nnnn_Y
|
jsr code_LDA_nnnn_Y
|
||||||
sta PAR_FNAME-5
|
sta PAR_FNAME-5,y
|
||||||
iny
|
iny
|
||||||
cpy #$15
|
cpy #$15
|
||||||
bne @lp1
|
bne @lp1
|
||||||
|
|
||||||
;
|
; Prepare output entry, starting from XX_DIRENT_BUF + initial offset
|
||||||
|
|
||||||
; XXX
|
jsr util_dir_filesize_blocks
|
||||||
|
ldx #(FD_DIRENT_BUF - XX_DIRENT_BUF)
|
||||||
|
ldx #$30
|
||||||
|
jsr util_dir_basic
|
||||||
|
|
||||||
|
; Provide pointers and length
|
||||||
|
|
||||||
|
sta FD_ACPTR_LEN+1
|
||||||
|
txa
|
||||||
|
sec
|
||||||
|
sbc #$30
|
||||||
|
sta FD_ACPTR_LEN+0
|
||||||
|
|
||||||
|
lda #<(FD_DIRENT_BUF)
|
||||||
|
sta FD_ACPTR_PTR+0
|
||||||
|
lda #>(FD_DIRENT_BUF)
|
||||||
|
sta FD_ACPTR_PTR+1
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
@get_sector_lo:
|
@get_sector_lo:
|
||||||
|
|
||||||
; XXX
|
; XXX provide implementation
|
||||||
|
|
||||||
|
lda FD_DIRENT
|
||||||
|
bra @cont
|
||||||
|
|
||||||
@get_sector_hi:
|
@get_sector_hi:
|
||||||
|
|
||||||
; XXX
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; XXX provide implementation
|
; XXX provide implementation
|
||||||
|
|
||||||
jmp dos_EXIT_SEC
|
|
||||||
|
|
||||||
|
|
||||||
fs_1581_read_dir_blocksfree:
|
fs_1581_read_dir_blocksfree:
|
||||||
|
|
||||||
; XXX provide implementation
|
; XXX calculate free blocks from BAM instead
|
||||||
|
|
||||||
jmp dos_EXIT_SEC
|
; Set pointer to 'BLOCKS FREE.' line
|
||||||
|
|
||||||
|
lda #$13
|
||||||
|
sta FD_ACPTR_LEN+0
|
||||||
|
lda #$00
|
||||||
|
sta FD_ACPTR_LEN+1
|
||||||
|
|
||||||
|
lda #<dir_end
|
||||||
|
sta FD_ACPTR_PTR+0
|
||||||
|
lda #>dir_end
|
||||||
|
sta FD_ACPTR_PTR+1
|
||||||
|
|
||||||
|
; Mark end of directory
|
||||||
|
|
||||||
|
lda #$00
|
||||||
|
sta FD_DIR_PHASE
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
@@ -68,120 +68,17 @@ fs_hvsr_read_dir:
|
|||||||
|
|
||||||
; Prepare output entry, starting from XX_DIRENT_BUF + initial offset
|
; Prepare output entry, starting from XX_DIRENT_BUF + initial offset
|
||||||
|
|
||||||
ldx #$00 ; offset for SD card unit
|
ldx #(SD_DIRENT_BUF - XX_DIRENT_BUF)
|
||||||
|
jsr util_dir_basic
|
||||||
|
|
||||||
lda #$01 ; link to the next line - dummy, will be regenerated by BASIC
|
; Provide pointers and length
|
||||||
sta XX_DIRENT_BUF, x
|
|
||||||
inx
|
|
||||||
sta XX_DIRENT_BUF, x
|
|
||||||
inx
|
|
||||||
|
|
||||||
lda PAR_FSIZE_BLOCKS+0 ; store number of blocks
|
|
||||||
sta XX_DIRENT_BUF, x
|
|
||||||
inx
|
|
||||||
lda PAR_FSIZE_BLOCKS+1
|
|
||||||
sta XX_DIRENT_BUF, x
|
|
||||||
inx
|
|
||||||
|
|
||||||
lda #' ' ; indent file name
|
|
||||||
|
|
||||||
@lp1:
|
|
||||||
dey
|
|
||||||
bmi @lp1_done
|
|
||||||
sta XX_DIRENT_BUF, x
|
|
||||||
inx
|
|
||||||
bra @lp1
|
|
||||||
|
|
||||||
@lp1_done:
|
|
||||||
|
|
||||||
lda #$22 ; opening quote
|
|
||||||
sta XX_DIRENT_BUF, x
|
|
||||||
inx
|
|
||||||
|
|
||||||
ldy #$FF ; put file name
|
|
||||||
|
|
||||||
@lp2:
|
|
||||||
|
|
||||||
iny
|
|
||||||
lda PAR_FNAME, y
|
|
||||||
cmp #$A0
|
|
||||||
beq @lp2_done
|
|
||||||
cpy #$10
|
|
||||||
beq @lp2_done
|
|
||||||
sta XX_DIRENT_BUF, x
|
|
||||||
inx
|
|
||||||
bra @lp2
|
|
||||||
|
|
||||||
@lp2_done:
|
|
||||||
|
|
||||||
lda #$22 ; closing quote
|
|
||||||
sta XX_DIRENT_BUF, x
|
|
||||||
inx
|
|
||||||
|
|
||||||
ldy #$10 ; put spaces for indentation
|
|
||||||
|
|
||||||
@lp3:
|
|
||||||
|
|
||||||
dey
|
|
||||||
lda PAR_FNAME, y
|
|
||||||
cmp #$A0
|
|
||||||
bne @lp3_done
|
|
||||||
|
|
||||||
lda #' '
|
|
||||||
sta XX_DIRENT_BUF, x
|
|
||||||
inx
|
|
||||||
bra @lp3
|
|
||||||
|
|
||||||
@lp3_done:
|
|
||||||
|
|
||||||
lda PAR_FTYPE ; put 'damaged' mark if needed
|
|
||||||
bmi @closed
|
|
||||||
lda #'*'
|
|
||||||
+skip_2_bytes_trash_nvz
|
|
||||||
|
|
||||||
@closed:
|
|
||||||
|
|
||||||
lda #' '
|
|
||||||
sta XX_DIRENT_BUF, x
|
|
||||||
inx
|
|
||||||
|
|
||||||
lda PAR_FTYPE ; put file type
|
|
||||||
and #$3F
|
|
||||||
dec
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
tay
|
|
||||||
|
|
||||||
@lp4:
|
|
||||||
|
|
||||||
lda dir_types, y
|
|
||||||
beq @lp4_done
|
|
||||||
sta XX_DIRENT_BUF, x
|
|
||||||
inx
|
|
||||||
iny
|
|
||||||
bra @lp4
|
|
||||||
|
|
||||||
@lp4_done:
|
|
||||||
|
|
||||||
lda PAR_FTYPE ; read-only mark (if needed)
|
|
||||||
and #$40
|
|
||||||
beq @skipro
|
|
||||||
lda #'<'
|
|
||||||
sta XX_DIRENT_BUF, x
|
|
||||||
inx
|
|
||||||
|
|
||||||
@skipro:
|
|
||||||
|
|
||||||
lda #$00 ; put end of the line
|
|
||||||
sta XX_DIRENT_BUF, x
|
|
||||||
inx
|
|
||||||
|
|
||||||
stx SD_ACPTR_LEN+0
|
stx SD_ACPTR_LEN+0
|
||||||
sta SD_ACPTR_LEN+1
|
sta SD_ACPTR_LEN+1
|
||||||
|
|
||||||
lda #<(XX_DIRENT_BUF)
|
lda #<(SD_DIRENT_BUF)
|
||||||
sta SD_ACPTR_PTR+0
|
sta SD_ACPTR_PTR+0
|
||||||
lda #>(XX_DIRENT_BUF)
|
lda #>(SD_DIRENT_BUF)
|
||||||
sta SD_ACPTR_PTR+1
|
sta SD_ACPTR_PTR+1
|
||||||
|
|
||||||
clc
|
clc
|
||||||
@@ -191,8 +88,6 @@ fs_hvsr_read_dir_blocksfree:
|
|||||||
|
|
||||||
; Set pointer to 'BLOCKS FREE.' line
|
; Set pointer to 'BLOCKS FREE.' line
|
||||||
|
|
||||||
; XXX determine free space
|
|
||||||
|
|
||||||
lda #$13
|
lda #$13
|
||||||
sta SD_ACPTR_LEN+0
|
sta SD_ACPTR_LEN+0
|
||||||
lda #$00
|
lda #$00
|
||||||
|
|||||||
@@ -0,0 +1,117 @@
|
|||||||
|
|
||||||
|
; Create BASIC line from directory entry
|
||||||
|
|
||||||
|
|
||||||
|
; in: .X = offset from XX_DIRENT_BUF, .Y = characters to indent after line number
|
||||||
|
; out: .X (low byte) = current position, .A = 0
|
||||||
|
|
||||||
|
|
||||||
|
util_dir_basic:
|
||||||
|
|
||||||
|
lda #$01 ; link to the next line - dummy, will be regenerated by BASIC
|
||||||
|
sta XX_DIRENT_BUF, x
|
||||||
|
inx
|
||||||
|
sta XX_DIRENT_BUF, x
|
||||||
|
inx
|
||||||
|
|
||||||
|
lda PAR_FSIZE_BLOCKS+0 ; store number of blocks
|
||||||
|
sta XX_DIRENT_BUF, x
|
||||||
|
inx
|
||||||
|
lda PAR_FSIZE_BLOCKS+1
|
||||||
|
sta XX_DIRENT_BUF, x
|
||||||
|
inx
|
||||||
|
|
||||||
|
lda #' ' ; indent file name
|
||||||
|
|
||||||
|
@lp1:
|
||||||
|
dey
|
||||||
|
bmi @lp1_done
|
||||||
|
sta XX_DIRENT_BUF, x
|
||||||
|
inx
|
||||||
|
bra @lp1
|
||||||
|
|
||||||
|
@lp1_done:
|
||||||
|
|
||||||
|
lda #$22 ; opening quote
|
||||||
|
sta XX_DIRENT_BUF, x
|
||||||
|
inx
|
||||||
|
|
||||||
|
ldy #$FF ; put file name
|
||||||
|
|
||||||
|
@lp2:
|
||||||
|
|
||||||
|
iny
|
||||||
|
lda PAR_FNAME, y
|
||||||
|
cmp #$A0
|
||||||
|
beq @lp2_done
|
||||||
|
cpy #$10
|
||||||
|
beq @lp2_done
|
||||||
|
sta XX_DIRENT_BUF, x
|
||||||
|
inx
|
||||||
|
bra @lp2
|
||||||
|
|
||||||
|
@lp2_done:
|
||||||
|
|
||||||
|
lda #$22 ; closing quote
|
||||||
|
sta XX_DIRENT_BUF, x
|
||||||
|
inx
|
||||||
|
|
||||||
|
ldy #$10 ; put spaces for indentation
|
||||||
|
|
||||||
|
@lp3:
|
||||||
|
|
||||||
|
dey
|
||||||
|
lda PAR_FNAME, y
|
||||||
|
cmp #$A0
|
||||||
|
bne @lp3_done
|
||||||
|
|
||||||
|
lda #' '
|
||||||
|
sta XX_DIRENT_BUF, x
|
||||||
|
inx
|
||||||
|
bra @lp3
|
||||||
|
|
||||||
|
@lp3_done:
|
||||||
|
|
||||||
|
lda PAR_FTYPE ; put 'damaged' mark if needed
|
||||||
|
bmi @closed
|
||||||
|
lda #'*'
|
||||||
|
+skip_2_bytes_trash_nvz
|
||||||
|
|
||||||
|
@closed:
|
||||||
|
|
||||||
|
lda #' '
|
||||||
|
sta XX_DIRENT_BUF, x
|
||||||
|
inx
|
||||||
|
|
||||||
|
lda PAR_FTYPE ; put file type
|
||||||
|
and #$3F
|
||||||
|
dec
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
tay
|
||||||
|
|
||||||
|
@lp4:
|
||||||
|
|
||||||
|
lda dir_types, y
|
||||||
|
beq @lp4_done
|
||||||
|
sta XX_DIRENT_BUF, x
|
||||||
|
inx
|
||||||
|
iny
|
||||||
|
bra @lp4
|
||||||
|
|
||||||
|
@lp4_done:
|
||||||
|
|
||||||
|
lda PAR_FTYPE ; read-only mark (if needed)
|
||||||
|
and #$40
|
||||||
|
beq @skipro
|
||||||
|
lda #'<'
|
||||||
|
sta XX_DIRENT_BUF, x
|
||||||
|
inx
|
||||||
|
|
||||||
|
@skipro:
|
||||||
|
|
||||||
|
lda #$00 ; put end of the line
|
||||||
|
sta XX_DIRENT_BUF, x
|
||||||
|
inx
|
||||||
|
|
||||||
|
rts
|
||||||
Reference in new issue
Block a user