summaryrefslogtreecommitdiff
path: root/src/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel')
-rw-r--r--src/kernel/main.c9
-rw-r--r--src/kernel/util.c8
-rw-r--r--src/kernel/util.h1
3 files changed, 16 insertions, 2 deletions
diff --git a/src/kernel/main.c b/src/kernel/main.c
index 677faaf..7f49fed 100644
--- a/src/kernel/main.c
+++ b/src/kernel/main.c
@@ -3,16 +3,21 @@
#include <kernel/mem.h>
#include <kernel/panic.h>
#include <kernel/proc.h>
+#include <kernel/util.h>
+#include <stdint.h>
void r3_test();
void kmain(struct kmain_info info) {
- log_write(info.init.at, info.init.size);
log_const("mem...");
mem_init(&info);
log_const("creating process...");
- struct process *proc = process_new(r3_test);
+
+ void *init_addr = (void*)0x200000;
+ memcpy(init_addr, info.init.at, info.init.size);
+
+ struct process *proc = process_new(init_addr);
log_const("switching...");
process_switch(proc);
}
diff --git a/src/kernel/util.c b/src/kernel/util.c
index da3ac9d..f4dc5e1 100644
--- a/src/kernel/util.c
+++ b/src/kernel/util.c
@@ -1,6 +1,14 @@
#include <kernel/util.h>
#include <stdint.h>
+void *memcpy(void *dest, const void *src, size_t n) {
+ char *d = dest;
+ const char *s = src;
+ for (size_t i = 0; i < n; i++)
+ d[i] = s[i];
+ return dest;
+}
+
void *memset(void *s, int c, size_t n) {
uint8_t *s2 = s;
for (size_t i = 0; i < n; n++)
diff --git a/src/kernel/util.h b/src/kernel/util.h
index 688ac63..4bd7c31 100644
--- a/src/kernel/util.h
+++ b/src/kernel/util.h
@@ -1,4 +1,5 @@
#pragma once
#include <stddef.h>
+void *memcpy(void *dest, const void *src, size_t n);
void *memset(void *s, int c, size_t n);