summaryrefslogtreecommitdiffhomepage
path: root/Private/NewBoot
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-04-18 23:10:15 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-04-18 23:10:15 +0200
commit0ae4062bfe9936cc9fd2c7bb924442480b067d93 (patch)
tree491b3cfc9c751557c37213ff437e56f66d100a4d /Private/NewBoot
parent706c58b9b9fa74c63180f490a1f48652d0408944 (diff)
MHR-5: initial commit.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'Private/NewBoot')
-rw-r--r--Private/NewBoot/BootKit/BootKit.hxx11
-rw-r--r--Private/NewBoot/BootKit/Rsrc/Driver.rsrc70
-rw-r--r--Private/NewBoot/Source/HEL/AMD64/BootEPM.cxx119
-rw-r--r--Private/NewBoot/Source/HEL/AMD64/BootMain.cxx119
-rw-r--r--Private/NewBoot/Source/HEL/PowerPC/BootEPM.cxx10
-rw-r--r--Private/NewBoot/Source/HEL/PowerPC/BootPowerPC.S14
6 files changed, 141 insertions, 202 deletions
diff --git a/Private/NewBoot/BootKit/BootKit.hxx b/Private/NewBoot/BootKit/BootKit.hxx
index 1fbd0aef..be16c2c5 100644
--- a/Private/NewBoot/BootKit/BootKit.hxx
+++ b/Private/NewBoot/BootKit/BootKit.hxx
@@ -18,9 +18,12 @@ class BVersionString;
#include <BootKit/HW/ATA.hxx>
#include <CompilerKit/Version.hxx>
+
#ifdef __EFI_x86_64__
+#define kBootVirtualAddress (0xffffff80000000)
#include <FirmwareKit/EFI.hxx>
#endif // ifdef __EFI_x86_64__
+
#include <FirmwareKit/EPM.hxx>
#include <NewKit/Defines.hpp>
@@ -68,8 +71,10 @@ NewOS::SizeT BSetMem(CharacterTypeUTF8 *src, const CharacterTypeUTF8 byte,
/// String length functions.
+/// @brief get string length.
NewOS::SizeT BStrLen(const CharacterTypeUTF16 *ptr);
+/// @brief set memory with custom value.
NewOS::SizeT BSetMem(CharacterTypeUTF16 *src, const CharacterTypeUTF16 byte,
const NewOS::SizeT len);
@@ -169,7 +174,7 @@ inline UInt32 In32(UInt16 port) {
/***
* Common processor instructions.
-*/
+ */
EXTERN_C void rt_hlt();
EXTERN_C void rt_cli();
@@ -221,8 +226,10 @@ class BVersionString final {
/// @param namePart the partition's name
/// @param namePartLength the partition name's length
/// @param bootDev the disk interface.
-/// @return
+/// @return
EXTERN_C Boolean boot_write_epm_partition(const Char *namePart,
SizeT namePartLength,
BootDevice *bootDev);
+/// @brief Bootloader main type.
+typedef void (*BootMainKind)(HEL::HandoverInformationHeader* handoverInfo);
diff --git a/Private/NewBoot/BootKit/Rsrc/Driver.rsrc b/Private/NewBoot/BootKit/Rsrc/Driver.rsrc
new file mode 100644
index 00000000..c9fdc812
--- /dev/null
+++ b/Private/NewBoot/BootKit/Rsrc/Driver.rsrc
@@ -0,0 +1,70 @@
+#define DRIVER_LOGO_HEIGHT 64
+#define DRIVER_LOGO_WIDTH 64
+
+// array size is 12288
+static const unsigned int driver_logo[] = {
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x242424, 0x3b3b3b, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x404040, 0x3e3e3e, 0x393939, 0x333333, 0x202020, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x3b3b3b, 0x999999, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xb9b9b9, 0xacacac, 0x848484, 0x333333, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xfbfbfb, 0xf2f2f2, 0xeeeeee, 0xeeeeee, 0xeeeeee, 0xeeeeee, 0xf0f0f0, 0xf4f4f4, 0xf6f6f6, 0xf6f6f6, 0xf6f6f6, 0xf6f6f6, 0xf6f6f6, 0xf6f6f6, 0xf4f4f4, 0xf0f0f0, 0xeeeeee, 0xeeeeee, 0xeeeeee, 0xeeeeee, 0xeeeeee, 0xeeeeee, 0xf0f0f0, 0xf4f4f4, 0xf6f6f6, 0xf6f6f6, 0xf6f6f6, 0xf6f6f6, 0xf6f6f6, 0xf6f6f6, 0xf4f4f4, 0xf0f0f0, 0xeeeeee, 0xeeeeee, 0xeeeeee, 0xeeeeee, 0xeeeeee, 0xeeeeee, 0xf0f0f0, 0xf4f4f4, 0xf6f6f6, 0xf6f6f6, 0xf6f6f6, 0xf6f6f6, 0xf6f6f6, 0xf6f6f6, 0xf4f4f4, 0xf0f0f0, 0xeeeeee, 0xeeeeee, 0xe4e4e4, 0xd1d1d1, 0x969696, 0x323232, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xf2f2f2, 0xd9d9d9, 0xcccccc, 0xcccccc, 0xcccccc, 0xcccccc, 0xd2d2d2, 0xdfdfdf, 0xe5e5e5, 0xe5e5e5, 0xe5e5e5, 0xe5e5e5, 0xe5e5e5, 0xe5e5e5, 0xdfdfdf, 0xd2d2d2, 0xcccccc, 0xcccccc, 0xcccccc, 0xcccccc, 0xcccccc, 0xcccccc, 0xd2d2d2, 0xdfdfdf, 0xe5e5e5, 0xe5e5e5, 0xe5e5e5, 0xe5e5e5, 0xe5e5e5, 0xe5e5e5, 0xdfdfdf, 0xd2d2d2, 0xcccccc, 0xcccccc, 0xcccccc, 0xcccccc, 0xcccccc, 0xcccccc, 0xd2d2d2, 0xdfdfdf, 0xe5e5e5, 0xe5e5e5, 0xe5e5e5, 0xe5e5e5, 0xe5e5e5, 0xe5e5e5, 0xdfdfdf, 0xd2d2d2, 0xcccccc, 0xcccccc, 0xc0c0c0, 0xa9a9a9, 0x767676, 0x272727, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xeeeeee, 0xcccccc, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xeeeeee, 0xcccccc, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xeeeeee, 0xcccccc, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xeeeeee, 0xcccccc, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xf0f0f0, 0xd2d2d2, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xb5b5b5, 0x979797, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xf4f4f4, 0xdfdfdf, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xc1c1c1, 0x9b9b9b, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xf6f6f6, 0xe5e5e5, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xc8c8c8, 0x9d9d9d, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xf6f6f6, 0xe5e5e5, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xc8c8c8, 0x9d9d9d, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xf6f6f6, 0xe5e5e5, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xc8c8c8, 0x9d9d9d, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xf6f6f6, 0xe5e5e5, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xc8c8c8, 0x9d9d9d, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xf1f1f1, 0xd6d6d6, 0xcbcbcb, 0xd1d1d1, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xc8c8c8, 0x9d9d9d, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xe7e7e7, 0xb6b6b6, 0xa7a7a7, 0xbababa, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xc8c8c8, 0x9d9d9d, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xd9d9d9, 0x8c8c8c, 0x787878, 0x9c9c9c, 0xb1b1b1, 0xb8b8b8, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xc1c1c1, 0x9b9b9b, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xc8c8c8, 0x595959, 0x3f3f3f, 0x787878, 0x9e9e9e, 0xb1b1b1, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xb5b5b5, 0x979797, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x303030, 0x8f8f8f, 0x999999, 0x3b3b3b, 0x202020, 0x525252, 0x808080, 0xb2b2b2, 0xcacaca, 0xc6c6c6, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x000000, 0x000000, 0x242424, 0x3b3b3b, 0x3b3b3b, 0x242424, 0x000000,
+ 0x000000, 0x101010, 0x303030, 0x3b3b3b, 0x242424, 0x141414, 0x202020, 0x555555, 0xbbbbbb, 0xe8e8e8, 0xdbdbdb, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x000000, 0x000000, 0x3b3b3b, 0x999999, 0x999999, 0x3b3b3b, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xf6f6f6, 0xe5e5e5, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x101010, 0x303030, 0x686868, 0xb9b9b9, 0xa9a9a9, 0x383838, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xf6f6f6, 0xe5e5e5, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x303030, 0x8f8f8f, 0xb9b9b9, 0xacacac, 0x7c7c7c, 0x292929, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xf6f6f6, 0xe5e5e5, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xb4b4b4, 0xa5a5a5, 0x848484, 0x515151, 0x676767, 0xc7c7c7, 0xdbdbdb, 0xa4a4a4, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xf6f6f6, 0xe5e5e5, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbebebe, 0xc5c5c5, 0xbfbfbf, 0xaeaeae, 0xb6b6b6, 0xd6d6d6, 0xcecece, 0x9f9f9f, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xf6f6f6, 0xe5e5e5, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xc8c8c8, 0x9d9d9d, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xf6f6f6, 0xe5e5e5, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xc8c8c8, 0x9d9d9d, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xf4f4f4, 0xdfdfdf, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xc1c1c1, 0x9b9b9b, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xf0f0f0, 0xd2d2d2, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xb5b5b5, 0x979797, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xeeeeee, 0xcccccc, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xeeeeee, 0xcccccc, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xeeeeee, 0xcccccc, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xeeeeee, 0xcccccc, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xeeeeee, 0xcccccc, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xeeeeee, 0xcccccc, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xf0f0f0, 0xd2d2d2, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xb5b5b5, 0x979797, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xf4f4f4, 0xdfdfdf, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xc1c1c1, 0x9b9b9b, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xf6f6f6, 0xe5e5e5, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xb8b8b8, 0xb1b1b1, 0xbababa, 0xd1d1d1, 0xc8c8c8, 0x9d9d9d, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xf6f6f6, 0xe5e5e5, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xb1b1b1, 0x9e9e9e, 0xa7a7a7, 0xcbcbcb, 0xc8c8c8, 0x9d9d9d, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xf6f6f6, 0xe5e5e5, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xb8b8b8, 0xb1b1b1, 0x9c9c9c, 0x787878, 0x7e7e7e, 0xafafaf, 0xb8b8b8, 0x989898, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xf6f6f6, 0xe5e5e5, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xb1b1b1, 0x9e9e9e, 0x787878, 0x3f3f3f, 0x414141, 0x7e7e7e, 0x989898, 0x8d8d8d, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xf6f6f6, 0xe5e5e5, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xb5b5b5, 0x979797, 0x666666, 0x222222, 0x1a1a1a, 0x4d4d4d, 0x6f6f6f, 0x808080, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x404040, 0xbfbfbf, 0xf6f6f6, 0xe5e5e5, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xc1c1c1, 0x9b9b9b, 0x666666, 0x222222, 0x090909, 0x1a1a1a, 0x3c3c3c, 0x6f6f6f, 0x666666, 0x222222, 0x000000,
+ 0x000000, 0x101010, 0x303030, 0x3b3b3b, 0x242424, 0x242424, 0x3b3b3b, 0x707070, 0xcfcfcf, 0xf4f4f4, 0xdfdfdf, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xc8c8c8, 0x9d9d9d, 0x666666, 0x222222, 0x000000, 0x000000, 0x202020, 0x525252, 0x525252, 0x202020, 0x000000,
+ 0x000000, 0x303030, 0x8f8f8f, 0x999999, 0x3b3b3b, 0x3b3b3b, 0x999999, 0xcfcfcf, 0xefefef, 0xf0f0f0, 0xd2d2d2, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xc8c8c8, 0x9d9d9d, 0x666666, 0x222222, 0x000000, 0x000000, 0x141414, 0x202020, 0x202020, 0x141414, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xcfcfcf, 0x707070, 0x707070, 0xcfcfcf, 0xfdfdfd, 0xf9f9f9, 0xe8e8e8, 0xcacaca, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xc8c8c8, 0x9d9d9d, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xefefef, 0xcfcfcf, 0xcfcfcf, 0xefefef, 0xf9f9f9, 0xececec, 0xdbdbdb, 0xc6c6c6, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xc8c8c8, 0x9d9d9d, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xfdfdfd, 0xf9f9f9, 0xf4f4f4, 0xf0f0f0, 0xe8e8e8, 0xdbdbdb, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xc8c8c8, 0x9d9d9d, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xf9f9f9, 0xececec, 0xdfdfdf, 0xd2d2d2, 0xcacaca, 0xc6c6c6, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xc8c8c8, 0x9d9d9d, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xf4f4f4, 0xdfdfdf, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xc1c1c1, 0x9b9b9b, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xf0f0f0, 0xd2d2d2, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xb5b5b5, 0x979797, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xeeeeee, 0xcccccc, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xeeeeee, 0xcccccc, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xeeeeee, 0xcccccc, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x101010, 0x575757, 0xcbcbcb, 0xcbcbcb, 0xcacaca, 0xcfcfcf, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xeeeeee, 0xcccccc, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x292929, 0x8e8e8e, 0xcccccc, 0xcccccc, 0xcdcdcd, 0xcacaca, 0x000000,
+ 0x000000, 0x404040, 0xbfbfbf, 0xeeeeee, 0xcccccc, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x313131, 0x939393, 0xc6c6c6, 0xcacaca, 0xcccccc, 0xcbcbcb, 0xcbcbcb,
+ 0x000000, 0x404040, 0xbfbfbf, 0xeeeeee, 0xcccccc, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xaeaeae, 0x959595, 0x666666, 0x222222, 0x2d2d2d, 0x868686, 0xb9b9b9, 0xc6c6c6, 0xcccccc, 0xcccccc, 0xcccccc,
+ 0x000000, 0x404040, 0xbfbfbf, 0xf0f0f0, 0xd2d2d2, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xcacaca, 0xd7d7d7, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xdbdbdb, 0xd7d7d7, 0xcecece, 0xc1c1c1, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbdbdbd, 0xc1c1c1, 0xb5b5b5, 0x979797, 0x666666, 0x222222, 0x282828, 0x797979, 0xaaaaaa, 0xbbbbbb, 0xc6c6c6, 0xcacaca, 0xcccccc,
+ 0x000000, 0x404040, 0xbfbfbf, 0xf4f4f4, 0xdfdfdf, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xd7d7d7, 0xdbdbdb, 0xdddddd, 0xdddddd, 0xdddddd, 0xdddddd, 0xd7d7d7, 0xcacaca, 0xc1c1c1, 0xbdbdbd, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xbbbbbb, 0xc1c1c1, 0xcecece, 0xc1c1c1, 0x9b9b9b, 0x666666, 0x222222, 0x242424, 0x6c6c6c, 0x999999, 0xaaaaaa, 0xb9b9b9, 0xc6c6c6, 0xcccccc,
+ 0x000000, 0x3e3e3e, 0xb9b9b9, 0xebebeb, 0xd3d3d3, 0xc8c8c8, 0xc8c8c8, 0xc8c8c8, 0xc8c8c8, 0xc8c8c8, 0xc8c8c8, 0xc1c1c1, 0xb5b5b5, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xb5b5b5, 0xc1c1c1, 0xc8c8c8, 0xc8c8c8, 0xc8c8c8, 0xc8c8c8, 0xc8c8c8, 0xc8c8c8, 0xc1c1c1, 0xb5b5b5, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xb5b5b5, 0xc1c1c1, 0xc8c8c8, 0xc8c8c8, 0xc8c8c8, 0xc8c8c8, 0xc8c8c8, 0xc8c8c8, 0xc1c1c1, 0xb5b5b5, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xb5b5b5, 0xc1c1c1, 0xb8b8b8, 0x989898, 0x666666, 0x222222, 0x222222, 0x666666, 0x939393, 0xa8a8a8, 0xb8b8b8, 0xc4c4c4, 0xcccccc,
+ 0x000000, 0x393939, 0xacacac, 0xd3d3d3, 0xafafaf, 0x9d9d9d, 0x9d9d9d, 0x9d9d9d, 0x9d9d9d, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x979797, 0x959595, 0x959595, 0x959595, 0x959595, 0x959595, 0x959595, 0x979797, 0x9b9b9b, 0x9d9d9d, 0x9d9d9d, 0x9d9d9d, 0x9d9d9d, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x979797, 0x959595, 0x959595, 0x959595, 0x959595, 0x959595, 0x959595, 0x979797, 0x9b9b9b, 0x9d9d9d, 0x9d9d9d, 0x9d9d9d, 0x9d9d9d, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x979797, 0x959595, 0x959595, 0x959595, 0x959595, 0x959595, 0x959595, 0x979797, 0x9b9b9b, 0x989898, 0x8d8d8d, 0x666666, 0x222222, 0x222222, 0x666666, 0x979797, 0xb5b5b5, 0xc4c4c4, 0xc6c6c6, 0xcbcbcb,
+ 0x000000, 0x333333, 0x848484, 0x969696, 0x767676, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x666666, 0x555555, 0x333333, 0x3c3c3c, 0x6f6f6f, 0x959595, 0xb8b8b8, 0xcdcdcd, 0xcacaca, 0x000000,
+ 0x000000, 0x202020, 0x333333, 0x323232, 0x272727, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x222222, 0x333333, 0x555555, 0x6f6f6f, 0x808080, 0x8e8e8e, 0xa4a4a4, 0xcacaca, 0xcfcfcf, 0x000000,
+ 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0x666666, 0x888888, 0x888888, 0x888888, 0x878787, 0x000000, 0x000000, 0x000000
+};
diff --git a/Private/NewBoot/Source/HEL/AMD64/BootEPM.cxx b/Private/NewBoot/Source/HEL/AMD64/BootEPM.cxx
deleted file mode 100644
index 0d678dc1..00000000
--- a/Private/NewBoot/Source/HEL/AMD64/BootEPM.cxx
+++ /dev/null
@@ -1,119 +0,0 @@
-/* -------------------------------------------
-
- Copyright Mahrouss Logic
-
-------------------------------------------- */
-
-#include <BootKit/BootKit.hxx>
-#include <FSKit/NewFS.hxx>
-
-#define kEPMSectorSize kATASectorSize
-#define kEPMSwapSize MIB(16)
-#define kEPMGPTStartLba (30)
-
-// {310E1FC7-2060-425D-BE7B-75A37CC679BC}
-STATIC const BlockGUID kEPMGuid = {
- 0x310e1fc7,
- 0x2060,
- 0x425d,
- {0xbe, 0x7b, 0x75, 0xa3, 0x7c, 0xc6, 0x79, 0xbc}};
-
-/// @brief Write epm partition to disk.
-/// @param namePart partition name
-/// @param namePartLength length of name
-/// @param bootDev disk interface.
-/// @return
-EXTERN_C Boolean boot_write_epm_partition(const Char* namePart, SizeT namePartLength,
- BootDevice* bootDev) {
- if (namePartLength > kEPMNameLength || !namePart) return No;
- if (!bootDev) return No;
-
- bootDev->Leak().mBase = kEPMGPTStartLba;
- bootDev->Leak().mSize = kEPMSectorSize;
-
- Char buf[kEPMSectorSize] = {0};
-
- bootDev->Read(buf, 1);
-
- BTextWriter writer;
-
- writer.Write(L"NewOS: Checking for a EPM partition...\r\n");
-
- for (SizeT index = 0; index < kEPMMagicLength; ++index) {
- if (buf[index] != kEPMMagic[index]) {
- writer.Write(L"NewOS: Writing a EPM partition...\r\n");
-
- BootBlockType* bootBlock = (BootBlockType*)buf;
-
- bootBlock->Version = kEPMRevision;
- bootBlock->NumBlocks = 2;
-
- for (SizeT i = 0; i < kEPMNameLength; ++i) {
- bootBlock->Magic[i] = kEPMMagic[i];
- }
-
- for (SizeT i = 0; i < namePartLength; ++i) {
- bootBlock->Name[i] = namePart[i];
- }
-
- bootBlock->LbaStart =
- sizeof(BootBlockType) + (sizeof(PartitionBlockType) * kEPMMaxBlks);
-
- bootBlock->SectorSz = kEPMSectorSize;
-
- bootBlock->Uuid = kEPMGuid;
-
- PartitionBlock* partBlock = (PartitionBlock*)(buf + sizeof(BootBlock));
-
- const char* fsName = "NewFS";
- int fsNameLength = 6;
-
- for (SizeT i = 0; i < fsNameLength; ++i) {
- partBlock->Fs[i] = fsName[i];
- }
-
- partBlock->Version = kEPMNewOS;
-
- const char* partNameSystem = "System HD";
- int partNameLength = 10;
-
- for (SizeT i = 0; i < partNameLength; ++i) {
- partBlock->Name[i] = partNameSystem[i];
- }
-
- partBlock->SectorSz = kEPMSectorSize;
- partBlock->LbaStart = kEPMStartPartitionBlk + kEPMSwapSize;
- partBlock->Version = kNewFSVersionInteger;
- partBlock->Kind = kNewFSPartitionTypeStandard;
- partBlock->LbaEnd = 0UL; ///! grows on the disk.
-
- PartitionBlock* swapBlock = (PartitionBlock*)(buf + sizeof(BootBlock) + sizeof(PartitionBlock));
-
- for (SizeT i = 0; i < fsNameLength; ++i) {
- swapBlock->Fs[i] = fsName[i];
- }
-
- swapBlock->Version = kEPMNewOS;
-
- const char *partNameSwap = "Swap HD";
- partNameLength = 8;
-
- for (SizeT i = 0; i < partNameLength; ++i) {
- swapBlock->Name[i] = partNameSwap[i];
- }
-
- swapBlock->SectorSz = kEPMSectorSize;
- swapBlock->LbaStart = kEPMStartPartitionBlk;
- swapBlock->Version = kNewFSVersionInteger;
- swapBlock->Kind = kNewFSPartitionTypePage;
- swapBlock->LbaEnd = kEPMSwapSize; /// 4 MIB swap partition.
-
- bootDev->Write(buf, 1);
-
- return No;
- }
- }
-
- writer.Write(L"NewOS: Partition found, everything's OK.\r\n");
- return Yes;
-} \ No newline at end of file
diff --git a/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx b/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx
index f5bb3ce8..a5014f92 100644
--- a/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx
+++ b/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx
@@ -5,53 +5,41 @@
------------------------------------------- */
#include <BootKit/BootKit.hxx>
+#include <BootKit/Rsrc/Driver.rsrc>
+#include <Builtins/Toolbox/Toolbox.hxx>
#include <KernelKit/MSDOS.hpp>
#include <KernelKit/PE.hxx>
#include <NewKit/Ref.hpp>
-#ifdef __x86_64__
-#include <HALKit/AMD64/HalPageAlloc.hpp>
-#else
-#error This CPU is unknown.
-#endif // ifdef __x86_64__
-
#define kMaxBufSize 256
-/// @brief Bootloader main type.
-typedef void (*bt_main_type)(HEL::HandoverInformationHeader* handoverInfo);
+/// @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 EfiMain(EfiHandlePtr ImageHandle,
- EfiSystemTable* SystemTable) {
- InitEFI(SystemTable); // Init the EFI library.
- InitGOP(); // Init the GOP.
+EFI_EXTERN_C EFI_API Int efi_main(EfiHandlePtr ImageHandle,
+ EfiSystemTable* SystemTable) {
+ InitEFI(SystemTable); ///! Init the EFI library.
+ InitGOP(); ///! Init the GOP.
BTextWriter writer;
/// Splash screen stuff
- writer.Write(L"Mahrouss-Logic (R) NewOS: ").Write(BVersionString::Shared());
+ writer.Write(L"Mahrouss-Logic (R) NewBoot: ").Write(BVersionString::Shared());
- writer.Write(L"\r\nNewOS: Firmware Vendor: ")
+ writer.Write(L"\r\nNewBoot: Firmware Vendor: ")
.Write(SystemTable->FirmwareVendor)
.Write(L"\r\n");
BootDeviceATA ataDev;
Boolean isEpmFound = No;
- /// if ATA drive is initialized and EFI vendor supports an EPM scheme.
- /// @EDK tells our OS that it supports EPM scheme as well.
- if (ataDev) {
- Char namePart[kEPMNameLength] = {"NewBoot"};
- /// tries to read an EPM block, or writes one if it fails.
- isEpmFound = boot_write_epm_partition(namePart, kEPMNameLength, &ataDev);
- } else {
- writer.Write(L"NewOS: This computer can't work with NewOS.\r\n");
- return kEfiFail;
- }
-
UInt32 MapKey = 0;
UInt32* SizePtr = nullptr;
EfiMemoryDescriptor* Descriptor = nullptr;
@@ -76,46 +64,8 @@ EFI_EXTERN_C EFI_API Int EfiMain(EfiHandlePtr ImageHandle,
EFI::RaiseHardError(L"__bad_alloc", L"NewBoot ran out of memory!");
}
- /****
- *
- * Get machine memory map.
- *
- */
-
- while (BS->GetMemoryMap(SizePtr, Descriptor, &MapKey, &SzDesc, &RevDesc) !=
- kEfiOk)
- ;
-
HEL::HandoverInformationHeader* handoverHdrPtr = nullptr;
- BS->AllocatePool(EfiLoaderData, sizeof(HEL::HandoverInformationHeader),
- (VoidPtr*)&handoverHdrPtr);
-
- 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;
-
- handoverHdrPtr->f_PhysicalStart =
- reinterpret_cast<voidPtr>(Descriptor->PhysicalStart);
- handoverHdrPtr->f_PhysicalSize = Descriptor->NumberOfPages;
-
- handoverHdrPtr->f_VirtualStart =
- reinterpret_cast<voidPtr>(Descriptor->VirtualStart);
-
- handoverHdrPtr->f_VirtualSize = Descriptor->NumberOfPages; /* # of pages */
-
- handoverHdrPtr->f_FirmwareVendorLen = BStrLen(SystemTable->FirmwareVendor);
-
- BCopyMem(handoverHdrPtr->f_FirmwareVendorName, SystemTable->FirmwareVendor,
- handoverHdrPtr->f_FirmwareVendorLen);
-
-#ifdef __DEBUG__
- writer.Write(L"NewOS: Fetching ACPI's 'RSD PTR'...").Write(L"\r\n");
-#endif
-
for (SizeT indexVT = 0; indexVT < SystemTable->NumberOfTableEntries;
++indexVT) {
volatile Char* vendorTable = reinterpret_cast<volatile Char*>(
@@ -127,29 +77,48 @@ EFI_EXTERN_C EFI_API Int EfiMain(EfiHandlePtr ImageHandle,
vendorTable[6] == 'R' && vendorTable[7] == ' ') {
handoverHdrPtr->f_HardwareTables.f_RsdPtr = (VoidPtr)vendorTable;
-#ifdef __DEBUG__
- writer.Write(L"NewOS: Found ACPI's 'RSD PTR' table on this machine.")
- .Write(L"\r\n");
-#endif
+ writer.Write(L"NewBoot: Found RSDP for kernel.\r\n");
break;
}
}
- if (!isEpmFound) {
- writer.Write(L"NewOS: No partition found for NewOS. (HCR-1000)\r\n");
- }
-
handoverHdrPtr->f_Magic = kHandoverMagic;
handoverHdrPtr->f_Version = kHandoverVersion;
- writer.Write(L"Running NewOS...\r\n");
+ 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;
+
+ BS->AllocatePool(EfiLoaderData, sizeof(HEL::HandoverInformationHeader),
+ (VoidPtr*)&handoverHdrPtr);
+
+ handoverHdrPtr->f_PhysicalStart = 0;
+ handoverHdrPtr->f_PhysicalSize = 0;
+
+ EfiPhysicalAddress* whereAddress =
+ reinterpret_cast<EfiPhysicalAddress*>(kBootVirtualAddress);
+
+ BS->AllocatePages(EfiAllocateType::AllocateAnyPages,
+ EfiMemoryType::EfiConventionalMemory, 1, whereAddress);
+
+ handoverHdrPtr->f_VirtualStart = reinterpret_cast<voidPtr>(whereAddress);
+
+ handoverHdrPtr->f_VirtualSize = Descriptor->NumberOfPages; /* # of pages */
+
+ handoverHdrPtr->f_FirmwareVendorLen = BStrLen(SystemTable->FirmwareVendor);
- EFI::ExitBootServices(MapKey, ImageHandle);
+ // EFI::ExitBootServices(MapKey, ImageHandle);
/// TODO: Read catalog and read NewKernel.exe
- EFI::Stop();
+ // EFI::Stop();
- return kEfiFail;
+ CANT_REACH();
}
diff --git a/Private/NewBoot/Source/HEL/PowerPC/BootEPM.cxx b/Private/NewBoot/Source/HEL/PowerPC/BootEPM.cxx
index f088d73c..72276ef9 100644
--- a/Private/NewBoot/Source/HEL/PowerPC/BootEPM.cxx
+++ b/Private/NewBoot/Source/HEL/PowerPC/BootEPM.cxx
@@ -21,7 +21,7 @@ STATIC const BlockGUID kEPMGuid = {
/// @param namePart partition name
/// @param namePartLength length of name
/// @param bootDev disk interface.
-/// @return
+/// @return
EXTERN_C Boolean boot_write_epm_partition(const Char* namePart, SizeT namePartLength,
BootDevice* bootDev) {
if (namePartLength > kEPMNameLength || !namePart) return No;
@@ -36,11 +36,11 @@ EXTERN_C Boolean boot_write_epm_partition(const Char* namePart, SizeT namePartLe
BTextWriter writer;
- writer.Write(L"NewOS: Checking for a EPM partition...\r\n");
+ writer.Write(L"NewBoot: Checking for an EPM partition...\r\n");
for (SizeT index = 0; index < kEPMMagicLength; ++index) {
if (buf[index] != kEPMMagic[index]) {
- writer.Write(L"NewOS: Writing a EPM partition...\r\n");
+ writer.Write(L"NewBoot: Writing an EPM partition...\r\n");
BootBlockType* bootBlock = (BootBlockType*)buf;
@@ -113,6 +113,6 @@ EXTERN_C Boolean boot_write_epm_partition(const Char* namePart, SizeT namePartLe
}
}
- writer.Write(L"NewOS: Partition found, everything's OK.\r\n");
+ writer.Write(L"NewBoot: Partition found, everything's OK.\r\n");
return Yes;
-} \ No newline at end of file
+}
diff --git a/Private/NewBoot/Source/HEL/PowerPC/BootPowerPC.S b/Private/NewBoot/Source/HEL/PowerPC/BootPowerPC.S
index 0b3cd493..53d9d4f2 100644
--- a/Private/NewBoot/Source/HEL/PowerPC/BootPowerPC.S
+++ b/Private/NewBoot/Source/HEL/PowerPC/BootPowerPC.S
@@ -19,4 +19,16 @@ boot_hdr_ver:
boot_hdr_proc:
.long bootloader_start
-/* NewOS kernel header end */ \ No newline at end of file
+/* NewOS kernel 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