From bb2a6b4d93512e8afc1b1999eb58f1f506cc27ae Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Sun, 26 Jan 2020 18:38:36 +0100 Subject: Magic commit Some things work, others don't. --- src/kernel/fs/load.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/kernel/fs/load.c (limited to 'src/kernel/fs/load.c') diff --git a/src/kernel/fs/load.c b/src/kernel/fs/load.c new file mode 100644 index 0000000..be7d5b8 --- /dev/null +++ b/src/kernel/fs/load.c @@ -0,0 +1,34 @@ +#include +#include +#include +#include +#include +#include +#include + +void load_binaries() +{ + userspace = 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); + + 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"); +} \ No newline at end of file -- cgit v1.2.3