summaryrefslogtreecommitdiffhomepage
path: root/dev/ZKAKit/src
diff options
context:
space:
mode:
authorAmlal <amlalelmahrouss@icloud.com>2024-12-07 11:43:21 +0100
committerAmlal <amlalelmahrouss@icloud.com>2024-12-07 11:43:21 +0100
commitdc2d81f3c7628433bd3c51f1624200b3913ac746 (patch)
treeace444d1b284160ae83350a8f5fd5364e8fa81eb /dev/ZKAKit/src
parentb4ea651f87e23214ada3cc81086fa0e86d4697c9 (diff)
IMPL: Recover Kernel Window framework from previous commits.
IMPL: Compiler fixes and improvements on the source code. Signed-off-by: Amlal <amlalelmahrouss@icloud.com>
Diffstat (limited to 'dev/ZKAKit/src')
-rw-r--r--dev/ZKAKit/src/FS/NeFS.cc6
-rw-r--r--dev/ZKAKit/src/KernelMain.cc207
-rw-r--r--dev/ZKAKit/src/PEFCodeMgr.cc4
3 files changed, 212 insertions, 5 deletions
diff --git a/dev/ZKAKit/src/FS/NeFS.cc b/dev/ZKAKit/src/FS/NeFS.cc
index 11c43c11..2f446b73 100644
--- a/dev/ZKAKit/src/FS/NeFS.cc
+++ b/dev/ZKAKit/src/FS/NeFS.cc
@@ -327,14 +327,14 @@ _Output NFS_CATALOG_STRUCT* NeFSParser::CreateCatalog(_Input const Char* name,
out_lba = part_block->StartCatalog;
}
- constexpr SizeT cDefaultForkSize = kNeFSForkSize;
+ constexpr SizeT kDefaultForkSize = kNeFSForkSize;
NFS_CATALOG_STRUCT* child_catalog = new NFS_CATALOG_STRUCT();
Int32 flagsList = flags;
- child_catalog->ResourceForkSize = cDefaultForkSize;
- child_catalog->DataForkSize = cDefaultForkSize;
+ child_catalog->ResourceForkSize = kDefaultForkSize;
+ child_catalog->DataForkSize = kDefaultForkSize;
child_catalog->NextSibling = out_lba;
child_catalog->PrevSibling = out_lba;
diff --git a/dev/ZKAKit/src/KernelMain.cc b/dev/ZKAKit/src/KernelMain.cc
new file mode 100644
index 00000000..d9525e5c
--- /dev/null
+++ b/dev/ZKAKit/src/KernelMain.cc
@@ -0,0 +1,207 @@
+/* -------------------------------------------
+
+ Copyright ZKA Technologies
+
+ File: Main.cxx
+ Purpose: Main entrypoint of kernel.
+
+------------------------------------------- */
+
+#include <KernelKit/PE.h>
+#include <ArchKit/ArchKit.h>
+#include <CompilerKit/Detail.h>
+#include <FirmwareKit/Handover.h>
+#include <KernelKit/FileMgr.h>
+#include <KernelKit/Heap.h>
+#include <KernelKit/PEF.h>
+#include <KernelKit/PEFCodeMgr.h>
+#include <KernelKit/UserProcessScheduler.h>
+#include <KernelKit/Heap.h>
+#include <NewKit/Json.h>
+#include <NewKit/KString.h>
+#include <NewKit/Utils.h>
+#include <KernelKit/CodeMgr.h>
+#include <CFKit/Property.h>
+#include <Modules/FB/KWindow.h>
+#include <KernelKit/Timer.h>
+
+/***********************************************************************************/
+/* Returns kernel's version. */
+/***********************************************************************************/
+
+EXTERN Kernel::Property cKernelVersion;
+
+/***********************************************************************************/
+/* This is an external C symbol. */
+/***********************************************************************************/
+
+EXTERN_C Kernel::Void _hal_init_mouse();
+EXTERN_C Kernel::Boolean _hal_draw_mouse();
+
+STATIC CG::ML_WINDOW_STRUCT* kKernelWnd = nullptr;
+
+namespace Kernel::Detail
+{
+ /// @brief Filesystem auto formatter, additional checks are also done by the class.
+ class FilesystemInstaller final
+ {
+ Kernel::NeFileSystemMgr* fNeFS{nullptr};
+
+ public:
+ /// @brief wizard constructor.
+ explicit FilesystemInstaller()
+ {
+ if (Kernel::IFilesystemMgr::GetMounted())
+ {
+ CG::CGDrawStringToWnd(kKernelWnd, "MinOSKrnl: No need to allocate a NewFS filesystem here...", 10, 10, RGB(0, 0, 0));
+ fNeFS = reinterpret_cast<Kernel::NeFileSystemMgr*>(Kernel::IFilesystemMgr::GetMounted());
+ }
+ else
+ {
+ CG::CGDrawStringToWnd(kKernelWnd, "MinOSKrnl: Allocating a NewFS filesystem here...", 10, 10, RGB(0, 0, 0));
+
+ // Mounts a NewFS from main drive.
+ fNeFS = new Kernel::NeFileSystemMgr();
+
+ Kernel::IFilesystemMgr::Mount(fNeFS);
+ }
+
+ if (fNeFS->GetParser())
+ {
+ constexpr auto cFolderInfo = "META-INF";
+ const auto cDirCount = 7;
+ const char* cDirStr[cDirCount] = {
+ "/Boot/", "/System/", "/Support/", "/Applications/",
+ "/Users/", "/Library/", "/Mount/"};
+
+ for (Kernel::SizeT dirIndx = 0UL; dirIndx < cDirCount; ++dirIndx)
+ {
+ auto catalogDir = fNeFS->GetParser()->GetCatalog(cDirStr[dirIndx]);
+
+ if (catalogDir)
+ {
+ kcout << "newoskrnl: Already exists.\r";
+
+ CG::CGDrawStringToWnd(kKernelWnd, "MinOSKrnl: Catalog already exists...", 10 + (10 * (dirIndx + 1)), 10, RGB(0, 0, 0));
+
+ delete catalogDir;
+ continue;
+ }
+
+ catalogDir = fNeFS->GetParser()->CreateCatalog(cDirStr[dirIndx], 0,
+ kNeFSCatalogKindDir);
+
+ NFS_FORK_STRUCT theFork{0};
+
+ const Kernel::Char* cSrcName = cFolderInfo;
+
+ Kernel::rt_copy_memory((Kernel::VoidPtr)(cSrcName), theFork.ForkName,
+ Kernel::rt_string_len(cSrcName));
+
+ Kernel::rt_copy_memory((Kernel::VoidPtr)(catalogDir->Name),
+ theFork.CatalogName,
+ Kernel::rt_string_len(catalogDir->Name));
+
+ theFork.DataSize = kNeFSForkSize;
+ theFork.ResourceId = 0;
+ theFork.ResourceKind = Kernel::kNeFSRsrcForkKind;
+ theFork.Kind = Kernel::kNeFSDataForkKind;
+
+ Kernel::KString metadataFolder(kNeFSSectorSz);
+
+ metadataFolder +=
+ "<!properties/>\r<p>Kind: folder</p>\r<p>Created by: system</p>\r<p>Edited by: "
+ "system</p>\r<p>Volume Type: Zeta</p>\r";
+
+ metadataFolder += "<p>Path: ";
+ metadataFolder += cDirStr[dirIndx];
+ metadataFolder += "</p>\r";
+
+ const Kernel::SizeT metadataSz = kNeFSSectorSz;
+
+ fNeFS->GetParser()->CreateFork(catalogDir, theFork);
+
+ fNeFS->GetParser()->WriteCatalog(
+ catalogDir, true, (Kernel::VoidPtr)(metadataFolder.CData()),
+ metadataSz, cFolderInfo);
+
+ CG::CGDrawStringToWnd(kKernelWnd, "MinOSKrnl: Catalog has been created...", 10 + (10 * (dirIndx + 1)), 10, RGB(0, 0, 0));
+
+ delete catalogDir;
+ }
+ }
+
+ const auto kSysPage = "/System/syspage.sys";
+
+ NFS_CATALOG_STRUCT* catalogDisk =
+ this->fNeFS->GetParser()->GetCatalog(kSysPage);
+
+ const Kernel::Char* cSrcName = "8K_SYS_PAGE_KERNEL";
+
+ if (catalogDisk)
+ {
+ delete catalogDisk;
+ }
+ else
+ {
+ catalogDisk =
+ (NFS_CATALOG_STRUCT*)this->Leak()->CreateAlias(kSysPage);
+
+ NFS_FORK_STRUCT theDiskFork{0};
+
+ Kernel::rt_copy_memory((Kernel::VoidPtr)(cSrcName), theDiskFork.ForkName,
+ Kernel::rt_string_len(cSrcName));
+
+ Kernel::rt_copy_memory((Kernel::VoidPtr)(catalogDisk->Name),
+ theDiskFork.CatalogName,
+ Kernel::rt_string_len(catalogDisk->Name));
+
+ Kernel::Size sz_hdr = kNeFSForkSize;
+
+ theDiskFork.DataSize = sz_hdr;
+ theDiskFork.ResourceId = kNeFSCatalogKindExecutable | kNeFSCatalogKindPage;
+ theDiskFork.ResourceKind = Kernel::kNeFSDataForkKind;
+ theDiskFork.Kind = Kernel::kNeFSDataForkKind;
+
+ fNeFS->GetParser()->CreateFork(catalogDisk, theDiskFork);
+
+ delete catalogDisk;
+ }
+ }
+
+ ~FilesystemInstaller() = default;
+
+ ZKA_COPY_DEFAULT(FilesystemInstaller);
+
+ /// @brief Grab the disk's NewFS reference.
+ /// @return NeFileSystemMgr the filesystem interface
+ Kernel::NeFileSystemMgr* Leak()
+ {
+ return fNeFS;
+ }
+ };
+} // namespace Kernel::Detail
+
+/// @brief Application entrypoint.
+/// @param Void
+/// @return Void
+EXTERN_C Kernel::Void ke_dll_entrypoint(Kernel::Void)
+{
+ CG::CGDrawBackground();
+
+ kKernelWnd = nullptr;
+ kKernelWnd = CG::CGCreateWindow(CG::kWndFlagWindow, "ZKA Operating System Kernel Log", "Window", 20, 20, CG::UIAccessibilty::The().Height() - 20, CG::UIAccessibilty::The().Width() - 20);
+
+ kKernelWnd->w_sub_type = CG::kWndFlagCloseControlSelect;
+ kKernelWnd->w_x = 10;
+ kKernelWnd->w_y = 10;
+
+ kKernelWnd->w_needs_repaint = Yes;
+
+ CG::CGDrawWindowList(&kKernelWnd, 1);
+
+ /// Now run kernel loop, until no process are running.
+ Kernel::Detail::FilesystemInstaller(); // automatic filesystem creation.
+
+ CG::CGDrawBackground();
+}
diff --git a/dev/ZKAKit/src/PEFCodeMgr.cc b/dev/ZKAKit/src/PEFCodeMgr.cc
index d7a6edac..5bdef56d 100644
--- a/dev/ZKAKit/src/PEFCodeMgr.cc
+++ b/dev/ZKAKit/src/PEFCodeMgr.cc
@@ -269,8 +269,8 @@ namespace Kernel
if (!proc.StackSize)
{
- const auto cDefaultStackSizeMib = 8;
- proc.StackSize = mib_cast(cDefaultStackSizeMib);
+ const auto kDefaultStackSizeMib = 8;
+ proc.StackSize = mib_cast(kDefaultStackSizeMib);
}
return UserProcessScheduler::The().Spawn(&proc);