fox32rom: Don't crash when trying to open a file that doesn't exist
This commit is contained in:
parent
3583067b23
commit
e18c466d34
12
ryfs.asm
12
ryfs.asm
|
@ -12,11 +12,12 @@
|
||||||
; r1: disk ID
|
; r1: disk ID
|
||||||
; r2: file struct: pointer to a blank file struct
|
; r2: file struct: pointer to a blank file struct
|
||||||
; outputs:
|
; outputs:
|
||||||
; r0: first file sector
|
; r0: first file sector, or zero if file wasn't found
|
||||||
ryfs_open:
|
ryfs_open:
|
||||||
push r1
|
push r1
|
||||||
push r2
|
push r2
|
||||||
push r10
|
push r10
|
||||||
|
push r31
|
||||||
|
|
||||||
; r10: pointer to file struct entry
|
; r10: pointer to file struct entry
|
||||||
mov r10, r2
|
mov r10, r2
|
||||||
|
@ -33,11 +34,15 @@ ryfs_open:
|
||||||
mov r1, TEMP_SECTOR_BUF
|
mov r1, TEMP_SECTOR_BUF
|
||||||
add r1, 20
|
add r1, 20
|
||||||
mov r2, 11 ; compare 11 bytes
|
mov r2, 11 ; compare 11 bytes
|
||||||
|
mov r31, 31 ; 31 file entries total
|
||||||
ryfs_open_find_dir_entry_loop:
|
ryfs_open_find_dir_entry_loop:
|
||||||
call compare_memory_bytes
|
call compare_memory_bytes
|
||||||
ifz jmp ryfs_open_found_dir_entry
|
ifz jmp ryfs_open_found_dir_entry
|
||||||
add r1, 16 ; point to the file name in the next directory entry
|
add r1, 16 ; point to the file name in the next directory entry
|
||||||
jmp ryfs_open_find_dir_entry_loop ; FIXME: this never returns if the file wasn't found
|
loop ryfs_open_find_dir_entry_loop
|
||||||
|
; if we reach this point, the file wasn't found
|
||||||
|
mov r0, 0
|
||||||
|
jmp ryfs_open_end
|
||||||
ryfs_open_found_dir_entry:
|
ryfs_open_found_dir_entry:
|
||||||
sub r1, 4 ; point to first sector of this file
|
sub r1, 4 ; point to first sector of this file
|
||||||
mov.16 [r10], [r1] ; write file_first_sector
|
mov.16 [r10], [r1] ; write file_first_sector
|
||||||
|
@ -46,7 +51,8 @@ ryfs_open_found_dir_entry:
|
||||||
inc r10
|
inc r10
|
||||||
mov.8 [r10], 0 ; write file_reserved
|
mov.8 [r10], 0 ; write file_reserved
|
||||||
movz.16 r0, [r1]
|
movz.16 r0, [r1]
|
||||||
|
ryfs_open_end:
|
||||||
|
pop r31
|
||||||
pop r10
|
pop r10
|
||||||
pop r2
|
pop r2
|
||||||
pop r1
|
pop r1
|
||||||
|
|
Loading…
Reference in New Issue
Block a user