diff options
Diffstat (limited to 'dev')
| -rw-r--r-- | dev/ZKA/HALKit/AMD64/HalProcessor.cxx | 18 | ||||
| -rw-r--r-- | dev/ZKA/Sources/ExeMain.cxx | 20 |
2 files changed, 17 insertions, 21 deletions
diff --git a/dev/ZKA/HALKit/AMD64/HalProcessor.cxx b/dev/ZKA/HALKit/AMD64/HalProcessor.cxx index b31f58e2..56b4e190 100644 --- a/dev/ZKA/HALKit/AMD64/HalProcessor.cxx +++ b/dev/ZKA/HALKit/AMD64/HalProcessor.cxx @@ -42,14 +42,14 @@ namespace Kernel::HAL // And then PTE volatile UIntPtr* pt_entry = (volatile UIntPtr*)(pt_base + (pte_idx * kPTEAlign)); - kcout << (pt_entry[pte_idx] & 0x01 ? "Page Present." : "Page Not Present.") << endl; - kcout << (pt_entry[pte_idx] & 0x02 ? "Page RW." : "Page Not RW.") << endl; - kcout << (pt_entry[pte_idx] & 0x04 ? "Page User." : "Page Not User.") << endl; + kcout << (pt_entry[0] & 0x01 ? "Page Present." : "Page Not Present.") << endl; + kcout << (pt_entry[0] & 0x02 ? "Page RW." : "Page Not RW.") << endl; + kcout << (pt_entry[0] & 0x04 ? "Page User." : "Page Not User.") << endl; switch ((UIntPtr)phys_addr) { case kBadAddress: { - phys_addr = (VoidPtr)((pt_entry[pte_idx] & ~0xFFF) + ((UIntPtr)virt_addr & 0xFFF)); + phys_addr = (VoidPtr)((pt_entry[0] & ~0xFFF) + ((UIntPtr)virt_addr & 0xFFF)); break; } default: { @@ -57,7 +57,15 @@ namespace Kernel::HAL } } - pt_entry[pte_idx] = ((UIntPtr)phys_addr) | (flags & 0xFFF) | 0x01; + if (!(pt_entry[0] & 0x01)) + { + pt_entry[0] = ((UIntPtr)phys_addr) | (flags & 0xFFF) | 0x01; + hal_write_cr3(pml4_base); + + return 0; + } + + pt_entry[0] = ((UIntPtr)phys_addr) | (flags & 0xFFF); return 0; } diff --git a/dev/ZKA/Sources/ExeMain.cxx b/dev/ZKA/Sources/ExeMain.cxx index e1b6afc1..ff2bad02 100644 --- a/dev/ZKA/Sources/ExeMain.cxx +++ b/dev/ZKA/Sources/ExeMain.cxx @@ -110,17 +110,6 @@ namespace Kernel::Detail }; } // namespace Kernel::Detail -EXTERN_C ATTRIBUTE(naked) Kernel::Void HangCPU(Kernel::Void) -{ - asm volatile( - ".intel_syntax;" - "start:" - "syscall;" - "jmp start;" - ".att_syntax;" - ); -} - namespace Kernel { EXTERN UserProcessScheduler* cProcessScheduler; @@ -157,9 +146,8 @@ EXTERN_C Kernel::Void ke_dll_entrypoint(Kernel::Void) CG::CGDrawStringToWnd(cKernelWnd, "Running: ", 10, 10, RGB(0, 0, 0)); CG::CGDrawStringToWnd(cKernelWnd, kSysLdr, 10, 10 + (FONT_SIZE_X * Kernel::rt_string_len("Running: ")), RGB(0, 0, 0)); - Kernel::UserProcessHelper::StartScheduling(); - - Kernel::sched_execute_thread(HangCPU, kSysLdr); - - Kernel::UserProcessHelper::StartScheduling(); + while (Yes) + { + Kernel::UserProcessHelper::StartScheduling(); + } } |
