diff options
| author | Amlal <amlal@el-mahrouss-logic.com> | 2024-09-27 11:41:44 +0200 |
|---|---|---|
| committer | Amlal <amlal@el-mahrouss-logic.com> | 2024-09-27 11:41:44 +0200 |
| commit | 8db6fc60063757628f92bd1c4d4855775f4ff9e2 (patch) | |
| tree | e27013969dc749bbb8131e24e4171034fdb80f56 /dev/zka | |
| parent | daa4f8c748d290feba8a71e889743a8a3097ad7d (diff) | |
feat&wip: Math API for CG, WiP HAL Paging API.
- NOTE: HAL Paging API is still in wip, issues have to be fixed.
- Moved WM code to corecg driver.
Signed-off-by: Amlal <amlal@el-mahrouss-logic.com>
Diffstat (limited to 'dev/zka')
32 files changed, 384 insertions, 626 deletions
diff --git a/dev/zka/HALKit/AMD64/HalBMPMgr.cxx b/dev/zka/HALKit/AMD64/HalBMPMgr.cxx index b788902a..0c941977 100644 --- a/dev/zka/HALKit/AMD64/HalBMPMgr.cxx +++ b/dev/zka/HALKit/AMD64/HalBMPMgr.cxx @@ -63,15 +63,29 @@ namespace Kernel this->GetBitMapStatus(ptr_bit_set); mm_map_page(ptr_bit_set, ~eFlagsPresent); - mm_map_page(ptr_bit_set, ~eFlagsRw); + mm_map_page(ptr_bit_set, ~eFlagsWr); mm_map_page(ptr_bit_set, ~eFlagsUser); return Yes; } + UInt32 MakeFlags(Bool wr, Bool user) + { + + UInt32 flags = eFlagsPresent; + + if (wr) + flags |= eFlagsWr; + + if (user) + flags |= eFlagsUser; + + return flags; + } + /// @brief Iterate over availables pages for a free one. /// @return The new address which was found. - auto FindBitMap(VoidPtr base_ptr, SizeT size, Bool rw, Bool user) -> VoidPtr + auto FindBitMap(VoidPtr base_ptr, SizeT size, Bool wr, Bool user) -> VoidPtr { VoidPtr base = reinterpret_cast<VoidPtr>(((UIntPtr)base_ptr) + kPageSize); @@ -89,6 +103,9 @@ namespace Kernel this->GetBitMapStatus(ptr_bit_set); + UInt32 flags = this->MakeFlags(wr, user); + mm_map_page(ptr_bit_set, flags); + return (VoidPtr)ptr_bit_set; } } @@ -102,6 +119,9 @@ namespace Kernel this->GetBitMapStatus(ptr_bit_set); + UInt32 flags = this->MakeFlags(wr, user); + mm_map_page(ptr_bit_set, flags); + return (VoidPtr)ptr_bit_set; } @@ -136,25 +156,25 @@ namespace Kernel } // namespace Detail /// @brief Allocate a new page to be used by the OS. - /// @param rw read/write bit. + /// @param wr read/write bit. /// @param user user bit. /// @return - auto mm_alloc_bitmap(Boolean rw, Boolean user, SizeT size) -> VoidPtr + auto mm_alloc_bitmap(Boolean wr, Boolean user, SizeT size) -> VoidPtr { VoidPtr ptr_new = nullptr; Detail::IBitMapAllocator traits; - ptr_new = traits.FindBitMap(kKernelBitMpStart, size, rw, user); + ptr_new = traits.FindBitMap(kKernelBitMpStart, size, wr, user); if (!ptr_new) { ke_stop(RUNTIME_CHECK_PAGE); } - if (rw) - mm_map_page(ptr_new, eFlagsRw | eFlagsPresent); - else if (user && rw) - mm_map_page(ptr_new, eFlagsUser | eFlagsRw | eFlagsPresent); + if (wr) + mm_map_page(ptr_new, eFlagsWr | eFlagsPresent); + else if (user && wr) + mm_map_page(ptr_new, eFlagsUser | eFlagsWr | eFlagsPresent); else if (user) mm_map_page(ptr_new, eFlagsUser | eFlagsPresent); else diff --git a/dev/zka/HALKit/AMD64/HalCPU.cxx b/dev/zka/HALKit/AMD64/HalCPU.cxx index 0af8a921..1a7b51df 100644 --- a/dev/zka/HALKit/AMD64/HalCPU.cxx +++ b/dev/zka/HALKit/AMD64/HalCPU.cxx @@ -12,7 +12,7 @@ /** * @file HalCPU.cxx - * @brief CPU Common API. + * @brief Common CPU API. */ namespace Kernel::HAL diff --git a/dev/zka/HALKit/AMD64/HalDebugOutput.cxx b/dev/zka/HALKit/AMD64/HalDebugOutput.cxx index 296bbcec..903900d3 100644 --- a/dev/zka/HALKit/AMD64/HalDebugOutput.cxx +++ b/dev/zka/HALKit/AMD64/HalDebugOutput.cxx @@ -6,7 +6,6 @@ #include <ArchKit/ArchKit.hxx> #include <KernelKit/DebugOutput.hxx> -#include <KernelKit/Framebuffer.hxx> #include <NewKit/Utils.hxx> #include <NewKit/New.hxx> diff --git a/dev/zka/HALKit/AMD64/HalKernelMain.cxx b/dev/zka/HALKit/AMD64/HalKernelMain.cxx index 1ed11953..ad978a08 100644 --- a/dev/zka/HALKit/AMD64/HalKernelMain.cxx +++ b/dev/zka/HALKit/AMD64/HalKernelMain.cxx @@ -8,7 +8,6 @@ #include <Modules/CoreCG/FbRenderer.hxx> #include <FirmwareKit/Handover.hxx> #include <KernelKit/FileMgr.hxx> -#include <KernelKit/Framebuffer.hxx> #include <KernelKit/Heap.hxx> #include <KernelKit/PEFCodeMgr.hxx> #include <KernelKit/UserProcessScheduler.hxx> @@ -19,7 +18,7 @@ #include <NetworkKit/IPC.hxx> #include <CFKit/Property.hxx> #include <Modules/CoreCG/TextRenderer.hxx> -#include <Modules/CoreCG/WindowRenderer.hxx> +#include <Modules/CoreCG/DesktopRenderer.hxx> namespace Kernel::HAL { @@ -28,8 +27,14 @@ namespace Kernel::HAL EXTERN void mp_get_cores(Kernel::voidPtr rsdPtr) noexcept; } // namespace Kernel::HAL +namespace Kernel +{ + EXTERN UserProcessScheduler* cProcessScheduler; +} + EXTERN_C Kernel::VoidPtr kInterruptVectorTable[]; EXTERN_C Kernel::VoidPtr mp_user_switch_proc; +EXTERN_C Kernel::Char mp_user_switch_proc_stack_begin[]; /// @brief Kernel init procedure. EXTERN_C void hal_init_platform( @@ -37,14 +42,14 @@ EXTERN_C void hal_init_platform( { kHandoverHeader = HandoverHeader; + Kernel::cProcessScheduler = nullptr; + if (kHandoverHeader->f_Magic != kHandoverMagic && kHandoverHeader->f_Version != kHandoverVersion) { return; } - CG::CGDrawBackground(); - // get page size. kKernelBitMpSize = kHandoverHeader->f_BitMapSize; @@ -90,7 +95,8 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept Kernel::NeFileSystemMgr* mgr = Kernel::mm_new_class<Kernel::NeFileSystemMgr>(); Kernel::NeFileSystemMgr::Mount(mgr); - Kernel::HAL::mm_map_page(mp_user_switch_proc, Kernel::HAL::eFlagsUser); + Kernel::HAL::mm_map_page(mp_user_switch_proc, Kernel::HAL::eFlagsUser | Kernel::HAL::eFlagsWr | Kernel::HAL::eFlagsPresent); + Kernel::HAL::mm_map_page(mp_user_switch_proc_stack_begin, Kernel::HAL::eFlagsUser | Kernel::HAL::eFlagsWr | Kernel::HAL::eFlagsPresent); mp_do_user_switch(); diff --git a/dev/zka/HALKit/AMD64/HalMPContextSwitch.asm b/dev/zka/HALKit/AMD64/HalMPContextSwitch.asm index 4251f232..c6480778 100644 --- a/dev/zka/HALKit/AMD64/HalMPContextSwitch.asm +++ b/dev/zka/HALKit/AMD64/HalMPContextSwitch.asm @@ -12,8 +12,7 @@ [global mp_do_user_switch] [global mp_do_context_switch_pre] [global mp_user_switch_proc] -[global mp_user_switch_proc_real] -[global mp_user_switch_proc_stack_end] +[global mp_user_switch_proc_stack_begin] section .text diff --git a/dev/zka/HALKit/AMD64/HalPaging.cxx b/dev/zka/HALKit/AMD64/HalPaging.cxx deleted file mode 100644 index ac8b1a73..00000000 --- a/dev/zka/HALKit/AMD64/HalPaging.cxx +++ /dev/null @@ -1,75 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: HalProcessor.cxx - Purpose: Platform processor routines. - -------------------------------------------- */ - -#include <HALKit/AMD64/Paging.hxx> -#include <HALKit/AMD64/Processor.hxx> - -namespace Kernel::HAL -{ - STATIC Void mm_map_page_status(PTE* pte) - { - if (!pte) - return; - - kcout << (pte->Present ? "Present" : "Not Present") << endl; - kcout << (pte->Wr ? "W/R" : "Not W/R") << endl; - kcout << (pte->User ? "User" : "Not User") << endl; - } - - /// @brief Maps or allocates a page from virt_addr. - /// @internal - /// @param virt_addr a valid virtual address. - /// @param phys_addr point to physical address. - /// @param flags the flags to put on the page. - /// @return Status code of page manipulation process. - EXTERN_C Int32 mm_map_page(VoidPtr virt_addr, UInt32 flags) - { - return 0; - } - - /// @brief Maps or allocates a page from virt_addr. - /// @internal - /// @param virt_addr a valid virtual address. - /// @param phys_addr point to physical address. - /// @param flags the flags to put on the page. - /// @return Status code of page manipulation process. - EXTERN_C Int32 _mm_map_page(VoidPtr virt_addr, UInt32 flags, ZKA_PDE* pde, SizeT pte) - { - if (!virt_addr || !pde || !pte) - return -1; - - if (pde->fEntries[pte]->Present) - { - rt_cli(); - - if (flags & ~eFlagsPresent) - pde->fEntries[pte]->Present = false; - else if (flags & eFlagsPresent) - pde->fEntries[pte]->Present = true; - - if (flags & eFlagsRw) - pde->fEntries[pte]->Wr = true; - else if (flags & ~eFlagsRw) - pde->fEntries[pte]->Wr = false; - - if (flags & eFlagsUser) - pde->fEntries[pte]->User = true; - else if (flags & ~eFlagsUser) - pde->fEntries[pte]->User = false; - - mm_map_page_status(pde->fEntries[pte]); - - rt_sti(); - - return 0; - } - - return -2; - } -} // namespace Kernel::HAL diff --git a/dev/zka/HALKit/AMD64/HalPagingMgr.cxx b/dev/zka/HALKit/AMD64/HalPagingMgr.cxx new file mode 100644 index 00000000..9d721e32 --- /dev/null +++ b/dev/zka/HALKit/AMD64/HalPagingMgr.cxx @@ -0,0 +1,162 @@ +/* ------------------------------------------- + + Copyright ZKA Technologies. + + File: HalPagingMgr.cxx + Purpose: Platform Paging Manager.. + +------------------------------------------- */ + +#include <HALKit/AMD64/Paging.hxx> +#include <HALKit/AMD64/Processor.hxx> + +namespace Kernel::HAL +{ + typedef UInt32 PageTableIndex; + + /// \brief Page store type. + struct ZKA_PAGE_STORE final + { + struct + { + PDE* fPde{nullptr}; + PTE* fPte{nullptr}; + VoidPtr fVAddr{nullptr}; + } fInternalStore; + + Bool fStoreOp{No}; // Store operation in progress. + + bool IsValidPage(PTE* pte) + { + return pte && pte->Present; + } + + bool IsWRPage(PTE* pte) + { + return pte && pte->Wr; + } + + bool IsUserPage(PTE* pte) + { + return pte && pte->User; + } + + static ZKA_PAGE_STORE& The() + { + static ZKA_PAGE_STORE the; + return the; + } + }; + + /// \brief Retrieve the page status of a PTE. + STATIC Void mmi_page_status(PTE* pte) + { + kcout << (pte->Present ? "Present" : "Not Present") << endl; + kcout << (pte->Wr ? "W/R" : "Not W/R") << endl; + kcout << (pte->ExecDisable ? "NX" : "Not NX") << endl; + kcout << (pte->User ? "User" : "Not User") << endl; + } + + STATIC Int32 mmi_map_page_table_entry(VoidPtr virtual_address, UInt32 flags, ZKA_PTE* pt_entry); + + /// @brief Maps or allocates a page from virtual_address. + /// @param virtual_address a valid virtual address. + /// @param phys_addr point to physical address. + /// @param flags the flags to put on the page. + /// @return Status code of page manipulation process. + EXTERN_C Int32 mm_map_page(VoidPtr virtual_address, UInt32 flags) + { + if (!virtual_address || + !flags) + return 0; + + // Constants for table index bits + const UInt64 cPmlIndexMask = 0x1FFULL; // Mask for PML4, PDPT, PD, PT index (9 bits) + const UInt64 cPtIndexMask = 0xFFFULL; // Mask for page table index (12 bits) + + UInt64 cr3 = (UInt64)hal_read_cr3(); + + ZKA_PAGE_STORE& page_store = ZKA_PAGE_STORE::The(); + + // Extract the indices from the virtual address + UInt64 pml4_index = ((UIntPtr)virtual_address >> 39) & cPmlIndexMask; + UInt64 pdpt_index = ((UIntPtr)virtual_address >> 30) & cPmlIndexMask; + UInt64 pd_index = ((UIntPtr)virtual_address >> 21) & cPmlIndexMask; + UInt64 pt_index = ((UIntPtr)virtual_address >> 12) & cPmlIndexMask; + + while (page_store.fStoreOp) + ; + + page_store.fStoreOp = Yes; + + if (page_store.fInternalStore.fVAddr == virtual_address) + { + page_store.fStoreOp = No; + return mmi_map_page_table_entry(page_store.fInternalStore.fVAddr, flags, page_store.fInternalStore.fPte); + } + + const auto cPmlEntrySize = 8; + + // Read the PML4 entry from memory + UInt64 pml4_base = cr3 & ~cPtIndexMask; // CR3 points to the PML4 table base, mask off lower bits + UInt64 pml4_entry = (pml4_base + pml4_index * cPmlEntrySize); // Each entry is 8 bytes + + // Read the PDPT entry + UInt64 pdpt_base = pml4_entry & ~cPtIndexMask; // Get the PDPT base physical address + UInt64 pdpt_entry = (pdpt_base + pdpt_index * cPmlEntrySize); + + // Read the PD entry + UInt64 pd_base = pdpt_entry & ~cPtIndexMask; // Get the Page Directory base physical address + UInt64 pd_entry = (pd_base + pd_index * cPmlEntrySize); + + // Read the PT entry + UInt64 pt_base = pd_entry & ~cPtIndexMask; // Get the Page Table base physical address + UInt64 pt_entry = (pt_base + pt_index * cPmlEntrySize); + + // Lastly, grab the pte entry. + ZKA_PTE* pte_struct = reinterpret_cast<ZKA_PTE*>((UIntPtr*)pt_entry); + + return mmi_map_page_table_entry(virtual_address, flags, pte_struct); + } + + /// @brief Maps flags for a specific pte. + /// @internal Internal function. + STATIC Int32 mmi_map_page_table_entry(VoidPtr virtual_address, UInt32 flags, ZKA_PTE* pt_entry) + { + if (flags & ~eFlagsPresent) + pt_entry->Present = false; + else if (flags & eFlagsPresent) + pt_entry->Present = true; + + if (flags & eFlagsWr) + pt_entry->Wr = true; + else if (flags & ~eFlagsWr) + pt_entry->Wr = false; + + if (flags & eFlagsNX) + pt_entry->ExecDisable = true; + else if (flags & ~eFlagsNX) + pt_entry->ExecDisable = false; + + if (flags & eFlagsUser) + pt_entry->User = true; + else if (flags & ~eFlagsUser) + pt_entry->User = false; + + hal_invl_tlb(reinterpret_cast<VoidPtr>(pt_entry)); + + mmi_page_status(pt_entry); + + ZKA_PAGE_STORE& page_store = ZKA_PAGE_STORE::The(); + + // Update Internal store. + + page_store.fInternalStore.fPde = nullptr; + page_store.fInternalStore.fPte = pt_entry; + page_store.fInternalStore.fVAddr = virtual_address; + + page_store.fStoreOp = No; + + return 0; + } +} // namespace Kernel::HAL diff --git a/dev/zka/HALKit/AMD64/Paging.hxx b/dev/zka/HALKit/AMD64/Paging.hxx index f127d0e4..2b78e89d 100644 --- a/dev/zka/HALKit/AMD64/Paging.hxx +++ b/dev/zka/HALKit/AMD64/Paging.hxx @@ -88,7 +88,7 @@ namespace Kernel::HAL ZKA_PTE* ALIGN(kPageAlign) fEntries[kPageMax]; }; - auto mm_alloc_bitmap(Boolean rw, Boolean user, SizeT size) -> VoidPtr; + auto mm_alloc_bitmap(Boolean wr, Boolean user, SizeT size) -> VoidPtr; auto mm_free_bitmap(VoidPtr page_ptr) -> Bool; } // namespace Kernel::HAL diff --git a/dev/zka/HALKit/AMD64/Processor.hxx b/dev/zka/HALKit/AMD64/Processor.hxx index e39cac0a..fab5c372 100644 --- a/dev/zka/HALKit/AMD64/Processor.hxx +++ b/dev/zka/HALKit/AMD64/Processor.hxx @@ -54,9 +54,10 @@ namespace Kernel::HAL /// @brief Virtual memory flags. enum { - eFlagsPresent = 0x1, - eFlagsRw = 0x2, - eFlagsUser = 0x4, + eFlagsPresent = 1 << 0, + eFlagsWr = 1 << 1, + eFlagsUser = 1 << 2, + eFlagsNX = 1 << 3, eFlagsCount = 3, }; diff --git a/dev/zka/HALKit/ARM64/HalKernelMain.cxx b/dev/zka/HALKit/ARM64/HalKernelMain.cxx index a1b75ccf..67b98765 100644 --- a/dev/zka/HALKit/ARM64/HalKernelMain.cxx +++ b/dev/zka/HALKit/ARM64/HalKernelMain.cxx @@ -8,7 +8,6 @@ #include <Modules/CoreCG/FbRenderer.hxx> #include <FirmwareKit/Handover.hxx> #include <KernelKit/FileMgr.hxx> -#include <KernelKit/Framebuffer.hxx> #include <KernelKit/Heap.hxx> #include <KernelKit/PEFCodeMgr.hxx> #include <KernelKit/UserProcessScheduler.hxx> @@ -18,7 +17,7 @@ #include <Modules/ACPI/ACPIFactoryInterface.hxx> #include <NetworkKit/IPC.hxx> #include <CFKit/Property.hxx> -#include <Modules/CoreCG/TextRenderer.hxx> +#include <Modules/CoreCG/DesktopRenderer.hxx> namespace Kernel::HAL { @@ -43,7 +42,7 @@ EXTERN_C void hal_init_platform( return; } - CG::CGDrawBackground(); + CG::CGDrawDesktopBackground(); // get page size. kKernelBitMpSize = kHandoverHeader->f_BitMapSize; diff --git a/dev/zka/HALKit/ARM64/Paging.hxx b/dev/zka/HALKit/ARM64/Paging.hxx index 7fe020ef..b6e8708f 100644 --- a/dev/zka/HALKit/ARM64/Paging.hxx +++ b/dev/zka/HALKit/ARM64/Paging.hxx @@ -107,7 +107,7 @@ namespace Kernel::HAL PTE_4KB ALIGN(kPageAlign) fEntries[kPageMax]; }; - auto mm_alloc_bitmap(Boolean rw, Boolean user, SizeT size) -> VoidPtr; + auto mm_alloc_bitmap(Boolean wr, Boolean user, SizeT size) -> VoidPtr; auto mm_free_bitmap(VoidPtr page_ptr) -> Bool; } // namespace Kernel::HAL diff --git a/dev/zka/KernelKit/Framebuffer.hxx b/dev/zka/KernelKit/Framebuffer.hxx deleted file mode 100644 index dac9b514..00000000 --- a/dev/zka/KernelKit/Framebuffer.hxx +++ /dev/null @@ -1,85 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: Framebuffer.hpp - Purpose: Framebuffer object. - -------------------------------------------- */ - -#ifndef __INC_FB_HPP__ -#define __INC_FB_HPP__ - -#include <NewKit/Defines.hxx> -#include <NewKit/Ref.hxx> - -namespace Kernel -{ - enum class FramebufferColorKind : UChar - { - RGB32, - RGB16, - RGB8, - INVALID, - }; - - class FramebufferContext final - { - public: - UIntPtr fBase; - UIntPtr fBpp; - UInt fWidth; - UInt fHeight; - }; - - class Framebuffer final - { - public: - explicit Framebuffer(Ref<FramebufferContext*>& addr); - ~Framebuffer() = default; - - Framebuffer& operator=(const Framebuffer&) = delete; - Framebuffer(const Framebuffer&) = default; - - volatile UIntPtr* operator[](const UIntPtr& pos); - - operator bool(); - - const FramebufferColorKind& Color( - const FramebufferColorKind& colour = FramebufferColorKind::INVALID); - - Ref<FramebufferContext*>& Leak(); - - /// @brief Draws a rectangle inside the fb. - /// @param width the width of it - /// @param height the height of it - /// @param x its x coord. - /// @param y its y coord. - /// @param color the color of it. - /// @return the framebuffer object. - Framebuffer& DrawRect(SizeT width, SizeT height, SizeT x, SizeT y, UInt32 color); - - /// @brief Puts a pixel on the screen. - /// @param x where in X - /// @param y where in Y - /// @param color the color of it. - /// @return the framebuffer object. - Framebuffer& PutPixel(SizeT x, SizeT y, UInt32 color); - - private: - Ref<FramebufferContext*> fFrameBufferAddr; - FramebufferColorKind fColour; - }; - - /***********************************************************************************/ - /// Some common colors. - /***********************************************************************************/ - - extern const UInt32 kRgbRed; - extern const UInt32 kRgbGreen; - extern const UInt32 kRgbBlue; - extern const UInt32 kRgbBlack; - extern const UInt32 kRgbWhite; -} // namespace Kernel - -#endif /* ifndef __INC_FB_HPP__ */ diff --git a/dev/zka/KernelKit/HardwareThreadScheduler.hxx b/dev/zka/KernelKit/HardwareThreadScheduler.hxx index 3d70e828..c76b037d 100644 --- a/dev/zka/KernelKit/HardwareThreadScheduler.hxx +++ b/dev/zka/KernelKit/HardwareThreadScheduler.hxx @@ -134,7 +134,7 @@ namespace Kernel private: Array<HardwareThread, cMaxHartInsideSched> fThreadList; - ThreadID fCurrentThread{0}; + ThreadID fCurrentThread{0}; }; /// @brief wakes up thread. diff --git a/dev/zka/KernelKit/Heap.hxx b/dev/zka/KernelKit/Heap.hxx index 53eec98e..8776ab5b 100644 --- a/dev/zka/KernelKit/Heap.hxx +++ b/dev/zka/KernelKit/Heap.hxx @@ -32,10 +32,10 @@ namespace Kernel /// @brief Allocate chunk of memory. /// @param sz Size of pointer - /// @param rw Read Write bit. + /// @param wr Read Write bit. /// @param user User enable bit. /// @return The newly allocated pointer. - VoidPtr mm_new_heap(const SizeT sz, const Bool rw, const Bool user); + VoidPtr mm_new_heap(const SizeT sz, const Bool wr, const Bool user); /// @brief Protect the heap with a CRC value. /// @param heap_ptr pointer. @@ -47,6 +47,7 @@ namespace Kernel /// @return status code Int32 mm_make_ke_page(VoidPtr heap_ptr); + /// @brief Allocate C++ class. template <typename T, typename... Args> inline T* mm_new_class(Args&&... args) { @@ -58,6 +59,7 @@ namespace Kernel return cls; } + /// @brief Free C++ class. template <typename T> inline Void mm_delete_class(T* cls) { diff --git a/dev/zka/KernelKit/UserProcessScheduler.hxx b/dev/zka/KernelKit/UserProcessScheduler.hxx index fc82bf38..4edc80c2 100644 --- a/dev/zka/KernelKit/UserProcessScheduler.hxx +++ b/dev/zka/KernelKit/UserProcessScheduler.hxx @@ -17,7 +17,7 @@ #define kSchedProcessLimitPerTeam (16U) #define kSchedMaxMemoryLimit gib_cast(128) -#define kSchedMaxStackSz mib_cast(8) +#define kSchedMaxStackSz mib_cast(8) //////////////////////////////////////////////////// @@ -188,8 +188,8 @@ namespace Kernel ProcessTime PTime{0}; //! @brief Process allocated tine. - PID ProcessId{kSchedInvalidPID}; - Int32 Kind{eExecutableKind}; + PID ProcessId{kSchedInvalidPID}; + Int32 Kind{eExecutableKind}; public: //! @brief boolean operator, check status. diff --git a/dev/zka/KernelKit/XCOFF.hxx b/dev/zka/KernelKit/XCOFF.hxx index 82c6dd35..29128799 100644 --- a/dev/zka/KernelKit/XCOFF.hxx +++ b/dev/zka/KernelKit/XCOFF.hxx @@ -36,7 +36,7 @@ typedef struct XCoffFileHeader Kernel::UIntPtr fSymPtr; Kernel::UInt32 fNumSyms; Kernel::UInt16 fOptHdr; // ?: Number of bytes in optional header -} XCoffFileHeader32, XCoffFileHeader64; +} XCoffFileHeader64; #define cForkNameLen (255) diff --git a/dev/zka/Modules/CoreCG/Accessibility.hxx b/dev/zka/Modules/CoreCG/Accessibility.hxx index 4a3efbcb..1f26dec4 100644 --- a/dev/zka/Modules/CoreCG/Accessibility.hxx +++ b/dev/zka/Modules/CoreCG/Accessibility.hxx @@ -17,18 +17,18 @@ namespace CG { using namespace Kernel; - /// @brief common User interface class. - class UIAccessibilty final + /// @brief Accessibilty manager class. + class CGAccessibilty final { - explicit UIAccessibilty() = default; - ~UIAccessibilty() = default; + explicit CGAccessibilty() = default; + ~CGAccessibilty() = default; public: - ZKA_COPY_DELETE(UIAccessibilty); + ZKA_COPY_DELETE(CGAccessibilty); - STATIC UIAccessibilty& The() + STATIC CGAccessibilty& The() { - STATIC UIAccessibilty the; + STATIC CGAccessibilty the; return the; } diff --git a/dev/zka/Modules/CoreCG/DesktopRenderer.hxx b/dev/zka/Modules/CoreCG/DesktopRenderer.hxx new file mode 100644 index 00000000..e83ec8ef --- /dev/null +++ b/dev/zka/Modules/CoreCG/DesktopRenderer.hxx @@ -0,0 +1,45 @@ +/* ------------------------------------------- + + Copyright ZKA Technologies. + +------------------------------------------- */ + +#pragma once + +#include <Modules/CoreCG/Accessibility.hxx> +#include <KernelKit/Heap.hxx> +#include <KernelKit/UserProcessScheduler.hxx> +#include <KernelKit/LPC.hxx> +#include <NewKit/Defines.hxx> +#include <NewKit/Utils.hxx> +#include <Modules/CoreCG/FbRenderer.hxx> +#include <Modules/CoreCG/Rsrc/WndControls.rsrc> +#include <Modules/CoreCG/TextRenderer.hxx> + +namespace CG +{ + using namespace Kernel; + + class ICGBackground; + + /// \brief Draw background (either image or solid color) + inline Void CGDrawDesktopBackground(UInt32* raw_bmp = nullptr, SizeT width = 0, SizeT height = 0) noexcept + { + CGInit(); + + if (!raw_bmp) + { + const auto cColorBackground = CGColor(0x45, 0x00, 0x06); + + CGDrawInRegion(cColorBackground, CG::CGAccessibilty::The().Height(), CG::CGAccessibilty::The().Width(), + 0, 0); + } + else + { + CGDrawBitMapInRegion(raw_bmp, height, width, + 0, 0); + } + + CGFini(); + } +} // namespace CG diff --git a/dev/zka/Modules/CoreCG/FbRenderer.hxx b/dev/zka/Modules/CoreCG/FbRenderer.hxx index ca660602..9235e1f3 100644 --- a/dev/zka/Modules/CoreCG/FbRenderer.hxx +++ b/dev/zka/Modules/CoreCG/FbRenderer.hxx @@ -8,17 +8,17 @@ #include <NewKit/Defines.hxx> -#define CGInit() Kernel::SizeT __GXCursor = 0 +#define CGInit() Kernel::SizeT __CG_CURSOR = 0 #define CGColor(R, G, B) RGB(R, G, B) #define cCGClearClr CGColor(0x0, 0x0, 0x0) -#define CGFini() __GXCursor = 0 +#define CGFini() __CG_CURSOR = 0 /// @brief Performs OR drawing on the framebuffer. #define CGDrawBitMapInRegionA(_BitMp, _Height, _Width, _BaseX, _BaseY) \ - __GXCursor = 0; \ + __CG_CURSOR = 0; \ \ for (Kernel::SizeT i = _BaseX; i < (_Height + _BaseX); ++i) \ { \ @@ -27,15 +27,15 @@ *(((Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \ 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ i + \ - 4 * u))) |= (_BitMp)[__GXCursor]; \ + 4 * u))) |= (_BitMp)[__CG_CURSOR]; \ \ - ++__GXCursor; \ + ++__CG_CURSOR; \ } \ } /// @brief Draws a resource. #define CGDrawBitMapInRegion(_BitMp, _Height, _Width, _BaseX, _BaseY) \ - __GXCursor = 0; \ + __CG_CURSOR = 0; \ \ for (Kernel::SizeT i = _BaseX; i < (_Height + _BaseX); ++i) \ { \ @@ -44,14 +44,14 @@ *(((Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \ 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ i + \ - 4 * u))) = (_BitMp)[__GXCursor]; \ + 4 * u))) = (_BitMp)[__CG_CURSOR]; \ \ - ++__GXCursor; \ + ++__CG_CURSOR; \ } \ } #define CGDrawBitMapInRegionToRgn(_Rgn, _BitMp, _Height, _Width, _BaseX, _BaseY) \ - __GXCursor = 0; \ + __CG_CURSOR = 0; \ \ for (Kernel::SizeT i = _BaseX; i < (_Height + _BaseX); ++i) \ { \ @@ -60,9 +60,9 @@ *(((Kernel::UInt32*)(_Rgn + \ 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ i + \ - 4 * u))) = (_BitMp)[__GXCursor]; \ + 4 * u))) = (_BitMp)[__CG_CURSOR]; \ \ - ++__GXCursor; \ + ++__CG_CURSOR; \ } \ } @@ -96,7 +96,7 @@ /// @brief Draws inside a zone. #define CGDrawInRegionToRgn(_Rgn, _Clr, _Height, _Width, _BaseX, _BaseY) \ - __GXCursor = 0; \ + __CG_CURSOR = 0; \ \ for (Kernel::SizeT x_base = _BaseX; x_base < (_Width + _BaseX); ++x_base) \ { \ @@ -105,13 +105,13 @@ *(((volatile Kernel::UInt32*)(_Rgn + \ 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ x_base + \ - 4 * y_base))) = _Clr[__GXCursor]; \ - ++__GXCursor; \ + 4 * y_base))) = _Clr[__CG_CURSOR]; \ + ++__CG_CURSOR; \ } \ } #define CGDrawInRegionToVideoRgn(_VideoRgn, _Clr, _Height, _Width, _BaseX, _BaseY) \ - __GXCursor = 0; \ + __CG_CURSOR = 0; \ \ for (Kernel::SizeT x_base = _BaseX; x_base < (_Width + _BaseX); ++x_base) \ { \ @@ -121,12 +121,12 @@ 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ x_base + \ 4 * y_base))) = _Clr; \ - ++__GXCursor; \ + ++__CG_CURSOR; \ } \ } #define CGDrawInRegionToVideoRgnA(_VideoRgn, _Clr, _Height, _Width, _BaseX, _BaseY) \ - __GXCursor = 0; \ + __CG_CURSOR = 0; \ \ for (Kernel::SizeT x_base = _BaseX; x_base < (_Width + _BaseX); ++x_base) \ { \ @@ -136,7 +136,7 @@ 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ x_base + \ 4 * y_base))) |= _Clr; \ - ++__GXCursor; \ + ++__CG_CURSOR; \ } \ } diff --git a/dev/zka/Modules/CoreCG/Math.hxx b/dev/zka/Modules/CoreCG/Math.hxx index bfa28a3d..07da020d 100644 --- a/dev/zka/Modules/CoreCG/Math.hxx +++ b/dev/zka/Modules/CoreCG/Math.hxx @@ -6,17 +6,56 @@ #pragma once -/// @file Math.hxx -/// @brief Linear interpolation implementation. +#include <NewKit/Defines.hxx> -typedef float CGReal; +/// @file Math.hxx +/// @brief Math functions. -/// @brief Linear interpolation equation solver. -/// @param from where? -/// @param to to? -/// @param at which state we're at **to**. -inline CGReal CGLerp(CGReal to, CGReal from, CGReal stat) +namespace CG { - CGReal difference = to - from; - return from + (difference * stat); -} + using namespace Kernel; + +#ifdef __ZKA_USE_DOUBLE__ + typedef double CGReal; +#else + typedef float CGReal; +#endif + + /// @brief Square of function, with Base template argument. + /// @param of Base argument to find sqquare of + template <CGReal Base> + inline CGReal SqrOf(CGReal of) + { + return (of / (1.0 / Base)); + } + + /// @brief Power function, with Repeat argument. + template <CGReal Exponent> + inline CGReal Pow(CGReal in) + { + if (Exponent == 0) + return 1; // Any number to the power of 0 is 1. + + if (Exponent == 1) + return in; // Any number to the power of 1 is itself. + + Int32 cnt = Exponent; + + CGReal result = 1; + + for (auto i = 0; i < (cnt); ++i) + result *= in; + + return result; + } + + /// @brief Linear interpolation equation solver. + /// @param from where? + /// @param to to? + /// @param at which state we're at **to**. + inline CGReal CGLerp(CGReal to, CGReal from, CGReal stat) + { + CGReal diff = (to - from); + return from + (diff * stat); + } +} // namespace CG diff --git a/dev/zka/Modules/CoreCG/TextRenderer.hxx b/dev/zka/Modules/CoreCG/TextRenderer.hxx index 34caa420..b3a6b88c 100644 --- a/dev/zka/Modules/CoreCG/TextRenderer.hxx +++ b/dev/zka/Modules/CoreCG/TextRenderer.hxx @@ -161,7 +161,9 @@ inline Kernel::Void CGRenderStringFromBitMap(const Kernel::UInt8* bitmap, const set = bitmap[x] & (1 << y);
if (set)
+ {
CGDrawInRegion(color, 1, 1, ((x_dst) + x), ((y_dst) + y));
+ }
}
}
}
diff --git a/dev/zka/Modules/CoreCG/WindowRenderer.hxx b/dev/zka/Modules/CoreCG/WindowRenderer.hxx deleted file mode 100644 index 775b80c0..00000000 --- a/dev/zka/Modules/CoreCG/WindowRenderer.hxx +++ /dev/null @@ -1,265 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - -------------------------------------------- */ - -#pragma once - -#include <Modules/CoreCG/Accessibility.hxx> -#include <KernelKit/Heap.hxx> -#include <KernelKit/UserProcessScheduler.hxx> -#include <KernelKit/LPC.hxx> -#include <NewKit/Defines.hxx> -#include <NewKit/Utils.hxx> -#include <Modules/CoreCG/FbRenderer.hxx> -#include <Modules/CoreCG/Rsrc/WndControls.rsrc> -#include <Modules/CoreCG/TextRenderer.hxx> - -namespace CG -{ - using namespace Kernel; - - struct UI_WINDOW_STRUCT; - - enum - { - cWndFlagNoShow = 0x02, - cWndFlagButton = 0x04, - cWndFlagWindow = 0x06, - cWndFlagButtonSelect = 0x08, - cWndFlagHideCloseControl = 0x010, - cWndFlagCloseControlSelect = 0x012, - }; - - struct UI_WINDOW_STRUCT final - { - static constexpr auto cChildElementCount = 255; - - Char w_window_name[255]{0}; - Char w_class_name[255]{0}; - Int32 w_type{0}; - Int32 w_sub_type{0}; - Int32 w_x{0}; - Int32 w_y{0}; - Int32 w_w{0}; - Int32 w_h{0}; - Size w_child_count{0}; - struct UI_WINDOW_STRUCT* w_child_elements[cChildElementCount]{0}; - struct UI_WINDOW_STRUCT* w_parent{nullptr}; - UInt32* w_display_ptr{nullptr}; - Bool w_needs_repaint{false}; - }; - - typedef struct UI_WINDOW_STRUCT UI_WINDOW_STRUCT; - - /// \brief Draw background (either image or solid color) - inline Void CGDrawBackground(UInt32* raw_bmp = nullptr, SizeT width = 0, SizeT height = 0) noexcept - { - CGInit(); - - if (!raw_bmp) - { - const auto cColorBackground = CGColor(0x45, 0x00, 0x06); - - CGDrawInRegion(cColorBackground, CG::UIAccessibilty::The().Height(), CG::UIAccessibilty::The().Width(), - 0, 0); - } - else - { - CGDrawBitMapInRegion(raw_bmp, height, width, - 0, 0); - } - - CGFini(); - } - - inline struct UI_WINDOW_STRUCT* CGCreateWindow(Int32 kind, const Char* window_name, const Char* class_name, Int32 x, Int32 y, Int32 width, Int32 height, UI_WINDOW_STRUCT* parent = nullptr) - { - UI_WINDOW_STRUCT* wnd = new UI_WINDOW_STRUCT(); - - if (!wnd) - { - ErrLocal() = kErrorHeapOutOfMemory; - return nullptr; - } - - rt_copy_memory((VoidPtr)window_name, wnd->w_window_name, rt_string_len(window_name)); - rt_copy_memory((VoidPtr)class_name, wnd->w_class_name, rt_string_len(class_name)); - - if (parent) - { - wnd->w_parent = parent; - - ++wnd->w_parent->w_child_count; - wnd->w_parent->w_child_elements[wnd->w_parent->w_child_count - 1] = wnd; - } - - wnd->w_sub_type = 0; - wnd->w_type = kind; - wnd->w_x = x; - wnd->w_y = y; - - wnd->w_w = width; - wnd->w_h = height; - - wnd->w_display_ptr = new UInt32[width * height]; - rt_set_memory(wnd->w_display_ptr, CGColor(0xF5, 0xF5, 0xF5), width * height); - - return wnd; - } - - /// \brief Destroys a window and it's contents. - inline Bool CGDestroyWindow(struct UI_WINDOW_STRUCT* wnd) - { - if (wnd) - { - if (!mm_is_valid_heap(wnd)) - { - wnd = nullptr; - return true; - } - - wnd->w_needs_repaint = No; - - for (SizeT index = 0UL; index < wnd->w_child_count; ++index) - { - CGDestroyWindow(wnd->w_child_elements[index]); - } - - delete wnd; - wnd = nullptr; - - return true; - } - - return false; - } - - inline Kernel::Void CGDrawStringToWnd(UI_WINDOW_STRUCT* wnd, const Kernel::Char* text, Kernel::Int32 y_dst, Kernel::Int32 x_dst, Kernel::Int32 color) - { - y_dst += wnd->w_y + FLATCONTROLS_HEIGHT; - x_dst += wnd->w_x; - - if (y_dst > (wnd->w_h + wnd->w_y)) - return; - - for (Kernel::SizeT i = 0; text[i] != 0; ++i) - { - if (x_dst > (wnd->w_w + wnd->w_x)) - break; - - CGRenderStringFromBitMap(&cFontBitmap[text[i]][0], FONT_SIZE_X, FONT_SIZE_Y, y_dst, x_dst, color); - x_dst += FONT_SIZE_Y; - } - } - - inline SizeT CGDrawWindowList(UI_WINDOW_STRUCT** wnd, SizeT wnd_cnt) - { - if (wnd_cnt == 0 || - !wnd) - return 0; - - SizeT cnt = 0; - - for (SizeT index = 0; index < wnd_cnt; ++index) - { - if (!wnd[index] || - (wnd[index]->w_type == cWndFlagNoShow) || - !wnd[index]->w_needs_repaint) - continue; - - CGInit(); - - wnd[index]->w_needs_repaint = false; - - if (UIAccessibilty::The().Width() < wnd[index]->w_x) - { - if ((wnd[index]->w_x - UIAccessibilty::The().Width()) > 1) - { - wnd[index]->w_x -= wnd[index]->w_x - UIAccessibilty::The().Width(); - } - else - { - wnd[index]->w_x = 0; - } - } - - if (UIAccessibilty::The().Height() < wnd[index]->w_y) - { - if ((wnd[index]->w_y - UIAccessibilty::The().Height()) > 1) - { - wnd[index]->w_y -= wnd[index]->w_y - UIAccessibilty::The().Width(); - } - else - { - wnd[index]->w_y = 0; - } - } - - ++cnt; - - // Draw fake controls, just for the looks of it (WINDOW ONLY) - if (wnd[index]->w_type == cWndFlagWindow) - { - CGDrawBitMapInRegion(wnd[index]->w_display_ptr, wnd[index]->w_h, wnd[index]->w_w, wnd[index]->w_y, wnd[index]->w_x); - CGDrawInRegion(CGColor(0xFF, 0xFF, 0xFF), wnd[index]->w_w, FLATCONTROLS_HEIGHT, wnd[index]->w_y, wnd[index]->w_x); - - if (wnd[index]->w_sub_type != cWndFlagHideCloseControl) - { - if (wnd[index]->w_sub_type == cWndFlagCloseControlSelect) - { - CGDrawBitMapInRegion(FlatControlsClose, FLATCONTROLS_CLOSE_HEIGHT, FLATCONTROLS_CLOSE_WIDTH, wnd[index]->w_y, wnd[index]->w_x + wnd[index]->w_w - FLATCONTROLS_WIDTH); - } - else - { - CGDrawBitMapInRegion(FlatControls, FLATCONTROLS_HEIGHT, FLATCONTROLS_WIDTH, wnd[index]->w_y, wnd[index]->w_x + wnd[index]->w_w - FLATCONTROLS_WIDTH); - } - } - - CGDrawString(wnd[index]->w_window_name, wnd[index]->w_y + 8, wnd[index]->w_x + 8, CGColor(0x00, 0x00, 0x00)); - } - /// @note buttons in this library are dynamic, it's because we want to avoid as much as computations as possible. - /// (Such as getting the middle coordinates of a button, to center the text.) - else if (wnd[index]->w_type == cWndFlagButtonSelect) - { - auto x_center = wnd[index]->w_x + 6; - auto y_center = wnd[index]->w_y + 7; - - CGDrawInRegion(CGColor(0xD3, 0x74, 0x00), wnd[index]->w_w + 1, wnd[index]->w_h + 1, wnd[index]->w_y, wnd[index]->w_x); - CGDrawInRegion(CGColor(0xFF, 0xFF, 0xFF), wnd[index]->w_w - 1, wnd[index]->w_h - 1, wnd[index]->w_y + 1, wnd[index]->w_x + 1); - CGDrawStringToWnd(wnd[index], wnd[index]->w_window_name, y_center, x_center, CGColor(0x00, 0x00, 0x00)); - } - else if (wnd[index]->w_type == cWndFlagButton) - { - auto x_center = wnd[index]->w_x + 6; - auto y_center = wnd[index]->w_y + 7; - - CGDrawInRegion(CGColor(0xDC, 0xDC, 0xDC), wnd[index]->w_w + 1, wnd[index]->w_h + 1, wnd[index]->w_y, wnd[index]->w_x); - CGDrawInRegion(CGColor(0xFF, 0xFF, 0xFF), wnd[index]->w_w - 1, wnd[index]->w_h - 1, wnd[index]->w_y + 1, wnd[index]->w_x + 1); - CGDrawString(wnd[index]->w_window_name, y_center, x_center, CGColor(0x00, 0x00, 0x00)); - } - - CGFini(); - - // draw child windows and controls. - // doesn't have to be a window, enabling then windows in windows. - - for (SizeT child = 0; child < wnd[index]->w_child_count; ++child) - { - wnd[index]->w_child_elements[child]->w_x += wnd[index]->w_x; - wnd[index]->w_child_elements[child]->w_y += wnd[index]->w_y + FLATCONTROLS_HEIGHT; - - if ((wnd[index]->w_child_elements[child]->w_w + wnd[index]->w_child_elements[child]->w_x) > (wnd[index]->w_x + wnd[index]->w_w) || - (wnd[index]->w_child_elements[child]->w_h + wnd[index]->w_child_elements[child]->w_y) > (wnd[index]->w_y + wnd[index]->w_h)) - continue; - - CGDrawWindowList(&wnd[index]->w_child_elements[child], 1); - } - - CGFini(); - } - - return cnt; - } -} // namespace CG diff --git a/dev/zka/Modules/GL/.keepme b/dev/zka/Modules/GLCG/.keepme index e69de29b..e69de29b 100644 --- a/dev/zka/Modules/GL/.keepme +++ b/dev/zka/Modules/GLCG/.keepme diff --git a/dev/zka/Modules/NVME/Defines.hxx b/dev/zka/Modules/NVME/NVME.hxx index 3e8b9c98..3667b980 100644 --- a/dev/zka/Modules/NVME/Defines.hxx +++ b/dev/zka/Modules/NVME/NVME.hxx @@ -24,8 +24,8 @@ namespace Kernel struct ALIGN_NVME NVMEBar0 final { - NVMEInt32 fCap; - NVMEInt32 fVer; + NVMEInt32 fCapabilities; + NVMEInt32 fVersion; NVMEInt32 fIntMaskSet; NVMEInt32 fIntMaskClr; NVMEInt32 fContrlConf; diff --git a/dev/zka/NewKit/Json.hxx b/dev/zka/NewKit/Json.hxx index e37dc93d..a5893147 100644 --- a/dev/zka/NewKit/Json.hxx +++ b/dev/zka/NewKit/Json.hxx @@ -21,7 +21,7 @@ namespace Kernel { - /// @brief Json value class + /// @brief Json class class JsonType final { public: @@ -77,11 +77,22 @@ namespace Kernel { STATIC JsonType In(const Char* full_array) { - if (full_array[0] != '{') - return JsonType::kNull; + auto start_val = '{'; + auto end_val = '}'; + Boolean probe_value = false; + + if (full_array[0] != start_val) + { + if (full_array[0] != '[') + return JsonType::kNull; + + start_val = '['; + end_val = ']'; + + probe_value = true; + } SizeT len = rt_string_len(full_array); - Boolean probe_value = false; SizeT key_len = 0; SizeT value_len = 0; @@ -96,7 +107,7 @@ namespace Kernel if (probe_value) { - if (full_array[i] == '}' || + if (full_array[i] == end_val || full_array[i] == ',') { probe_value = false; @@ -112,6 +123,9 @@ namespace Kernel } else { + if (start_val == '[') + continue; + if (full_array[i] == ':') { probe_value = true; diff --git a/dev/zka/NewKit/Macros.hxx b/dev/zka/NewKit/Macros.hxx index 51b9575b..e765d87b 100644 --- a/dev/zka/NewKit/Macros.hxx +++ b/dev/zka/NewKit/Macros.hxx @@ -130,4 +130,4 @@ #define kSysChime "\\System\\startup.wav" /// @brief The main system loader. -#define kSysProcess "ZKA AUTHORITY\\KERNEL" +#define kKernelProcessName "ZKA AUTHORITY\\KERNEL" diff --git a/dev/zka/NewKit/Variant.hxx b/dev/zka/NewKit/Variant.hxx index 015cec92..6b0f30bd 100644 --- a/dev/zka/NewKit/Variant.hxx +++ b/dev/zka/NewKit/Variant.hxx @@ -21,25 +21,25 @@ namespace Kernel kBlob, kNull, kJson, + kXML, }; public: explicit Variant() = delete; public: - Variant& operator=(const Variant&) = default; - Variant(const Variant&) = default; + ZKA_COPY_DEFAULT(Variant); ~Variant() = default; public: explicit Variant(StringView* stringView) - : fPtr((voidPtr)stringView), fKind(VariantKind::kString) + : fPtr((VoidPtr)stringView), fKind(VariantKind::kString) { } explicit Variant(JsonType* json) - : fPtr((voidPtr)json), fKind(VariantKind::kJson) + : fPtr((VoidPtr)json), fKind(VariantKind::kJson) { } @@ -48,7 +48,7 @@ namespace Kernel { } - explicit Variant(voidPtr ptr) + explicit Variant(VoidPtr ptr) : fPtr(ptr), fKind(VariantKind::kBlob) { } @@ -57,6 +57,12 @@ namespace Kernel const Char* ToString(); VoidPtr Leak(); + template <typename T> + T* As() + { + return reinterpret_cast<T*>(fPtr); + } + private: voidPtr fPtr{nullptr}; VariantKind fKind{VariantKind::kNull}; diff --git a/dev/zka/src/DriveMgr.cxx b/dev/zka/src/DriveMgr.cxx index f6436f75..f237458a 100644 --- a/dev/zka/src/DriveMgr.cxx +++ b/dev/zka/src/DriveMgr.cxx @@ -10,7 +10,7 @@ #include <Modules/ATA/ATA.hxx> #include <Modules/AHCI/AHCI.hxx> -#include <Modules/NVME/Defines.hxx> +#include <Modules/NVME/NVME.hxx> /// @file DriveMgr.cxx /// @brief Kernel drive manager. diff --git a/dev/zka/src/Framebuffer.cxx b/dev/zka/src/Framebuffer.cxx deleted file mode 100644 index 3794e458..00000000 --- a/dev/zka/src/Framebuffer.cxx +++ /dev/null @@ -1,113 +0,0 @@ -/* ------------------------------------------- - - Copyright ZKA Technologies. - - File: Framebuffer.cxx - Purpose: Framebuffer object - - Revision History: - - 01/02/24: Added file (amlel) - 02/02/24: Add documentation (amlel) - 07/07/07: Moved Framebuffer methods into Kernel:: - -------------------------------------------- */ - -#include <KernelKit/Framebuffer.hxx> -#include <HintKit/CompilerHint.hxx> - -/** - * @brief Framebuffer object implementation. - * - */ - -namespace Kernel -{ - Framebuffer::Framebuffer(_Input Ref<FramebufferContext*>& addr) - : fFrameBufferAddr(addr) - { - } - - /** - * @brief Get Pixel at **pos** - * - * @param pos position of pixel. - * @return volatile* - */ - _Output volatile UIntPtr* Framebuffer::operator[](_Input const UIntPtr& pos) - { - return (UIntPtr*)(fFrameBufferAddr->fBase * pos); - } - - /// @brief Boolean operator. - Framebuffer::operator bool() - { - return fFrameBufferAddr.Leak()->fBase != 0 && - fColour != FramebufferColorKind::INVALID && - fFrameBufferAddr.Leak()->fBase != kInvalidAddress; - } - - /// @brief Set color kind of framebuffer. - /// @param colour - /// @return - _Output const FramebufferColorKind& Framebuffer::Color( - const FramebufferColorKind& colour) - { - if (fColour != FramebufferColorKind::INVALID && - colour != FramebufferColorKind::INVALID) - { - fColour = colour; - } - - return fColour; - } - - /// @brief Leak framebuffer context. - /// @return The reference of the framebuffer context. - _Output Ref<FramebufferContext*>& Framebuffer::Leak() - { - return this->fFrameBufferAddr; - } - - /// @brief Draws a rectangle. - /// @param width - /// @param height - /// @param x - /// @param y - /// @param color - /// @return - _Output Framebuffer& Framebuffer::DrawRect(SizeT width, SizeT height, SizeT x, SizeT y, UInt32 color) - { - for (Kernel::SizeT i = x; i < width + x; ++i) - { - for (Kernel::SizeT u = y; u < height + y; ++u) - { - *(((volatile Kernel::UInt32*)(fFrameBufferAddr.Leak()->fBase + - 4 * fFrameBufferAddr.Leak()->fBpp * i + - 4 * u))) = color; - } - } - - return *this; - } - - /// @brief Put a pixel on the screen. - /// @param x - /// @param y - /// @param color - /// @return - _Output Framebuffer& Framebuffer::PutPixel(SizeT x, SizeT y, UInt32 color) - { - *(((volatile Kernel::UInt32*)(fFrameBufferAddr.Leak()->fBase + - 4 * fFrameBufferAddr.Leak()->fBpp * x + - 4 * y))) = color; - - return *this; - } - - const UInt32 kRgbRed = 0x000000FF; - const UInt32 kRgbGreen = 0x0000FF00; - const UInt32 kRgbBlue = 0x00FF0000; - const UInt32 kRgbBlack = 0x00000000; - const UInt32 kRgbWhite = 0xFFFFFFFF; -} // namespace Kernel diff --git a/dev/zka/src/Heap.cxx b/dev/zka/src/Heap.cxx index a75eaeb1..71398ca2 100644 --- a/dev/zka/src/Heap.cxx +++ b/dev/zka/src/Heap.cxx @@ -102,10 +102,10 @@ namespace Kernel /// @brief Allocate chunk of memory. /// @param sz Size of pointer - /// @param rw Read Write bit. + /// @param wr Read Write bit. /// @param user User enable bit. /// @return The newly allocated pointer. - VoidPtr mm_new_heap(const SizeT sz, const bool rw, const bool user) + VoidPtr mm_new_heap(const SizeT sz, const bool wr, const bool user) { Detail::mm_alloc_init_timeout(); @@ -117,7 +117,7 @@ namespace Kernel sz_fix += sizeof(Detail::HEAP_INFORMATION_BLOCK); PageMgr heap_mgr; - auto wrapper = heap_mgr.Request(rw, user, No, sz_fix); + auto wrapper = heap_mgr.Request(wr, user, No, sz_fix); Detail::HEAP_INFORMATION_BLOCK_PTR heap_info_ptr = reinterpret_cast<Detail::HEAP_INFORMATION_BLOCK_PTR>( diff --git a/dev/zka/src/KernelCheck.cxx b/dev/zka/src/KernelCheck.cxx index 4c316c0b..73809ba8 100644 --- a/dev/zka/src/KernelCheck.cxx +++ b/dev/zka/src/KernelCheck.cxx @@ -15,7 +15,7 @@ #include <Modules/CoreCG/Accessibility.hxx> #include <Modules/CoreCG/FbRenderer.hxx> #include <Modules/CoreCG/TextRenderer.hxx> -#include <Modules/CoreCG/WindowRenderer.hxx> +#include <Modules/CoreCG/DesktopRenderer.hxx> #define SetMem(dst, byte, sz) Kernel::rt_set_memory((Kernel::VoidPtr)dst, byte, sz) #define CopyMem(dst, src, sz) Kernel::rt_copy_memory((Kernel::VoidPtr)src, (Kernel::VoidPtr)dst, sz) @@ -34,7 +34,7 @@ namespace Kernel auto panicTxt = RGB(0xff, 0xff, 0xff); - CG::CGDrawBackground(); + CG::CGDrawDesktopBackground(); auto start_y = 10; auto x = 10; diff --git a/dev/zka/src/Variant.cxx b/dev/zka/src/Variant.cxx index e988d783..652fe158 100644 --- a/dev/zka/src/Variant.cxx +++ b/dev/zka/src/Variant.cxx @@ -12,6 +12,8 @@ namespace Kernel { switch (fKind) { + case VariantKind::kXML: + return ("Class:{XML}"); case VariantKind::kJson: return ("Class:{Json}"); case VariantKind::kString: |
