summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--compile_flags.txt1
-rw-r--r--dev/LibSCI/Macros.h5
-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
-rw-r--r--public/tools/make_fs/CommandLine.cc188
11 files changed, 204 insertions, 92 deletions
diff --git a/compile_flags.txt b/compile_flags.txt
index b93c0ea8..f99ee4ef 100644
--- a/compile_flags.txt
+++ b/compile_flags.txt
@@ -6,6 +6,7 @@
-Ipublic/tools/make_app
-Ipublic/tools/make_fs
-Ipublic/tools/open
+-Ipublic/frameworks/
-Idev/Boot/BootKit
-std=c++20
-D__NE_AMD64__
diff --git a/dev/LibSCI/Macros.h b/dev/LibSCI/Macros.h
index 0868ed2f..4e4bff9a 100644
--- a/dev/LibSCI/Macros.h
+++ b/dev/LibSCI/Macros.h
@@ -28,8 +28,11 @@ Purpose: LibSCI Macros header.
#define FILE_MAX_LEN 256
+#ifndef BOOL
+#define BOOL bool
+#endif
+
typedef bool Bool;
-typedef bool BOOL;
typedef bool Boolean;
typedef void Void;
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
diff --git a/public/tools/make_fs/CommandLine.cc b/public/tools/make_fs/CommandLine.cc
index 5cdcba52..f3ea3f18 100644
--- a/public/tools/make_fs/CommandLine.cc
+++ b/public/tools/make_fs/CommandLine.cc
@@ -7,105 +7,111 @@
------------------------------------------- */
+#include <string>
#include <iostream>
#include <fstream>
+
#include <FirmwareKit/EPM.h>
#include <FSKit/NeFS.h>
-#include <string>
#include <uuid/uuid.h>
-static std::string kDiskName = "Disk";
-static int kDiskSectorSz = 512;
-static const int kDiskBlockCnt = 1;
-static size_t kDiskSz = gib_cast(4);
-std::string kOutDisk = "disk.eimg";
+static std::string kDiskName = "Disk";
+static int kDiskSectorSz = 512;
+static const int kDiskBlockCnt = 1;
+static size_t kDiskSz = gib_cast(4);
+static std::string kOutDisk = "disk.eimg";
/// @brief Filesystem tool entrypoint.
int main(int argc, char** argv)
{
- for (size_t arg = 0; arg < argc; ++arg)
- {
- std::string arg_s = argv[arg];
-
- if (arg_s == "--disk-output-name")
- {
- if ((arg + 1) < argc)
- {
- kOutDisk = argv[arg + 1];
- }
- }
- else if (arg_s == "--disk-size")
- {
- if ((arg + 1) < argc)
- {
- kDiskSz = strtol(argv[arg + 1], nullptr, 10);
- }
- }
- else if (arg_s == "--disk-sector-size")
- {
- if ((arg + 1) < argc)
- {
- kDiskSectorSz = strtol(argv[arg + 1], nullptr, 10);
- }
- }
- else if (arg_s == "--disk-name")
- {
- if ((arg + 1) < argc)
- {
- kDiskName = argv[arg + 1];
- }
- }
- }
-
- std::cout << "make_fs: EPM Image Creator.\n";
-
- 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;
-
- ::memcpy(block.Name, kDiskName.c_str(), strlen(kDiskName.c_str()));
- ::memcpy(block.Magic, kEPMMagic86, strlen(kEPMMagic86));
-
- ::uuid_generate_random((NeOS::UInt8*)&block.Guid);
-
- std::ofstream output_epm(kOutDisk);
- output_epm.write((NeOS::Char*)&block, sizeof(struct ::EPM_PART_BLOCK));
-
- struct ::NEFS_ROOT_PARTITION_BLOCK rpb{};
-
- ::memcpy(rpb.PartitionName, kDiskName.c_str(), strlen(kDiskName.c_str()));
- ::memcpy(rpb.Ident, kNeFSIdent, strlen(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 = output_epm.tellp();
-
- output_epm.seekp(kNeFSRootCatalogStartAddress);
-
- output_epm.write((NeOS::Char*)&rpb, sizeof(struct ::NEFS_ROOT_PARTITION_BLOCK));
-
- output_epm.seekp(p_prev);
-
- output_epm.close();
-
- std::cout << "make_fs: EPM Image has been written to: " << kOutDisk << "\n";
-
- return 0;
+ for (size_t arg = 0; arg < argc; ++arg)
+ {
+ std::string arg_s = argv[arg];
+
+ if (arg_s == "--disk-output-name")
+ {
+ if ((arg + 1) < argc)
+ {
+ kOutDisk = argv[arg + 1];
+ }
+ }
+ else if (arg_s == "--disk-size")
+ {
+ if ((arg + 1) < argc)
+ {
+ kDiskSz = strtol(argv[arg + 1], nullptr, 10);
+ }
+ }
+ else if (arg_s == "--disk-sector-size")
+ {
+ if ((arg + 1) < argc)
+ {
+ kDiskSectorSz = strtol(argv[arg + 1], nullptr, 10);
+ }
+ }
+ else if (arg_s == "--disk-name")
+ {
+ if ((arg + 1) < argc)
+ {
+ kDiskName = argv[arg + 1];
+ }
+ }
+ }
+
+ std::cout << "make_fs: EPM Image Creator.\n";
+
+ 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;
+
+ ::memcpy(block.Name, kDiskName.c_str(), strlen(kDiskName.c_str()));
+ ::memcpy(block.Magic, kEPMMagic86, strlen(kEPMMagic86));
+
+ ::uuid_generate_random((NeOS::UInt8*)&block.Guid);
+
+ std::ofstream output_epm(kOutDisk);
+ output_epm.write((NeOS::Char*)&block, sizeof(struct ::EPM_PART_BLOCK));
+
+ struct ::NEFS_ROOT_PARTITION_BLOCK rpb
+ {
+ };
+
+ ::memcpy(rpb.PartitionName, kDiskName.c_str(), strlen(kDiskName.c_str()));
+ ::memcpy(rpb.Ident, kNeFSIdent, strlen(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 = output_epm.tellp();
+
+ output_epm.seekp(kNeFSRootCatalogStartAddress);
+
+ output_epm.write((NeOS::Char*)&rpb, sizeof(struct ::NEFS_ROOT_PARTITION_BLOCK));
+
+ output_epm.seekp(p_prev);
+
+ output_epm.close();
+
+ std::cout << "make_fs: EPM Image has been written to: " << kOutDisk << "\n";
+
+ return 0;
} \ No newline at end of file