Working kernel written on C and userspace-ready #1

Merged
sonya merged 61 commits from dev into main 2026-05-03 09:13:20 +00:00
3 changed files with 8 additions and 3 deletions
Showing only changes of commit 5673c44a99 - Show all commits
+1 -1
View File
@@ -25,7 +25,7 @@ void DTBParse(Pointer dtb, VMBootMemoryMap* bootMap) {
ASCII* currentNode = ""; ASCII* currentNode = "";
UInt32 currentDepth = 0; UInt32 currentDepth = 0;
UInt32 reservedMemoryDepth = 0; UInt32 reservedMemoryDepth = 0;
bool inReservedMemory = false; Boolean inReservedMemory = false;
while (true) { while (true) {
UInt32 token = BytesSwap32(*(UInt32*)structs); UInt32 token = BytesSwap32(*(UInt32*)structs);
+6 -1
View File
@@ -15,7 +15,7 @@ static OSProcess sOSSchedulerKernelProcess;
void SchedulerInitialize() { void SchedulerInitialize() {
sOSSchedulerKernelProcess.id = 0; sOSSchedulerKernelProcess.id = 0;
sOSSchedulerKernelProcess.state = OSTaskStateRunning; sOSSchedulerKernelProcess.state = OSTaskStateRunning;
sOSSchedulerKernelProcess.l0Table = gVMKernelL0Table; sOSSchedulerKernelProcess.l0Table = (Address*)VMPhysToHHDM((Address)gVMKernelL0Table);
StringCopy(sOSSchedulerKernelProcess.name, "kernel"); StringCopy(sOSSchedulerKernelProcess.name, "kernel");
OSTask* kernelTask = (OSTask*)HeapAllocate(sizeof(OSTask)); OSTask* kernelTask = (OSTask*)HeapAllocate(sizeof(OSTask));
@@ -90,6 +90,11 @@ Address SchedulerNext(Address stackPointer) {
OSTask* nextTask = gOSSchedulerCurrentTask->next; OSTask* nextTask = gOSSchedulerCurrentTask->next;
loop { loop {
if (nextTask->state == OSTaskStateDead) {
nextTask = nextTask->next;
if (nextTask == gOSSchedulerCurrentTask) OSPanic("No running tasks");
continue;
}
if (nextTask->state == OSTaskStateSleeping && nextTask->sleepTicks == 0) nextTask->state = OSTaskStateRunning; if (nextTask->state == OSTaskStateSleeping && nextTask->sleepTicks == 0) nextTask->state = OSTaskStateRunning;
if (nextTask->state == OSTaskStateRunning) break; if (nextTask->state == OSTaskStateRunning) break;
nextTask = nextTask->next; nextTask = nextTask->next;
+1 -1
View File
@@ -28,7 +28,7 @@ static inline void BitmapUnset(MemoryPointer bitmap, Address address) {
void PMMInitialize(VMBootMemoryMap* bootMap) { void PMMInitialize(VMBootMemoryMap* bootMap) {
sPMMRamBase = bootMap->totalRAM.base; sPMMRamBase = bootMap->totalRAM.base;
sPMMTotalPages = bootMap->totalRAM.size / kVMPageSize; sPMMTotalPages = bootMap->totalRAM.size / kVMPageSize;
sPMMBitmapSize = sPMMTotalPages / kVMBlocksPerByte; sPMMBitmapSize = (sPMMTotalPages + kVMBlocksPerByte - 1) / kVMBlocksPerByte;
sPMMBitmap = (MemoryPointer)_kernelEnd; sPMMBitmap = (MemoryPointer)_kernelEnd;
MemorySet(sPMMBitmap, 0, sPMMBitmapSize); MemorySet(sPMMBitmap, 0, sPMMBitmapSize);