diff --git a/src/bootloader/main.s b/src/bootloader/main.s index 7a84f9f..57be830 100644 --- a/src/bootloader/main.s +++ b/src/bootloader/main.s @@ -330,17 +330,18 @@ part_2: ; debug cmp eax, -1 je .find_fs_driver_no_disk + mov [disk_module_struct.size], edx mov esi, eax and edx, 0xfffffc00 add edx, 0x1000 add [kload_paddr], edx ; debug - mov edi, [kload_paddr] - call read_file - mov esi, [kload_paddr] - ; call load_elf mov [disk_module_struct.ptr], edi + call read_file + jc load_fail + ; mov esi, [kload_paddr] + ; call load_elf ; debug jc load_fail jmp .find_fs_driver @@ -559,6 +560,11 @@ read_file: add eax, ecx add eax, edx mov [DAP.sector_start], eax + mov ecx, [fat_bpb.part_start] + add [DAP.sector_start], ecx + mov edx, [DAP.sector_start] + ; cmp esi, 3 + ; je $ xor ecx, ecx mov cl, [fat_bpb.sectors_per_cluster] mov [DAP.read_count], cx @@ -856,10 +862,12 @@ k_info: ;loaded_modules points to a struct array containing a ptr to the entry point of each pre-loaded module to be executed during startup disk_module_struct: .ptr: dd 0 + .size: dd 0 .type: dd 1 .next_entry: dd fs_module_struct fs_module_struct: .ptr: dd 0 + .size: dd 0 .type: dd 2 .next_entry: dd 0 kernel_file: db "kernel", 0, 0, "elf" diff --git a/src/kernel/kmain.c b/src/kernel/kmain.c index 458b4cd..e6dcc95 100644 --- a/src/kernel/kmain.c +++ b/src/kernel/kmain.c @@ -20,8 +20,8 @@ extern void kmain(kernel_info_t *kernel_info){ //TODO: Map and load filesystem and disk modules //TODO: Start Initial Process - printf("%x", kernel_info->loaded_modules->ptr); - printf("%x", kmain); + printf("%x\n", *(uint32_t *)kernel_info->loaded_modules->ptr); + printf("%x", kernel_info->loaded_modules->size); init_scheduler(); thread_start(pid0); diff --git a/src/kernel/shared/kstdlib.h b/src/kernel/shared/kstdlib.h index e19c25f..08c08fb 100644 --- a/src/kernel/shared/kstdlib.h +++ b/src/kernel/shared/kstdlib.h @@ -5,6 +5,7 @@ typedef struct module_linked_list{ void *ptr; + uint32_t size; uint32_t type; struct module_linked_list *link; }__attribute__((packed)) kernel_module_t; diff --git a/src/kmodules/disk_driver.c b/src/kmodules/disk_driver.c index 0658e76..0183f49 100644 --- a/src/kmodules/disk_driver.c +++ b/src/kmodules/disk_driver.c @@ -1,5 +1,6 @@ #include void main(){ - uint32_t *t = (void *)0xb8000; + uint16_t *t = (void *)0xb8000; + *t = 0x0f41; } \ No newline at end of file