diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-08-23 15:26:33 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-08-23 15:26:33 +0200 |
| commit | 58ec3282634ccf75006043017ceacffed9a4533c (patch) | |
| tree | 81dc8f3823a4c77af34be62371523b5378e05aa9 /dev/ZBA/Sources | |
| parent | f5ed9f8a41b760a659e23f8c2a72d1ca73f3b826 (diff) | |
[IMP] BootScr module, manage boot driver (TODO need a UI toolkit for
it)
[IMP] Made NetBoot compilable as well.
[IMP] Fix Thread loader to be able to load other executables.
[REFACTOR] __NEWOS_ to __ZKA_ refactor.
[WIP] Fixing catalog which can't be fetched again after being written.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/ZBA/Sources')
| -rw-r--r-- | dev/ZBA/Sources/HEL/AMD64/BootFileReader.cxx | 2 | ||||
| -rw-r--r-- | dev/ZBA/Sources/HEL/AMD64/BootJump.S | 2 | ||||
| -rw-r--r-- | dev/ZBA/Sources/HEL/AMD64/BootMain.cxx | 20 | ||||
| -rw-r--r-- | dev/ZBA/Sources/HEL/AMD64/compile_flags.txt | 2 | ||||
| -rw-r--r-- | dev/ZBA/Sources/Thread.cxx | 26 | ||||
| -rw-r--r-- | dev/ZBA/Sources/compile_flags.txt | 2 |
6 files changed, 34 insertions, 20 deletions
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__ |
