diff --git a/Makefile b/Makefile index 02933ca..21e9be7 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ CFLAGS = -std=gnu11 -m32 -mgeneral-regs-only -nostdlib -fno-builtin -fno-exceptions -fno-leading-underscore -fno-pie -fno-stack-protector -Wno-pointer-to-int-cast -CXXFLAGS = -m32 -fno-use-cxa-atexit -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore +CXXFLAGS = -m32 -fno-use-cxa-atexit -mgeneral-regs-only -nostdlib -fno-builtin -fno-rtti -fno-exceptions -fno-leading-underscore -fpermissive -fno-pie -fno-stack-protector LDFLAGS = DISK_IMG_FILES = build/kernel/kernel.bin @@ -52,7 +52,7 @@ build/kernel/%.o: src/kernel/%.c gcc $(CFLAGS) -o $@ -c $< build/kernel/%.o: src/kernel/%.cpp - g++ $(CFLAGS) -o $@ -c $< + g++ $(CXXFLAGS) -o $@ -c $< build/kernel/%.o: src/kernel/%.asm nasm -felf32 $< -o $@ diff --git a/src/kernel/allocate.c b/src/kernel/allocate.cpp similarity index 100% rename from src/kernel/allocate.c rename to src/kernel/allocate.cpp diff --git a/src/kernel/atapio.c b/src/kernel/atapio.cpp similarity index 95% rename from src/kernel/atapio.c rename to src/kernel/atapio.cpp index 6991018..0a6c310 100644 --- a/src/kernel/atapio.c +++ b/src/kernel/atapio.cpp @@ -66,7 +66,7 @@ void init_atapio() { // We've initialised now, let's load the FAT and RootDirEntries. read_sectors(sectorsPerFAT * countFATs + countReserved, countRDEs / 16, rootDirEntries); - read_sectors(countReserved, sectorsPerFAT, FAT1); + read_sectors(countReserved, sectorsPerFAT, (uint8_t*)FAT1); } void read_sector(uint32_t address, uint8_t* buffer) { @@ -101,7 +101,7 @@ uint16_t file_exists(char* filename) { for (int i=0; ipd_index] = (PDE){ - .address = (uint32_t)(page_tables[split->pd_index]) >> 12, - .available = 0, + .present = 1, + .read_write = 1, + .privilege = 0, + .write_through_cache = 0, + .disable_cache = 0, + .accessed = 0, + .ignored2 = 0, .page_4mb = 0, - .accessed = 0, - .disable_cache = 0, - .write_through_cache = 0, - .privilege = 0, - .present = 1, - .read_write = 1, - .ignored = 0, - .ignored2 = 0 + .available = 0, + .address = (uint32_t)(page_tables[split->pd_index]) >> 12 }; ((PTE*)((uint32_t)page_tables[split->pd_index] + 0xbffe0000))[split->pt_index] = (PTE){ - .address = physical >> 12, - .available = 0, - .global = 0, - .accessed = 0, - .disable_cache = 0, - .dirty = 0, - .write_through_cache = 0, - .privilege = 0, .present = 1, .read_write = 1, - - .ignored = 0 + .privilege = 0, + .write_through_cache = 0, + .disable_cache = 0, + .accessed = 0, + .dirty = 0, + .ignored = 0, + .global = 0, + .available = 0, + .address = physical >> 12 }; } -void map_many_4k_phys_to_virt(uint32_t physical, uint32_t virtual, PDE* page_directory, PTE** page_tables, uint32_t count) { +void map_many_4k_phys_to_virt(uint32_t physical, uint32_t virt, PDE* page_directory, PTE** page_tables, uint32_t count) { for (int i=0; ipd_index] + 0xbffe0000))[split->pt_index] = (PTE){ - .address = 0, - .available = 0, - .global = 0, - .accessed = 0, - .disable_cache = 0, - .dirty = 0, - .write_through_cache = 0, - .privilege = 0, .present = 0, .read_write = 0, - - .ignored = 0 + .privilege = 0, + .write_through_cache = 0, + .disable_cache = 0, + .accessed = 0, + .dirty = 0, + .ignored = 0, + .global = 0, + .available = 0, + .address = 0 }; } \ No newline at end of file diff --git a/src/kernel/paging.h b/src/kernel/paging.h index d489bba..cd1e47a 100644 --- a/src/kernel/paging.h +++ b/src/kernel/paging.h @@ -4,7 +4,7 @@ #include #include "types.h" -typedef struct { +struct __attribute__((packed)) PDE { uint32_t present : 1; uint32_t read_write : 1; uint32_t privilege : 1; @@ -16,9 +16,9 @@ typedef struct { uint32_t ignored : 1; uint32_t available : 3; uint32_t address : 20; -}__attribute__((packed)) PDE; +}; -typedef struct { +struct __attribute__((packed)) PTE { uint32_t present : 1; uint32_t read_write : 1; uint32_t privilege : 1; @@ -30,10 +30,10 @@ typedef struct { uint32_t global : 1; uint32_t available : 3; uint32_t address : 20; -}__attribute__((packed)) PTE; +}; -void map_4k_phys_to_virt(uint32_t physical, uint32_t virtual, PDE* page_directory, PTE** page_tables); -void map_many_4k_phys_to_virt(uint32_t physical, uint32_t virtual, PDE* page_directory, PTE** page_tables, uint32_t count); +void map_4k_phys_to_virt(uint32_t physical, uint32_t virt, PDE* page_directory, PTE** page_tables); +void map_many_4k_phys_to_virt(uint32_t physical, uint32_t virt, PDE* page_directory, PTE** page_tables, uint32_t count); -void unmap_4k_virt(uint32_t virtual, PDE* page_directory, PTE** page_tables); +void unmap_4k_virt(uint32_t virt, PDE* page_directory, PTE** page_tables); #endif \ No newline at end of file diff --git a/src/kernel/screenstuff.c b/src/kernel/screenstuff.cpp similarity index 98% rename from src/kernel/screenstuff.c rename to src/kernel/screenstuff.cpp index 61592fc..4c7ab3c 100644 --- a/src/kernel/screenstuff.c +++ b/src/kernel/screenstuff.cpp @@ -69,7 +69,7 @@ int int_to_decimal(unsigned int number, char* string_buffer) { return (index+1); } -char dec_to_hex[16] = "0123456789abcdef"; +char dec_to_hex[17] = "0123456789abcdef"; int int_to_hex(unsigned int number, char* string_buffer) { for (int i=0; i<8; i++) string_buffer[i] = '0'; diff --git a/src/kernel/strings.c b/src/kernel/strings.cpp similarity index 100% rename from src/kernel/strings.c rename to src/kernel/strings.cpp