summaryrefslogtreecommitdiffhomepage
path: root/dev/ZBA
diff options
context:
space:
mode:
Diffstat (limited to 'dev/ZBA')
-rw-r--r--dev/ZBA/Modules/BootScr/Boot.S28
-rw-r--r--dev/ZBA/Modules/BootScr/Module.cxx6
-rw-r--r--dev/ZBA/Modules/BootScr/build.json25
-rw-r--r--dev/ZBA/Modules/BootScr/compile_flags.txt2
-rw-r--r--dev/ZBA/Modules/NetBoot/Boot.S28
-rw-r--r--dev/ZBA/Modules/NetBoot/Module.cxx13
-rw-r--r--dev/ZBA/Modules/NetBoot/build.json25
-rw-r--r--dev/ZBA/Modules/NetBoot/compile_flags.txt2
-rw-r--r--dev/ZBA/Sources/HEL/AMD64/BootFileReader.cxx2
-rw-r--r--dev/ZBA/Sources/HEL/AMD64/BootJump.S2
-rw-r--r--dev/ZBA/Sources/HEL/AMD64/BootMain.cxx20
-rw-r--r--dev/ZBA/Sources/HEL/AMD64/compile_flags.txt2
-rw-r--r--dev/ZBA/Sources/Thread.cxx26
-rw-r--r--dev/ZBA/Sources/compile_flags.txt2
-rw-r--r--dev/ZBA/amd64-efi.make4
15 files changed, 148 insertions, 39 deletions
diff --git a/dev/ZBA/Modules/BootScr/Boot.S b/dev/ZBA/Modules/BootScr/Boot.S
new file mode 100644
index 00000000..ce9f36b1
--- /dev/null
+++ b/dev/ZBA/Modules/BootScr/Boot.S
@@ -0,0 +1,28 @@
+;; /*
+;; * ========================================================
+;; *
+;; * ZKA
+;; * Copyright ZKA Technologies., all rights reserved.
+;; *
+;; * ========================================================
+;; */
+
+.code64
+.intel_syntax noprefix
+
+#define kTypeDriver 101
+#define kArchAmd64 122
+#define kHandoverMagic 0xBADCC
+
+.section .ldr
+
+.quad kHandoverMagic
+.word kTypeDriver
+
+.text
+
+.extern main
+.global __main
+
+__main:
+ ret
diff --git a/dev/ZBA/Modules/BootScr/Module.cxx b/dev/ZBA/Modules/BootScr/Module.cxx
index 11bbb6c0..15758599 100644
--- a/dev/ZBA/Modules/BootScr/Module.cxx
+++ b/dev/ZBA/Modules/BootScr/Module.cxx
@@ -9,11 +9,7 @@
#include <BootKit/BootKit.hxx>
-EXTERN EfiSystemTable* ST;
-
-EXTERN_C Int32 ModuleMain(Void)
+EXTERN_C Int32 main(Kernel::HEL::HandoverInformationHeader* Handover)
{
- ST->ConOut->ClearScreen(ST->ConOut);
-
return kEfiOk;
}
diff --git a/dev/ZBA/Modules/BootScr/build.json b/dev/ZBA/Modules/BootScr/build.json
new file mode 100644
index 00000000..c53c6faa
--- /dev/null
+++ b/dev/ZBA/Modules/BootScr/build.json
@@ -0,0 +1,25 @@
+{
+ "compiler_path": "x86_64-w64-mingw32-g++",
+ "compiler_std": "c++20",
+ "headers_path": ["../", "../../", "../../../ZKA", "../../../", "./"],
+ "sources_path": ["*.cxx", "*.S"],
+ "output_name": "bootscr.sys",
+ "compiler_flags": [
+ "-ffreestanding",
+ "-nostdlib",
+ "-std=c++20",
+ "-fPIC",
+ "-fno-rtti",
+ "-fno-exceptions",
+ "-Wl,--subsystem=17,--image-base 0x10000000"
+ ],
+ "cpp_macros": [
+ "__NEWOSKRNL__",
+ "__NEWOSLDR__",
+ "__ZKA_AMD64__",
+ "__BOOTSCR__",
+ "cSCRVersionHighest=0x0100",
+ "cSCRVersionLowest=0x0100",
+ "cSCRVersion=0x0100"
+ ]
+}
diff --git a/dev/ZBA/Modules/BootScr/compile_flags.txt b/dev/ZBA/Modules/BootScr/compile_flags.txt
index f9ca281f..18bc8512 100644
--- a/dev/ZBA/Modules/BootScr/compile_flags.txt
+++ b/dev/ZBA/Modules/BootScr/compile_flags.txt
@@ -2,7 +2,7 @@
-I../
-I../../
-I../../Kernel
--D__NEWOS_AMD64__
+-D__ZKA_AMD64__
-std=c++20
-D__x86_64__
-D__NEWOS_OTA__
diff --git a/dev/ZBA/Modules/NetBoot/Boot.S b/dev/ZBA/Modules/NetBoot/Boot.S
new file mode 100644
index 00000000..ce9f36b1
--- /dev/null
+++ b/dev/ZBA/Modules/NetBoot/Boot.S
@@ -0,0 +1,28 @@
+;; /*
+;; * ========================================================
+;; *
+;; * ZKA
+;; * Copyright ZKA Technologies., all rights reserved.
+;; *
+;; * ========================================================
+;; */
+
+.code64
+.intel_syntax noprefix
+
+#define kTypeDriver 101
+#define kArchAmd64 122
+#define kHandoverMagic 0xBADCC
+
+.section .ldr
+
+.quad kHandoverMagic
+.word kTypeDriver
+
+.text
+
+.extern main
+.global __main
+
+__main:
+ ret
diff --git a/dev/ZBA/Modules/NetBoot/Module.cxx b/dev/ZBA/Modules/NetBoot/Module.cxx
index 9bc65eda..ea30569b 100644
--- a/dev/ZBA/Modules/NetBoot/Module.cxx
+++ b/dev/ZBA/Modules/NetBoot/Module.cxx
@@ -7,19 +7,10 @@
* ========================================================
*/
+#include <NetBoot.hxx>
#include <BootKit/BootKit.hxx>
-#include <NetBoot/NetBoot.hxx>
-EXTERN EfiSystemTable* ST;
-
-EXTERN_C Int32 ModuleMain(Void)
+EXTERN_C Int32 main(Kernel::HEL::HandoverInformationHeader* Handover)
{
- ST->ConOut->ClearScreen(ST->ConOut);
-
- /// @todo
- /// - Find a network drive called "\.\newoskrnl.dll" with fork 'For-NewOSLdr' in the network path. (NewFS formatted disk as well!)
- /// - Download our image
- /// - Boot from it.
-
return kEfiOk;
}
diff --git a/dev/ZBA/Modules/NetBoot/build.json b/dev/ZBA/Modules/NetBoot/build.json
new file mode 100644
index 00000000..78336241
--- /dev/null
+++ b/dev/ZBA/Modules/NetBoot/build.json
@@ -0,0 +1,25 @@
+{
+ "compiler_path": "x86_64-w64-mingw32-g++",
+ "compiler_std": "c++20",
+ "headers_path": ["../", "../../", "../../../ZKA", "../../../", "./"],
+ "sources_path": ["*.cxx", "*.S"],
+ "output_name": "netboot.sys",
+ "compiler_flags": [
+ "-ffreestanding",
+ "-nostdlib",
+ "-std=c++20",
+ "-fPIC",
+ "-fno-rtti",
+ "-fno-exceptions",
+ "-Wl,--subsystem=17,--image-base 0x10000000"
+ ],
+ "cpp_macros": [
+ "__NEWOSKRNL__",
+ "__NEWOSLDR__",
+ "__ZKA_AMD64__",
+ "__BOOTSCR__",
+ "cSCRVersionHighest=0x0100",
+ "cSCRVersionLowest=0x0100",
+ "cSCRVersion=0x0100"
+ ]
+}
diff --git a/dev/ZBA/Modules/NetBoot/compile_flags.txt b/dev/ZBA/Modules/NetBoot/compile_flags.txt
index f9ca281f..18bc8512 100644
--- a/dev/ZBA/Modules/NetBoot/compile_flags.txt
+++ b/dev/ZBA/Modules/NetBoot/compile_flags.txt
@@ -2,7 +2,7 @@
-I../
-I../../
-I../../Kernel
--D__NEWOS_AMD64__
+-D__ZKA_AMD64__
-std=c++20
-D__x86_64__
-D__NEWOS_OTA__
diff --git a/dev/ZBA/Sources/HEL/AMD64/BootFileReader.cxx b/dev/ZBA/Sources/HEL/AMD64/BootFileReader.cxx
index e94c690a..5686318b 100644
--- a/dev/ZBA/Sources/HEL/AMD64/BootFileReader.cxx
+++ b/dev/ZBA/Sources/HEL/AMD64/BootFileReader.cxx
@@ -139,7 +139,7 @@ Void BFileReader::ReadAll(SizeT readUntil, SizeT chunkToRead, UIntPtr outAddress
else if (readUntil < 1)
readUntil = newPtrInfo.FileSize;
- mWriter.Write(L"newosldr: physical size: ").Write(readUntil).Write("\r");
+ mWriter.Write(L"newosldr: Physical size: ").Write(readUntil).Write("\r");
}
if (!outAddress)
diff --git a/dev/ZBA/Sources/HEL/AMD64/BootJump.S b/dev/ZBA/Sources/HEL/AMD64/BootJump.S
index 2eb745d0..de474c96 100644
--- a/dev/ZBA/Sources/HEL/AMD64/BootJump.S
+++ b/dev/ZBA/Sources/HEL/AMD64/BootJump.S
@@ -1,8 +1,8 @@
.global rt_jump_to_address
.global rt_reset_hardware
-.text
.text
+
.intel_syntax noprefix
/**
diff --git a/dev/ZBA/Sources/HEL/AMD64/BootMain.cxx b/dev/ZBA/Sources/HEL/AMD64/BootMain.cxx
index 1011ce10..c5ee3fb3 100644
--- a/dev/ZBA/Sources/HEL/AMD64/BootMain.cxx
+++ b/dev/ZBA/Sources/HEL/AMD64/BootMain.cxx
@@ -185,7 +185,8 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle,
handoverHdrPtr->f_HeapStart = nullptr;
- while (BS->AllocatePool(EfiLoaderCode, kHandoverHeapSz, &handoverHdrPtr->f_HeapStart) != kEfiOk);
+ while (BS->AllocatePool(EfiLoaderCode, kHandoverHeapSz, &handoverHdrPtr->f_HeapStart) != kEfiOk)
+ ;
handoverHdrPtr->f_VirtualSize =
Descriptor[cDefaultMemoryMap].NumberOfPages; /* # of pages */
@@ -225,6 +226,23 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle,
// format the disk.
// ---------------------------------------------------- //
+ BFileReader readerBootScr(L"bootscr.sys", ImageHandle);
+ readerBootScr.ReadAll(0);
+
+ Boot::BThread* loaderBootScr = nullptr;
+
+ // ------------------------------------------ //
+ // If we succeed in reading the blob, then execute it.
+ // ------------------------------------------ //
+
+ if (readerBootScr.Blob())
+ {
+ loaderBootScr = new Boot::BThread(readerBootScr.Blob());
+ loaderBootScr->SetName("64-bit Boot Screen DLL.");
+ }
+
+ loaderBootScr->Start(handoverHdrPtr);
+
BFileReader readerKernel(L"newoskrnl.dll", ImageHandle);
readerKernel.ReadAll(0);
diff --git a/dev/ZBA/Sources/HEL/AMD64/compile_flags.txt b/dev/ZBA/Sources/HEL/AMD64/compile_flags.txt
index c24c4b09..cc79d229 100644
--- a/dev/ZBA/Sources/HEL/AMD64/compile_flags.txt
+++ b/dev/ZBA/Sources/HEL/AMD64/compile_flags.txt
@@ -1,7 +1,7 @@
-std=c++20
-I../../../
-I../../../../Kernel
--D__NEWOS_AMD64__
+-D__ZKA_AMD64__
-std=c++20
-D__x86_64__
-D__NEWOS_OTA__
diff --git a/dev/ZBA/Sources/Thread.cxx b/dev/ZBA/Sources/Thread.cxx
index c13d25b9..7362e484 100644
--- a/dev/ZBA/Sources/Thread.cxx
+++ b/dev/ZBA/Sources/Thread.cxx
@@ -15,13 +15,10 @@
#include <Modules/CoreCG/TextRenderer.hxx>
#include <CFKit/LoaderUtils.hxx>
-EXTERN_C
-{
+EXTERN_C{
#include <string.h>
}
-#define kHOTypeKernel 100
-
EXTERN EfiBootServices* BS;
namespace Boot
@@ -53,13 +50,13 @@ namespace Boot
return;
}
- if (optHdr->mSubsystem != kNewOSSubsystem)
+ if (optHdr->mSubsystem != kZKASubsystem)
{
- writer.Write("newosldr: Not a New OS executable.\r");
+ writer.Write("newosldr: Not a ZKA Subsystem executable.\r");
return;
}
- writer.Write("newosldr: PE32+ executable detected (New OS Subsystem).\r");
+ writer.Write("newosldr: PE32+ executable detected (ZKA Subsystem).\r");
auto numSecs = hdrPtr->mNumberOfSections;
@@ -83,7 +80,7 @@ namespace Boot
constexpr auto sectionForCode = ".text";
constexpr auto sectionForNewLdr = ".ldr";
- constexpr auto sectionForBSS = ".bss";
+ constexpr auto sectionForBSS = ".bss";
for (SizeT sectIndex = 0; sectIndex < numSecs; ++sectIndex)
{
@@ -92,7 +89,7 @@ namespace Boot
if (StrCmp(sectionForCode, sect->mName) == 0)
{
fStartAddress = (VoidPtr)((UIntPtr)loadStartAddress + optHdr->mAddressOfEntryPoint);
- writer.Write("newosldr: Start Address: ").Write((UIntPtr)fStartAddress).Write("\r");
+ writer.Write("newosldr: Entrypoint of DLL: ").Write((UIntPtr)fStartAddress).Write("\r");
}
else if (StrCmp(sectionForBSS, sect->mName) == 0)
{
@@ -106,11 +103,11 @@ namespace Boot
UInt32 HandoverType;
}* structHandover = (struct HANDOVER_INFORMATION_STUB*)((UIntPtr)fBlob + sect->mPointerToRawData);
- if (structHandover->HandoverMagic != kHandoverMagic ||
- structHandover->HandoverType != kHOTypeKernel)
+ if (structHandover->HandoverMagic != kHandoverMagic &&
+ structHandover->HandoverType != HEL::kTypeKernel)
{
- cg_write_text("NEWOSLDR: INVALID HANDOVER IMAGE! ABORTING...", 40, 10, RGB(0x00, 0x00, 0x00));
- EFI::Stop();
+ writer.Write("newosldr: Entrypoint of SYS: ").Write((UIntPtr)fStartAddress).Write("\r");
+ cg_write_text("NEWOSLDR: NOT AN HANDOVER IMAGE...", 40, 10, RGB(0xFF, 0xFF, 0xFF));
}
}
@@ -149,7 +146,7 @@ namespace Boot
}
HEL::HandoverProc err_fn = [](HEL::HandoverInformationHeader* rcx) -> void {
- cg_write_text("NEWOSLDR: INVALID IMAGE! ABORTING...", 40, 10, RGB(0x00, 0x00, 0x00));
+ cg_write_text("NEWOSLDR: INVALID IMAGE! ABORTING...", 50, 10, RGB(0xFF, 0xFF, 0xFF));
EFI::Stop();
};
@@ -159,7 +156,6 @@ namespace Boot
}
reinterpret_cast<HEL::HandoverProc>(fStartAddress)(handover);
- err_fn(handover);
}
const Char* BThread::GetName()
diff --git a/dev/ZBA/Sources/compile_flags.txt b/dev/ZBA/Sources/compile_flags.txt
index f9ca281f..18bc8512 100644
--- a/dev/ZBA/Sources/compile_flags.txt
+++ b/dev/ZBA/Sources/compile_flags.txt
@@ -2,7 +2,7 @@
-I../
-I../../
-I../../Kernel
--D__NEWOS_AMD64__
+-D__ZKA_AMD64__
-std=c++20
-D__x86_64__
-D__NEWOS_OTA__
diff --git a/dev/ZBA/amd64-efi.make b/dev/ZBA/amd64-efi.make
index 9e1fcd98..70071439 100644
--- a/dev/ZBA/amd64-efi.make
+++ b/dev/ZBA/amd64-efi.make
@@ -46,13 +46,14 @@ REM_FLAG=-f
FLAG_ASM=-f win64
FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mno-red-zone -D__NEWOSKRNL__ -D__NEWOSLDR__ \
-DEFI_FUNCTION_WRAPPER -I./ -I../Vendor -I../ZKA -I../ -c -nostdlib -fno-rtti -fno-exceptions \
- -std=c++20 -D__HAVE_MAHROUSS_APIS__ -D__NEWOS_AMD64__ -D__MAHROUSS__
+ -std=c++20 -D__HAVE_MAHROUSS_APIS__ -D__ZKA_AMD64__ -D__MAHROUSS__
BOOT_LOADER=newosldr.exe
KERNEL=newoskrnl.dll
DDK=ddk.dll
SCI=sci.dll
CRT=ndkcrt.dll
+BOOT_SCR=bootscr.sys
.PHONY: invalid-recipe
invalid-recipe:
@@ -67,6 +68,7 @@ all: compile-amd64
$(COPY) ../ZKA/$(KERNEL) Sources/Root/$(KERNEL)
$(COPY) ../SCI/$(SCI) Sources/Root/$(SCI)
$(COPY) ../DDK/$(DDK) Sources/Root/$(DDK)
+ $(COPY) ./Modules/BootScr/$(BOOT_SCR) Sources/Root/$(BOOT_SCR)
$(COPY) ../CRT/$(CRT) Sources/Root/$(CRT)
$(COPY) Sources/$(BOOT_LOADER) Sources/Root/$(BOOT_LOADER)