get_dir_entry compiles!
This commit is contained in:
parent
7c93388281
commit
30b1e9d843
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
|
|
||||||
SOURCES = main.aii volume.aii get_file_info.aii \
|
SOURCES = main.aii volume.aii get_file_info.aii \
|
||||||
open.aii \
|
open.aii get_dir_entry.aii \
|
||||||
id_disk.aii stubs.aii tables.aii device.aii params.aii
|
id_disk.aii stubs.aii tables.aii device.aii params.aii
|
||||||
|
|
||||||
OBJECTS=$(SOURCES:.aii=.o)
|
OBJECTS=$(SOURCES:.aii=.o)
|
||||||
|
|
|
@ -47,9 +47,41 @@ dirent_entry ds.w 1
|
||||||
|
|
||||||
data record
|
data record
|
||||||
|
|
||||||
dirent v1L_dirent
|
dirent ds v1L_dirent
|
||||||
endr
|
endr
|
||||||
|
|
||||||
|
|
||||||
|
import init_fcr
|
||||||
|
import init_vcr
|
||||||
|
import load_inode
|
||||||
|
import read_data_block
|
||||||
|
|
||||||
|
import do_ignore
|
||||||
|
import do_eof
|
||||||
|
import do_blocks
|
||||||
|
import do_r_eof
|
||||||
|
import do_r_blocks
|
||||||
|
import do_access
|
||||||
|
import do_file_sys_id
|
||||||
|
import do_option_list
|
||||||
|
import do_create_date_time
|
||||||
|
import do_mod_date_time
|
||||||
|
import do_file_type
|
||||||
|
import do_aux_type
|
||||||
|
|
||||||
|
entry init
|
||||||
|
entry base_displace
|
||||||
|
entry find_next_dirent
|
||||||
|
entry find_absolute_dirent
|
||||||
|
entry find_dirent_block
|
||||||
|
entry count_entries
|
||||||
|
entry count_dirent_block
|
||||||
|
|
||||||
|
entry do_flags
|
||||||
|
entry do_name_buffer_0
|
||||||
|
entry do_name_buffer_1
|
||||||
|
entry do_entry_num
|
||||||
|
|
||||||
get_dir_entry procname export
|
get_dir_entry procname export
|
||||||
|
|
||||||
with fst_parms
|
with fst_parms
|
||||||
|
@ -86,7 +118,7 @@ access_ok
|
||||||
dir
|
dir
|
||||||
|
|
||||||
jsr init
|
jsr init
|
||||||
jst base_displace
|
jsr base_displace
|
||||||
bcc @ok
|
bcc @ok
|
||||||
rtl
|
rtl
|
||||||
|
|
||||||
|
@ -97,6 +129,7 @@ dir
|
||||||
; the dirent count. field info will be returned from the
|
; the dirent count. field info will be returned from the
|
||||||
; directory inode)
|
; directory inode)
|
||||||
|
|
||||||
|
|
||||||
lda data.dirent.inode
|
lda data.dirent.inode
|
||||||
beq dispatch
|
beq dispatch
|
||||||
|
|
||||||
|
@ -106,7 +139,9 @@ dir
|
||||||
|
|
||||||
sta inode
|
sta inode
|
||||||
jsr load_inode
|
jsr load_inode
|
||||||
bcs exit
|
bcc dispatch
|
||||||
|
exit
|
||||||
|
rtl
|
||||||
|
|
||||||
dispatch
|
dispatch
|
||||||
|
|
||||||
|
@ -142,11 +177,11 @@ get_dir_entry_dcb_0
|
||||||
dc.w $0e, do_file_type
|
dc.w $0e, do_file_type
|
||||||
dc.w $10, do_eof
|
dc.w $10, do_eof
|
||||||
dc.w $14, do_blocks
|
dc.w $14, do_blocks
|
||||||
dc.w $18, do_create_date_time_0
|
dc.w $18, do_create_date_time
|
||||||
dc.w $20, do_mod_date_time_0
|
dc.w $20, do_mod_date_time
|
||||||
dc.w $28, do_access
|
dc.w $28, do_access
|
||||||
dc.w $2a, do_aux_type
|
dc.w $2a, do_aux_type
|
||||||
dc.w $2e, do_fst_id
|
dc.w $2e, do_file_sys_id
|
||||||
|
|
||||||
get_dir_entry_dcb_0_size equ *-get_dir_entry_dcb_0
|
get_dir_entry_dcb_0_size equ *-get_dir_entry_dcb_0
|
||||||
|
|
||||||
|
@ -165,7 +200,7 @@ get_dir_entry_dcb_1
|
||||||
dc.w $22, do_mod_date_time
|
dc.w $22, do_mod_date_time
|
||||||
dc.w $2a, do_access
|
dc.w $2a, do_access
|
||||||
dc.w $2c, do_aux_type
|
dc.w $2c, do_aux_type
|
||||||
dc.w $30, do_fst_id
|
dc.w $30, do_file_sys_id
|
||||||
dc.w $32, do_option_list
|
dc.w $32, do_option_list
|
||||||
dc.w $36, do_r_eof
|
dc.w $36, do_r_eof
|
||||||
dc.w $3a, do_r_blocks
|
dc.w $3a, do_r_blocks
|
||||||
|
@ -188,7 +223,7 @@ init proc
|
||||||
|
|
||||||
lda #1024
|
lda #1024
|
||||||
sta dev_parms.dev_blk_size
|
sta dev_parms.dev_blk_size
|
||||||
sta dev_parms.req_cnt
|
sta dev_parms.dev_req_cnt
|
||||||
|
|
||||||
|
|
||||||
;stz dirent_offset
|
;stz dirent_offset
|
||||||
|
@ -212,7 +247,7 @@ init proc
|
||||||
stz data.dirent.inode
|
stz data.dirent.inode
|
||||||
stz data.dirent.name
|
stz data.dirent.name
|
||||||
|
|
||||||
lda #v1_dirent.sizeof
|
lda #v1_dirent.__sizeof
|
||||||
sta dirent_size
|
sta dirent_size
|
||||||
|
|
||||||
|
|
||||||
|
@ -304,7 +339,7 @@ absolute
|
||||||
jmp count_entries
|
jmp count_entries
|
||||||
|
|
||||||
forward
|
forward
|
||||||
jmp find_dirent
|
jmp find_next_dirent
|
||||||
;
|
;
|
||||||
backward
|
backward
|
||||||
; backward 0 ? == forward 0
|
; backward 0 ? == forward 0
|
||||||
|
@ -336,7 +371,7 @@ count_entries proc
|
||||||
stz dirent_entry
|
stz dirent_entry
|
||||||
ldx #0
|
ldx #0
|
||||||
zone_loop
|
zone_loop
|
||||||
lda disk_inode,x
|
lda disk_inode.zone,x
|
||||||
beq next ; directory should not be sparse!
|
beq next ; directory should not be sparse!
|
||||||
|
|
||||||
phx ; save
|
phx ; save
|
||||||
|
@ -362,7 +397,7 @@ done
|
||||||
|
|
||||||
; also reset the displacement to 0.
|
; also reset the displacement to 0.
|
||||||
lda #0
|
lda #0
|
||||||
ldy #fcr.dirent
|
ldy #fcr.dirent_entry
|
||||||
sta [my_fcr],y
|
sta [my_fcr],y
|
||||||
ldy #fcr.dirent_zone
|
ldy #fcr.dirent_zone
|
||||||
sta [my_fcr],y
|
sta [my_fcr],y
|
||||||
|
@ -377,7 +412,7 @@ exit
|
||||||
count_dirent_block proc
|
count_dirent_block proc
|
||||||
|
|
||||||
; 16-byte dirent entries -- 64 per block.
|
; 16-byte dirent entries -- 64 per block.
|
||||||
with dp
|
with dp, gde_dp
|
||||||
|
|
||||||
ldy #0
|
ldy #0
|
||||||
loop
|
loop
|
||||||
|
@ -401,93 +436,13 @@ done
|
||||||
|
|
||||||
endp
|
endp
|
||||||
|
|
||||||
;
|
|
||||||
; returns:
|
|
||||||
; carry set on error.
|
|
||||||
; overflow clear if found
|
|
||||||
;
|
|
||||||
; inputs y = dirent offset
|
|
||||||
find_dirent_block proc
|
|
||||||
with dp, gde_dp
|
|
||||||
|
|
||||||
ldy dirent_offset
|
|
||||||
loop
|
|
||||||
lda [io_buffer],y
|
|
||||||
beq next
|
|
||||||
|
|
||||||
inc dirent_entry
|
|
||||||
dec displacement
|
|
||||||
bmi found_it
|
|
||||||
|
|
||||||
next
|
|
||||||
dec size
|
|
||||||
beq eod
|
|
||||||
|
|
||||||
tya
|
|
||||||
clc
|
|
||||||
adc dirent_size
|
|
||||||
tay
|
|
||||||
cmp #1024
|
|
||||||
bcc loop
|
|
||||||
; not found ...
|
|
||||||
|
|
||||||
lda #0
|
|
||||||
clc
|
|
||||||
sep #p.v
|
|
||||||
rts
|
|
||||||
|
|
||||||
eod
|
|
||||||
lda #end_of_dir
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
|
|
||||||
|
|
||||||
found_it
|
|
||||||
; we found our entry!!!
|
|
||||||
; copy it over.
|
|
||||||
|
|
||||||
stx dirent_zone
|
|
||||||
sty dirent_offset
|
|
||||||
; dirent_entry updated above.
|
|
||||||
|
|
||||||
lda [io_buffer],y
|
|
||||||
ldx #0
|
|
||||||
@loop
|
|
||||||
lda [io_buffer],y
|
|
||||||
sta data.dirent,x
|
|
||||||
iny
|
|
||||||
iny
|
|
||||||
inx
|
|
||||||
inx
|
|
||||||
cpx dirent_size
|
|
||||||
bcc @loop
|
|
||||||
|
|
||||||
|
|
||||||
; update the fcr.
|
|
||||||
|
|
||||||
lda dirent_entry
|
|
||||||
ldy #fcr.dirent_entry
|
|
||||||
sta [my_fcr],y
|
|
||||||
|
|
||||||
lda #dirent_offset
|
|
||||||
ldy #fcr.dirent_offset
|
|
||||||
sta [my_fcr],y
|
|
||||||
|
|
||||||
lda #dirent_zone
|
|
||||||
ldy #fcr.dirent_zone
|
|
||||||
sta [my_fcr],y
|
|
||||||
|
|
||||||
lda #0
|
|
||||||
clc
|
|
||||||
clv
|
|
||||||
rts
|
|
||||||
|
|
||||||
endp
|
|
||||||
|
|
||||||
|
|
||||||
strlen proc
|
strlen proc
|
||||||
; strlen the dirent.
|
; strlen the dirent.
|
||||||
; will be 0-terminated unless if < dirent size.
|
; will be 0-terminated unless if < dirent size.
|
||||||
|
with gde_dp
|
||||||
|
|
||||||
lda data.dirent.inode
|
lda data.dirent.inode
|
||||||
beq exit
|
beq exit
|
||||||
|
|
||||||
|
@ -497,7 +452,7 @@ loop
|
||||||
lda data.dirent,x
|
lda data.dirent,x
|
||||||
beq zero
|
beq zero
|
||||||
inx
|
inx
|
||||||
cpx #dirent_size
|
cpx dirent_size
|
||||||
bcc loop
|
bcc loop
|
||||||
zero
|
zero
|
||||||
long m
|
long m
|
||||||
|
@ -510,6 +465,8 @@ exit
|
||||||
rts
|
rts
|
||||||
endp
|
endp
|
||||||
do_flags proc
|
do_flags proc
|
||||||
|
with fst_parms
|
||||||
|
|
||||||
; $8000 for extended file, 0 for everything else.
|
; $8000 for extended file, 0 for everything else.
|
||||||
lda #0
|
lda #0
|
||||||
sta [param_blk_ptr],y
|
sta [param_blk_ptr],y
|
||||||
|
@ -517,12 +474,17 @@ do_flags proc
|
||||||
endp
|
endp
|
||||||
|
|
||||||
do_entry_num proc
|
do_entry_num proc
|
||||||
|
with fst_parms
|
||||||
|
with gde_dp
|
||||||
|
|
||||||
lda dirent_entry
|
lda dirent_entry
|
||||||
sta [param_blk_ptr],y
|
sta [param_blk_ptr],y
|
||||||
rts
|
rts
|
||||||
endp
|
endp
|
||||||
|
|
||||||
do_name_buffer_0 proc
|
do_name_buffer_0 proc
|
||||||
|
with fst_parms
|
||||||
|
with dp
|
||||||
|
|
||||||
lda [param_blk_ptr],y
|
lda [param_blk_ptr],y
|
||||||
sta ptr
|
sta ptr
|
||||||
|
@ -566,6 +528,8 @@ exit
|
||||||
endp
|
endp
|
||||||
|
|
||||||
do_name_buffer_1 proc
|
do_name_buffer_1 proc
|
||||||
|
with fst_parms
|
||||||
|
with dp
|
||||||
|
|
||||||
lda [param_blk_ptr],y
|
lda [param_blk_ptr],y
|
||||||
sta ptr
|
sta ptr
|
||||||
|
@ -645,6 +609,7 @@ exit
|
||||||
;
|
;
|
||||||
;
|
;
|
||||||
find_absolute_dirent proc
|
find_absolute_dirent proc
|
||||||
|
with gde_dp
|
||||||
|
|
||||||
; if displacement > dirent_entry, we can re-use that info.
|
; if displacement > dirent_entry, we can re-use that info.
|
||||||
lda displacement
|
lda displacement
|
||||||
|
@ -665,6 +630,7 @@ no
|
||||||
endp
|
endp
|
||||||
|
|
||||||
find_next_dirent proc
|
find_next_dirent proc
|
||||||
|
with gde_dp, dp
|
||||||
|
|
||||||
lda dirent_entry
|
lda dirent_entry
|
||||||
bne @ok
|
bne @ok
|
||||||
|
@ -677,7 +643,7 @@ find_next_dirent proc
|
||||||
ldx dirent_zone
|
ldx dirent_zone
|
||||||
|
|
||||||
loop
|
loop
|
||||||
lda disk_inode,x
|
lda disk_inode.zone,x
|
||||||
beq sparse ; should never happen...
|
beq sparse ; should never happen...
|
||||||
phx ; save
|
phx ; save
|
||||||
jsr read_data_block
|
jsr read_data_block
|
||||||
|
@ -711,6 +677,7 @@ sparse
|
||||||
cmp #32
|
cmp #32
|
||||||
beq @ok
|
beq @ok
|
||||||
lda #64
|
lda #64
|
||||||
|
@ok
|
||||||
eor #$ffff
|
eor #$ffff
|
||||||
sec ; + 1
|
sec ; + 1
|
||||||
adc size
|
adc size
|
||||||
|
@ -724,11 +691,96 @@ found_it
|
||||||
clc
|
clc
|
||||||
exit
|
exit
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
eod
|
||||||
|
lda #end_of_dir
|
||||||
|
sec
|
||||||
|
rts
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
;
|
||||||
|
; returns:
|
||||||
|
; carry set on error.
|
||||||
|
; overflow clear if found
|
||||||
|
;
|
||||||
|
; inputs y = dirent offset
|
||||||
|
find_dirent_block proc
|
||||||
|
with dp, gde_dp
|
||||||
|
|
||||||
|
ldy dirent_offset
|
||||||
|
loop
|
||||||
|
lda [io_buffer],y
|
||||||
|
beq next
|
||||||
|
|
||||||
|
inc dirent_entry
|
||||||
|
dec displacement
|
||||||
|
bmi found_it
|
||||||
|
|
||||||
|
next
|
||||||
|
dec size
|
||||||
|
beq eod
|
||||||
|
|
||||||
|
tya
|
||||||
|
clc
|
||||||
|
adc dirent_size
|
||||||
|
tay
|
||||||
|
cmp #1024
|
||||||
|
bcc loop
|
||||||
|
; not found ...
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
clc
|
||||||
|
sep #p.v
|
||||||
|
rts
|
||||||
|
|
||||||
eod
|
eod
|
||||||
lda #end_of_dir
|
lda #end_of_dir
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
found_it
|
||||||
|
; we found our entry!!!
|
||||||
|
; copy it over.
|
||||||
|
|
||||||
|
stx dirent_zone
|
||||||
|
sty dirent_offset
|
||||||
|
; dirent_entry updated above.
|
||||||
|
|
||||||
|
lda [io_buffer],y
|
||||||
|
ldx #0
|
||||||
|
@loop
|
||||||
|
lda [io_buffer],y
|
||||||
|
sta data.dirent,x
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
inx
|
||||||
|
inx
|
||||||
|
cpx dirent_size
|
||||||
|
bcc @loop
|
||||||
|
|
||||||
|
|
||||||
|
; update the fcr.
|
||||||
|
|
||||||
|
lda dirent_entry
|
||||||
|
ldy #fcr.dirent_entry
|
||||||
|
sta [my_fcr],y
|
||||||
|
|
||||||
|
lda dirent_offset
|
||||||
|
ldy #fcr.dirent_offset
|
||||||
|
sta [my_fcr],y
|
||||||
|
|
||||||
|
lda dirent_zone
|
||||||
|
ldy #fcr.dirent_zone
|
||||||
|
sta [my_fcr],y
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
clc
|
||||||
|
clv
|
||||||
|
rts
|
||||||
|
|
||||||
|
endp
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
|
@ -102,15 +102,6 @@ file_info_dcb_1
|
||||||
dc.w $30, do_r_blocks
|
dc.w $30, do_r_blocks
|
||||||
endp
|
endp
|
||||||
|
|
||||||
do_access proc
|
|
||||||
with dp,fst_parms
|
|
||||||
|
|
||||||
lda disk_inode.mode
|
|
||||||
lda #$c3 ; ehh
|
|
||||||
sta [param_blk_ptr],y
|
|
||||||
rts
|
|
||||||
endp
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
load_inode proc export
|
load_inode proc export
|
||||||
|
|
10
params.aii
10
params.aii
|
@ -337,5 +337,15 @@ do_refnum proc export
|
||||||
rts
|
rts
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
do_access proc export
|
||||||
|
with dp,fst_parms
|
||||||
|
|
||||||
|
lda disk_inode.mode
|
||||||
|
lda #$c3 ; ehh
|
||||||
|
sta [param_blk_ptr],y
|
||||||
|
rts
|
||||||
|
endp
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue