finished code to calculate number of blocks in CBDOS

This commit is contained in:
FeralChild64 committed 2021-02-16 21:47:26 +01:00
1 parent 9466b5cca5
commit 1e0f1eeb92
7 files changed
+89 -670

No files matched your search

+89 -4
View File
@@ -7,13 +7,75 @@ util_dir_filesize_bytes: ; preserves .X
; 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
; Start from handling some large values
lda PAR_FSIZE_BYTES+3
+bne util_dir_filesize_max ; file over 16MB size
lda PAR_FSIZE_BYTES+2
inc
+beq util_dir_filesize_max ; file over 8MB size
; Set initial size as 0 blocks
lda #$00
sta PAR_FSIZE_BLOCKS+0
sta PAR_FSIZE_BLOCKS+1
; Calculate number of blocks
ldy #$03
@lp:
lda PAR_FSIZE_BYTES+2
cmp util_dir_cmptab_hi,y
bcc @lp_next
bne @lp_adc_sbc
lda PAR_FSIZE_BYTES+1
cmp util_dir_cmptab_mi,y
bcc @lp_next
bne @lp_adc_sbc
lda PAR_FSIZE_BYTES+0
cmp util_dir_cmptab_lo,y
bcc @lp_next
@lp_adc_sbc:
clc
lda PAR_FSIZE_BLOCKS+0
adc util_dir_addtab_lo,y
sta PAR_FSIZE_BLOCKS+0
lda PAR_FSIZE_BLOCKS+1
adc util_dir_addtab_hi,y
sta PAR_FSIZE_BLOCKS+1
sec
lda PAR_FSIZE_BYTES+0
sbc util_dir_cmptab_lo, y
sta PAR_FSIZE_BYTES+0
lda PAR_FSIZE_BYTES+1
sbc util_dir_cmptab_mi, y
sta PAR_FSIZE_BYTES+1
lda PAR_FSIZE_BYTES+2
sbc util_dir_cmptab_hi, y
sta PAR_FSIZE_BYTES+2
bra @lp
@lp_next:
dey
bpl @lp
; Correct for bytes not filling in the whole block
lda PAR_FSIZE_BYTES+0
beq util_dir_filesize_blocks
inc PAR_FSIZE_BLOCKS+0
bne util_dir_filesize_blocks
inc PAR_FSIZE_BLOCKS+1
; FALLTROUGH
util_dir_filesize_blocks: ; preserves .X
@@ -95,3 +157,26 @@ util_dir_filesize_4: ; file size needs 4 digits
ldy #$00
rts
; Tables for calculating blocks from bytes
util_dir_addtab_hi:
!byte $00, $00 ; 2 next bytes same as in 'lo' table
util_dir_addtab_lo:
!byte $01, $10, $00, $00
util_dir_cmptab_hi:
!byte ^(254), ^(254 * 16), ^(254 * 16 * 16), ^(254 * 16 * 16 * 16), ^(254 * 16 * 16 * 16 * 16)
util_dir_cmptab_mi:
!byte >(254), >(254 * 16), >(254 * 16 * 16), >(254 * 16 * 16 * 16), >(254 * 16 * 16 * 16 * 16)
util_dir_cmptab_lo:
!byte <(254), <(254 * 16), <(254 * 16 * 16), <(254 * 16 * 16 * 16), <(254 * 16 * 16 * 16 * 16)