summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2021-07-22disable paging when handling interruptsdzwdz
The kernel code assumes that paging is always disabled. I've also added a bit of comments to the assembly / ruined the git blame.
2021-07-22implement the debuglog() syscalldzwdz
2021-07-21syscall parameter & return value passingdzwdz
Sadly, sysenter on i386 limits me to only 4 arguments (so, 1 for the syscall id + 3 real args). If that turns out to be an issue I'll either just switch to interrupts, or switch to x64.
2021-07-21barebones syscalldzwdz
2021-07-21fix init stack alignmentdzwdz
2021-07-21fix sysenter()'s stack argumentdzwdz
It was taken from the wrong place - also I don't think that functions should change their EIP in the first place?
2021-07-21simplify the IDT generationdzwdz
2021-07-21create ISR stubs, which call a single main isr handlerdzwdz
quick explaination of how this even works: The `call` in each stub pushes its own address onto the stack before calling stage2. We can substract the address of the 0th ISR to get the offset, which we then divide by the size of each stub to get the index.
2021-07-20remove an already finished TODOdzwdz
2021-07-20per-process virtual memorydzwdz
VGA is only mapped into the virtual memory because there are no other ways of interacting with the OS.
2021-07-20rename pagedir_use() to pagedir_switch()dzwdz
imo "use" was slightly misleading
2021-07-20only enable paging when jumping into ring 0dzwdz
The kernel can't use the limited paging tables of user processes. Alternatively, sysenter could accept a parameter with a new cr3. That would allow/require using paging in the kernel - so I'll switch to it later, but I want to get other stuff done first.
2021-07-20global PAGE_MASK definedzwdz
it's pretty useful, so it makes sense to define it alongside PAGE_SIZE
2021-07-19fix some style inconsistentiesdzwdz
2021-07-19remove the unused r3_test functiondzwdz
2021-07-19very basic pagingdzwdz
2021-07-19add a page fault handlerdzwdz
2021-07-18basic executable loadingdzwdz
2021-07-18clean up the linker script, remove duplicate labelsdzwdz
2021-07-18fix most current compiler warningsdzwdz
stack_top got changed into a char, because `extern void` isn't even valid. others are self-explanatory
2021-07-18minor Makefile readibility tweaksdzwdz
2021-07-18move the kernel linker script to src/kernel/dzwdz
2021-07-18move all kernel sources to src/kernel/dzwdz
2021-07-18Make: use a from_sources function instead of a global OBJ macrodzwdz
this will make sense once i start compiling other binaries too
2021-07-17add a shitty readmedzwdz
2021-07-17detect the highest used memory address, and only allocate pages above itdzwdz
2021-07-17Revert "debug code, verifies if the memory gets set up correctly"dzwdz
not meant to be in the main tree, included for completeness
2021-07-17debug code, verifies if the memory gets set up correctlydzwdz
i guess that i can include this for completeness. if not for the awful pointer printing thingy this could probably get into the main version. TODO?
2021-07-17basic boot module supportdzwdz
This loads a file from the boot disk into memory. Currently it just gets printed, but it's going to become a real executable soon.
2021-07-17hacky function for logging pointersdzwdz
2021-07-17rename _kernel_end to _bss_enddzwdz
2021-07-17multiboot: manually address regions of the kerneldzwdz
thanks to this, i can specify the region where the bss is - so GRUB won't place any boot modules there
2021-07-16`make boot` uses boot.iso / GRUB nowdzwdz
I'm going to implement the "initrd" soon, and it'll use multiboot modules - I have no idea how to use them with the qemu -kernel thing, and I have to support GRUB anyways, so I'm just going to use it instead.
2021-07-10implement a basic linterdzwdz
Currently it just checks if the kernel doesn't accidentally use arch-dependent headers.
2021-07-10abstract away loggingdzwdz
Now, the kernel only interfaces with the architecture dependent stuff via functions declared in generic.h. I'll write a linter enforcing this soon.
2021-07-10fix the `make debug` targetdzwdz
2021-07-10building the .iso is now the default Make targetdzwdz
2021-07-10clean up the GDT initialization codedzwdz
2021-07-10allocate the initial stack directly in linker.lddzwdz
IMO it's cleaner this way. I wanted to put it just under 1M, but it turns out that it isn't accessible at boot in QEMU.
2021-07-10a sensible source structuredzwdz
The idea is that src/kernel/ is only allowed to interface with the hardware using whatever's defined in src/arch/generic.h. I'll probably write a small script for checking this later on. This is a giant commit so I've probably fucked something up. It boots fine on Bochs and QEMU, so at least there's that.
2021-07-10make clangd detect the includes againdzwdz
2021-07-10separate the source code from object files; more modular Makefiledzwdz
2021-07-10add a basic #GP handlerdzwdz
2021-07-10update all segment registers when setting the GDTdzwdz
not doing that caused interrupts to break on Bochs
2021-07-09fix some dumb typosdzwdz
2021-07-09Add more debug prints; move the old ones arounddzwdz
2021-07-09implement basic kernel panicsdzwdz
2021-07-09interrupt self-testdzwdz
2021-07-09basic interrupt supportdzwdz
2021-07-09support building .iso imagesdzwdz