fixed bootloader/main.s:open_file

This commit is contained in:
notsomeidiot123 2025-03-26 15:17:05 -04:00
parent 6d4f541a01
commit a6636df6fa
2 changed files with 39 additions and 10 deletions

View File

@ -10,6 +10,7 @@ all: bootloader tools kernel
qemu-img resize -f raw image.bin 512M
./diskwrite -v -l idm.elf kernel.elf -o image.bin
# ./diskwrite -v idm.elf -o image.bin
# ./diskwrite -v -l kernel.elf idm.elf -o image.bin
qemu-system-i386 -hda image.bin --no-reboot --no-shutdown -m 32m -smp 2 -serial mon:stdio -D intlog.txt -d int
tools:
$(CC) tools/diskwrite.c -o diskwrite

View File

@ -306,6 +306,7 @@ part_2:
; debug
mov edi, kernel_file
call open_file
; debug
cmp eax, -1
je file_not_found
add edx, 0x40000;is 1mb enough for a filesystem diver and a disk driver?
@ -320,21 +321,25 @@ part_2:
; debug
mov esi, [kload_paddr]
call load_elf
; debug
push eax
mov edi, disk_module_file
call open_file
; debug
cmp eax, -1
je .find_fs_driver_no_disk
mov eax, esi
and edx, 0xfffffc00
add edx, 0x1000
add [kload_paddr], edx
; debug
mov edi, edx
; mov edi, edx
debug
mov [disk_module_struct.ptr], edi
call read_file
debug
jc load_fail
.find_fs_driver_no_disk:
mov ax, 0xe44
@ -458,10 +463,9 @@ paging_en:
open_file:
;only looks in the root directory
;edi = file_to_search
;esi = ptr to load file
;esi = ptr to load file [TODO: IMPLEMENT]
;eax = return value (first cluster)
;edx = return value (file size)
;!TODO: RE-WRITE FUNCTION FROM GROUND UP
push edi
xor esi, esi
xor ecx, ecx
@ -475,7 +479,12 @@ open_file:
xor dx, dx
mul cx
add si, ax
xor cx, cx
mov ax, [fat_ebpb32.root_dir_cluster]
mov cl, [fat_bpb.sectors_per_cluster]
mul cx
add si, ax
; jmp $
mov byte [DAP.segment], 0
mov [DAP.sector_start], esi
mov word [DAP.read_count], 8
@ -484,18 +493,37 @@ open_file:
mov si, DAP
mov ah, 0x42
mov dl, [data.boot_disc]
; jmp $
int 0x13
jc .not_found_ret
xor ecx, ecx
lea esi, [root_dir - 0x20]
lea esi, [root_dir]
push word 0
pop es
.chklp:
add esi, 0x20
; add esi, 0x20
mov edi, [esp]
cmp byte [esi], 0
mov ax, [esi]
je .not_found_ret
mov ecx, 11
rep cmpsb
jne .chklp
push esi
repe cmpsb
pop esi
; jmp $
je .found
add esi, 0x20
jmp .chklp
.found:
debug
pop edi
;eax = first cluster
;edx = file size
mov ax, [esi + 20]
shl eax, 16
mov ax, [esi + 26]
mov edx, [esi + 28]
; jmp $
ret
.not_found_ret:
pop edi