summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Private/ArchKit/compile_flags.txt1
-rw-r--r--Private/FSKit/NewFS.hxx4
-rw-r--r--Private/HALKit/AMD64/Storage/ATA-PIO.cxx16
-rw-r--r--Private/HALKit/compile_flags.txt1
-rw-r--r--Private/KernelKit/PEFCodeManager.hxx2
-rw-r--r--Private/NewBoot/BootKit/BootKit.hxx23
-rw-r--r--Private/NewBoot/BootKit/Vendor/Support.hxx6
-rw-r--r--Private/NewBoot/Source/HEL/AMD64/BootATA.cxx20
-rw-r--r--Private/NewBoot/Source/HEL/AMD64/BootMain.cxx2
-rw-r--r--Private/NewBoot/Source/HEL/AMD64/Support.cxx14
-rw-r--r--Private/NewBoot/Source/compile_flags.txt1
-rw-r--r--Private/NewBoot/Source/makefile4
-rw-r--r--Private/Source/AppMain.cxx2
-rw-r--r--Private/Source/PEFCodeManager.cxx29
-rw-r--r--Private/Source/compile_flags.txt1
-rw-r--r--Private/compile_flags.txt1
-rw-r--r--Public/Developer/SystemLib/Headers/Wm.h9
-rw-r--r--Public/Developer/SystemLib/Sources/Wm.c17
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.