diff --git a/src/kernel/lib/memory.c b/src/kernel/lib/memory.c new file mode 100644 index 0000000..f767494 --- /dev/null +++ b/src/kernel/lib/memory.c @@ -0,0 +1,21 @@ +#include +#include +#include "memory.h" + +static void *g_free_memory = ALLOC_START; + +void *kmalloc(size_t size){ + void *ptr = g_free_memory; + g_free_memory += size; + return ptr; +} + +void *kcalloc(size_t count, size_t size){ + void *ptr = g_free_memory; + size *= count; + g_free_memory += size; + for(int i = 0; i < size; i++){ + ((uint8_t *)ptr)[i] = 0; + } + return ptr; +} diff --git a/src/kernel/lib/memory.h b/src/kernel/lib/memory.h new file mode 100644 index 0000000..ed11cf6 --- /dev/null +++ b/src/kernel/lib/memory.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +#define ALLOC_START (void *)0x1000 + +void *kmalloc(size_t size); +// TODO: void kfree(void *ptr); +void *kcalloc(size_t count, size_t size); diff --git a/src/kernel/shell.c b/src/kernel/shell.c index cc4f251..0464a86 100644 --- a/src/kernel/shell.c +++ b/src/kernel/shell.c @@ -1,6 +1,7 @@ #include "shell.h" #include "lib/stdio.h" #include "lib/string.h" +#include "lib/memory.h" int shell_run(char *cmd){ int ret = 0; @@ -12,6 +13,12 @@ int shell_run(char *cmd){ else if(!strcmp(cmd, "VERSION")){ printf("%s\n", OS_VERSION); } + else if(!strcmp(cmd, "MALLOC")){ + printf("Allocated 10 bytes:\n%x\n", kmalloc(10)); + } + else if(!strcmp(cmd, "CALLOC")){ + printf("Allocated and zeroed 10 chars:\n%x\n", kcalloc(10, sizeof(char))); + } else{ printf("SHELL: Unknown command \"%s\"\n", cmd); ret = 127;