diff options
| author | amlal <amlal@el-mahrouss-logic.com> | 2024-03-17 07:25:31 +0100 |
|---|---|---|
| committer | amlal <amlal@el-mahrouss-logic.com> | 2024-03-17 07:25:31 +0100 |
| commit | 45548d516ddf5e88bf80940365d151e1bd69c29f (patch) | |
| tree | f7347078e07a9d524e874f7f6c23622d538064bc /Private/HALKit | |
| parent | a4d4de6913fb7dd54847b0e5a004c3100bc02459 (diff) | |
HCR-14: A series of important fixes and improvements regarding the
kernel.
Signed-off-by: amlal <amlal@el-mahrouss-logic.com>
Diffstat (limited to 'Private/HALKit')
| -rw-r--r-- | Private/HALKit/AMD64/HalDescriptorLoader.cpp | 3 | ||||
| -rw-r--r-- | Private/HALKit/AMD64/HalInterruptRouting.asm | 6 | ||||
| -rw-r--r-- | Private/HALKit/AMD64/HalKernelMain.cxx | 22 | ||||
| -rw-r--r-- | Private/HALKit/AMD64/HalKernelMouse.cxx | 19 |
4 files changed, 34 insertions, 16 deletions
diff --git a/Private/HALKit/AMD64/HalDescriptorLoader.cpp b/Private/HALKit/AMD64/HalDescriptorLoader.cpp index 595d52e4..a5f445e5 100644 --- a/Private/HALKit/AMD64/HalDescriptorLoader.cpp +++ b/Private/HALKit/AMD64/HalDescriptorLoader.cpp @@ -44,9 +44,6 @@ STATIC Void RemapPIC(Void) noexcept { HAL::Out8(0x21, a1); HAL::rt_wait_400ns(); HAL::Out8(0xA1, a2); - - HAL::Out8(0x21, 0xfd); - HAL::Out8(0xa1, 0xff); } } // namespace Detail diff --git a/Private/HALKit/AMD64/HalInterruptRouting.asm b/Private/HALKit/AMD64/HalInterruptRouting.asm index 2364593d..f021bf9a 100644 --- a/Private/HALKit/AMD64/HalInterruptRouting.asm +++ b/Private/HALKit/AMD64/HalInterruptRouting.asm @@ -58,7 +58,9 @@ IntNormal 9 IntExp 10 IntExp 11 -__HCR_INT_12: +IntExp 12 + +__HCR_INT_13: cli push rax @@ -71,8 +73,6 @@ __HCR_INT_12: sti iretq -IntExp 13 - __HCR_INT_14: cli diff --git a/Private/HALKit/AMD64/HalKernelMain.cxx b/Private/HALKit/AMD64/HalKernelMain.cxx index b3f2aa42..b82dccd7 100644 --- a/Private/HALKit/AMD64/HalKernelMain.cxx +++ b/Private/HALKit/AMD64/HalKernelMain.cxx @@ -20,18 +20,17 @@ #define kInstalledMedia 0xDD EXTERN_C HCore::VoidPtr kInterruptVectorTable[]; -EXTERN_C HCore::Void _ke_init_mouse(); +EXTERN_C HCore::Void _hal_init_mouse(); +EXTERN_C HCore::Void _hal_mouse_handler(); EXTERN_C HCore::Void _hal_mouse_draw(); namespace Detail { STATIC HCore::Void ke_page_protect_nullptr(HCore::Void) { - HCore::HAL::PageDirectory64* pageDirNull = nullptr; + HCore::PTEWrapper wrapper(false, false, false, 0); + HCore::PageManager pageManager; + HCore::Ref<HCore::PageManager> refMan(pageManager); - for (HCore::SizeT indexPte = 0; indexPte < kPTEMax; ++indexPte) { - pageDirNull->Pte[indexPte].Rw = false; - } - - hal_flush_tlb(reinterpret_cast<HCore::UIntPtr>(pageDirNull)); + wrapper.FlushTLB(refMan); } } // namespace Detail @@ -74,8 +73,6 @@ EXTERN_C void RuntimeMain( HCore::HAL::IDTLoader idt; idt.Load(idtBase); - Detail::ke_page_protect_nullptr(); - KeInitRsrc(); KeDrawRsrc(MahroussLogic, MAHROUSSLOGIC_HEIGHT, MAHROUSSLOGIC_WIDTH, @@ -87,6 +84,7 @@ EXTERN_C void RuntimeMain( /// START POST HCore::HAL::Detail::_ke_power_on_self_test(); + Detail::ke_page_protect_nullptr(); /// END POST @@ -100,5 +98,11 @@ EXTERN_C void RuntimeMain( /// TODO: Install hcore on host. } + _hal_init_mouse(); + + while (1) { + _hal_mouse_draw(); + } + HCore::ke_stop(RUNTIME_CHECK_BOOTSTRAP); } diff --git a/Private/HALKit/AMD64/HalKernelMouse.cxx b/Private/HALKit/AMD64/HalKernelMouse.cxx index 58c45dfe..bce6272f 100644 --- a/Private/HALKit/AMD64/HalKernelMouse.cxx +++ b/Private/HALKit/AMD64/HalKernelMouse.cxx @@ -62,6 +62,11 @@ EXTERN_C void _hal_mouse_handler() default: break; } + + // Notify PIC controller that we're done with it's interrupt. + + HCore::HAL::Out8(0x20, 0x20); + HCore::HAL::Out8(0xA0, 0x20); #endif } @@ -114,9 +119,21 @@ EXTERN_C void _hal_mouse_draw() /// @brief Inital kernel mouse initializer /// @param -EXTERN_C void _ke_init_mouse(void) +EXTERN_C void _hal_init_mouse(void) { #ifdef __DEBUG__ kMousePS2.Init(); + + auto pic1Port = 0x20; + auto pic2Port = 0xA0; + + auto mask = 1 << 12; + auto currentMask = HCore::HAL::In8(pic1Port + 1); + auto newMask = currentMask & ~mask; + HCore::HAL::Out8(pic1Port + 1, newMask); + + currentMask = HCore::HAL::In8(pic2Port + 1); + newMask = currentMask & ~mask; + HCore::HAL::Out8(pic2Port + 1, newMask); #endif }
\ No newline at end of file |
