summaryrefslogtreecommitdiffhomepage
path: root/dev/ZKA/HALKit
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-08-25 09:07:21 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-08-25 09:07:21 +0200
commit94141dbd7c1450d079f695d0e8d73e93795161f2 (patch)
treed538ee3515bfa93bfcd5c3eaaf59a6164538f806 /dev/ZKA/HALKit
parentfa6cc3970bc61e8061a279e8573a61bd4e947f2f (diff)
[CG/FUI] CG's FlatUI library, made for pre-boot/pre-user environements.
- FlatUI is used to install ZKA for example. - Or to indicate an error (using the ke_stop call). - Or to show a popup saying that system couldn't boot. The FlatUI's style will be replicated in user space as well, for consistency. Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/ZKA/HALKit')
-rw-r--r--dev/ZKA/HALKit/AMD64/HalDescriptorLoader.cxx16
-rw-r--r--dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm8
-rw-r--r--dev/ZKA/HALKit/AMD64/HalKernelMouse.cxx24
3 files changed, 22 insertions, 26 deletions
diff --git a/dev/ZKA/HALKit/AMD64/HalDescriptorLoader.cxx b/dev/ZKA/HALKit/AMD64/HalDescriptorLoader.cxx
index 0339dd7f..678b0896 100644
--- a/dev/ZKA/HALKit/AMD64/HalDescriptorLoader.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalDescriptorLoader.cxx
@@ -16,14 +16,14 @@ namespace Kernel::HAL
STATIC ::Kernel::Detail::AMD64::InterruptDescriptorAMD64
kInterruptVectorTable[kKernelIdtSize];
- STATIC Void RemapPIC(Void) noexcept
+ STATIC Void hal_remap_intel_pic_ctrl(Void) noexcept
{
// Remap PIC.
- HAL::Out8(0x20, 0x10 | 0x01);
- HAL::Out8(0xA0, 0x10 | 0x01);
+ HAL::Out8(0x20, 0x11);
+ HAL::Out8(0xA0, 0x11);
- HAL::Out8(0x21, 32);
- HAL::Out8(0xA1, 40);
+ HAL::Out8(0x21, 40);
+ HAL::Out8(0xA1, 32);
HAL::Out8(0x21, 4);
HAL::Out8(0xA1, 2);
@@ -31,8 +31,8 @@ namespace Kernel::HAL
HAL::Out8(0x21, 0x01);
HAL::Out8(0xA1, 0x01);
- HAL::Out8(0x21, 0x00);
- HAL::Out8(0xA1, 0x00);
+ HAL::Out8(0x21, 0xFD);
+ HAL::Out8(0xA1, 0xFF);
}
} // namespace Detail
@@ -55,7 +55,7 @@ namespace Kernel::HAL
MUST_PASS(baseIdt);
- Detail::RemapPIC();
+ Detail::hal_remap_intel_pic_ctrl();
for (UInt16 i = 0; i < kKernelIdtSize; ++i)
{
diff --git a/dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm b/dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm
index 093da0db..12c71663 100644
--- a/dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm
+++ b/dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm
@@ -35,7 +35,7 @@ __NEW_INT_%1:
global ke_handle_irq
global kInterruptVectorTable
-extern _hal_handle_mouse
+extern hal_handle_mouse
extern idt_handle_gpf
extern idt_handle_pf
extern ke_io_write
@@ -136,11 +136,7 @@ IntNormal 43
__NEW_INT_44:
cli
- ;; TODO: CoreEvents dispatch routine.
-
- push rax
- call _hal_handle_mouse
- pop rax
+ call hal_handle_mouse
sti
iretq
diff --git a/dev/ZKA/HALKit/AMD64/HalKernelMouse.cxx b/dev/ZKA/HALKit/AMD64/HalKernelMouse.cxx
index bff5e5ee..06cdc81b 100644
--- a/dev/ZKA/HALKit/AMD64/HalKernelMouse.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalKernelMouse.cxx
@@ -19,7 +19,6 @@ STATIC Kernel::Int32 kPrevY = 10;
STATIC Kernel::Int32 kX = 10;
STATIC Kernel::Int32 kY = 10;
STATIC Kernel::Int32 kMouseCycle = 0;
-STATIC Kernel::PS2MouseInterface kMousePS2;
STATIC Kernel::Char kMousePacket[4] = {};
STATIC Kernel::Boolean kMousePacketReady = false;
@@ -35,7 +34,7 @@ STATIC CGInit();
using namespace Kernel;
-Void hal_handle_mouse()
+EXTERN_C Void hal_handle_mouse()
{
Kernel::UInt8 data = HAL::In8(0x60);
@@ -70,12 +69,6 @@ Void hal_handle_mouse()
Kernel::HAL::Out8(0xA0, 0x20);
}
-/// @brief Interrupt handler for the mouse.
-EXTERN_C Void _hal_handle_mouse()
-{
- hal_handle_mouse();
-}
-
EXTERN_C Boolean _hal_left_button_pressed()
{
return kMousePacket[0] & kPS2Leftbutton;
@@ -176,6 +169,8 @@ EXTERN_C Boolean _hal_draw_mouse()
kPrevX = kX;
kPrevY = kY;
+ CGDrawBitMapInRegionA(Cursor, cCurHeight, cCurWidth, kY, kX);
+
kMousePacketReady = false;
return true;
}
@@ -183,8 +178,13 @@ EXTERN_C Boolean _hal_draw_mouse()
/// @brief Init kernel mouse.
EXTERN_C Void _hal_init_mouse()
{
- kMousePS2.Init();
-
- HAL::Out8(0x21, 0b11111001);
- HAL::Out8(0xA1, 0b11101111);
+ kPrevX = 10;
+ kPrevY = 10;
+ kX = 10;
+ kY = 10;
+ kMouseCycle = 0;
+ kMousePacketReady = false;
+
+ Kernel::PS2MouseInterface ps2_mouse;
+ ps2_mouse.Init();
}