summaryrefslogtreecommitdiffhomepage
path: root/Private/NewBoot
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-26 12:16:25 +0100
committerAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-26 12:16:25 +0100
commitbdcc3d84e08a509a766a469a605a97419ec14c35 (patch)
tree1b3a365581b37a7f0246629be6256f521daeae4e /Private/NewBoot
parent91c88797f7fa9dbb6cce12c14928a6fbd97d51b6 (diff)
Kernel/Bootloader: add CompilerKit/Version.hxx
- Rework BTextWriter class. - Add BVersionString class. - Worked on interrupts almost working! Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private/NewBoot')
-rw-r--r--Private/NewBoot/BootKit/BootKit.hxx11
-rw-r--r--Private/NewBoot/Source/BootMain.cxx26
-rw-r--r--Private/NewBoot/Source/FileReader.cxx15
-rw-r--r--Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx16
-rw-r--r--Private/NewBoot/Source/TextWriter.cxx6
-rw-r--r--Private/NewBoot/Source/makefile2
6 files changed, 36 insertions, 40 deletions
diff --git a/Private/NewBoot/BootKit/BootKit.hxx b/Private/NewBoot/BootKit/BootKit.hxx
index 81624ce5..e9b52bf2 100644
--- a/Private/NewBoot/BootKit/BootKit.hxx
+++ b/Private/NewBoot/BootKit/BootKit.hxx
@@ -17,8 +17,10 @@
class BTextWriter;
class BFileReader;
class BFileRunner;
+class BVersionString;
#include <BootKit/Arch/ATA.hxx>
+#include <CompilerKit/Version.hxx>
#include <FirmwareKit/EFI.hxx>
#include <NewKit/Defines.hpp>
@@ -41,8 +43,8 @@ typedef WideChar CharacterType;
*/
class BTextWriter final {
public:
- BTextWriter &WriteString(const Long &num);
- BTextWriter &WriteString(const CharacterType *str);
+ BTextWriter &Write(const Long &num);
+ BTextWriter &Write(const CharacterType *str);
BTextWriter &WriteCharacter(CharacterType c);
public:
@@ -187,3 +189,8 @@ inline Void InitQT() noexcept {
kStride = 4;
}
+
+class BVersionString final {
+ public:
+ static const CharacterType *Shared() { return BOOTLOADER_VERSION; }
+};
diff --git a/Private/NewBoot/Source/BootMain.cxx b/Private/NewBoot/Source/BootMain.cxx
index 62639b18..170a7215 100644
--- a/Private/NewBoot/Source/BootMain.cxx
+++ b/Private/NewBoot/Source/BootMain.cxx
@@ -33,27 +33,19 @@ EFI_EXTERN_C EFI_API Int EfiMain(EfiHandlePtr ImageHandle,
BTextWriter writer;
- writer.WriteString(L"HCoreLdr: ");
+ writer.Write(L"HCoreLdr: ");
-#ifndef __DEBUG__
-
- writer.WriteString(L"Version 1.12 (Release Channel)\r\n");
-
-#else
-
- writer.WriteString(L"Version 1.12 (Insiders Channel)\r\n");
-
-#endif
+ writer.Write(BVersionString::Shared()).Write(L"\r\n");
const char strDate[] = __DATE__;
- writer.WriteString(L"HCoreLdr: Build: ");
+ writer.Write(L"HCoreLdr: Build: ");
for (auto& ch : strDate) writer.WriteCharacter(ch);
- writer.WriteString(L"\r\nHCoreLdr: Firmware Vendor: ")
- .WriteString(SystemTable->FirmwareVendor)
- .WriteString(L"\r\n");
+ writer.Write(L"\r\nHCoreLdr: Firmware Vendor: ")
+ .Write(SystemTable->FirmwareVendor)
+ .Write(L"\r\n");
BFileReader img(L"HCOREKRNL.DLL", ImageHandle);
@@ -160,13 +152,13 @@ EFI_EXTERN_C EFI_API Int EfiMain(EfiHandlePtr ImageHandle,
return kEfiOk;
} else {
- writer.WriteString(L"HCoreLdr: Error-Code: HLDR-0001\r\n");
+ writer.Write(L"HCoreLdr: Error-Code: HLDR-0001\r\n");
}
} else {
- writer.WriteString(L"HCoreLdr: Error-Code: HLDR-0002\r\n");
+ writer.Write(L"HCoreLdr: Error-Code: HLDR-0002\r\n");
}
} else {
- writer.WriteString(L"HCoreLdr: Error-Code: HLDR-0003\r\n");
+ writer.Write(L"HCoreLdr: Error-Code: HLDR-0003\r\n");
}
EFI::Stop();
diff --git a/Private/NewBoot/Source/FileReader.cxx b/Private/NewBoot/Source/FileReader.cxx
index 16197164..92b35eff 100644
--- a/Private/NewBoot/Source/FileReader.cxx
+++ b/Private/NewBoot/Source/FileReader.cxx
@@ -50,14 +50,12 @@ BFileReader::BFileReader(const CharacterType* path, EfiHandlePtr ImageHandle) {
EfiGUID guidImg = EfiGUID(EFI_LOADED_IMAGE_PROTOCOL_GUID);
if (BS->HandleProtocol(ImageHandle, &guidImg, (void**)&img) != kEfiOk) {
- mWriter.WriteString(L"HCoreLdr: Fetch-Protocol: No-Such-Protocol")
- .WriteString(L"\r\n");
+ mWriter.Write(L"HCoreLdr: Fetch-Protocol: No-Such-Protocol").Write(L"\r\n");
this->mErrorCode = kNotSupported;
}
if (BS->HandleProtocol(img->DeviceHandle, &guidEfp, (void**)&efp) != kEfiOk) {
- mWriter.WriteString(L"HCoreLdr: Fetch-Protocol: No-Such-Protocol")
- .WriteString(L"\r\n");
+ mWriter.Write(L"HCoreLdr: Fetch-Protocol: No-Such-Protocol").Write(L"\r\n");
this->mErrorCode = kNotSupported;
return;
}
@@ -65,8 +63,7 @@ BFileReader::BFileReader(const CharacterType* path, EfiHandlePtr ImageHandle) {
/// Start doing disk I/O
if (efp->OpenVolume(efp, &rootFs) != kEfiOk) {
- mWriter.WriteString(L"HCoreLdr: Fetch-Protocol: No-Such-Volume")
- .WriteString(L"\r\n");
+ mWriter.Write(L"HCoreLdr: Fetch-Protocol: No-Such-Volume").Write(L"\r\n");
this->mErrorCode = kNotSupported;
return;
}
@@ -75,9 +72,9 @@ BFileReader::BFileReader(const CharacterType* path, EfiHandlePtr ImageHandle) {
if (rootFs->Open(rootFs, &kernelFile, mPath, kEFIFileRead, kEFIReadOnly) !=
kEfiOk) {
- mWriter.WriteString(L"HCoreLdr: Fetch-Protocol: No-Such-Path: ")
- .WriteString(mPath)
- .WriteString(L"\r\n");
+ mWriter.Write(L"HCoreLdr: Fetch-Protocol: No-Such-Path: ")
+ .Write(mPath)
+ .Write(L"\r\n");
this->mErrorCode = kNotSupported;
return;
}
diff --git a/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx b/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx
index 0adf7707..13ee3dbf 100644
--- a/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx
+++ b/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx
@@ -72,7 +72,7 @@ ATAInit_Retry:
auto statRdy = In8(IO + ATA_REG_STATUS);
if (statRdy & ATA_SR_ERR) {
- writer.WriteString(
+ writer.Write(
L"HCoreLdr: ATA: Select error, not an IDE based hard-drive.\r\n");
return false;
@@ -91,14 +91,14 @@ ATAInit_Retry:
kATAData[indexData] = In16(IO + ATA_REG_DATA);
}
- writer.WriteString(L"HCoreLdr: Model: ");
+ writer.Write(L"HCoreLdr: Model: ");
for (SizeT indexData = 0; indexData < kATADataLen; indexData += 1) {
writer.WriteCharacter(kATAData[indexData + ATA_IDENT_MODEL + 1])
.WriteCharacter(kATAData[indexData + ATA_IDENT_MODEL]);
}
- writer.WriteString(L"\r\n");
+ writer.Write(L"\r\n");
OutBus = (Bus == ATA_PRIMARY) ? BDeviceATA::kPrimary : BDeviceATA::kSecondary;
OutMaster = (Bus == ATA_PRIMARY) ? ATA_MASTER : ATA_SLAVE;
@@ -115,21 +115,21 @@ ATAInit_Retry:
/* differentiate ATA, ATAPI, SATA and SATAPI */
if (cl == 0x14 && ch == 0xEB) {
- writer.WriteString(L"HCoreLdr: PATAPI drive detected.\r\n");
+ writer.Write(L"HCoreLdr: PATAPI drive detected.\r\n");
kATADeviceType = kATADevicePATA_PI;
}
if (cl == 0x69 && ch == 0x96) {
- writer.WriteString(L"HCoreLdr: SATAPI drive detected.\r\n");
+ writer.Write(L"HCoreLdr: SATAPI drive detected.\r\n");
kATADeviceType = kATADeviceSATA_PI;
}
if (cl == 0 && ch == 0) {
- writer.WriteString(L"HCoreLdr: PATA drive detected.\r\n");
+ writer.Write(L"HCoreLdr: PATA drive detected.\r\n");
kATADeviceType = kATADevicePATA;
}
if (cl == 0x3c && ch == 0xc3) {
- writer.WriteString(L"HCoreLdr: SATA drive detected.\r\n");
+ writer.Write(L"HCoreLdr: SATA drive detected.\r\n");
kATADeviceType = kATADeviceSATA;
}
@@ -207,7 +207,7 @@ BDeviceATA::BDeviceATA() noexcept {
kATADetected = true;
BTextWriter writer;
- writer.WriteString(L"HCoreLdr: Driver: OnLine.\r\n");
+ writer.Write(L"HCoreLdr: Driver: OnLine.\r\n");
}
}
diff --git a/Private/NewBoot/Source/TextWriter.cxx b/Private/NewBoot/Source/TextWriter.cxx
index 1191c288..127b2293 100644
--- a/Private/NewBoot/Source/TextWriter.cxx
+++ b/Private/NewBoot/Source/TextWriter.cxx
@@ -20,7 +20,7 @@
/**
@brief puts wrapper over EFI ConOut.
*/
-BTextWriter &BTextWriter::WriteString(const CharacterType *str) {
+BTextWriter &BTextWriter::Write(const CharacterType *str) {
if (*str == 0 || !str) return *this;
ST->ConOut->OutputString(ST->ConOut, str);
@@ -40,11 +40,11 @@ BTextWriter &BTextWriter::WriteCharacter(CharacterType c) {
return *this;
}
-BTextWriter &BTextWriter::WriteString(const Long &x) {
+BTextWriter &BTextWriter::Write(const Long &x) {
int y = x / 16;
int h = x % 16;
- if (y) this->WriteString(y);
+ if (y) this->Write(y);
/* fail if the hex number is not base-16 */
if (h > 15) {
diff --git a/Private/NewBoot/Source/makefile b/Private/NewBoot/Source/makefile
index 30213e07..28efe7e5 100644
--- a/Private/NewBoot/Source/makefile
+++ b/Private/NewBoot/Source/makefile
@@ -27,7 +27,7 @@ bootloader-amd64:
.PHONY: run-efi-amd64
run-efi-amd64:
- qemu-system-x86_64 -net none -smp 2 -m 4G -M q35 -bios OVMF.fd -drive file=fat:rw:CDROM,index=1,format=raw -serial stdio
+ qemu-system-x86_64 -net none -smp 2 -m 4G -M q35 -bios OVMF.fd -drive file=fat:rw:CDROM,index=1,format=raw -d int
.PHONY: download-edk
download-edk: