summaryrefslogtreecommitdiffhomepage
path: root/Private/HALKit
diff options
context:
space:
mode:
authoramlal <amlal@el-mahrouss-logic.com>2024-03-17 07:25:31 +0100
committeramlal <amlal@el-mahrouss-logic.com>2024-03-17 07:25:31 +0100
commit45548d516ddf5e88bf80940365d151e1bd69c29f (patch)
treef7347078e07a9d524e874f7f6c23622d538064bc /Private/HALKit
parenta4d4de6913fb7dd54847b0e5a004c3100bc02459 (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.cpp3
-rw-r--r--Private/HALKit/AMD64/HalInterruptRouting.asm6
-rw-r--r--Private/HALKit/AMD64/HalKernelMain.cxx22
-rw-r--r--Private/HALKit/AMD64/HalKernelMouse.cxx19
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