diff options
| author | Amlal <amlalelmahrouss@icloud.com> | 2024-05-11 06:43:54 +0000 |
|---|---|---|
| committer | Amlal <amlalelmahrouss@icloud.com> | 2024-05-11 06:43:54 +0000 |
| commit | ca675beb41dba8d7d16c5793b55d1672f38be3b4 (patch) | |
| tree | c995ada42729ac2059a0ed87a4539d1a7e10b14a /Private/NewBoot/Source | |
| parent | 2b4a4792abf51487ab4a16106f9376f43acf381a (diff) | |
| parent | bc57a29a24b98b00ba17710ba84ec2188ab73504 (diff) | |
Merged in MHR-23 (pull request #12)
MHR-23: Merge work.
Diffstat (limited to 'Private/NewBoot/Source')
24 files changed, 0 insertions, 1185 deletions
diff --git a/Private/NewBoot/Source/.gitkeep b/Private/NewBoot/Source/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/Private/NewBoot/Source/.gitkeep +++ /dev/null diff --git a/Private/NewBoot/Source/BootloaderRsrc.rsrc b/Private/NewBoot/Source/BootloaderRsrc.rsrc deleted file mode 100644 index e8d89e9a..00000000 --- a/Private/NewBoot/Source/BootloaderRsrc.rsrc +++ /dev/null @@ -1,27 +0,0 @@ -#include "../../CompilerKit/Version.hxx" - -1 ICON "../../Root/Boot/Icons/boot-logo.ico" - -1 VERSIONINFO -FILEVERSION 1,0,0,0 -PRODUCTVERSION 1,0,0,0 -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "080904E4" - BEGIN - VALUE "CompanyName", "Mahrouss-Logic" - VALUE "FileDescription", "New OS multi-platform bootloader." - VALUE "FileVersion", BOOTLOADER_VERSION - VALUE "InternalName", "NewBoot" - VALUE "LegalCopyright", "Copyright Mahrouss-Logic, all rights reserved." - VALUE "OriginalFilename", "NewBoot.exe" - VALUE "ProductName", "NewBoot" - VALUE "ProductVersion", BOOTLOADER_VERSION - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x809, 1252 - END -END diff --git a/Private/NewBoot/Source/CDROM/EFI/STARTUP.NSH b/Private/NewBoot/Source/CDROM/EFI/STARTUP.NSH deleted file mode 100644 index d29ba8fd..00000000 --- a/Private/NewBoot/Source/CDROM/EFI/STARTUP.NSH +++ /dev/null @@ -1,2 +0,0 @@ -fs0: -BOOT\BOOTX64.EFI diff --git a/Private/NewBoot/Source/CDROM/SplashScreen.fmt b/Private/NewBoot/Source/CDROM/SplashScreen.fmt deleted file mode 100644 index 857c63a1..00000000 --- a/Private/NewBoot/Source/CDROM/SplashScreen.fmt +++ /dev/null @@ -1,7 +0,0 @@ -Welcome to NeWS. - -Brought to you by: Amlal EL Mahrouss. -* NewBoot, NewKernel: Amlal EL Mahrouss. - -This copy can boot directly to NewKernel (Unified System). -Copyright Mahrouss-Logic, all rights reserved. diff --git a/Private/NewBoot/Source/HEL/AMD64/.gitkeep b/Private/NewBoot/Source/HEL/AMD64/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/Private/NewBoot/Source/HEL/AMD64/.gitkeep +++ /dev/null diff --git a/Private/NewBoot/Source/HEL/AMD64/BootAHCI.cxx b/Private/NewBoot/Source/HEL/AMD64/BootAHCI.cxx deleted file mode 100644 index d04a94d3..00000000 --- a/Private/NewBoot/Source/HEL/AMD64/BootAHCI.cxx +++ /dev/null @@ -1,21 +0,0 @@ -/* ------------------------------------------- - - Copyright Mahrouss Logic - -------------------------------------------- */ - -/** - * @file AHCI.cxx - * @author Amlal El Mahrouss (amlalelmahrouss@icloud.com) - * @brief AHCI driver. - * @version 0.1 - * @date 2024-02-02 - * - * @copyright Copyright (c) Mahrouss Logic - * - */ - - -#include <BootKit/Platform.hxx> -#include <BootKit/Protocol.hxx> -#include <BootKit/HW/SATA.hxx> diff --git a/Private/NewBoot/Source/HEL/AMD64/BootATA.cxx b/Private/NewBoot/Source/HEL/AMD64/BootATA.cxx deleted file mode 100644 index edfbaed8..00000000 --- a/Private/NewBoot/Source/HEL/AMD64/BootATA.cxx +++ /dev/null @@ -1,245 +0,0 @@ -/* ------------------------------------------- - - Copyright Mahrouss Logic - -------------------------------------------- */ - -/** - * @file ATA.cxx - * @author Amlal El Mahrouss (amlalelmahrouss@icloud.com) - * @brief ATA driver. - * @version 0.1 - * @date 2024-02-02 - * - * @copyright Copyright (c) Mahrouss Logic - * - */ - -#include <FirmwareKit/EFI.hxx> -#include <BootKit/BootKit.hxx> -#include <BootKit/HW/ATA.hxx> - -/// bugs: 0 - -#define kATADataLen 256 - -static Boolean kATADetected = false; -static Int32 kATADeviceType = kATADeviceCount; -static UInt16 kATAData[kATADataLen] = {0}; - -Boolean boot_ata_detected(Void); - -STATIC Boolean boot_ata_wait_io(UInt16 IO) { - for (int i = 0; i < 4; i++) In8(IO + ATA_REG_STATUS); - -ATAWaitForIO_Retry: - auto statRdy = In8(IO + ATA_REG_STATUS); - - if ((statRdy & ATA_SR_BSY)) goto ATAWaitForIO_Retry; - -ATAWaitForIO_Retry2: - statRdy = In8(IO + ATA_REG_STATUS); - - if (statRdy & ATA_SR_ERR) return false; - - if (!(statRdy & ATA_SR_DRDY)) goto ATAWaitForIO_Retry2; - - return true; -} - -Void boot_ata_select(UInt16 Bus) { - if (Bus == ATA_PRIMARY_IO) - Out8(Bus + ATA_REG_HDDEVSEL, ATA_PRIMARY_SEL); - else - Out8(Bus + ATA_REG_HDDEVSEL, ATA_SECONDARY_SEL); -} - -Boolean boot_ata_init(UInt16 Bus, UInt8 Drive, UInt16& OutBus, - UInt8& OutMaster) { - if (boot_ata_detected()) return true; - - BTextWriter writer; - - UInt16 IO = Bus; - - boot_ata_select(IO); - - // Bus init, NEIN bit. - Out8(IO + ATA_REG_NEIN, 1); - - // identify until it's good. -ATAInit_Retry: - auto statRdy = In8(IO + ATA_REG_STATUS); - - if (statRdy & ATA_SR_ERR) { - writer.Write( - L"New Boot: ATA: Select error, not an IDE based hard-drive.\r"); - - return false; - } - - if ((statRdy & ATA_SR_BSY)) goto ATAInit_Retry; - - Out8(IO + ATA_REG_COMMAND, ATA_CMD_IDENTIFY); - - /// fetch serial info - /// model, speed, number of sectors... - - boot_ata_wait_io(IO); - - for (SizeT indexData = 0ul; indexData < kATADataLen; ++indexData) { - kATAData[indexData] = In16(IO + ATA_REG_DATA); - } - - OutBus = - (Bus == ATA_PRIMARY_IO) ? BootDeviceATA::kPrimary : BootDeviceATA::kSecondary; - - OutMaster = (Bus == ATA_PRIMARY_IO) ? ATA_MASTER : ATA_SLAVE; - - return true; -} - -Void boot_ata_read(UInt64 Lba, UInt16 IO, UInt8 Master, CharacterTypeUTF8* Buf, - SizeT SectorSz, SizeT Size) { - UInt8 Command = ((!Master) ? 0xE0 : 0xF0); - - boot_ata_wait_io(IO); - boot_ata_select(IO); - - Out8(IO + ATA_REG_HDDEVSEL, (Command) | (((Lba) >> 24) & 0x0F)); - - Out8(IO + ATA_REG_SEC_COUNT0, 2); - - Out8(IO + ATA_REG_LBA0, (Lba)); - Out8(IO + ATA_REG_LBA1, (Lba) >> 8); - Out8(IO + ATA_REG_LBA2, (Lba) >> 16); - Out8(IO + ATA_REG_LBA3, (Lba) >> 24); - - Out8(IO + ATA_REG_COMMAND, ATA_CMD_READ_PIO); - - boot_ata_wait_io(IO); - - for (SizeT IndexOff = 0; IndexOff < Size; ++IndexOff) { - boot_ata_wait_io(IO); - Buf[IndexOff] = In16(IO + ATA_REG_DATA); - boot_ata_wait_io(IO); - } -} - -Void boot_ata_write(UInt64 Lba, UInt16 IO, UInt8 Master, CharacterTypeUTF8* Buf, - SizeT SectorSz, SizeT Size) { - UInt8 Command = ((!Master) ? 0xE0 : 0xF0); - - boot_ata_wait_io(IO); - boot_ata_select(IO); - - Out8(IO + ATA_REG_HDDEVSEL, (Command) | (((Lba) >> 24) & 0x0F)); - - Out8(IO + ATA_REG_SEC_COUNT0, 2); - - Out8(IO + ATA_REG_LBA0, (Lba)); - Out8(IO + ATA_REG_LBA1, (Lba) >> 8); - Out8(IO + ATA_REG_LBA2, (Lba) >> 16); - Out8(IO + ATA_REG_LBA3, (Lba) >> 24); - - Out8(IO + ATA_REG_COMMAND, ATA_CMD_WRITE_PIO); - - boot_ata_wait_io(IO); - - for (SizeT IndexOff = 0; IndexOff < Size; ++IndexOff) { - boot_ata_wait_io(IO); - Out16(IO + ATA_REG_DATA, Buf[IndexOff]); - boot_ata_wait_io(IO); - } -} - -/// @check is ATA detected? -Boolean boot_ata_detected(Void) { return kATADetected; } - -/*** - * - * - * @brief ATA Device class. - * - * - */ - -/** - * @brief ATA Device constructor. - * @param void none. - */ -BootDeviceATA::BootDeviceATA() noexcept { - if (boot_ata_init(ATA_PRIMARY_IO, true, this->Leak().mBus, - this->Leak().mMaster) || - boot_ata_init(ATA_SECONDARY_IO, true, this->Leak().mBus, - this->Leak().mMaster)) { - kATADetected = true; - } -} -/** - * @brief Is ATA detected? - */ -BootDeviceATA::operator bool() { return boot_ata_detected(); } - -/** - @brief Read Buf from disk - @param Sz Sector size - @param Buf buffer -*/ -BootDeviceATA& BootDeviceATA::Read(CharacterTypeUTF8* Buf, const SizeT& SectorSz) { - if (!boot_ata_detected()) { - Leak().mErr = true; - return *this; - } - - this->Leak().mErr = false; - - if (!Buf || SectorSz < 1) return *this; - - auto lba = this->Leak().mBase / SectorSz; - - boot_ata_read(lba, this->Leak().mBus, this->Leak().mMaster, - Buf, SectorSz, this->Leak().mSize); - - return *this; -} - -/** - @brief Write Buf into disk - @param Sz Sector size - @param Buf buffer -*/ -BootDeviceATA& BootDeviceATA::Write(CharacterTypeUTF8* Buf, const SizeT& SectorSz) { - if (!boot_ata_detected()) { - Leak().mErr = true; - return *this; - } - - Leak().mErr = false; - - if (!Buf || SectorSz < 1) return *this; - - auto lba = this->Leak().mBase / SectorSz; - - boot_ata_write(lba, this->Leak().mBus, this->Leak().mMaster, - Buf, SectorSz, this->Leak().mSize); - - return *this; -} - -/** - * @brief ATA trait getter. - * @return BootDeviceATA::ATATrait& the drive config. - */ -BootDeviceATA::ATATrait& BootDeviceATA::Leak() { return mTrait; } - -/*** - @brief Getter, gets the number of sectors inside the drive. -*/ -SizeT BootDeviceATA::GetSectorsCount() noexcept { - return (kATAData[61] << 16)| kATAData[60]; -} - -SizeT BootDeviceATA::GetDiskSize() noexcept { - return this->GetSectorsCount() * BootDeviceATA::kSectorSize; -} diff --git a/Private/NewBoot/Source/HEL/AMD64/BootFileReader.cxx b/Private/NewBoot/Source/HEL/AMD64/BootFileReader.cxx deleted file mode 100644 index 0f711334..00000000 --- a/Private/NewBoot/Source/HEL/AMD64/BootFileReader.cxx +++ /dev/null @@ -1,150 +0,0 @@ -/* ------------------------------------------- - - Copyright Mahrouss Logic - - File: FileReader.cxx - Purpose: New Boot FileReader, - Read complete file and store it in a buffer. - -------------------------------------------- */ - -#include <BootKit/Platform.hxx> -#include <BootKit/Protocol.hxx> -#include <BootKit/BootKit.hxx> -#include <FirmwareKit/Handover.hxx> -#include <FirmwareKit/EFI/API.hxx> -#include <cstddef> - -/// @file BootFileReader -/// @brief Bootloader File reader. -/// BUGS: 0 - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// -/// -/// @name BFileReader class -/// @brief Reads the file as a blob. -/// -/// -//////////////////////////////////////////////////////////////////////////////////////////////////// - -/*** - @brief File Reader constructor. -*/ -BFileReader::BFileReader(const CharacterTypeUTF16* path, - EfiHandlePtr ImageHandle) { - if (path != nullptr) { - SizeT index = 0UL; - for (; path[index] != L'\0'; ++index) { - mPath[index] = path[index]; - } - - mPath[index] = 0; - } - - /// Load protocols with their GUIDs. - - EfiGUID guidEfp = EfiGUID(EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID); - - EfiSimpleFilesystemProtocol* efp = nullptr; - EfiFileProtocol* rootFs = nullptr; - - EfiLoadImageProtocol* img = nullptr; - EfiGUID guidImg = EfiGUID(EFI_LOADED_IMAGE_PROTOCOL_GUID); - - if (BS->HandleProtocol(ImageHandle, &guidImg, (void**)&img) != kEfiOk) { - mWriter.Write(L"New Boot: Fetch-Protocol: No-Such-Protocol").Write(L"\r"); - this->mErrorCode = kNotSupported; - } - - if (BS->HandleProtocol(img->DeviceHandle, &guidEfp, (void**)&efp) != kEfiOk) { - mWriter.Write(L"New Boot: Fetch-Protocol: No-Such-Protocol").Write(L"\r"); - this->mErrorCode = kNotSupported; - return; - } - - /// Start doing disk I/O - - if (efp->OpenVolume(efp, &rootFs) != kEfiOk) { - mWriter.Write(L"New Boot: Fetch-Protocol: No-Such-Volume").Write(L"\r"); - EFI::ThrowError(L"NoSuchVolume", L"No Such volume."); - this->mErrorCode = kNotSupported; - return; - } - - EfiFileProtocol* kernelFile = nullptr; - - if (rootFs->Open(rootFs, &kernelFile, mPath, kEFIFileRead, kEFIReadOnly) != - kEfiOk) { - mWriter.Write(L"New Boot: Fetch-Protocol: No-Such-Path: ") - .Write(mPath) - .Write(L"\r"); - EFI::ThrowError(L"NoSuchPath", L"No Such file on filesystem."); - this->mErrorCode = kNotSupported; - return; - } - - rootFs->Close(rootFs); - - mSizeFile = 0; - mFile = kernelFile; - mErrorCode = kOperationOkay; -} - -BFileReader::~BFileReader() { - if (this->mFile) { - this->mFile->Close(this->mFile); - this->mFile = nullptr; - } - - if (this->mBlob) BS->FreePool(mBlob); - - BSetMem(this->mPath, 0, kPathLen); -} - -/** - @brief this reads all of the buffer. - @param until read until size is reached. -*/ -Void BFileReader::ReadAll(SizeT until, SizeT chunk) { - if (mBlob == nullptr) { - if (auto err = BS->AllocatePool(EfiLoaderCode, until, (VoidPtr*)&mBlob) != - kEfiOk) { - mWriter.Write(L"*** EFI-Code: ").Write(err).Write(L" ***\r"); - EFI::ThrowError(L"OutOfMemory", L"Allocation error."); - } - } - - mErrorCode = kNotSupported; - - UInt64 bufSize = chunk; - UInt64 szCnt = 0; - UInt64 curSz = 0; - - while (szCnt < until) { - if (mFile->Read(mFile, &bufSize, (VoidPtr)((UIntPtr)mBlob + curSz)) != - kEfiOk) { - break; - } - - szCnt += bufSize; - curSz += bufSize; - - if (bufSize == 0) break; - } - - mSizeFile = curSz; - mErrorCode = kOperationOkay; -} - -/// @brief error code getter. -/// @return the error code. -Int32& BFileReader::Error() { return mErrorCode; } - -/// @brief blob getter. -/// @return the blob. -VoidPtr BFileReader::Blob() { return mBlob; } - -/// @breif Size getter. -/// @return the size of the file. -UInt64& BFileReader::Size() { return mSizeFile; } diff --git a/Private/NewBoot/Source/HEL/AMD64/BootJump.S b/Private/NewBoot/Source/HEL/AMD64/BootJump.S deleted file mode 100644 index af278cc7..00000000 --- a/Private/NewBoot/Source/HEL/AMD64/BootJump.S +++ /dev/null @@ -1,9 +0,0 @@ -.global rt_jump_to_address -.text - -.code64 -.intel_syntax noprefix - -rt_jump_to_address: - jmp rcx - ret diff --git a/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx b/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx deleted file mode 100644 index e0e37b7d..00000000 --- a/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx +++ /dev/null @@ -1,185 +0,0 @@ -/* ------------------------------------------- - - Copyright Mahrouss Logic - -------------------------------------------- */ - -#include <FirmwareKit/EFI/API.hxx> -#include <BootKit/Rsrc/NewBoot.rsrc> -#include <Builtins/Toolbox/Toolbox.hxx> -#include <FirmwareKit/EFI.hxx> -#include <KernelKit/MSDOS.hpp> -#include <KernelKit/PEF.hpp> -#include <NewKit/Macros.hpp> -#include <BootKit/BootKit.hxx> -#include <NewKit/Ref.hpp> -#include <FirmwareKit/Handover.hxx> -#include <cstring> - -/// make the compiler shut up. -#ifndef kMachineModel -#define kMachineModel "NeWS HD" -#endif // !kMachineModel - -/** Graphics related. */ - -STATIC EfiGraphicsOutputProtocol* kGop = nullptr; -STATIC UInt16 kStride = 0U; -STATIC EfiGUID kGopGuid; - -EXTERN_C Void hal_init_platform(HEL::HandoverInformationHeader* HIH); - -/** - @brief Finds and stores the GOP. -*/ - -STATIC Void CheckAndFindFramebuffer() noexcept { - kGopGuid = EfiGUID(EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID); - kGop = nullptr; - - extern EfiBootServices* BS; - - BS->LocateProtocol(&kGopGuid, nullptr, (VoidPtr*)&kGop); - - kStride = 4; -} - -/// @brief check the BootDevice if suitable. -STATIC Bool CheckBootDevice(BootDeviceATA& ataDev) { - if (ataDev.Leak().mErr) return false; - return true; -} - -/// @brief Main EFI entrypoint. -/// @param ImageHandle Handle of this image. -/// @param SystemTable The system table of it. -/// @return -EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle, - EfiSystemTable* SystemTable) { - InitEFI(SystemTable); ///! Init the EFI library. - CheckAndFindFramebuffer(); ///! Init the GOP. - - BTextWriter writer; - - /// Splash screen stuff - - writer.Write(L"Mahrouss-Logic (R) New Boot: ") - .Write(BVersionString::Shared()); - - writer.Write(L"\rNew Boot: Firmware Vendor: ") - .Write(SystemTable->FirmwareVendor) - .Write(L"\r"); - - UInt32* MapKey = new UInt32(); - UInt32* SizePtr = new UInt32(); - EfiMemoryDescriptor* Descriptor = new EfiMemoryDescriptor(); - UInt32* SzDesc = new UInt32(); - UInt32* RevDesc = new UInt32(); - - *MapKey = 0; - *SizePtr = sizeof(EfiMemoryDescriptor); - - HEL::HandoverInformationHeader* handoverHdrPtr = new HEL::HandoverInformationHeader(); - - for (SizeT indexVT = 0; indexVT < SystemTable->NumberOfTableEntries; - ++indexVT) { - volatile Char* vendorTable = reinterpret_cast<volatile Char*>( - SystemTable->ConfigurationTable[indexVT].VendorTable); - - if (vendorTable[0] == 'R' && vendorTable[1] == 'S' && - vendorTable[2] == 'D' && vendorTable[3] == ' ' && - vendorTable[4] == 'P' && vendorTable[5] == 'T' && - vendorTable[6] == 'R' && vendorTable[7] == ' ') { - handoverHdrPtr->f_HardwareTables.f_RsdPtr = (VoidPtr)vendorTable; - - break; - } - } - - handoverHdrPtr->f_Magic = kHandoverMagic; - handoverHdrPtr->f_Version = kHandoverVersion; - - BCopyMem(handoverHdrPtr->f_FirmwareVendorName, SystemTable->FirmwareVendor, - handoverHdrPtr->f_FirmwareVendorLen); - - handoverHdrPtr->f_GOP.f_The = kGop->Mode->FrameBufferBase; - handoverHdrPtr->f_GOP.f_Width = kGop->Mode->Info->VerticalResolution; - handoverHdrPtr->f_GOP.f_Height = kGop->Mode->Info->HorizontalResolution; - handoverHdrPtr->f_GOP.f_PixelPerLine = kGop->Mode->Info->PixelsPerScanLine; - handoverHdrPtr->f_GOP.f_PixelFormat = kGop->Mode->Info->PixelFormat; - handoverHdrPtr->f_GOP.f_Size = kGop->Mode->FrameBufferSize; - - ///! Finally draw bootloader screen. - - kHandoverHeader = handoverHdrPtr; - - ToolboxInitRsrc(); - - ToolboxDrawZone(RGB(9d, 9d, 9d), handoverHdrPtr->f_GOP.f_Height, - handoverHdrPtr->f_GOP.f_Width, 0, 0); - - ToolboxClearRsrc(); - - ToolboxDrawRsrc(NewBoot, NEWBOOT_HEIGHT, NEWBOOT_WIDTH, - (handoverHdrPtr->f_GOP.f_Width - NEWBOOT_WIDTH) / 2, - (handoverHdrPtr->f_GOP.f_Height - NEWBOOT_HEIGHT) / 2); - - ToolboxClearRsrc(); - - BS->GetMemoryMap(SizePtr, Descriptor, MapKey, SzDesc, RevDesc); - - handoverHdrPtr->f_PhysicalStart = (VoidPtr)Descriptor->PhysicalStart; - - handoverHdrPtr->f_FirmwareSpecific[HEL::kHandoverSpecificAttrib] = Descriptor->Attribute; - handoverHdrPtr->f_FirmwareSpecific[HEL::kHandoverSpecificKind] = Descriptor->Kind; - - handoverHdrPtr->f_VirtualStart = (VoidPtr)Descriptor->VirtualStart; - handoverHdrPtr->f_VirtualSize = Descriptor->NumberOfPages; /* # of pages */ - - handoverHdrPtr->f_FirmwareVendorLen = BStrLen(SystemTable->FirmwareVendor); - - BFileReader reader(L"SplashScreen.fmt", ImageHandle); - reader.ReadAll(512, 16); - - if (reader.Blob()) { - Char* buf = (Char*)reader.Blob(); - - for (SizeT i = 0; i < reader.Size(); ++i) { - if (buf[i] != '\n' && buf[i] != '\r') { - if (buf[i] == '*') { - writer.WriteCharacter('\t'); - } else { - writer.WriteCharacter(buf[i]); - } - } else - writer.Write(L"\r"); - } - } - - /// - /// The following checks for an exisiting partition - /// inside the disk, if it doesn't have one, - /// format the disk. - // - - BDiskFormatFactory<BootDeviceATA> diskFormatter; - - /// if not formated yet, then format it with the following folders: - /// /, /Boot, /Applications. - if (!diskFormatter.IsPartitionValid()) { - BDiskFormatFactory<BootDeviceATA>::BFileDescriptor rootDesc{0}; - - CopyMem(rootDesc.fFileName, kNewFSRoot, StrLen(kNewFSRoot)); - rootDesc.fKind = kNewFSCatalogKindDir; - - diskFormatter.Format(kMachineModel, &rootDesc, 1); - } - - EFI::ExitBootServices(*MapKey, ImageHandle); - - hal_init_platform(handoverHdrPtr); - - EFI::Stop(); - - CANT_REACH(); -} diff --git a/Private/NewBoot/Source/HEL/AMD64/BootPlatform.cxx b/Private/NewBoot/Source/HEL/AMD64/BootPlatform.cxx deleted file mode 100644 index fa735142..00000000 --- a/Private/NewBoot/Source/HEL/AMD64/BootPlatform.cxx +++ /dev/null @@ -1,61 +0,0 @@ -/* ------------------------------------------- - - Copyright Mahrouss Logic - -------------------------------------------- */ - -#include <BootKit/Platform.hxx> -#include <BootKit/Protocol.hxx> -#include <BootKit/BootKit.hxx> -#include "HALKit/AMD64/Processor.hpp" - -#ifdef __STANDALONE__ - -EXTERN_C void rt_hlt() { asm volatile("hlt"); } - -EXTERN_C void rt_cli() { asm volatile("cli"); } - -EXTERN_C void rt_sti() { asm volatile("sti"); } - -EXTERN_C void rt_cld() { asm volatile("cld"); } - -EXTERN_C void rt_std() { asm volatile("std"); } - -EXTERN_C void Out8(UInt16 port, UInt8 value) { - asm volatile("outb %%al, %1" : : "a"(value), "Nd"(port) : "memory"); -} - -EXTERN_C void Out16(UInt16 port, UInt16 value) { - asm volatile("outw %%ax, %1" : : "a"(value), "Nd"(port) : "memory"); -} - -EXTERN_C void Out32(UInt16 port, UInt32 value) { - asm volatile("outl %%eax, %1" : : "a"(value), "Nd"(port) : "memory"); -} - -EXTERN_C UInt8 In8(UInt16 port) { - UInt8 value; - asm volatile("inb %1, %%al" : "=a"(value) : "Nd"(port) : "memory"); - - return value; -} - -EXTERN_C UInt16 In16(UInt16 port) { - UInt16 value; - asm volatile("inw %%dx, %%ax" : "=a"(value) : "d"(port)); - - return value; -} - -EXTERN_C UInt32 In32(UInt16 port) { - UInt32 value; - asm volatile("inl %1, %%eax" : "=a"(value) : "Nd"(port) : "memory"); - - return value; -} - -#else - -void rt_hlt() { NewOS::HAL::rt_halt(); } - -#endif // 0 diff --git a/Private/NewBoot/Source/HEL/AMD64/BootString.cxx b/Private/NewBoot/Source/HEL/AMD64/BootString.cxx deleted file mode 100644 index ef0e4744..00000000 --- a/Private/NewBoot/Source/HEL/AMD64/BootString.cxx +++ /dev/null @@ -1,81 +0,0 @@ -/* ------------------------------------------- - - Copyright Mahrouss Logic - - File: String.cxx - Purpose: NewBoot string library - - Revision History: - - - -------------------------------------------- */ - -#include <BootKit/Platform.hxx> -#include <BootKit/Protocol.hxx> -#include <BootKit/BootKit.hxx> - -/// bugs 0 - -///////////////////////////////////////////////////////////////////////////////////////////////////////// - -NewOS::SizeT BCopyMem(CharacterTypeUTF16 *dest, CharacterTypeUTF16 *src, - const NewOS::SizeT len) { - if (!dest || !src) return 0; - - SizeT index = 0UL; - for (; index < len; ++index) { - dest[index] = src[index]; - } - - return index; -} - -NewOS::SizeT BStrLen(const CharacterTypeUTF16 *ptr) { - if (!ptr) return 0; - - NewOS::SizeT cnt = 0; - - while (*ptr != (CharacterTypeUTF16)0) { - ++ptr; - ++cnt; - } - - return cnt; -} - -NewOS::SizeT BSetMem(CharacterTypeUTF16 *src, const CharacterTypeUTF16 byte, - const NewOS::SizeT len) { - if (!src) return 0; - - NewOS::SizeT cnt = 0UL; - - while (*src != 0) { - if (cnt > len) break; - - *src = byte; - ++src; - - ++cnt; - } - - return cnt; -} - -NewOS::SizeT BSetMem(CharacterTypeUTF8 *src, const CharacterTypeUTF8 byte, - const NewOS::SizeT len) { - if (!src) return 0; - - NewOS::SizeT cnt = 0UL; - - while (*src != 0) { - if (cnt > len) break; - - *src = byte; - ++src; - - ++cnt; - } - - return cnt; -} diff --git a/Private/NewBoot/Source/HEL/AMD64/BootTextWriter.cxx b/Private/NewBoot/Source/HEL/AMD64/BootTextWriter.cxx deleted file mode 100644 index 13ef35c8..00000000 --- a/Private/NewBoot/Source/HEL/AMD64/BootTextWriter.cxx +++ /dev/null @@ -1,122 +0,0 @@ -/* ------------------------------------------- - - Copyright Mahrouss Logic - - File: String.cxx - Purpose: NewBoot string library - - Revision History: - - - -------------------------------------------- */ - -#include <FirmwareKit/EFI/API.hxx> -#include <BootKit/Platform.hxx> -#include <BootKit/Protocol.hxx> -#include <BootKit/BootKit.hxx> - -/// BUGS: 0 - -///////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** -@brief puts wrapper over EFI ConOut. -*/ -BTextWriter &BTextWriter::Write(const CharacterTypeUTF16 *str) { -#ifdef __DEBUG__ - if (!str || *str == 0) return *this; - - CharacterTypeUTF16 strTmp[2]; - strTmp[1] = 0; - - for (size_t i = 0; str[i] != 0; i++) { - if (str[i] == '\r') { - strTmp[0] = str[i]; - ST->ConOut->OutputString(ST->ConOut, strTmp); - - strTmp[0] = '\n'; - ST->ConOut->OutputString(ST->ConOut, strTmp); - } else { - strTmp[0] = str[i]; - ST->ConOut->OutputString(ST->ConOut, strTmp); - } - } -#endif // ifdef __DEBUG__ - - return *this; -} - -/// @brief UTF-8 equivalent of Write (UTF-16). -/// @param str the input string. -BTextWriter &BTextWriter::Write(const Char *str) { -#ifdef __DEBUG__ - if (!str || *str == 0) return *this; - - CharacterTypeUTF16 strTmp[2]; - strTmp[1] = 0; - - for (size_t i = 0; str[i] != 0; i++) { - if (str[i] == '\r') { - strTmp[0] = str[i]; - ST->ConOut->OutputString(ST->ConOut, strTmp); - - strTmp[0] = '\n'; - ST->ConOut->OutputString(ST->ConOut, strTmp); - } else { - strTmp[0] = str[i]; - ST->ConOut->OutputString(ST->ConOut, strTmp); - } - } -#endif // ifdef __DEBUG__ - - return *this; -} - -/** -@brief putc wrapper over EFI ConOut. -*/ -BTextWriter &BTextWriter::WriteCharacter(CharacterTypeUTF16 c) { -#ifdef __DEBUG__ - EfiCharType str[2]; - - str[0] = c; - str[1] = 0; - ST->ConOut->OutputString(ST->ConOut, str); -#endif // ifdef __DEBUG__ - - return *this; -} - -BTextWriter &BTextWriter::Write(const Long &x) { -#ifdef __DEBUG__ - this->Write(L"0x"); - this->_Write(x); - -#endif // ifdef __DEBUG__ - - return *this; -} - -BTextWriter &BTextWriter::_Write(const Long &x) { -#ifdef __DEBUG__ - UInt64 y = (x > 0 ? x : -x) / 16; - UInt64 h = (x > 0 ? x : -x) % 16; - - if (y) this->_Write(y); - - /* fail if the hex number is not base-16 */ - if (h > 15) { - this->WriteCharacter('?'); - return *this; - } - - if (y < 0) y = -y; - - const char NUMBERS[17] = "0123456789ABCDEF"; - - this->WriteCharacter(NUMBERS[h]); -#endif // ifdef __DEBUG__ - - return *this; -} diff --git a/Private/NewBoot/Source/HEL/AMD64/New+Delete.cxx b/Private/NewBoot/Source/HEL/AMD64/New+Delete.cxx deleted file mode 100644 index 8d811bd9..00000000 --- a/Private/NewBoot/Source/HEL/AMD64/New+Delete.cxx +++ /dev/null @@ -1,51 +0,0 @@ -/* ------------------------------------------- - - Copyright Mahrouss Logic - -------------------------------------------- */ - -#include <BootKit/Platform.hxx> -#include <BootKit/Protocol.hxx> -#include <BootKit/BootKit.hxx> -#include <cstddef> /* Since we're using GCC for this EFI program. */ - -#ifdef __STANDALONE__ - -/// @brief Allocates a new object. -/// @param sz the size. -/// @return -void* operator new(size_t sz) -{ - void* buf = nullptr; - BS->AllocatePool(EfiMemoryType::EfiLoaderData, sz, &buf); - - return buf; -} - -/// @brief Allocates a new object. -/// @param sz the size. -/// @return -void* operator new[](size_t sz) -{ - void* buf = nullptr; - BS->AllocatePool(EfiMemoryType::EfiLoaderData, sz, &buf); - - return buf; -} - -/// @brief Deletes the object. -/// @param buf the object. -void operator delete(void* buf) -{ - BS->FreePool(buf); -} - -/// @brief Deletes the object (array specific). -/// @param buf the object. -/// @param size it's size. -void operator delete(void* buf, size_t size) -{ - BS->FreePool(buf); -} - -#endif // Inactive diff --git a/Private/NewBoot/Source/HEL/AMD64/Support.cxx b/Private/NewBoot/Source/HEL/AMD64/Support.cxx deleted file mode 100644 index 3a6974bb..00000000 --- a/Private/NewBoot/Source/HEL/AMD64/Support.cxx +++ /dev/null @@ -1,55 +0,0 @@ -/* ------------------------------------------- - - Copyright Mahrouss Logic - -------------------------------------------- */ - -#include <FirmwareKit/EFI/EFI.hxx> -#include <FirmwareKit/Handover.hxx> -#include <BootKit/Vendor/Support.hxx> - -#ifdef __STANDALONE__ - -/// @brief memset definition in C++. -/// @param dst destination pointer. -/// @param byte value to fill in. -/// @param len length of of src. -EXTERN_C VoidPtr memset(void *dst, int byte, - long long unsigned int len) { - for (size_t i = 0UL; i < len; ++i) { - ((int*)dst)[i] = byte; - } - - return dst; -} - -/// @brief memcpy definition in C++. -/// @param dst destination pointer. -/// @param src source pointer. -/// @param len length of of src. -EXTERN_C VoidPtr memcpy(void *dst, const void *src, - long long unsigned int len) { - for (size_t i = 0UL; i < len; ++i){ - ((int*)dst)[i] = ((int*)src)[i]; - } - - return dst; -} - -/// @brief strlen definition in C++. -EXTERN_C size_t strlen(const char *whatToCheck) { - if (!whatToCheck || *whatToCheck == 0) return 0; - - SizeT len = 0; - - while (whatToCheck[len] != 0) { - ++len; - } - - return len; -} - -/// @brief somthing specific to the microsoft ABI, regarding checking the stack. -EXTERN_C void ___chkstk_ms(void) {} - -#endif diff --git a/Private/NewBoot/Source/HEL/AMD64/compile_flags.txt b/Private/NewBoot/Source/HEL/AMD64/compile_flags.txt deleted file mode 100644 index e4515efe..00000000 --- a/Private/NewBoot/Source/HEL/AMD64/compile_flags.txt +++ /dev/null @@ -1,3 +0,0 @@ --std=c++20 --I../../../ --I../../../../ diff --git a/Private/NewBoot/Source/HEL/ARM64/.gitkeep b/Private/NewBoot/Source/HEL/ARM64/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/Private/NewBoot/Source/HEL/ARM64/.gitkeep +++ /dev/null diff --git a/Private/NewBoot/Source/HEL/POWER/.gitkeep b/Private/NewBoot/Source/HEL/POWER/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/Private/NewBoot/Source/HEL/POWER/.gitkeep +++ /dev/null diff --git a/Private/NewBoot/Source/HEL/POWER/CoreBootStartup.S b/Private/NewBoot/Source/HEL/POWER/CoreBootStartup.S deleted file mode 100644 index 41fc6ae2..00000000 --- a/Private/NewBoot/Source/HEL/POWER/CoreBootStartup.S +++ /dev/null @@ -1,34 +0,0 @@ -/* ------------------------------------------- - - Copyright Mahrouss Logic - -------------------------------------------- */ - -.section .boot_hdr -.align 4 - -/* NewBoot boot header begin */ - -boot_hdr_mag: - .ascii "CB" -boot_hdr_name: - // it has to match ten bytes. - .asciz "NewBoot\0\0\0" -boot_hdr_ver: - .word 0x104 -boot_hdr_proc: - .long bootloader_start - -/* NewOS boot header end */ - -.extern bootloader_main -.extern bootloader_stack - -.globl bootloader_start -bootloader_start: - mflr 4 /* real address of .Laddr */ - lwz 0,(bootloader_stack-bootloader_start)(4) /* stack address location */ - mr 1,0 /* use user defined stack */ - - bl bootloader_main - blr diff --git a/Private/NewBoot/Source/HEL/RISCV/.gitkeep b/Private/NewBoot/Source/HEL/RISCV/.gitkeep deleted file mode 100644 index e69de29b..00000000 --- a/Private/NewBoot/Source/HEL/RISCV/.gitkeep +++ /dev/null diff --git a/Private/NewBoot/Source/HEL/RISCV/BootRISCV.S b/Private/NewBoot/Source/HEL/RISCV/BootRISCV.S deleted file mode 100644 index 87b87bab..00000000 --- a/Private/NewBoot/Source/HEL/RISCV/BootRISCV.S +++ /dev/null @@ -1,22 +0,0 @@ -/* ------------------------------------------- - - Copyright Mahrouss Logic - -------------------------------------------- */ - -.section .init -.align 4 - -/* NewOS kernel header begin */ - -k_hdr_mag: - .ascii "LX" -k_hdr_name: - // it has to match ten bytes. - .asciz "New OS\0\0\0\0" -k_hdr_ver: - .word 0x104 -k_hdr_proc: - .long __bootloader_start - -/* end */
\ No newline at end of file diff --git a/Private/NewBoot/Source/compile_flags.txt b/Private/NewBoot/Source/compile_flags.txt deleted file mode 100644 index c74d22b2..00000000 --- a/Private/NewBoot/Source/compile_flags.txt +++ /dev/null @@ -1,4 +0,0 @@ --std=c++20 --I../ --I../../ --D__NEWOS_AMD64__ diff --git a/Private/NewBoot/Source/makefile b/Private/NewBoot/Source/makefile deleted file mode 100644 index 4c47d1f5..00000000 --- a/Private/NewBoot/Source/makefile +++ /dev/null @@ -1,102 +0,0 @@ -################################################## -# (C) Mahrouss Logic, all rights reserved. -# This is the bootloader makefile. -################################################## - -CC_GNU=x86_64-w64-mingw32-g++ -LD_GNU=x86_64-w64-mingw32-ld - -WINDRES=x86_64-w64-mingw32-windres - -ADD_FILE=touch -COPY=cp -HTTP_GET=wget - -ifeq ($(shell uname), Windows_NT) -EMU=qemu-system-x86_64w -else -EMU=qemu-system-x86_64 -endif - -ifeq ($(NEWS_MODEL), ) -NEWOS_MODEL=-DkMachineModel="\"Generic NeWS HD\"" -endif - -IMG=epm.img -IMG_2=epm-slave.img -EMU_FLAGS=-net none -smp 4 -m 8G -M q35 -bios OVMF.fd -device piix3-ide,id=ide -drive id=disk,file=$(IMG),format=raw,if=none -device ide-hd,drive=disk,bus=ide.0 -drive file=fat:rw:CDROM,index=2,format=raw -d int -hdd epm-slave.img - -LD_FLAGS=-e Main --subsystem=10 - -ifeq ($(NEWS_STANDLONE), ) -OBJ=*.o ../../Objects/*.obj -else -RESCMD=$(WINDRES) BootloaderRsrc.rsrc -O coff -o BootloaderRsrc.o -STANDALONE_MACRO=-D__STANDALONE__ -OBJ=*.o -endif - -REM=rm -REM_FLAG=-f - -FLAG_ASM=-f win64 -FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mno-red-zone -D__KERNEL__ -D__NEWBOOT__ -DEFI_FUNCTION_WRAPPER -I../ -I../../ -I./ -c -nostdlib -fno-rtti -fno-exceptions -std=c++20 -D__HAVE_MAHROUSS_APIS__ -D__MAHROUSS__ -D__BOOTLOADER__ -I./ - -.PHONY: invalid-recipe -invalid-recipe: - @echo "invalid-recipe: Use make bootloader-<arch> instead." - -KERNEL_OBJ=boot.bin -DD=dd -IMG_CREATE=qemu-img -MAX_KERNEL_SIZE=1024K -BOOT_LOADER=NewBoot.exe -KERNEL=NewKernel.exe - -.PHONY: all -all: compile-amd64 - mkdir -p CDROM/EFI/BOOT - $(LD_GNU) $(OBJ) $(LD_FLAGS) -o $(BOOT_LOADER) - $(COPY) $(BOOT_LOADER) CDROM/EFI/BOOT/BOOTX64.EFI - $(COPY) $(BOOT_LOADER) CDROM/EFI/BOOT/NEWBOOT.EFI - -ifneq ($(DEBUG_SUPPORT), ) -DEBUG = -D__DEBUG__ -endif - -.PHONY: compile-amd64 -compile-amd64: - $(RESCMD) - $(CC_GNU) $(NEWOS_MODEL) $(STANDALONE_MACRO) $(FLAG_GNU) $(DEBUG) $(wildcard HEL/AMD64/*.cxx) $(wildcard HEL/AMD64/*.S) $(wildcard *.cxx) - -.PHONY: run-efi-amd64 -run-efi-amd64: - $(EMU) $(EMU_FLAGS) - -# img_2 is the rescue disk. img is the bootable disk, as provided by the NeWS. -.PHONY: epm-img -epm-img: - qemu-img create -f raw $(IMG) 20G - qemu-img create -f raw $(IMG_2) 512M - -.PHONY: download-edk -download-edk: - $(HTTP_GET) https://retrage.github.io/edk2-nightly/bin/DEBUGX64_OVMF.fd -O OVMF.fd - -BINS=*.bin -EXECUTABLES=NewBoot.exe NewKernel.exe OVMF.fd - -TARGETS=$(REM_FLAG) $(OBJ) $(BIN) $(IMG) $(IMG_2) $(EXECUTABLES) - -.PHONY: clean -clean: - $(REM) $(TARGETS) - -.PHONY: help -help: - @echo "=== HELP ===" - @echo "epm-img: Format a disk using the Explicit Partition Map." - @echo "gpt-img: Format a disk using the Explicit Partition Map." - @echo "clean: clean bootloader." - @echo "bootloader-amd64: Build bootloader. (PC AMD64)" - @echo "run-efi-amd64: Run bootloader. (PC AMD64)" diff --git a/Private/NewBoot/Source/ovmf.ps1 b/Private/NewBoot/Source/ovmf.ps1 deleted file mode 100644 index 5a2c5f0e..00000000 --- a/Private/NewBoot/Source/ovmf.ps1 +++ /dev/null @@ -1,4 +0,0 @@ -$client = new-object System.Net.WebClient -$output = "$PSScriptRoot\OVMF.fd" - -$client.DownloadFile("https://retrage.github.io/edk2-nightly/bin/DEBUGX64_OVMF.fd", $output) |
