wip check-in

This commit is contained in:
Kelvin Sherlock
2026-01-07 22:43:57 -05:00
parent 7f0f585c03
commit 357e6e527c
2 changed files with 99 additions and 35 deletions
+11
View File
@@ -125,6 +125,17 @@
jsl $E10000
mend
macro
&l _Multiply
&l ldx #$090B
jsl $E10000
mend
macro
&l _UDivide
&l ldx #$0B0B
jsl $E10000
mend
macro
&l _DebugHexDump
+88 -35
View File
@@ -79,7 +79,14 @@
data record
; size of the directory, divided by dirent_size.
;
; dirent_entry - current entry # (ignoring sparse entries, ., ..)
; - equivalent to GS/OS displacement.
; dirent_size - self explanatory (16 or 32)
; dirents_per_block - self explanatory (32 or 64)
; dirent_zone - current zone number for GetDirEntry
; dirent_offset - current offset in current zone
size ds.l 1
displacement ds.w 1
@@ -136,7 +143,9 @@ get_dir_entry procname export
with dp
with data
;~DebugSetTrace #1
; pha
; ~DebugSetTrace #1
; pla
jsr init_vcr
jsr init_fcr
@@ -434,10 +443,9 @@ count_entries procname
lda #0
jsr find_zone
bcs exit
zone_loop
bcs exit
cmp #0
bne @ok
jsr sparse_dirent_block
@@ -458,7 +466,6 @@ next
beq done
jsr next_zone
bcs exit
bra zone_loop
done
@@ -709,6 +716,56 @@ no
find_next_dirent proc
with data, dp
; adjust size based on the current dirent zone
; and offset.
; size -= dirent_zone * dirents_per_block
; size -= dirent_offset / dirent_size
lda dirent_zone
beq @fudge1
pea #0
pea #0
pha ; dirent_zone
lda dirents_per_block
pha
_Multiply
sec
lda size
sbc 1,s
sta size
lda size+2
sbc 3,s
sta size+2
pla
pla
@fudge1
lda dirent_offset
beq @fudge2
pea 0
pea 0
pha
lda dirent_size
pha
_UDivide
lda size
sec
sbc 1,s
sta size
lda size+2
sbc #0
sta size+2
pla
pla
@fudge2
lda size+2
bmi eod
ora size
beq eod
; if size is negative, eod.
lda dirent_entry
beq @first
dec dirent_entry
@@ -723,28 +780,19 @@ find_next_dirent proc
@ok
; make sure dir not empty (should never happen...)
lda size
beq eod
; lda size
; ora size+2
; beq eod
ldx dirent_zone
loop
lda disk_inode.zone,x
beq sparse ; should never happen...
phx ; save
jsr read_data_block
plx
lda dirent_zone
jsr find_zone
zone_loop
bcs exit
cmp #0
beq sparse
; phx
; phy
; pha
; ~DebugHexDump <io_buffer, #1024
; pla
; ply
; plx
jsr read_data_block
bcs exit
jsr find_dirent_block
bcc next
@@ -752,19 +800,19 @@ loop
cmp #1
rts
next
inx
inx
stz dirent_offset
cpx #v1.NR_DZONES*2
bcs exit
bra loop
sparse
jsr sparse_dirent_block
bcs eod
bra next
next
stz dirent_offset
lda size
ora size+2
beq eod
jsr next_zone
bra zone_loop
found_it
@@ -789,6 +837,8 @@ eod
find_dirent_block procname
with dp, data
set_partial
ldy dirent_offset
loop
lda [io_buffer],y
@@ -799,7 +849,7 @@ loop
bmi found_it
next
dec size
dec partial
beq eod
tya
@@ -810,6 +860,8 @@ next
bcc loop
; not found ...
fix_size
lda #0
clc
rts
@@ -982,6 +1034,7 @@ find_entry_by_name procname export
zone_loop
bcs exit
cmp #0
beq sparse
jsr read_data_block
bcs exit