diff options
| author | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-24 18:42:41 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-24 18:43:09 +0100 |
| commit | 27e0af3ecfe0be226f88837634111299121e5ddb (patch) | |
| tree | c6db44321fa7af03acd040772f9220c1827ceb25 | |
| parent | a481180f3bcb979fecdced3851506bf572327fcf (diff) | |
Drivers and Rsrc: Adding PS/2 support, add DrawResource macro.
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
| -rw-r--r-- | Private/Drivers/PS2/Mouse.hxx | 49 | ||||
| -rw-r--r-- | Private/KernelKit/Rsrc/HCore.hxx | 1 | ||||
| -rw-r--r-- | Private/KernelKit/Rsrc/Util.hxx | 30 | ||||
| -rw-r--r-- | Private/LinkerScripts/16x0.json (renamed from Private/Linker/16x0.json) | 0 | ||||
| -rw-r--r-- | Private/LinkerScripts/32x0.json (renamed from Private/Linker/32x0.json) | 0 | ||||
| -rw-r--r-- | Private/LinkerScripts/64x0.json (renamed from Private/Linker/64x0.json) | 0 | ||||
| -rw-r--r-- | Private/Source/KernelMain.cxx | 38 |
7 files changed, 83 insertions, 35 deletions
diff --git a/Private/Drivers/PS2/Mouse.hxx b/Private/Drivers/PS2/Mouse.hxx new file mode 100644 index 00000000..20cac560 --- /dev/null +++ b/Private/Drivers/PS2/Mouse.hxx @@ -0,0 +1,49 @@ +/* ------------------------------------------- + + Copyright Mahrouss Logic + + File: Mouse.hxx + Purpose: PS/2 mouse. + + Revision History: + + 03/02/24: Added file (amlel) + +------------------------------------------- */ + +#pragma once + +#include <ArchKit/ArchKit.hpp> +#include <CompilerKit/CompilerKit.hpp> +#include <NewKit/Defines.hpp> + +namespace HCore { + +class PS2Mouse { + explicit PS2Mouse() = default; + ~PS2Mouse() = default; + + HCORE_COPY_DEFAULT(PS2Mouse); + + struct PS2MouseTraits final { + Int16 Status; + Int32 X, Y; + }; + + PS2MouseTraits Read() noexcept { + PS2MouseTraits stat; + + return stat; + } + + private: + UInt8 Wait() { + while (!(HAL::In8(0x64) & 1)) { + asm("pause"); + } // wait until we can read + + // return the ack bit. + return HAL::In8(0x64); + } +}; +} // namespace HCore diff --git a/Private/KernelKit/Rsrc/HCore.hxx b/Private/KernelKit/Rsrc/HCore.hxx index 323fe23c..d3c3217d 100644 --- a/Private/KernelKit/Rsrc/HCore.hxx +++ b/Private/KernelKit/Rsrc/HCore.hxx @@ -3,6 +3,7 @@ #define HCORELOGO_HEIGHT 512 #define HCORELOGO_WIDTH 512 + // array size is 786432 inline const unsigned int HCoreLogo[] = { 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xffffff, 0xc9c9c9, 0xbcbcbc, 0xb9b9b9, 0xb8b8b8, 0xb9b9b9, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb7b7b7, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b7b7, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb7b7b7, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb8b8b8, 0xb7b7b7, 0xb9b9b9, 0xb8b8b8, 0xb9b9b9, 0xb8b8b8, 0xbfbfbf, 0xaaaaaa, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, diff --git a/Private/KernelKit/Rsrc/Util.hxx b/Private/KernelKit/Rsrc/Util.hxx new file mode 100644 index 00000000..4322890c --- /dev/null +++ b/Private/KernelKit/Rsrc/Util.hxx @@ -0,0 +1,30 @@ +#ifndef __RSRC_UTIL__ +#define __RSRC_UTIL__ + +/// @brief draws a resource icon. +#define DrawResource(ImgPtr, HandoverHeader, Width, Height, BaseX, BaseY) \ + HCore::SizeT uA = 0; \ + \ + for (HCore::SizeT i = BaseX; i < Width + BaseX; ++i) { \ + for (HCore::SizeT u = BaseY; u < Height + BaseY; ++u) { \ + if (ImgPtr[uA] == 0) { \ + *(((volatile HCore::UInt32*)(HandoverHeader->f_GOP.f_The + \ + 4 * \ + HandoverHeader->f_GOP \ + .f_PixelPerLine * \ + i + \ + 4 * u))) |= ImgPtr[uA]; \ + } else { \ + *(((volatile HCore::UInt32*)(HandoverHeader->f_GOP.f_The + \ + 4 * \ + HandoverHeader->f_GOP \ + .f_PixelPerLine * \ + i + \ + 4 * u))) = ImgPtr[uA]; \ + } \ + \ + ++uA; \ + } \ + } + +#endif diff --git a/Private/Linker/16x0.json b/Private/LinkerScripts/16x0.json index f41c0fc7..f41c0fc7 100644 --- a/Private/Linker/16x0.json +++ b/Private/LinkerScripts/16x0.json diff --git a/Private/Linker/32x0.json b/Private/LinkerScripts/32x0.json index f41c0fc7..f41c0fc7 100644 --- a/Private/Linker/32x0.json +++ b/Private/LinkerScripts/32x0.json diff --git a/Private/Linker/64x0.json b/Private/LinkerScripts/64x0.json index f41c0fc7..f41c0fc7 100644 --- a/Private/Linker/64x0.json +++ b/Private/LinkerScripts/64x0.json diff --git a/Private/Source/KernelMain.cxx b/Private/Source/KernelMain.cxx index 1b2698c4..cfd27748 100644 --- a/Private/Source/KernelMain.cxx +++ b/Private/Source/KernelMain.cxx @@ -13,6 +13,7 @@ #include <KernelKit/Framebuffer.hpp> #include <KernelKit/PEFCodeManager.hxx> #include <KernelKit/Rsrc/HCore.hxx> +#include <KernelKit/Rsrc/Util.hxx> #include <NewKit/Json.hpp> #include <NewKit/KernelHeap.hpp> #include <NewKit/UserHeap.hpp> @@ -48,48 +49,15 @@ EXTERN_C void RuntimeMain( ** This draws the background. */ - for (HCore::SizeT i = 0ul; i < HandoverHeader->f_GOP.f_Width; ++i) { - for (HCore::SizeT u = 0ul; u < HandoverHeader->f_GOP.f_Height; ++u) { - *(((volatile HCore::UInt32*)(HandoverHeader->f_GOP.f_The + - 4 * HandoverHeader->f_GOP.f_PixelPerLine * - i + - 4 * u))) = RGB(20, 20, 20); - } - } + DrawResource(HCoreLogo, HandoverHeader, HCORELOGO_WIDTH, HCORELOGO_HEIGHT, + 10, 10); /** ** This draws the HCore resource icon.. */ - HCore::SizeT uA = 0; - - for (HCore::SizeT i = 10ul; i < HCORELOGO_WIDTH + 10; ++i) { - for (HCore::SizeT u = 10ul; u < HCORELOGO_HEIGHT + 10; ++u) { - if (HCoreLogo[uA] == 0) { - *(((volatile HCore::UInt32*)(HandoverHeader->f_GOP.f_The + - 4 * - HandoverHeader->f_GOP - .f_PixelPerLine * - i + - 4 * u))) |= HCoreLogo[uA]; - } else { - *(((volatile HCore::UInt32*)(HandoverHeader->f_GOP.f_The + - 4 * - HandoverHeader->f_GOP - .f_PixelPerLine * - i + - 4 * u))) = HCoreLogo[uA]; - } - - ++uA; - } - } - /** This mounts the NewFS drive. */ - - HCore::kcout << "HCoreKrnl: Setup is starting...\n"; - HCore::kcout << "HCoreKrnl: Mounting drive A: ...\n"; } } |
