CBDOS directory output tweaks
This commit is contained in:
1 parent
9d082366ab
commit
c9aaa7b1ac
3 files changed
+123
-30
No files matched your search
@@ -35,16 +35,19 @@
|
|||||||
!addr IDX1_TALKER = $8012 ; talker idx, >=$80 = none
|
!addr IDX1_TALKER = $8012 ; talker idx, >=$80 = none
|
||||||
!addr IDX2_TALKER = $8013 ; talker idx * 2, >=$80 = none - for calling routines via vector table
|
!addr IDX2_TALKER = $8013 ; talker idx * 2, >=$80 = none - for calling routines via vector table
|
||||||
|
|
||||||
|
; Parameters for utilities
|
||||||
|
|
||||||
|
!addr PAR_FSIZE_BLOCKS = $8014 ; 2 bytes - file size in blocks
|
||||||
|
!addr PAR_FSIZE_BYTES = $8016 ; 4 bytes - file size in bytes
|
||||||
|
|
||||||
; Various temporary data
|
; Various temporary data
|
||||||
|
|
||||||
!addr XX_DIR_PHASE = $8014 ; directory output phase, values deponds on device driver
|
!addr XX_DIR_PHASE = $801A ; directory output phase, values deponds on device driver
|
||||||
!addr SD_DIR_PHASE = $8014 ; - SD card
|
!addr SD_DIR_PHASE = $801A ; - SD card
|
||||||
!addr FD_DIR_PHASE = $8015 ; - floppy
|
!addr FD_DIR_PHASE = $801B ; - floppy
|
||||||
!addr RD_DIR_PHASE = $8016 ; - ram disk
|
!addr RD_DIR_PHASE = $801C ; - ram disk
|
||||||
|
|
||||||
|
; Free space: $801D-$8063
|
||||||
|
|
||||||
; Free space: $8014-$8063
|
|
||||||
|
|
||||||
!addr SD_ACPTR_helper = $8052 ; subroutine in RAM to read a byte
|
!addr SD_ACPTR_helper = $8052 ; subroutine in RAM to read a byte
|
||||||
!addr code_LDA_01 = $8052 ; - LDA instruction
|
!addr code_LDA_01 = $8052 ; - LDA instruction
|
||||||
|
|||||||
@@ -212,34 +212,36 @@ fs_hvsr_read_dir:
|
|||||||
sta SD_DIRENT+$80
|
sta SD_DIRENT+$80
|
||||||
sta SD_DIRENT+$81
|
sta SD_DIRENT+$81
|
||||||
|
|
||||||
lda SD_DIRENT+$53 ; XXX calculate length in blocks instead
|
|
||||||
sta SD_DIRENT+$82
|
|
||||||
lda SD_DIRENT+$54
|
|
||||||
sta SD_DIRENT+$83
|
|
||||||
|
|
||||||
bra @len_done ; XXX if size above 9999, force maximum possible length
|
|
||||||
|
|
||||||
@len_max:
|
|
||||||
|
|
||||||
lda #<9999
|
|
||||||
sta SD_DIRENT+$82
|
|
||||||
lda #>9999
|
|
||||||
sta SD_DIRENT+$83
|
|
||||||
|
|
||||||
@len_done:
|
|
||||||
|
|
||||||
ldx SD_DIRENT+$40 ; make sure file name is terminated by 0
|
ldx SD_DIRENT+$40 ; make sure file name is terminated by 0
|
||||||
lda #$00
|
lda #$00
|
||||||
sta SD_DIRENT, x
|
sta SD_DIRENT, x
|
||||||
|
|
||||||
ldx #$04 ; XXX put correct amount of spaces depending on number size
|
lda SD_DIRENT+$52 ; calculate file length in blocks to display
|
||||||
|
sta PAR_FSIZE_BYTES+0
|
||||||
|
lda SD_DIRENT+$53
|
||||||
|
sta PAR_FSIZE_BYTES+1
|
||||||
|
lda SD_DIRENT+$54
|
||||||
|
sta PAR_FSIZE_BYTES+2
|
||||||
|
lda SD_DIRENT+$55
|
||||||
|
sta PAR_FSIZE_BYTES+3
|
||||||
|
|
||||||
|
jsr util_dir_filesize_bytes
|
||||||
|
|
||||||
|
lda PAR_FSIZE_BLOCKS+0
|
||||||
|
sta SD_DIRENT+$82
|
||||||
|
lda PAR_FSIZE_BLOCKS+1
|
||||||
|
sta SD_DIRENT+$83
|
||||||
|
|
||||||
lda #' '
|
lda #' '
|
||||||
|
ldx #$04 ; indent number of blocks
|
||||||
|
@lpindent1:
|
||||||
|
dey
|
||||||
|
bmi @lpindent1_done
|
||||||
sta SD_DIRENT+$80, x
|
sta SD_DIRENT+$80, x
|
||||||
inx
|
inx
|
||||||
sta SD_DIRENT+$80, x
|
bra @lpindent1
|
||||||
inx
|
|
||||||
sta SD_DIRENT+$80, x
|
@lpindent1_done:
|
||||||
inx
|
|
||||||
|
|
||||||
lda #$22 ; opening quote
|
lda #$22 ; opening quote
|
||||||
sta SD_DIRENT+$80, x
|
sta SD_DIRENT+$80, x
|
||||||
|
|||||||
@@ -2,8 +2,96 @@
|
|||||||
; Adapt the file size for displaying in a directory list
|
; Adapt the file size for displaying in a directory list
|
||||||
|
|
||||||
|
|
||||||
util_dir_filesize:
|
util_dir_filesize_bytes: ; preserves .X
|
||||||
|
|
||||||
; XXX provide implementation
|
; Convert file size in bytes (32-bit value) to blocks, afterwards
|
||||||
|
; continue processing in 'util_dir_filesize_blocks'
|
||||||
|
|
||||||
|
; XXX temporary - calculate size in 254-byte blocks
|
||||||
|
|
||||||
|
lda PAR_FSIZE_BYTES+1
|
||||||
|
sta PAR_FSIZE_BLOCKS+0
|
||||||
|
lda PAR_FSIZE_BYTES+2
|
||||||
|
sta PAR_FSIZE_BLOCKS+1
|
||||||
|
|
||||||
|
; FALLTROUGH
|
||||||
|
|
||||||
|
util_dir_filesize_blocks: ; preserves .X
|
||||||
|
|
||||||
|
; Take file size in blocks (16-bit value), clip to max 9999,
|
||||||
|
; return in .Y the amount of spaces needed for indentation
|
||||||
|
|
||||||
|
lda PAR_FSIZE_BLOCKS+1
|
||||||
|
cmp #>9999
|
||||||
|
beq @cmp_9999_p2
|
||||||
|
bcs util_dir_filesize_max
|
||||||
|
bcc @size_ok
|
||||||
|
|
||||||
|
@cmp_9999_p2:
|
||||||
|
|
||||||
|
lda PAR_FSIZE_BLOCKS+0
|
||||||
|
cmp #<9999
|
||||||
|
bcs util_dir_filesize_max
|
||||||
|
|
||||||
|
@size_ok:
|
||||||
|
|
||||||
|
lda PAR_FSIZE_BLOCKS+1
|
||||||
|
beq @size_123
|
||||||
|
|
||||||
|
@size_34: ; file size is 256 or above (3 or 4 digits)
|
||||||
|
|
||||||
|
cmp #>1000
|
||||||
|
beq @cmp_1000_p2
|
||||||
|
bcs util_dir_filesize_4
|
||||||
|
bra util_dir_filesize_3
|
||||||
|
|
||||||
|
@cmp_1000_p2:
|
||||||
|
|
||||||
|
lda PAR_FSIZE_BLOCKS+0
|
||||||
|
cmp #<1000
|
||||||
|
bcs util_dir_filesize_4
|
||||||
|
bra util_dir_filesize_3
|
||||||
|
|
||||||
|
@size_123: ; file size is 255 or below (1, 2, or 3 digits)
|
||||||
|
|
||||||
|
lda PAR_FSIZE_BLOCKS+0
|
||||||
|
cmp #10
|
||||||
|
bcs util_dir_filesize_23
|
||||||
|
|
||||||
|
; FALLTROUGH
|
||||||
|
|
||||||
|
util_dir_filesize_1: ; file size needs 1 digit
|
||||||
|
|
||||||
|
ldy #$03
|
||||||
|
rts
|
||||||
|
|
||||||
|
util_dir_filesize_23: ; file size needs 2 or 3 digits, size in .A
|
||||||
|
|
||||||
|
cmp #100
|
||||||
|
bcs util_dir_filesize_3
|
||||||
|
|
||||||
|
; FALLTROUGH
|
||||||
|
|
||||||
|
util_dir_filesize_2: ; file size needs 2 digits
|
||||||
|
|
||||||
|
ldy #$02
|
||||||
|
rts
|
||||||
|
|
||||||
|
util_dir_filesize_3: ; file size needs 3 digits
|
||||||
|
|
||||||
|
ldy #$01
|
||||||
|
rts
|
||||||
|
|
||||||
|
util_dir_filesize_max:
|
||||||
|
|
||||||
|
lda #<9999
|
||||||
|
sta PAR_FSIZE_BLOCKS+0
|
||||||
|
lda #>9999
|
||||||
|
sta PAR_FSIZE_BLOCKS+1
|
||||||
|
|
||||||
|
; FALLTROUGH
|
||||||
|
|
||||||
|
util_dir_filesize_4: ; file size needs 4 digits
|
||||||
|
|
||||||
|
ldy #$00
|
||||||
rts
|
rts
|
||||||
Reference in new issue
Block a user