summaryrefslogtreecommitdiffhomepage
path: root/public/frameworks
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-03-08 18:08:34 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-03-08 18:08:34 +0100
commit56006ba750d4c7f6d57e9733171e3863652238e4 (patch)
tree74cafbbf0225f25d214ad6debef02da5c3ca8967 /public/frameworks
parent990e50df4d26b54e35f56a54e06837fdf13f5019 (diff)
TQ-22: Ticket done.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'public/frameworks')
-rw-r--r--public/frameworks/CoreFoundation.fwrk/.keep0
-rw-r--r--public/frameworks/CoreFoundation.fwrk/headers/.keep0
-rw-r--r--public/frameworks/CoreFoundation.fwrk/xml/.keep0
-rw-r--r--public/frameworks/CoreFoundation.fwrk/xml/app.xml8
-rw-r--r--public/frameworks/DiskImage.fwrk/headers/DiskImage.h21
-rw-r--r--public/frameworks/DiskImage.fwrk/src/DiskImage.cc68
-rw-r--r--public/frameworks/DiskImage.fwrk/xml/.keep0
-rw-r--r--public/frameworks/DiskImage.fwrk/xml/app.xml5
8 files changed, 102 insertions, 0 deletions
diff --git a/public/frameworks/CoreFoundation.fwrk/.keep b/public/frameworks/CoreFoundation.fwrk/.keep
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/public/frameworks/CoreFoundation.fwrk/.keep
diff --git a/public/frameworks/CoreFoundation.fwrk/headers/.keep b/public/frameworks/CoreFoundation.fwrk/headers/.keep
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/public/frameworks/CoreFoundation.fwrk/headers/.keep
diff --git a/public/frameworks/CoreFoundation.fwrk/xml/.keep b/public/frameworks/CoreFoundation.fwrk/xml/.keep
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/public/frameworks/CoreFoundation.fwrk/xml/.keep
diff --git a/public/frameworks/CoreFoundation.fwrk/xml/app.xml b/public/frameworks/CoreFoundation.fwrk/xml/app.xml
new file mode 100644
index 00000000..d4ac9b98
--- /dev/null
+++ b/public/frameworks/CoreFoundation.fwrk/xml/app.xml
@@ -0,0 +1,8 @@
+<MLCoreFoundation>
+<MLAppName>
+ CoreFoundation
+</MLAppName>
+<MLInternalSDK>
+ CoreFoundationInternal
+</MLInternalSDK>
+</MLCoreFoundation> \ No newline at end of file
diff --git a/public/frameworks/DiskImage.fwrk/headers/DiskImage.h b/public/frameworks/DiskImage.fwrk/headers/DiskImage.h
new file mode 100644
index 00000000..34a0bc0c
--- /dev/null
+++ b/public/frameworks/DiskImage.fwrk/headers/DiskImage.h
@@ -0,0 +1,21 @@
+/* -------------------------------------------
+
+ Copyright (C) 2025, Amlal EL Mahrouss, all rights reserved.
+
+ FILE: DiskImage.h
+ PURPOSE: Disk Imaging.
+
+ ------------------------------------------- */
+
+#pragma once
+
+#include <FirmwareKit/EPM.h>
+#include <FSKit/NeFS.h>
+#include <uuid/uuid.h>
+#include <LibSCI/SCI.h>
+
+SInt32 DIFormatDiskToFile(const char* kDiskName = "Disk",
+ int kDiskSectorSz = 512,
+ const int kDiskBlockCnt = 1,
+ size_t kDiskSz = gib_cast(4),
+ const char* kOutDisk = "disk.eimg") noexcept; \ No newline at end of file
diff --git a/public/frameworks/DiskImage.fwrk/src/DiskImage.cc b/public/frameworks/DiskImage.fwrk/src/DiskImage.cc
new file mode 100644
index 00000000..c992371b
--- /dev/null
+++ b/public/frameworks/DiskImage.fwrk/src/DiskImage.cc
@@ -0,0 +1,68 @@
+/* -------------------------------------------
+
+ Copyright (C) 2025, Amlal EL Mahrouss, all rights reserved.
+
+ FILE: DiskImage.cc
+ PURPOSE: Disk Imaging.
+
+ ------------------------------------------- */
+
+#include <DiskImage.fwrk/headers/DiskImage.h>
+
+SInt32 DIFormatDiskToFile(const char* kDiskName,
+ int kDiskSectorSz,
+ const int kDiskBlockCnt,
+ size_t kDiskSz,
+ const char* kOutDisk) noexcept
+{
+ struct ::EPM_PART_BLOCK block
+ {
+ 0
+ };
+
+ block.NumBlocks = kDiskBlockCnt;
+ block.SectorSz = kDiskSectorSz;
+ block.Version = kEPMRevisionBcd;
+ block.LbaStart = sizeof(struct ::EPM_PART_BLOCK);
+ block.LbaEnd = 0;
+ block.FsVersion = kNeFSVersionInteger;
+
+ ::MmCopyMemory(block.Name, (VoidPtr)kDiskName, ::MmStrLen(kDiskName));
+ ::MmCopyMemory(block.Magic, (VoidPtr)kEPMMagic86, ::MmStrLen(kEPMMagic86));
+
+ ::uuid_generate_random((NeOS::UInt8*)&block.Guid);
+
+ IOObject handle = IoOpenFile(kDiskName, nullptr);
+ ::IoWriteFile(handle, (NeOS::Char*)&block, sizeof(struct ::EPM_PART_BLOCK));
+
+ struct ::NEFS_ROOT_PARTITION_BLOCK rpb
+ {
+ };
+
+ ::MmCopyMemory(rpb.PartitionName, (VoidPtr)kDiskName, ::MmStrLen(kDiskName));
+ ::MmCopyMemory(rpb.Ident, (VoidPtr)kNeFSIdent, ::MmStrLen(kNeFSIdent));
+
+ rpb.Version = kNeFSVersionInteger;
+ rpb.EpmBlock = kEPMBootBlockLba;
+
+ rpb.StartCatalog = kNeFSCatalogStartAddress;
+ rpb.CatalogCount = 0;
+
+ rpb.DiskSize = kDiskSz;
+
+ rpb.SectorSize = kDiskSectorSz;
+ rpb.SectorCount = rpb.DiskSize / rpb.SectorSize;
+
+ rpb.FreeSectors = rpb.SectorCount;
+ rpb.FreeCatalog = rpb.DiskSize / sizeof(NEFS_CATALOG_STRUCT);
+
+ auto p_prev = ::IoTellFile(handle);
+
+ ::IoWriteFile(handle, (NeOS::Char*)&rpb, sizeof(struct ::NEFS_ROOT_PARTITION_BLOCK));
+
+ ::IoSeekFile(handle, p_prev);
+
+ ::IoCloseFile(handle);
+
+ return 0;
+} \ No newline at end of file
diff --git a/public/frameworks/DiskImage.fwrk/xml/.keep b/public/frameworks/DiskImage.fwrk/xml/.keep
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/public/frameworks/DiskImage.fwrk/xml/.keep
diff --git a/public/frameworks/DiskImage.fwrk/xml/app.xml b/public/frameworks/DiskImage.fwrk/xml/app.xml
new file mode 100644
index 00000000..a3ab79f0
--- /dev/null
+++ b/public/frameworks/DiskImage.fwrk/xml/app.xml
@@ -0,0 +1,5 @@
+<MLCoreFoundation>
+<MLAppName>
+ DiskImage
+</MLAppName>
+</MLCoreFoundation> \ No newline at end of file