summaryrefslogtreecommitdiff
path: root/src/kernel/plef.c
diff options
context:
space:
mode:
authorBenji Dial <benji6283@gmail.com>2020-09-06 00:48:07 -0400
committerBenji Dial <benji6283@gmail.com>2020-09-06 00:48:07 -0400
commite8c6577617bffa4402c07c7aa20e3c24f03c1c20 (patch)
tree2fb9230b62d2344a44453117de9e656892219788 /src/kernel/plef.c
parent7ff724fe8f709440da9c730fdb8dcbaa4f989ed5 (diff)
downloadportland-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.c32
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