diff --git a/kernel/src/bitmap.c b/kernel/src/bitmap.c index 9da7297..b871f57 100644 --- a/kernel/src/bitmap.c +++ b/kernel/src/bitmap.c @@ -28,7 +28,7 @@ void bmap_setarea(bitmap_t* map, size_t base, size_t len, int val) { void bmap_setall(bitmap_t* map, int val) { uint8_t b = (val) ? 0xff : 0; - memset(map->map, b, map->bytes); + for (size_t i = 0; i < map->bytes; i++) ((uint8_t*)map->map)[i] = b; if (val) map->used = map->blocks; else map->used = 0; } diff --git a/kernel/src/paging.c b/kernel/src/paging.c index a709980..0f71689 100644 --- a/kernel/src/paging.c +++ b/kernel/src/paging.c @@ -9,7 +9,7 @@ static uint32_t pagedirs[PAGE_DIR_COUNT][1024] __align(4096); static uint8_t pagedirUsed[PAGE_DIR_COUNT]; // TODO: Should this be initialized? If so, to what? -size_t pag_pageCount; +size_t pag_pageCount = 0; // Invalidates the pagedir entry in the CPUs TLB cache static inline void invalidate(uint32_t vaddr) { @@ -38,8 +38,9 @@ int pag_init(void) { */ init_pagedir[1023] = ((uint32_t)init_pagedir - KERNEL_BASE) | PAGE_FLAG_PRESENT | PAGE_FLAG_WRITE; - invalidate(0xFFFFF000); + invalidate(1023 * PAGE_SIZE); + // TODO: This sometimes causes a #PF memset(pagedirs, 0, PAGE_SIZE * PAGE_DIR_COUNT); memset(pagedirUsed, 0, PAGE_DIR_COUNT); diff --git a/makefile b/makefile index 1f66d39..d711b72 100644 --- a/makefile +++ b/makefile @@ -14,10 +14,10 @@ MODULES = $(KERNEL) all: $(TARGET) $(TARGET): $(SYSROOT) $(MODULES) cp /usr/share/limine/limine-bios.sys $(SYSROOT)/boot - echo -e 'timeout: 5\n\n/kern.\n\tprotocol: multiboot1\n\tpath: boot():/boot/kernel.elf\n' > $(SYSROOT)/boot/limine.conf + echo -e 'timeout: 0\n\n/kern.\n\tprotocol: multiboot1\n\tpath: boot():/boot/kernel.elf\n' > $(SYSROOT)/boot/limine.conf dd if=/dev/zero of=$(TARGET) bs=1M count=$(IMG_SIZE) echo ',,c,*' | sfdisk $(TARGET) >/dev/null - mformat -F -i $(TARGET)@@$(OFFSET) ::/ + mformat -F -i $(TARGET)@@$(OFFSET) :: mcopy -i $(TARGET)@@$(OFFSET) $(SYSROOT)/* :: limine bios-install $(TARGET) @@ -45,7 +45,8 @@ clean: for m in $(MODULES); do $(MAKE) -C $$m clean; done qemu: - qemu-system-x86_64 $(TARGET)\ + qemu-system-x86_64\ + -drive format=raw,file=$(TARGET),index=0,media=disk\ -m 256M -accel tcg -monitor stdio -net none\ -rtc base=localtime,clock=host,driftfix=slew\ -audiodev $(AUDIODEV),id=audio0 -machine pcspk-audiodev=audio0