diff options
author | Benji Dial <benji6283@gmail.com> | 2020-09-06 00:48:07 -0400 |
---|---|---|
committer | Benji Dial <benji6283@gmail.com> | 2020-09-06 00:48:07 -0400 |
commit | e8c6577617bffa4402c07c7aa20e3c24f03c1c20 (patch) | |
tree | 2fb9230b62d2344a44453117de9e656892219788 /src/kernel/plef.c | |
parent | 7ff724fe8f709440da9c730fdb8dcbaa4f989ed5 (diff) | |
download | portland-os-e8c6577617bffa4402c07c7aa20e3c24f03c1c20.tar.gz |
program loading, others
big kernel additions: paging, elf loading, separate kernel and user page allocation
it now properly loads and runs sd0:bin/init.elf
still need to determine which disk was booted from, and start the init on that disk
Diffstat (limited to 'src/kernel/plef.c')
-rw-r--r-- | src/kernel/plef.c | 32 |
1 files changed, 0 insertions, 32 deletions
diff --git a/src/kernel/plef.c b/src/kernel/plef.c deleted file mode 100644 index 710943f..0000000 --- a/src/kernel/plef.c +++ /dev/null @@ -1,32 +0,0 @@ -#include <stdint.h> -#include "drive.h" -#include "plef.h" -#include "task.h" -#include "util.h" - -#define PLEF_MAGIC 0xb9ba4c50 - -task_handle plef_run(const struct drive *d, const char *path) { - drive_file_id_t h = d->get_file(d, path); - if (!h) - return 0; - - uint8_t start[512]; - d->load_sector(d, h, 0, start); - - struct plef_header head = *(struct plef_header *)start; - if ((head.magic != PLEF_MAGIC) || (head.version_high)) { - d->free_file(d, h); - return 0; - } - - uint32_t payload_addr; - segment_id cs = new_segment(true, head.payload_length + head.bss_length, &payload_addr); - segment_id ds = mirror_segment(false, cs); - - fmcpy((void *)payload_addr, d, h, head.payload_offset, head.payload_length); - - d->free_file(d, h); - - return new_task(cs, ds, head.entry_point, head.payload_length + head.bss_length); -}
\ No newline at end of file |