diff options
Diffstat (limited to 'src/kernel/fs/load.c')
-rw-r--r-- | src/kernel/fs/load.c | 86 |
1 files changed, 46 insertions, 40 deletions
diff --git a/src/kernel/fs/load.c b/src/kernel/fs/load.c index 5a476b5..7227f9b 100644 --- a/src/kernel/fs/load.c +++ b/src/kernel/fs/load.c @@ -10,29 +10,32 @@ void load_binaries() { - userspace = (uint32_t) kmalloc(10000); - font = (struct font *) kmalloc(100000);; // High quality shit + userspace = (uint32_t)kmalloc(10000); + font = (struct font *)kmalloc(100000); + ; // High quality shit - uint8_t boot_drive_id = (uint8_t) (*((uint8_t *) 0x9000)); - if (boot_drive_id != 0xE0) { - struct ata_interface *primary_master = new_ata(1, 0x1F0); - marfs_init(primary_master); - marfs_read_whole_file(4, (uint8_t *) userspace); - marfs_read_whole_file(5, (uint8_t *) font); - } else { - char *font_p[] = {"FONT.BIN"}; - struct iso9660_entity *font_e = ISO9660_get(font_p, 1); - if (!font_e) panic("Font not found!"); - ATAPI_granular_read(1 + (font_e->length / 2048), font_e->lba, (uint8_t *) font); - kfree(font_e); + uint8_t boot_drive_id = (uint8_t)(*((uint8_t *)0x9000)); + if (boot_drive_id != 0xE0) { + struct ata_interface *primary_master = new_ata(1, 0x1F0); + marfs_init(primary_master); + marfs_read_whole_file(4, (uint8_t *)userspace); + marfs_read_whole_file(5, (uint8_t *)font); + } else { + char *font_p[] = { "FONT.BIN" }; + struct iso9660_entity *font_e = ISO9660_get(font_p, 1); + if (!font_e) + panic("Font not found!"); + ATAPI_granular_read(1 + (font_e->length / 2048), font_e->lba, (uint8_t *)font); + kfree(font_e); - char *user_p[] = {"USER.BIN"}; - struct iso9660_entity *user_e = ISO9660_get(user_p, 1); - if (!user_e) panic("Userspace binary not found!"); - ATAPI_granular_read(1 + (user_e->length / 2048), user_e->lba, (uint8_t *) userspace); - kfree(user_e); - } - vga_log("Successfully loaded binaries"); + char *user_p[] = { "USER.BIN" }; + struct iso9660_entity *user_e = ISO9660_get(user_p, 1); + if (!user_e) + panic("Userspace binary not found!"); + ATAPI_granular_read(1 + (user_e->length / 2048), user_e->lba, (uint8_t *)userspace); + kfree(user_e); + } + vga_log("Successfully loaded binaries"); } #define MAX_LOADERS 16 @@ -44,35 +47,38 @@ uint32_t last_load_loc = 0x400000; void loader_init() { - serial_printf("Setting up loader"); - loaders = (loader_t **) kmalloc(MAX_LOADERS * sizeof(uint32_t)); - memset(loaders, 0, MAX_LOADERS * sizeof(uint32_t)); - // _kill(); + serial_printf("Setting up loader"); + loaders = (loader_t **)kmalloc(MAX_LOADERS * sizeof(uint32_t)); + memset(loaders, 0, MAX_LOADERS * sizeof(uint32_t)); + // _kill(); } void register_loader(loader_t *load) { - if (last_loader + 1 > MAX_LOADERS) return; - if (!load) return; - loaders[last_loader] = load; - last_loader++; - serial_printf("Registered %s loader as id %d", load->name, last_loader - 1); + if (last_loader + 1 > MAX_LOADERS) + return; + if (!load) + return; + loaders[last_loader] = load; + last_loader++; + serial_printf("Registered %s loader as id %d", load->name, last_loader - 1); } uint32_t loader_get_unused_load_location() { - last_load_loc += 0x400000; - return last_load_loc; + last_load_loc += 0x400000; + return last_load_loc; } uint8_t exec_start(uint8_t *buf) { - for (int i = 0; i < MAX_LOADERS; i++) { - if (!loaders[i]) break; - void *priv = loaders[i]->probe(buf); - if (priv) { - return loaders[i]->start(buf, priv); - } - } - return 0; + for (int i = 0; i < MAX_LOADERS; i++) { + if (!loaders[i]) + break; + void *priv = loaders[i]->probe(buf); + if (priv) { + return loaders[i]->start(buf, priv); + } + } + return 0; }
\ No newline at end of file |