diff options
| -rw-r--r-- | Private/ArchKit/compile_flags.txt | 1 | ||||
| -rw-r--r-- | Private/FSKit/NewFS.hxx | 4 | ||||
| -rw-r--r-- | Private/HALKit/AMD64/Storage/ATA-PIO.cxx | 16 | ||||
| -rw-r--r-- | Private/HALKit/compile_flags.txt | 1 | ||||
| -rw-r--r-- | Private/KernelKit/PEFCodeManager.hxx | 2 | ||||
| -rw-r--r-- | Private/NewBoot/BootKit/BootKit.hxx | 23 | ||||
| -rw-r--r-- | Private/NewBoot/BootKit/Vendor/Support.hxx | 6 | ||||
| -rw-r--r-- | Private/NewBoot/Source/HEL/AMD64/BootATA.cxx | 20 | ||||
| -rw-r--r-- | Private/NewBoot/Source/HEL/AMD64/BootMain.cxx | 2 | ||||
| -rw-r--r-- | Private/NewBoot/Source/HEL/AMD64/Support.cxx | 14 | ||||
| -rw-r--r-- | Private/NewBoot/Source/compile_flags.txt | 1 | ||||
| -rw-r--r-- | Private/NewBoot/Source/makefile | 4 | ||||
| -rw-r--r-- | Private/Source/AppMain.cxx | 2 | ||||
| -rw-r--r-- | Private/Source/PEFCodeManager.cxx | 29 | ||||
| -rw-r--r-- | Private/Source/compile_flags.txt | 1 | ||||
| -rw-r--r-- | Private/compile_flags.txt | 1 | ||||
| -rw-r--r-- | Public/Developer/SystemLib/Headers/Wm.h | 9 | ||||
| -rw-r--r-- | Public/Developer/SystemLib/Sources/Wm.c | 17 |
18 files changed, 79 insertions, 74 deletions
diff --git a/Private/ArchKit/compile_flags.txt b/Private/ArchKit/compile_flags.txt index 03f62eac..a3cab89d 100644 --- a/Private/ArchKit/compile_flags.txt +++ b/Private/ArchKit/compile_flags.txt @@ -4,3 +4,4 @@ -I./ -I../ -I$(HOME)/ +-D__NEWOS_AMD64__ diff --git a/Private/FSKit/NewFS.hxx b/Private/FSKit/NewFS.hxx index 1f27089d..2a783b11 100644 --- a/Private/FSKit/NewFS.hxx +++ b/Private/FSKit/NewFS.hxx @@ -82,8 +82,8 @@ default. #define kNewFSLbaType (NewOS::Lba) /// Start After the PM headers, pad 1024 bytes. -#define kNewFSAddressAsLba (1024) -#define kNewFSCatalogStartAddress (kNewFSAddressAsLba + sizeof(NewPartitionBlock)) +#define kNewFSAddressAsLba (512) +#define kNewFSCatalogStartAddress (1024 + sizeof(NewPartitionBlock)) #define kResourceTypeDialog 10 #define kResourceTypeString 11 diff --git a/Private/HALKit/AMD64/Storage/ATA-PIO.cxx b/Private/HALKit/AMD64/Storage/ATA-PIO.cxx index e72999ca..6fe1e29a 100644 --- a/Private/HALKit/AMD64/Storage/ATA-PIO.cxx +++ b/Private/HALKit/AMD64/Storage/ATA-PIO.cxx @@ -105,18 +105,22 @@ Void drv_std_read(UInt64 Lba, UInt16 IO, UInt8 Master, Char* Buf, drv_std_select(IO); Out8(IO + ATA_REG_HDDEVSEL, (Command) | (((Lba) >> 24) & 0x0F)); - Out8(IO + ATA_REG_SEC_COUNT0, 1); + + 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_LBA4, (Lba) >> 24); + Out8(IO + ATA_REG_LBA3, (Lba) >> 24); Out8(IO + ATA_REG_COMMAND, ATA_CMD_READ_PIO); + drv_std_wait_io(IO); + for (SizeT IndexOff = 0; IndexOff < Size; ++IndexOff) { drv_std_wait_io(IO); Buf[IndexOff] = In16(IO + ATA_REG_DATA); + drv_std_wait_io(IO); } } @@ -130,16 +134,20 @@ Void drv_std_write(UInt64 Lba, UInt16 IO, UInt8 Master, Char* Buf, drv_std_select(IO); Out8(IO + ATA_REG_HDDEVSEL, (Command) | (((Lba) >> 24) & 0x0F)); - Out8(IO + ATA_REG_SEC_COUNT0, 1); + + 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_LBA4, (Lba) >> 24); + Out8(IO + ATA_REG_LBA3, (Lba) >> 24); Out8(IO + ATA_REG_COMMAND, ATA_CMD_WRITE_PIO); + drv_std_wait_io(IO); + for (SizeT IndexOff = 0; IndexOff < Size; ++IndexOff) { + drv_std_wait_io(IO); Out16(IO + ATA_REG_DATA, Buf[IndexOff]); drv_std_wait_io(IO); } diff --git a/Private/HALKit/compile_flags.txt b/Private/HALKit/compile_flags.txt index a37ae6bf..26779833 100644 --- a/Private/HALKit/compile_flags.txt +++ b/Private/HALKit/compile_flags.txt @@ -3,3 +3,4 @@ -std=c++20 -I./ -I../ +-D__NEWOS_AMD64__ diff --git a/Private/KernelKit/PEFCodeManager.hxx b/Private/KernelKit/PEFCodeManager.hxx index 80ac6e90..a928e89e 100644 --- a/Private/KernelKit/PEFCodeManager.hxx +++ b/Private/KernelKit/PEFCodeManager.hxx @@ -50,7 +50,7 @@ class PEFLoader : public LoaderInterface { }; namespace Utils { -bool execute_from_image(PEFLoader &exec) noexcept; +bool execute_from_image(PEFLoader &exec, const Int32& procKind) noexcept; } // namespace Utils } // namespace NewOS diff --git a/Private/NewBoot/BootKit/BootKit.hxx b/Private/NewBoot/BootKit/BootKit.hxx index 4b9eecfd..14609e77 100644 --- a/Private/NewBoot/BootKit/BootKit.hxx +++ b/Private/NewBoot/BootKit/BootKit.hxx @@ -211,7 +211,7 @@ public: Boolean Format(const char* partName, BFileDescriptor* fileBlobs, SizeT blobCount); /// @brief check if partition is good. - operator bool() noexcept { + Bool IsPartitionValid() noexcept { fDiskDev.Leak().mBase = (kNewFSAddressAsLba); fDiskDev.Leak().mSize = BootDev::kSectorSize; @@ -221,12 +221,13 @@ public: NewPartitionBlock* blockPart = reinterpret_cast<NewPartitionBlock*>(buf); + BTextWriter writer; + for (SizeT indexMag = 0UL; indexMag < kNewFSIdentLen; ++indexMag) { if (blockPart->Ident[indexMag] != kNewFSIdent[indexMag]) return false; } - BTextWriter writer; writer.Write(L"Device Size: ").Write(this->fDiskDev.GetDiskSize()).Write(L"\r\n"); if (blockPart->DiskSize != this->fDiskDev.GetDiskSize() || @@ -255,16 +256,11 @@ private: Lba startLba = partBlock.StartCatalog; BTextWriter writer; - SizeT blobCounter = 0UL; + Char bufCatalog[sizeof(NewCatalog)] = { 0 }; + Char bufFork[sizeof(NewFork)] = { 0 }; while (blob) { - if (blobCounter > blobCount) break; - ++blobCounter; - - Char bufCatalog[sizeof(NewCatalog)] = { 0 }; - Char bufFork[sizeof(NewFork)] = { 0 }; - - NewCatalog* catalogKind = (NewCatalog*)bufFork; + NewCatalog* catalogKind = (NewCatalog*)bufCatalog; catalogKind->PrevSibling = startLba; @@ -306,7 +302,7 @@ private: fDiskDev.Leak().mBase = startLba + sizeof(NewCatalog); fDiskDev.Leak().mSize = sizeof(NewFork); - fDiskDev.Write((Char*)forkKind, sizeof(NewFork)); + fDiskDev.Write((Char*)bufFork, sizeof(NewFork)); do { this->fDiskDev.Leak().mSize = BootDev::kSectorSize; @@ -338,13 +334,16 @@ private: fDiskDev.Leak().mBase = startLba; fDiskDev.Leak().mSize = sizeof(NewCatalog); - fDiskDev.Write((Char*)catalogKind, sizeof(NewCatalog)); + fDiskDev.Write((Char*)bufCatalog, sizeof(NewCatalog)); startLba += (sizeof(NewCatalog) + sizeof(NewFork) + blob->fBlobSz); --partBlock.FreeCatalog; --partBlock.FreeSectors; + memset(bufFork, 0, sizeof(NewFork)); + memset(bufCatalog, 0, sizeof(NewCatalog)); + blob = blob->fNext; } diff --git a/Private/NewBoot/BootKit/Vendor/Support.hxx b/Private/NewBoot/BootKit/Vendor/Support.hxx index 4d35b4cb..b4ba4f68 100644 --- a/Private/NewBoot/BootKit/Vendor/Support.hxx +++ b/Private/NewBoot/BootKit/Vendor/Support.hxx @@ -13,9 +13,9 @@ #define LONG_MAX ((long)(~0UL>>1)) #define LONG_MIN (~LONG_MAX) -#define SetMem(dst, c, sz) BSetMem((CharacterTypeUTF16 *)dst, c, sz) -#define MoveMem(dst, src, sz) BCopyMem((CharacterTypeUTF16 *)dst, (CharacterTypeUTF16 *)src, sz) -#define CopyMem(dst, src, sz) BCopyMem((CharacterTypeUTF16 *)dst, (CharacterTypeUTF16 *)src, sz) +#define SetMem(dst, c, sz) memset(dst, c, sz) +#define MoveMem(dst, src, sz) memcpy(dst, src, sz) +#define CopyMem(dst, src, sz) memcpy(dst,src, sz) inline int isspace(int c) { return c == ' '; } diff --git a/Private/NewBoot/Source/HEL/AMD64/BootATA.cxx b/Private/NewBoot/Source/HEL/AMD64/BootATA.cxx index 5be1e977..d6b5542c 100644 --- a/Private/NewBoot/Source/HEL/AMD64/BootATA.cxx +++ b/Private/NewBoot/Source/HEL/AMD64/BootATA.cxx @@ -107,18 +107,22 @@ Void boot_ata_read(UInt64 Lba, UInt16 IO, UInt8 Master, CharacterTypeUTF8* Buf, boot_ata_select(IO); Out8(IO + ATA_REG_HDDEVSEL, (Command) | (((Lba) >> 24) & 0x0F)); - Out8(IO + ATA_REG_SEC_COUNT0, 1); + + 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_LBA4, (Lba) >> 24); + 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); } } @@ -130,18 +134,22 @@ Void boot_ata_write(UInt64 Lba, UInt16 IO, UInt8 Master, CharacterTypeUTF8* Buf, boot_ata_select(IO); Out8(IO + ATA_REG_HDDEVSEL, (Command) | (((Lba) >> 24) & 0x0F)); - Out8(IO + ATA_REG_SEC_COUNT0, 1); + + 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_LBA4, (Lba) >> 24); + 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); } } @@ -188,7 +196,7 @@ BootDeviceATA& BootDeviceATA::Read(CharacterTypeUTF8* Buf, const SizeT& SectorSz if (!Buf || SectorSz < 1) return *this; - auto lba = this->Leak().mBase / BootDeviceATA::kSectorSize; + auto lba = this->Leak().mBase / SectorSz; boot_ata_read(lba, this->Leak().mBus, this->Leak().mMaster, Buf, SectorSz, this->Leak().mSize); @@ -211,7 +219,7 @@ BootDeviceATA& BootDeviceATA::Write(CharacterTypeUTF8* Buf, const SizeT& SectorS if (!Buf || SectorSz < 1) return *this; - auto lba = this->Leak().mBase / BootDeviceATA::kSectorSize; + auto lba = this->Leak().mBase / SectorSz; boot_ata_write(lba, this->Leak().mBus, this->Leak().mMaster, Buf, SectorSz, this->Leak().mSize); diff --git a/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx b/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx index 36dc47d3..12d34232 100644 --- a/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx +++ b/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx @@ -165,7 +165,7 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle, /// if not formated yet, then format it with the following folders: /// /, /Boot, /Applications. - if (!diskFormatter) { + if (!diskFormatter.IsPartitionValid()) { BDiskFormatFactory<BootDeviceATA>::BFileDescriptor rootDesc{0}; memcpy(rootDesc.fFileName, "/", strlen("/")); diff --git a/Private/NewBoot/Source/HEL/AMD64/Support.cxx b/Private/NewBoot/Source/HEL/AMD64/Support.cxx index 686f4811..3a6974bb 100644 --- a/Private/NewBoot/Source/HEL/AMD64/Support.cxx +++ b/Private/NewBoot/Source/HEL/AMD64/Support.cxx @@ -16,8 +16,11 @@ /// @param len length of of src. EXTERN_C VoidPtr memset(void *dst, int byte, long long unsigned int len) { - SetMem(dst, byte, len); - return dst; + for (size_t i = 0UL; i < len; ++i) { + ((int*)dst)[i] = byte; + } + + return dst; } /// @brief memcpy definition in C++. @@ -26,8 +29,11 @@ EXTERN_C VoidPtr memset(void *dst, int byte, /// @param len length of of src. EXTERN_C VoidPtr memcpy(void *dst, const void *src, long long unsigned int len) { - CopyMem(dst, src, len); - return dst; + for (size_t i = 0UL; i < len; ++i){ + ((int*)dst)[i] = ((int*)src)[i]; + } + + return dst; } /// @brief strlen definition in C++. diff --git a/Private/NewBoot/Source/compile_flags.txt b/Private/NewBoot/Source/compile_flags.txt index e58d7ab9..c74d22b2 100644 --- a/Private/NewBoot/Source/compile_flags.txt +++ b/Private/NewBoot/Source/compile_flags.txt @@ -1,3 +1,4 @@ -std=c++20 -I../ -I../../ +-D__NEWOS_AMD64__ diff --git a/Private/NewBoot/Source/makefile b/Private/NewBoot/Source/makefile index f3a292c5..9f70d903 100644 --- a/Private/NewBoot/Source/makefile +++ b/Private/NewBoot/Source/makefile @@ -75,8 +75,8 @@ run-efi-amd64: .PHONY: epm-img epm-img: - qemu-img create -f qcow2 $(IMG) 512M - qemu-img create -f qcow2 $(IMG_2) 512M + qemu-img create -f raw $(IMG) 512M + qemu-img create -f raw $(IMG_2) 512M .PHONY: download-edk download-edk: diff --git a/Private/Source/AppMain.cxx b/Private/Source/AppMain.cxx index 6dd78496..8fa74459 100644 --- a/Private/Source/AppMain.cxx +++ b/Private/Source/AppMain.cxx @@ -24,7 +24,7 @@ EXTERN_C NewOS::Void AppMain(NewOS::Void) { NewOS::FilesystemManagerInterface::Mount(newFS); if (newFS->GetImpl()) { - auto catalog = newFS->GetImpl()->GetCatalog("/"); + auto catalog = newFS->GetImpl()->GetCatalog("/Boot"); if (catalog) { NewOS::kcout << "Catalog-Path-Name: " << catalog->Name << NewOS::endl; delete catalog; diff --git a/Private/Source/PEFCodeManager.cxx b/Private/Source/PEFCodeManager.cxx index 6ff5730d..cd1b301f 100644 --- a/Private/Source/PEFCodeManager.cxx +++ b/Private/Source/PEFCodeManager.cxx @@ -35,11 +35,9 @@ UInt32 rt_get_pef_platform(void) noexcept { /// @brief PEF loader constructor w/ blob. /// @param blob -PEFLoader::PEFLoader(const VoidPtr blob) : fCachedBlob(nullptr) { - fCachedBlob = blob; - fBad = false; - +PEFLoader::PEFLoader(const VoidPtr blob) : fCachedBlob(blob) { MUST_PASS(fCachedBlob); + fBad = false; } /// @brief PEF loader constructor. @@ -155,10 +153,8 @@ ErrorOr<VoidPtr> PEFLoader::FindStart() { /// @return bool PEFLoader::IsLoaded() noexcept { return !fBad && fCachedBlob; } -#define kPefAppnameCommandHdr "PefAppName" - namespace Utils { -bool execute_from_image(PEFLoader &exec) noexcept { +bool execute_from_image(PEFLoader &exec, const Int32& procKind) noexcept { auto errOrStart = exec.FindStart(); if (errOrStart.Error() != 0) return false; @@ -166,10 +162,7 @@ bool execute_from_image(PEFLoader &exec) noexcept { ProcessHeader proc(errOrStart.Leak().Leak()); Ref<ProcessHeader> refProc = proc; - proc.Kind = ProcessHeader::kUserKind; - rt_copy_memory(exec.FindSymbol(kPefAppnameCommandHdr, kPefData), proc.Name, - rt_string_len((const Char *)exec.FindSymbol( - kPefAppnameCommandHdr, kPefData))); + proc.Kind = procKind; return ProcessScheduler::Shared().Leak().Add(refProc); } @@ -177,7 +170,19 @@ bool execute_from_image(PEFLoader &exec) noexcept { const char *PEFLoader::Path() { return fPath.Leak().CData(); } -const char *PEFLoader::Format() { return "PEF"; } +const char *PEFLoader::Format() { + #ifdef __32x0__ + return "32x0 PEF."; + #elif defined(__64x0__) + return "64x0 PEF."; + #elif defined(__x86_64__) + return "x86_64 PEF."; + #elif defined(__powerpc64__) + return "POWER PEF."; + #else + return "Unknonwn PEF."; + #endif // __32x0__ || __64x0__ || __x86_64__ +} const char *PEFLoader::MIME() { return kPefApplicationMime; } } // namespace NewOS diff --git a/Private/Source/compile_flags.txt b/Private/Source/compile_flags.txt index b96cbe62..1f54e6fb 100644 --- a/Private/Source/compile_flags.txt +++ b/Private/Source/compile_flags.txt @@ -4,3 +4,4 @@ -I../ -I$(HOME)/ -D__FSKIT_NEWFS__ +-D__NEWOS_AMD64__ diff --git a/Private/compile_flags.txt b/Private/compile_flags.txt index 12b56e37..de13f8f6 100644 --- a/Private/compile_flags.txt +++ b/Private/compile_flags.txt @@ -3,3 +3,4 @@ -std=c++20 -I./ -I$(HOME)/ +-D__NEWOS_AMD64__ diff --git a/Public/Developer/SystemLib/Headers/Wm.h b/Public/Developer/SystemLib/Headers/Wm.h index c2c9738d..609e89ac 100644 --- a/Public/Developer/SystemLib/Headers/Wm.h +++ b/Public/Developer/SystemLib/Headers/Wm.h @@ -165,12 +165,3 @@ CA_EXTERN_C VoidType WmReleaseMenu(WindowPort* port); /// @param where to move. /// @return error code. CA_EXTERN_C Int32Type WmMoveWindow(WindowPort* wndPort, WmPoint where); - -/// @brief Get the NewOS about window. -/// @return The window port of it. -/// @note The reason that this is not a window is for it to run without blocking the UI. -CA_EXTERN_C WindowPort* WmGetOSDlg(void); - -/// @brief Draws a blur effect on the window. -/// @param wndPort the window port. -CA_EXTERN_C VoidType WmBlur(WindowPort* wndPort); diff --git a/Public/Developer/SystemLib/Sources/Wm.c b/Public/Developer/SystemLib/Sources/Wm.c index 72ae5919..a1f4d051 100644 --- a/Public/Developer/SystemLib/Sources/Wm.c +++ b/Public/Developer/SystemLib/Sources/Wm.c @@ -76,23 +76,6 @@ CA_EXTERN_C Int32Type WmMoveWindow(WindowPort* wndPort, WmPoint where) { return 0; } -/// @brief Draws a blur effect on the window. -/// @param wndPort the window port. -CA_EXTERN_C VoidType WmBlur(WindowPort* wndPort) { - if (wndPort != NullPtr) { - WmGFXRef refGfx = wndPort->windowGfx; - - FloatType lookupTbl[4] = {0.21336, 0.41336, 0.61336, 0.81336}; - - for (SizeType width = 0; width < refGfx->DataFrameWidth; ++width) { - for (SizeType height = 0; height < refGfx->DataFrameHeight; ++height) { - refGfx->DataFrame[width * height] = - refGfx->DataFrame[width * height] * lookupTbl[MathRand() % 4]; - } - } - } -} - /// @brief Causes the window to invalidate and redraw. /// @param wndPort The Window port. /// @return nothing. |
