79 lines
1.6 KiB
NASM
79 lines
1.6 KiB
NASM
|
; file helper routines
|
||
|
|
||
|
; get a list of FXF files on disk 0
|
||
|
; inputs:
|
||
|
; none
|
||
|
; outputs:
|
||
|
; r0: pointer to file name buffer
|
||
|
; r1: number of files
|
||
|
get_fxf_files:
|
||
|
push r2
|
||
|
push r31
|
||
|
|
||
|
; allocate a 341 byte array for the file name buffer
|
||
|
mov r0, 341
|
||
|
call allocate_memory
|
||
|
cmp r0, 0
|
||
|
ifz jmp allocate_error
|
||
|
mov [all_file_list_ptr], r0
|
||
|
|
||
|
; read the list of files into the buffer
|
||
|
mov r1, 0
|
||
|
call ryfs_get_file_list
|
||
|
mov [number_of_all_files], r0
|
||
|
|
||
|
; allocate a 341 byte buffer for the FXF file name buffer
|
||
|
mov r0, 341
|
||
|
call allocate_memory
|
||
|
cmp r0, 0
|
||
|
ifz jmp allocate_error
|
||
|
mov [fxf_file_list_ptr], r0
|
||
|
|
||
|
mov r0, [all_file_list_ptr]
|
||
|
mov r1, [fxf_file_list_ptr]
|
||
|
mov [number_of_fxf_files], 0
|
||
|
mov r31, [number_of_all_files]
|
||
|
get_fxf_files_loop:
|
||
|
push r0
|
||
|
push r1
|
||
|
add r0, 8
|
||
|
mov r1, fxf_ext
|
||
|
mov r2, 3
|
||
|
call compare_memory_bytes
|
||
|
ifnz jmp get_fxf_files_loop_not_fxf
|
||
|
inc [number_of_fxf_files]
|
||
|
pop r1
|
||
|
pop r0
|
||
|
mov r2, 11
|
||
|
call copy_memory_bytes
|
||
|
add r0, 11
|
||
|
add r1, 11
|
||
|
loop get_fxf_files_loop
|
||
|
jmp get_fxf_files_end
|
||
|
get_fxf_files_loop_not_fxf:
|
||
|
pop r1
|
||
|
pop r0
|
||
|
add r0, 11
|
||
|
loop get_fxf_files_loop
|
||
|
get_fxf_files_end:
|
||
|
; free the "all files" buffer
|
||
|
mov r0, [all_file_list_ptr]
|
||
|
call free_memory
|
||
|
|
||
|
; return pointer to file name buffer and number of files
|
||
|
mov r0, [fxf_file_list_ptr]
|
||
|
mov r1, [number_of_fxf_files]
|
||
|
|
||
|
pop r31
|
||
|
pop r2
|
||
|
ret
|
||
|
|
||
|
; all files
|
||
|
all_file_list_ptr: data.32 0
|
||
|
number_of_all_files: data.32 0
|
||
|
|
||
|
; FXF files only
|
||
|
fxf_file_list_ptr: data.32 0
|
||
|
number_of_fxf_files: data.32 0
|
||
|
fxf_ext: data.str "fxf"
|