summaryrefslogtreecommitdiffhomepage
path: root/dev/zka
diff options
context:
space:
mode:
Diffstat (limited to 'dev/zka')
-rw-r--r--dev/zka/HALKit/AMD64/HalBMPMgr.cxx38
-rw-r--r--dev/zka/HALKit/AMD64/HalCPU.cxx2
-rw-r--r--dev/zka/HALKit/AMD64/HalDebugOutput.cxx1
-rw-r--r--dev/zka/HALKit/AMD64/HalKernelMain.cxx16
-rw-r--r--dev/zka/HALKit/AMD64/HalMPContextSwitch.asm3
-rw-r--r--dev/zka/HALKit/AMD64/HalPaging.cxx75
-rw-r--r--dev/zka/HALKit/AMD64/HalPagingMgr.cxx162
-rw-r--r--dev/zka/HALKit/AMD64/Paging.hxx2
-rw-r--r--dev/zka/HALKit/AMD64/Processor.hxx7
-rw-r--r--dev/zka/HALKit/ARM64/HalKernelMain.cxx5
-rw-r--r--dev/zka/HALKit/ARM64/Paging.hxx2
-rw-r--r--dev/zka/KernelKit/Framebuffer.hxx85
-rw-r--r--dev/zka/KernelKit/HardwareThreadScheduler.hxx2
-rw-r--r--dev/zka/KernelKit/Heap.hxx6
-rw-r--r--dev/zka/KernelKit/UserProcessScheduler.hxx6
-rw-r--r--dev/zka/KernelKit/XCOFF.hxx2
-rw-r--r--dev/zka/Modules/CoreCG/Accessibility.hxx14
-rw-r--r--dev/zka/Modules/CoreCG/DesktopRenderer.hxx45
-rw-r--r--dev/zka/Modules/CoreCG/FbRenderer.hxx36
-rw-r--r--dev/zka/Modules/CoreCG/Math.hxx61
-rw-r--r--dev/zka/Modules/CoreCG/TextRenderer.hxx2
-rw-r--r--dev/zka/Modules/CoreCG/WindowRenderer.hxx265
-rw-r--r--dev/zka/Modules/GLCG/.keepme (renamed from dev/zka/Modules/GL/.keepme)0
-rw-r--r--dev/zka/Modules/NVME/NVME.hxx (renamed from dev/zka/Modules/NVME/Defines.hxx)4
-rw-r--r--dev/zka/NewKit/Json.hxx24
-rw-r--r--dev/zka/NewKit/Macros.hxx2
-rw-r--r--dev/zka/NewKit/Variant.hxx16
-rw-r--r--dev/zka/src/DriveMgr.cxx2
-rw-r--r--dev/zka/src/Framebuffer.cxx113
-rw-r--r--dev/zka/src/Heap.cxx6
-rw-r--r--dev/zka/src/KernelCheck.cxx4
-rw-r--r--dev/zka/src/Variant.cxx2
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: