summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal <amlalelmahrouss@icloud.com>2024-06-06 10:27:55 +0000
committerAmlal <amlalelmahrouss@icloud.com>2024-06-06 10:27:55 +0000
commit4e75e05a20ddd0dbca982e8f3bc2ea8043ed3a3f (patch)
tree95409c0e32b644578b94a5c230417da684d79dc9
parentf5081a8f9a8537ad5be5d639955cd1d0e68a9e1d (diff)
parent9994b8f3f88131f41be1061fb0947177e66dc7b0 (diff)
Merged in MHR-23 (pull request #14)
Draft: MHR-23
-rw-r--r--.vscode/c_cpp_properties.json12
-rw-r--r--Boot/BootKit/BootKit.hxx6
-rw-r--r--Boot/ReadMe.md2
-rw-r--r--Boot/Sources/BootloaderRsrc.rsrc6
-rw-r--r--Boot/Sources/HEL/AMD64/BootATA.cxx2
-rw-r--r--Boot/Sources/HEL/AMD64/BootFileReader.cxx8
-rw-r--r--Boot/Sources/HEL/AMD64/BootMain.cxx6
-rw-r--r--Boot/Sources/HEL/POWER/CoreBootStartup.S2
-rw-r--r--Boot/Sources/HEL/RISCV/BootRISCV.S4
-rw-r--r--Boot/Sources/Root/SplashScreen.fmt4
-rw-r--r--Boot/makefile10
-rw-r--r--DDK/KernelCall.c (renamed from Kernel/DriverKit/KernelCall.c)7
-rw-r--r--DDK/KernelDev.c (renamed from Kernel/DriverKit/KernelDev.c)2
-rw-r--r--DDK/KernelDev.h (renamed from Kernel/DriverKit/KernelDev.h)2
-rw-r--r--DDK/KernelDispatchCall.S (renamed from Kernel/DriverKit/KernelDispatchCall.S)0
-rw-r--r--DDK/KernelPrint.c (renamed from Kernel/DriverKit/KernelPrint.c)2
-rw-r--r--DDK/KernelPrint.h (renamed from Kernel/DriverKit/KernelPrint.h)2
-rw-r--r--DDK/KernelStd.h (renamed from Kernel/DriverKit/KernelStd.h)0
-rw-r--r--DDK/KernelStdCxx.cc (renamed from Kernel/DriverKit/KernelStdCxx.cc)4
-rw-r--r--DDK/KernelString.c (renamed from Kernel/DriverKit/KernelString.c)2
-rw-r--r--DDK/KernelString.h (renamed from Kernel/DriverKit/KernelString.h)4
-rw-r--r--DDK/ReadMe.txt4
-rw-r--r--Drv/.gitkeep (renamed from Kernel/Drivers/.gitkeep)0
-rw-r--r--Drv/Bonjour/Bonjour.c (renamed from Kernel/Drivers/Bonjour/Bonjour.c)4
-rw-r--r--Drv/Bonjour/DriverRsrc.rsrc (renamed from Kernel/Drivers/Bonjour/DriverRsrc.rsrc)4
-rw-r--r--Drv/Bonjour/x86_64.mk (renamed from Kernel/Drivers/Bonjour/x86_64.mk)3
-rw-r--r--Drv/SampleDriver/DriverRsrc.rsrc (renamed from Kernel/Drivers/SampleDriver/DriverRsrc.rsrc)2
-rw-r--r--Drv/SampleDriver/SampleDriver.c (renamed from Kernel/Drivers/SampleDriver/SampleDriver.c)5
-rw-r--r--Drv/SampleDriver/x86_64.mk (renamed from Kernel/Drivers/SampleDriver/x86_64.mk)3
-rw-r--r--Kernel/ArchKit/ArchKit.hpp41
-rw-r--r--Kernel/Builtins/ACPI/ACPI.hxx23
-rw-r--r--Kernel/Docs/Explicit Partition Map.pdfbin0 -> 12326 bytes
-rw-r--r--Kernel/Docs/SPECIFICATION.md2
-rw-r--r--Kernel/Docs/TODO-LIST.md2
-rw-r--r--Kernel/Drivers/MahroussUpdate/DriverRsrc.rsrc25
-rw-r--r--Kernel/Drivers/MahroussUpdate/MahroussUpdate.cc24
-rw-r--r--Kernel/Drivers/MahroussUpdate/MahroussUpdate.hxx37
-rw-r--r--Kernel/Drivers/MahroussUpdate/x86_64.mk53
-rw-r--r--Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx37
-rw-r--r--Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp52
-rw-r--r--Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp50
-rw-r--r--Kernel/HALKit/AMD64/HalDebugOutput.cxx2
-rw-r--r--Kernel/HALKit/AMD64/HalKernelMain.cxx2
-rw-r--r--Kernel/HALKit/AMD64/HalSMPCore.cxx2
-rw-r--r--Kernel/HALKit/AMD64/Processor.hpp65
-rw-r--r--Kernel/HALKit/AMD64/Storage/AHCI.cxx2
-rw-r--r--Kernel/KernelKit/DebugOutput.hpp18
-rw-r--r--Kernel/KernelKit/DeviceManager.hpp4
-rw-r--r--Kernel/KernelKit/DriveManager.hxx8
-rw-r--r--Kernel/KernelKit/Framebuffer.hpp1
-rw-r--r--Kernel/KernelKit/KernelHeap.hpp5
-rw-r--r--Kernel/KernelKit/PEF.hpp2
-rw-r--r--Kernel/KernelKit/ProcessScheduler.hxx (renamed from Kernel/KernelKit/ProcessScheduler.hpp)10
-rw-r--r--Kernel/KernelKit/SMPManager.hpp2
-rw-r--r--Kernel/KernelKit/ThreadLocalStorage.inl10
-rw-r--r--Kernel/KernelKit/XCOFF.hxx24
-rw-r--r--Kernel/KernelRsrc.rsrc8
-rw-r--r--Kernel/Linker/16x0.json2
-rw-r--r--Kernel/Linker/32x0.json2
-rw-r--r--Kernel/Linker/64x0.json2
-rw-r--r--Kernel/NetworkKit/NetworkDevice.inl4
-rw-r--r--Kernel/Sources/AppMain.cxx28
-rw-r--r--Kernel/Sources/CodeManager.cxx4
-rw-r--r--Kernel/Sources/CxxAbi.cxx2
-rw-r--r--Kernel/Sources/FS/NewFS.cxx55
-rw-r--r--Kernel/Sources/IndexableProperty.cxx2
-rw-r--r--Kernel/Sources/KernelCheck.cxx4
-rw-r--r--Kernel/Sources/KernelHeap.cxx27
-rw-r--r--Kernel/Sources/PEFCodeManager.cxx4
-rw-r--r--Kernel/Sources/PEFSharedObject.cxx (renamed from Kernel/Sources/PEFSharedObjectRT.cxx)15
-rw-r--r--Kernel/Sources/ProcessScheduler.cxx42
-rw-r--r--Kernel/Sources/ProcessTeam.cxx2
-rw-r--r--Kernel/Sources/SMPManager.cxx8
-rw-r--r--Kernel/Sources/Semaphore.cxx2
-rw-r--r--Kernel/Sources/ThreadLocalStorage.cxx10
-rw-r--r--Kernel/Sources/UserHeap.cxx10
-rw-r--r--Kernel/makefile4
-rw-r--r--License.QR.txt29
-rw-r--r--ReadMe.md2
-rw-r--r--SDK/Dist/.gitkeep (renamed from SDK/Library/.gitkeep)0
-rw-r--r--SDK/Libraries/.gitkeep (renamed from SDK/Library/CoreCxxRuntime/.gitkeep)0
-rw-r--r--SDK/Libraries/CoreCxxRuntime/.gitkeep (renamed from SDK/Library/CorePEFRuntime/.gitkeep)0
-rw-r--r--SDK/Libraries/CoreCxxRuntime/Private.xml (renamed from SDK/Library/CoreCxxRuntime/Private.xml)0
-rw-r--r--SDK/Libraries/CoreCxxRuntime/Sources/New+Delete.cxx (renamed from SDK/Library/CoreCxxRuntime/Sources/New+Delete.cxx)0
-rw-r--r--SDK/Libraries/CorePEFRuntime/.gitkeep (renamed from SDK/Library/CoreSystem/.gitkeep)0
-rw-r--r--SDK/Libraries/CorePEFRuntime/Private.xml (renamed from SDK/Library/CorePEFRuntime/Private.xml)0
-rw-r--r--SDK/Libraries/CorePEFRuntime/Sources/PEFStart.c (renamed from SDK/Library/CorePEFRuntime/Sources/PEFStart.c)0
-rw-r--r--SDK/Libraries/CoreSystem/.gitkeep (renamed from SDK/Library/CoreSystem/ARM64/.gitkeep)0
-rw-r--r--SDK/Libraries/CoreSystem/AMD64/CoreAssembly.s (renamed from SDK/Library/CoreSystem/AMD64/CoreAssembly.s)0
-rw-r--r--SDK/Libraries/CoreSystem/ARM64/.gitkeep (renamed from SDK/Library/CoreSystem/RISCV/.gitkeep)0
-rw-r--r--SDK/Libraries/CoreSystem/Headers/Alert.h (renamed from SDK/Library/CoreSystem/Headers/Alert.h)0
-rw-r--r--SDK/Libraries/CoreSystem/Headers/Defines.h (renamed from SDK/Library/CoreSystem/Headers/Defines.h)4
-rw-r--r--SDK/Libraries/CoreSystem/Headers/File.h (renamed from SDK/Library/CoreSystem/Headers/File.h)9
-rw-r--r--SDK/Libraries/CoreSystem/Headers/Heap.h (renamed from SDK/Library/CoreSystem/Headers/Heap.h)0
-rw-r--r--SDK/Libraries/CoreSystem/Headers/Hint.h (renamed from SDK/Library/CoreSystem/Headers/Hint.h)0
-rw-r--r--SDK/Libraries/CoreSystem/Headers/Intl.h (renamed from SDK/Library/CoreSystem/Headers/Intl.h)0
-rw-r--r--SDK/Libraries/CoreSystem/Headers/Math.h (renamed from SDK/Library/CoreSystem/Headers/Math.h)2
-rw-r--r--SDK/Libraries/CoreSystem/Headers/Rsrc.h (renamed from SDK/Library/CoreSystem/Headers/Rsrc.h)0
-rw-r--r--SDK/Libraries/CoreSystem/Headers/Thread.h (renamed from SDK/Library/CoreSystem/Headers/Thread.h)0
-rw-r--r--SDK/Libraries/CoreSystem/Headers/Transport.h (renamed from SDK/Library/CoreSystem/Headers/Transport.h)0
-rw-r--r--SDK/Libraries/CoreSystem/POWER/CoreAssembly.s (renamed from SDK/Library/CoreSystem/POWER/CoreAssembly.s)0
-rw-r--r--SDK/Libraries/CoreSystem/Private.xml (renamed from SDK/Library/CoreSystem/Private.xml)0
-rw-r--r--SDK/Libraries/CoreSystem/RISCV/.gitkeep (renamed from SDK/Tools/.gitkeep)0
-rw-r--r--SDK/Libraries/CoreSystem/ReadMe.md (renamed from SDK/Library/CoreSystem/ReadMe.md)0
-rw-r--r--SDK/Libraries/CoreSystem/Sources/App.c (renamed from SDK/Library/CoreSystem/Sources/App.c)0
-rw-r--r--SDK/Libraries/CoreSystem/Sources/CRTStartup.c (renamed from SDK/Library/CoreSystem/Sources/CRTStartup.c)0
-rw-r--r--SDK/Libraries/CoreSystem/Sources/File.c (renamed from SDK/Library/CoreSystem/Sources/File.c)13
-rw-r--r--SDK/Libraries/CoreSystem/Sources/Heap.c (renamed from SDK/Library/CoreSystem/Sources/Heap.c)0
-rw-r--r--SDK/Libraries/CoreSystem/Sources/Math.c (renamed from SDK/Library/CoreSystem/Sources/Math.c)0
-rw-r--r--SDK/Libraries/CoreSystem/Sources/Thread.c (renamed from SDK/Library/CoreSystem/Sources/Thread.c)0
-rw-r--r--SDK/Libraries/CoreSystem/amd64.mk (renamed from SDK/Library/CoreSystem/amd64.mk)0
-rw-r--r--SDK/Libraries/CoreSystem/compile_flags.txt (renamed from SDK/Library/CoreSystem/compile_flags.txt)0
112 files changed, 525 insertions, 386 deletions
diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json
index cda7d4a1..ff4a5912 100644
--- a/.vscode/c_cpp_properties.json
+++ b/.vscode/c_cpp_properties.json
@@ -4,9 +4,11 @@
"name": "MicroKernel (Macintosh)",
"includePath": [
"${workspaceFolder}/Kernel/**",
+ "${workspaceFolder}/Drv/**",
"${workspaceFolder}/Boot/**",
- "${workspaceFolder}/SDK/Library/CoreSystem/**",
- "${workspaceFolder}/SDK/Library/**"
+ "${workspaceFolder}/**",
+ "${workspaceFolder}/SDK/Libraries/CoreSystem/**",
+ "${workspaceFolder}/SDK/Libraries/**"
],
"defines": [
"__MAHROUSS__",
@@ -36,10 +38,12 @@
{
"name": "MicroKernel (Windows)",
"includePath": [
+ "${workspaceFolder}/Drv/**",
"${workspaceFolder}/Kernel/**",
"${workspaceFolder}/Boot/**",
- "${workspaceFolder}/SDK/Library/CoreSystem/**",
- "${workspaceFolder}/SDK/Library/**"
+ "${workspaceFolder}/**",
+ "${workspaceFolder}/SDK/Libraries/CoreSystem/**",
+ "${workspaceFolder}/SDK/Libraries/**"
],
"defines": [
"__MAHROUSS__",
diff --git a/Boot/BootKit/BootKit.hxx b/Boot/BootKit/BootKit.hxx
index 961137ca..311d6c7f 100644
--- a/Boot/BootKit/BootKit.hxx
+++ b/Boot/BootKit/BootKit.hxx
@@ -141,7 +141,7 @@ typedef UInt8* BlobType;
class BVersionString final
{
public:
- static const CharacterTypeUTF16* Shared()
+ static const CharacterTypeUTF16* The()
{
return BOOTLOADER_VERSION;
}
@@ -284,7 +284,7 @@ private:
EFI::ThrowError(L"Developer-Error", L"This is caused by the developer of the bootloader.");
}
- writer.Write((catalogKind->Kind == kNewFSCatalogKindFile) ? L"New Boot: Write-File: " : L"New Boot: Write-Directory: ").Write(blob->fFileName).Write(L"\r");
+ writer.Write((catalogKind->Kind == kNewFSCatalogKindFile) ? L"newosldr: Write-File: " : L"newosldr: Write-Directory: ").Write(blob->fFileName).Write(L"\r");
memcpy(catalogKind->Name, blob->fFileName, strlen(blob->fFileName));
@@ -360,7 +360,7 @@ inline Boolean BDiskFormatFactory<BootDev>::Format(const char* partName,
fDiskDev.Write(buf, sectorSz);
BTextWriter writer;
- writer.Write(L"New Boot: Write-Partition: OK.\r");
+ writer.Write(L"newosldr: Write-Partition: OK.\r");
return true;
}
diff --git a/Boot/ReadMe.md b/Boot/ReadMe.md
index d5f2b89e..ce5b30cd 100644
--- a/Boot/ReadMe.md
+++ b/Boot/ReadMe.md
@@ -1,4 +1,4 @@
-# NewBoot
+# newosldr
You need:
diff --git a/Boot/Sources/BootloaderRsrc.rsrc b/Boot/Sources/BootloaderRsrc.rsrc
index 0282192b..857e08e4 100644
--- a/Boot/Sources/BootloaderRsrc.rsrc
+++ b/Boot/Sources/BootloaderRsrc.rsrc
@@ -13,10 +13,10 @@ BEGIN
VALUE "CompanyName", "SoftwareLabs"
VALUE "FileDescription", "New OS multi-platform bootloader."
VALUE "FileVersion", BOOTLOADER_VERSION
- VALUE "InternalName", "NewBoot"
+ VALUE "InternalName", "newosldr"
VALUE "LegalCopyright", "Copyright SoftwareLabs, all rights reserved."
- VALUE "OriginalFilename", "NewOSLdr.exe"
- VALUE "ProductName", "NewBoot"
+ VALUE "OriginalFilename", "newosldr.exe"
+ VALUE "ProductName", "newosldr"
VALUE "ProductVersion", BOOTLOADER_VERSION
END
END
diff --git a/Boot/Sources/HEL/AMD64/BootATA.cxx b/Boot/Sources/HEL/AMD64/BootATA.cxx
index c82cb2ea..d2753110 100644
--- a/Boot/Sources/HEL/AMD64/BootATA.cxx
+++ b/Boot/Sources/HEL/AMD64/BootATA.cxx
@@ -81,7 +81,7 @@ ATAInit_Retry:
if (statRdy & ATA_SR_ERR)
{
writer.Write(
- L"New Boot: ATA: Select error, not an IDE based hard-drive.\r");
+ L"newosldr: ATA: Select error, not an IDE based hard-drive.\r");
return false;
}
diff --git a/Boot/Sources/HEL/AMD64/BootFileReader.cxx b/Boot/Sources/HEL/AMD64/BootFileReader.cxx
index 7ec6b7ab..e6e70509 100644
--- a/Boot/Sources/HEL/AMD64/BootFileReader.cxx
+++ b/Boot/Sources/HEL/AMD64/BootFileReader.cxx
@@ -57,13 +57,13 @@ BFileReader::BFileReader(const CharacterTypeUTF16* path,
if (BS->HandleProtocol(ImageHandle, &guidImg, (void**)&img) != kEfiOk)
{
- mWriter.Write(L"New Boot: Fetch-Protocol: No-Such-Protocol").Write(L"\r");
+ mWriter.Write(L"newosldr: Fetch-Protocol: No-Such-Protocol").Write(L"\r");
this->mErrorCode = kNotSupported;
}
if (BS->HandleProtocol(img->DeviceHandle, &guidEfp, (void**)&efp) != kEfiOk)
{
- mWriter.Write(L"New Boot: Fetch-Protocol: No-Such-Protocol").Write(L"\r");
+ mWriter.Write(L"newosldr: Fetch-Protocol: No-Such-Protocol").Write(L"\r");
this->mErrorCode = kNotSupported;
return;
}
@@ -72,7 +72,7 @@ BFileReader::BFileReader(const CharacterTypeUTF16* path,
if (efp->OpenVolume(efp, &rootFs) != kEfiOk)
{
- mWriter.Write(L"New Boot: Fetch-Protocol: No-Such-Volume").Write(L"\r");
+ mWriter.Write(L"newosldr: Fetch-Protocol: No-Such-Volume").Write(L"\r");
this->mErrorCode = kNotSupported;
return;
}
@@ -82,7 +82,7 @@ BFileReader::BFileReader(const CharacterTypeUTF16* path,
if (rootFs->Open(rootFs, &kernelFile, mPath, kEFIFileRead, kEFIReadOnly) !=
kEfiOk)
{
- mWriter.Write(L"New Boot: Fetch-Protocol: No-Such-Path: ")
+ mWriter.Write(L"newosldr: Fetch-Protocol: No-Such-Path: ")
.Write(mPath)
.Write(L"\r");
this->mErrorCode = kNotSupported;
diff --git a/Boot/Sources/HEL/AMD64/BootMain.cxx b/Boot/Sources/HEL/AMD64/BootMain.cxx
index f58709be..cb8bccba 100644
--- a/Boot/Sources/HEL/AMD64/BootMain.cxx
+++ b/Boot/Sources/HEL/AMD64/BootMain.cxx
@@ -68,8 +68,8 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle,
/// Splash screen stuff
- writer.Write(L"SoftwareLabs (R) New Boot: ")
- .Write(BVersionString::Shared());
+ writer.Write(L"SoftwareLabs (R) newosldr: ")
+ .Write(BVersionString::The());
writer.Write(L"\rNew Boot: Firmware Vendor: ")
.Write(SystemTable->FirmwareVendor)
@@ -99,7 +99,7 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle,
vendorTable[4] == 'P' && vendorTable[5] == 'T' &&
vendorTable[6] == 'R' && vendorTable[7] == ' ')
{
- writer.Write(L"New Boot: Found ACPI RSD PTR!\r");
+ writer.Write(L"newosldr: Found ACPI RSD PTR!\r");
handoverHdrPtr->f_HardwareTables.f_RsdPtr = (VoidPtr)vendorTable;
break;
diff --git a/Boot/Sources/HEL/POWER/CoreBootStartup.S b/Boot/Sources/HEL/POWER/CoreBootStartup.S
index f8ff99d7..ed39c3b5 100644
--- a/Boot/Sources/HEL/POWER/CoreBootStartup.S
+++ b/Boot/Sources/HEL/POWER/CoreBootStartup.S
@@ -13,7 +13,7 @@ boot_hdr_mag:
.ascii "CB"
boot_hdr_name:
// it has to match ten bytes.
- .asciz "NewBoot\0\0\0"
+ .asciz "newosldr\0\0"
boot_hdr_ver:
.word 0x104
boot_hdr_proc:
diff --git a/Boot/Sources/HEL/RISCV/BootRISCV.S b/Boot/Sources/HEL/RISCV/BootRISCV.S
index 7a7e7db0..b682d597 100644
--- a/Boot/Sources/HEL/RISCV/BootRISCV.S
+++ b/Boot/Sources/HEL/RISCV/BootRISCV.S
@@ -13,10 +13,10 @@ k_hdr_mag:
.ascii "LX"
k_hdr_name:
// it has to match ten bytes.
- .asciz "New OS\0\0\0\0"
+ .asciz "newosldr\0\0"
k_hdr_ver:
.word 0x104
k_hdr_proc:
- .long __bootloader_start
+ .long bootloader_start
/* end */ \ No newline at end of file
diff --git a/Boot/Sources/Root/SplashScreen.fmt b/Boot/Sources/Root/SplashScreen.fmt
index 863d7b62..42005568 100644
--- a/Boot/Sources/Root/SplashScreen.fmt
+++ b/Boot/Sources/Root/SplashScreen.fmt
@@ -1,7 +1,7 @@
==================================================================
Welcome to NeWS.
Brought to you by: Amlal EL Mahrouss.
-* NewBoot, NewKernel: Amlal EL Mahrouss.
-This copy can boot directly to NewKernel (Unified System).
+* newosldr, newoskrnl: Amlal EL Mahrouss.
+This copy can boot directly to newoskrnl (Unified System).
Copyright SoftwareLabs, all rights reserved.
==================================================================
diff --git a/Boot/makefile b/Boot/makefile
index 63883321..e979c309 100644
--- a/Boot/makefile
+++ b/Boot/makefile
@@ -26,8 +26,8 @@ BIOS=OVMF.fd
IMG=epm.img
IMG_2=epm-slave.img
-EMU_FLAGS=-net none -smp 4,sockets=1,cores=4,threads=1 -m 4G -M q35 \
- -bios Sources/$(BIOS) -device piix3-ide,id=ide \
+EMU_FLAGS=-net none -smp 2 -m 4G -M q35 \
+ -bios $(BIOS) -device piix3-ide,id=ide \
-drive id=disk,file=$(IMG),format=raw,if=none \
-device ide-hd,drive=disk,bus=ide.0 -drive \
file=fat:rw:Sources/Root,index=2,format=raw -d int -hdd $(IMG_2)
@@ -50,8 +50,8 @@ FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mno-red-zone -D__KERNEL__ -D__NEWBOOT__
-DEFI_FUNCTION_WRAPPER -I./ -I../Kernel -I./ -c -nostdlib -fno-rtti -fno-exceptions \
-std=c++20 -D__HAVE_MAHROUSS_APIS__ -D__MAHROUSS__ -D__BOOTLOADER__ -I./
-BOOT_LOADER=NewOSLdr.exe
-KERNEL=NewOSKrnl.exe
+BOOT_LOADER=newosldr.exe
+KERNEL=newoskrnl.exe
.PHONY: invalid-recipe
invalid-recipe:
@@ -92,7 +92,7 @@ download-edk:
$(HTTP_GET) https://retrage.github.io/edk2-nightly/bin/DEBUGX64_OVMF.fd -O OVMF.fd
BINS=*.bin
-EXECUTABLES=NewOSLdr.exe NewOSKrnl.exe OVMF.fd
+EXECUTABLES=newosldr.exe newoskrnl.exe OVMF.fd
TARGETS=$(REM_FLAG) $(OBJ) $(BIN) $(IMG) $(IMG_2) $(EXECUTABLES)
diff --git a/Kernel/DriverKit/KernelCall.c b/DDK/KernelCall.c
index d61f8439..26a0b83b 100644
--- a/Kernel/DriverKit/KernelCall.c
+++ b/DDK/KernelCall.c
@@ -6,11 +6,16 @@
------------------------------------------- */
-#include <DriverKit/KernelStd.h>
+#include <DDK/KernelStd.h>
#include <stdarg.h>
DK_EXTERN __attribute__((naked)) void __kernelDispatchCall(int32_t cnt, ...);
+/// @brief Execute a function on the kernel.
+/// @param kernelRpcName the name of the function.
+/// @param cnt number of arguments.
+/// @param
+/// @return
DK_EXTERN void* kernelCall(const char* kernelRpcName, int32_t cnt, ...)
{
if (!kernelRpcName || cnt == 0)
diff --git a/Kernel/DriverKit/KernelDev.c b/DDK/KernelDev.c
index 704f17da..ee7aa84b 100644
--- a/Kernel/DriverKit/KernelDev.c
+++ b/DDK/KernelDev.c
@@ -6,7 +6,7 @@
------------------------------------------- */
-#include <DriverKit/KernelDev.h>
+#include <DDK/KernelDev.h>
/// @brief Open a new binary device from path.
DK_EXTERN kernelDeviceRef kernelOpenBinaryDevice(const char* devicePath)
diff --git a/Kernel/DriverKit/KernelDev.h b/DDK/KernelDev.h
index c3435e8d..4710023a 100644
--- a/Kernel/DriverKit/KernelDev.h
+++ b/DDK/KernelDev.h
@@ -8,7 +8,7 @@
#pragma once
-#include <DriverKit/KernelStd.h>
+#include <DDK/KernelStd.h>
struct _kernelDevice;
diff --git a/Kernel/DriverKit/KernelDispatchCall.S b/DDK/KernelDispatchCall.S
index 64b6663e..64b6663e 100644
--- a/Kernel/DriverKit/KernelDispatchCall.S
+++ b/DDK/KernelDispatchCall.S
diff --git a/Kernel/DriverKit/KernelPrint.c b/DDK/KernelPrint.c
index 533bf34a..9e25d31b 100644
--- a/Kernel/DriverKit/KernelPrint.c
+++ b/DDK/KernelPrint.c
@@ -6,7 +6,7 @@
------------------------------------------- */
-#include <DriverKit/KernelPrint.h>
+#include <DDK/KernelPrint.h>
DK_EXTERN void kernelPrintChar(const char ch)
{
diff --git a/Kernel/DriverKit/KernelPrint.h b/DDK/KernelPrint.h
index 7bf0dda9..135abcc0 100644
--- a/Kernel/DriverKit/KernelPrint.h
+++ b/DDK/KernelPrint.h
@@ -8,7 +8,7 @@
#pragma once
-#include <DriverKit/KernelString.h>
+#include <DDK/KernelString.h>
/// @brief print character into UART.
DK_EXTERN void kernelPrintChar(const char ch);
diff --git a/Kernel/DriverKit/KernelStd.h b/DDK/KernelStd.h
index b0dba70e..b0dba70e 100644
--- a/Kernel/DriverKit/KernelStd.h
+++ b/DDK/KernelStd.h
diff --git a/Kernel/DriverKit/KernelStdCxx.cc b/DDK/KernelStdCxx.cc
index 99bcc579..7d8c9ff3 100644
--- a/Kernel/DriverKit/KernelStdCxx.cc
+++ b/DDK/KernelStdCxx.cc
@@ -6,13 +6,13 @@
------------------------------------------- */
-#include <DriverKit/KernelStd.h>
+#include <DDK/KernelStd.h>
void* operator new(size_t sz) {
if (!sz) ++sz;
auto ptr = kernelCall("NewKernelHeap", 1, sz);
- kernelCall("KernelHeapProtect", 1, ptr);
+ kernelCall("ProtectKernelHeap", 1, ptr);
return ptr;
}
diff --git a/Kernel/DriverKit/KernelString.c b/DDK/KernelString.c
index 6f28f4d8..1bd4c8c6 100644
--- a/Kernel/DriverKit/KernelString.c
+++ b/DDK/KernelString.c
@@ -6,7 +6,7 @@
------------------------------------------- */
-#include <DriverKit/KernelString.h>
+#include <DDK/KernelString.h>
DK_EXTERN size_t kernelStringLength(const char* str)
{
diff --git a/Kernel/DriverKit/KernelString.h b/DDK/KernelString.h
index db063a1b..d39aeea1 100644
--- a/Kernel/DriverKit/KernelString.h
+++ b/DDK/KernelString.h
@@ -8,9 +8,9 @@
#pragma once
-#include <DriverKit/KernelStd.h>
+#include <DDK/KernelStd.h>
-/// @brief DriverKit equivalent of POSIX's string.h.
+/// @brief DDK equivalent of POSIX's string.h.
DK_EXTERN size_t kernelStringLength(const char* str);
DK_EXTERN int kernelStringCopy(char* dst, const char* src, size_t len);
diff --git a/DDK/ReadMe.txt b/DDK/ReadMe.txt
new file mode 100644
index 00000000..e33c88ec
--- /dev/null
+++ b/DDK/ReadMe.txt
@@ -0,0 +1,4 @@
+== The Driver Kit ==
+
+-> A kit used to write user level drivers.
+-> Use MPCC to compile the code, it can work on a patched GNU compiler.
diff --git a/Kernel/Drivers/.gitkeep b/Drv/.gitkeep
index e69de29b..e69de29b 100644
--- a/Kernel/Drivers/.gitkeep
+++ b/Drv/.gitkeep
diff --git a/Kernel/Drivers/Bonjour/Bonjour.c b/Drv/Bonjour/Bonjour.c
index 52187ac1..93411e1f 100644
--- a/Kernel/Drivers/Bonjour/Bonjour.c
+++ b/Drv/Bonjour/Bonjour.c
@@ -4,8 +4,8 @@
------------------------------------------- */
-#include <DriverKit/KernelString.h>
-#include <DriverKit/KernelPrint.h>
+#include <DDK/KernelString.h>
+#include <DDK/KernelPrint.h>
int __ImageStart(void)
{
diff --git a/Kernel/Drivers/Bonjour/DriverRsrc.rsrc b/Drv/Bonjour/DriverRsrc.rsrc
index 494e85ee..d2f15f1e 100644
--- a/Kernel/Drivers/Bonjour/DriverRsrc.rsrc
+++ b/Drv/Bonjour/DriverRsrc.rsrc
@@ -1,4 +1,4 @@
-1 ICON "../../Root/Boot/Icons/bonjour-logo.ico"
+1 ICON "../../Kernel/Root/Boot/Icons/driver-logo.ico"
1 VERSIONINFO
FILEVERSION 1,0,0,0
@@ -9,7 +9,7 @@ BEGIN
BLOCK "080904E4"
BEGIN
VALUE "CompanyName", "SoftwareLabs"
- VALUE "FileDescription", "New OS Bonjour driver."
+ VALUE "FileDescription", "New OS Zeroconf driver."
VALUE "FileVersion", "1.00"
VALUE "InternalName", "Bonjour."
VALUE "LegalCopyright", "Copyright SoftwareLabs, all rights reserved."
diff --git a/Kernel/Drivers/Bonjour/x86_64.mk b/Drv/Bonjour/x86_64.mk
index b2493edf..6a020d28 100644
--- a/Kernel/Drivers/Bonjour/x86_64.mk
+++ b/Drv/Bonjour/x86_64.mk
@@ -30,7 +30,6 @@ invalid-recipe:
.PHONY: all
all: compile-amd64
$(LD_GNU) $(OBJ) $(LD_FLAGS) -o Bonjour.exe
- cp Bonjour.exe ../../Root/Boot/Bonjour.exe
ifneq ($(DEBUG_SUPPORT), )
DEBUG = -D__DEBUG__
@@ -39,7 +38,7 @@ endif
.PHONY: compile-amd64
compile-amd64:
$(WINDRES) DriverRsrc.rsrc -O coff -o DriverRsrc.o
- $(CC_GNU) $(FLAG_GNU) $(DEBUG) $(wildcard *.c) $(wildcard ../../DriverKit/*.c) $(wildcard ../../DriverKit/*.S)
+ $(CC_GNU) $(FLAG_GNU) $(DEBUG) $(wildcard *.c) $(wildcard ../../DDK/*.c) $(wildcard ../../DDK/*.S)
.PHONY: clean
clean:
diff --git a/Kernel/Drivers/SampleDriver/DriverRsrc.rsrc b/Drv/SampleDriver/DriverRsrc.rsrc
index 3a3b8774..dc819c7e 100644
--- a/Kernel/Drivers/SampleDriver/DriverRsrc.rsrc
+++ b/Drv/SampleDriver/DriverRsrc.rsrc
@@ -1,4 +1,4 @@
-1 ICON "../../Root/Boot/Icons/driver-logo.ico"
+1 ICON "../../Kernel/Root/Boot/Icons/driver-logo.ico"
1 VERSIONINFO
FILEVERSION 1,0,0,0
diff --git a/Kernel/Drivers/SampleDriver/SampleDriver.c b/Drv/SampleDriver/SampleDriver.c
index b92b1ef8..821927be 100644
--- a/Kernel/Drivers/SampleDriver/SampleDriver.c
+++ b/Drv/SampleDriver/SampleDriver.c
@@ -4,8 +4,8 @@
------------------------------------------- */
-#include <DriverKit/KernelString.h>
-#include <DriverKit/KernelPrint.h>
+#include <DDK/KernelString.h>
+#include <DDK/KernelPrint.h>
int __ImageStart(void)
{
@@ -22,4 +22,5 @@ int __ImageEnd(void)
///! @brief Use this to check your stack, if using MinGW/MSVC.
void ___chkstk_ms(void)
{
+ (void)0;
}
diff --git a/Kernel/Drivers/SampleDriver/x86_64.mk b/Drv/SampleDriver/x86_64.mk
index 5bdf0331..54ee54f0 100644
--- a/Kernel/Drivers/SampleDriver/x86_64.mk
+++ b/Drv/SampleDriver/x86_64.mk
@@ -30,7 +30,6 @@ invalid-recipe:
.PHONY: all
all: compile-amd64
$(LD_GNU) $(OBJ) $(LD_FLAGS) -o SampleDriver.exe
- cp SampleDriver.exe ../../Root/Boot/SampleDriver.exe
ifneq ($(DEBUG_SUPPORT), )
DEBUG = -D__DEBUG__
@@ -39,7 +38,7 @@ endif
.PHONY: compile-amd64
compile-amd64:
$(WINDRES) DriverRsrc.rsrc -O coff -o DriverRsrc.o
- $(CC_GNU) $(FLAG_GNU) $(DEBUG) $(wildcard *.c) $(wildcard ../../DriverKit/*.c) $(wildcard ../../DriverKit/*.S)
+ $(CC_GNU) $(FLAG_GNU) $(DEBUG) $(wildcard *.c) $(wildcard ../../DDK/*.c) $(wildcard ../../DDK/*.S)
.PHONY: clean
clean:
diff --git a/Kernel/ArchKit/ArchKit.hpp b/Kernel/ArchKit/ArchKit.hpp
index 83770272..fa899984 100644
--- a/Kernel/ArchKit/ArchKit.hpp
+++ b/Kernel/ArchKit/ArchKit.hpp
@@ -34,6 +34,47 @@ namespace NewOS
return hash;
}
+
+ /// @brief write to mapped memory register
+ /// @param base the base address.
+ /// @param reg the register.
+ /// @param value the write to write on it.
+ inline void ke_dma_write(UInt32 base, UInt32 reg, UInt32 value) noexcept
+ {
+ *(volatile UInt32*)((UInt64)base + reg) = value;
+ }
+
+ /// @brief read from mapped memory register.
+ /// @param base base address
+ /// @param reg the register.
+ /// @return the value inside the register.
+ inline UInt32 ke_dma_read(UInt32 base, UInt32 reg) noexcept
+ {
+ return *(volatile UInt32*)((UInt64)base + reg);
+ }
+
+ /// @brief Print a region of memory.
+ /// @param start
+ /// @param length
+ inline void ke_print_raw_memory(const void* start, Size length)
+ {
+ const UInt8* ptr = (const UInt8*)start;
+ for (Size i = 0; i < length; i++)
+ {
+ if (i % 16 == 0)
+ {
+ kcout << hex_number((UIntPtr)ptr + i);
+ }
+ else
+ {
+ kcout << hex_number(ptr[i]);
+ }
+
+ kcout << " ";
+ }
+
+ kcout << "\r";
+ }
} // namespace NewOS
#define kKernelMaxSystemCalls (256)
diff --git a/Kernel/Builtins/ACPI/ACPI.hxx b/Kernel/Builtins/ACPI/ACPI.hxx
index 13ea6ecc..430a39f4 100644
--- a/Kernel/Builtins/ACPI/ACPI.hxx
+++ b/Kernel/Builtins/ACPI/ACPI.hxx
@@ -15,7 +15,7 @@
namespace NewOS
{
- class SDT
+ class PACKED SDT
{
public:
Char Signature[4];
@@ -29,7 +29,7 @@ namespace NewOS
UInt32 CreatorRevision;
};
- class RSDP : public SDT
+ class PACKED RSDP : public SDT
{
public:
UInt32 RsdtAddress;
@@ -38,7 +38,7 @@ namespace NewOS
UInt8 Reserved0[3];
};
- class ConfigHeader
+ class PACKED ConfigHeader
{
public:
UInt64 BaseAddress;
@@ -59,7 +59,7 @@ namespace NewOS
Invalid = 0xFF,
};
- class Address
+ class PACKED Address
{
public:
AddressSpace AddressSpaceId;
@@ -68,6 +68,21 @@ namespace NewOS
UInt8 Reserved;
UIntPtr Address;
};
+
+ class PACKED RSDT
+ {
+ public:
+ Char Signature[4];
+ UInt32 Length;
+ UInt8 Revision;
+ Char Checksum;
+ Char OemId[6];
+ Char OemTableId[8];
+ UInt32 OemRev;
+ UInt32 CreatorID;
+ UInt32 CreatorRevision;
+ UInt32 AddressArr[];
+ };
} // namespace NewOS
#endif // !__ACPI__
diff --git a/Kernel/Docs/Explicit Partition Map.pdf b/Kernel/Docs/Explicit Partition Map.pdf
new file mode 100644
index 00000000..1e2f5318
--- /dev/null
+++ b/Kernel/Docs/Explicit Partition Map.pdf
Binary files differ
diff --git a/Kernel/Docs/SPECIFICATION.md b/Kernel/Docs/SPECIFICATION.md
index e218947e..6f9ac3d3 100644
--- a/Kernel/Docs/SPECIFICATION.md
+++ b/Kernel/Docs/SPECIFICATION.md
@@ -51,7 +51,7 @@
===================================
-# 4: The NewBoot
+# 4: The newosldr
===================================
diff --git a/Kernel/Docs/TODO-LIST.md b/Kernel/Docs/TODO-LIST.md
index b7780b9f..ed7b1cf9 100644
--- a/Kernel/Docs/TODO-LIST.md
+++ b/Kernel/Docs/TODO-LIST.md
@@ -18,6 +18,6 @@
Status:
-NewBoot: Need to boot from EPM partition.
+newosldr: Need to boot from EPM partition.
<br>
NewKernel: New Filesystem in progress.
diff --git a/Kernel/Drivers/MahroussUpdate/DriverRsrc.rsrc b/Kernel/Drivers/MahroussUpdate/DriverRsrc.rsrc
deleted file mode 100644
index 88261a47..00000000
--- a/Kernel/Drivers/MahroussUpdate/DriverRsrc.rsrc
+++ /dev/null
@@ -1,25 +0,0 @@
-1 ICON "../../Root/Boot/Icons/update-logo.ico"
-
-1 VERSIONINFO
-FILEVERSION 1,0,0,0
-PRODUCTVERSION 1,0,0,0
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "080904E4"
- BEGIN
- VALUE "CompanyName", "SoftwareLabs"
- VALUE "FileDescription", "New OS Mahrouss Update driver."
- VALUE "FileVersion", "1.00"
- VALUE "InternalName", "Mahrouss Update."
- VALUE "LegalCopyright", "Copyright SoftwareLabs, all rights reserved."
- VALUE "OriginalFilename", "MahroussUpdate.exe"
- VALUE "ProductName", "MahroussUpdate."
- VALUE "ProductVersion", "1.00"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x809, 1252
- END
-END
diff --git a/Kernel/Drivers/MahroussUpdate/MahroussUpdate.cc b/Kernel/Drivers/MahroussUpdate/MahroussUpdate.cc
deleted file mode 100644
index eb8d03c7..00000000
--- a/Kernel/Drivers/MahroussUpdate/MahroussUpdate.cc
+++ /dev/null
@@ -1,24 +0,0 @@
-/* -------------------------------------------
-
- Copyright SoftwareLabs
-
-------------------------------------------- */
-
-#include <DriverKit/KernelString.h>
-#include <DriverKit/KernelPrint.h>
-
-#include <Drivers/MahroussUpdate/MahroussUpdate.hxx>
-
-DK_EXTERN int __ImageStart(void) {
- kernelPrintStr("Mahrouss Update: Looking for updates...\r");
- UpdateRequest req("mup://release-mahrouss.logic/newos/");
-
- return 0;
-}
-
-DK_EXTERN int __ImageEnd(void) {
- return 0;
-}
-
-///! @brief Use this to check your stack, if using MinGW/MSVC.
-DK_EXTERN void ___chkstk_ms(void) {}
diff --git a/Kernel/Drivers/MahroussUpdate/MahroussUpdate.hxx b/Kernel/Drivers/MahroussUpdate/MahroussUpdate.hxx
deleted file mode 100644
index dbcaed43..00000000
--- a/Kernel/Drivers/MahroussUpdate/MahroussUpdate.hxx
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -------------------------------------------
-
- Copyright SoftwareLabs
-
-------------------------------------------- */
-
-#pragma once
-
-#include <DriverKit/KernelString.h>
-
-#include "DriverKit/KernelPrint.h"
-
-/// @file Software update job driver.
-
-class UpdateRequest;
-class UpdateRequestObserver;
-
-class UpdateRequest
-{
-public:
- explicit UpdateRequest(const char* patchUrl = "mup://invalid-url-scheme/")
- {
- kernelStringCopy(this->fPatchUrl, patchUrl, kernelStringLength(patchUrl));
-
- kernelPrintStr("Mahrouss Update, Looking at: ");
- kernelPrintStr(patchUrl);
- kernelPrintChar('\r');
- kernelPrintChar('\n');
- }
-
- ~UpdateRequest()
- {
- }
-
-private:
- char fPatchUrl[4096] = {0};
-};
diff --git a/Kernel/Drivers/MahroussUpdate/x86_64.mk b/Kernel/Drivers/MahroussUpdate/x86_64.mk
deleted file mode 100644
index 13b30d59..00000000
--- a/Kernel/Drivers/MahroussUpdate/x86_64.mk
+++ /dev/null
@@ -1,53 +0,0 @@
-##################################################
-# (C) SoftwareLabs, all rights reserved.
-# This is the sample driver makefile.
-##################################################
-
-CC_GNU=x86_64-w64-mingw32-gcc
-LD_GNU=x86_64-w64-mingw32-ld
-
-WINDRES=x86_64-w64-mingw32-windres
-
-ADD_FILE=touch
-COPY=cp
-HTTP_GET=wget
-
-LD_FLAGS=-e __ImageStart --subsystem=17
-
-OBJ=*.o
-
-
-REM=rm
-REM_FLAG=-f
-
-FLAG_ASM=-f win64
-FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mgeneral-regs-only -mno-red-zone -D__KERNEL__ -DEFI_FUNCTION_WRAPPER -I../ -I../../ -I./ -c -ffreestanding -D__HAVE_MAHROUSS_APIS__ -D__MAHROUSS__ -D__BOOTLOADER__ -I./
-
-.PHONY: invalid-recipe
-invalid-recipe:
- @echo "invalid-recipe: Use make all instead."
-
-.PHONY: all
-all: compile-amd64
- $(LD_GNU) $(OBJ) $(LD_FLAGS) -o MahroussUpdate.exe
- cp MahroussUpdate.exe ../../Root/Boot/MahroussUpdate.exe
-
-ifneq ($(DEBUG_SUPPORT), )
-DEBUG = -D__DEBUG__
-endif
-
-.PHONY: compile-amd64
-compile-amd64:
- $(WINDRES) DriverRsrc.rsrc -O coff -o DriverRsrc.o
- $(CC_GNU) $(FLAG_GNU) -std=c17 $(DEBUG) $(wildcard *.c) $(wildcard ../../DriverKit/*.c) $(wildcard ../../DriverKit/*.S)
- $(CC_GNU) $(FLAG_GNU) -std=c++17 -fno-rtti -fno-exceptions $(DEBUG) $(wildcard *.cc) $(wildcard ../../DriverKit/*.cc)
-
-.PHONY: clean
-clean:
- $(REM) $(REM_FLAG) $(OBJ) MahroussUpdate.exe
-
-.PHONY: help
-help:
- @echo "=== HELP ==="
- @echo "clean: Clean driver."
- @echo "compile-amd64: Build driver."
diff --git a/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx b/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx
index ff5372f4..14241f60 100644
--- a/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx
+++ b/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx
@@ -7,6 +7,8 @@
#include <Builtins/ACPI/ACPIFactoryInterface.hxx>
#include <HALKit/AMD64/Processor.hpp>
#include <NewKit/String.hpp>
+#include <ArchKit/ArchKit.hpp>
+#include <KernelKit/KernelHeap.hpp>
namespace NewOS
{
@@ -61,44 +63,53 @@ namespace NewOS
MUST_PASS(fRsdp);
if (!signature)
- return ErrorOr<voidPtr>{-2};
+ return ErrorOr<voidPtr>{-1};
if (*signature == 0)
- return ErrorOr<voidPtr>{-3};
+ return ErrorOr<voidPtr>{-1};
RSDP* rsdPtr = reinterpret_cast<RSDP*>(this->fRsdp);
if (rsdPtr->Revision <= 1)
- {
- return ErrorOr<voidPtr>{-4};
- }
+ return ErrorOr<voidPtr>{-1};
+
+ RSDT* xsdt = (RSDT*)(rsdPtr->RsdtAddress);
- SDT* xsdt = (SDT*)(rsdPtr->XsdtAddress >> (rsdPtr->XsdtAddress & 0xFFF));
+ Int64 num = (xsdt->Length - sizeof(SDT)) / sizeof(UInt32);
- SizeT num = -(xsdt->Length - sizeof(SDT)) / 8;
+ if (num < 1)
+ {
+ /// stop here, we should have entries...
+ ke_stop(RUNTIME_CHECK_ACPI);
+ return ErrorOr<voidPtr>{-1};
+ }
this->fEntries = num;
- kcout << "ACPI: Number of entries: " << number(num) << endl;
+ kcout << "ACPI: Number of entries: " << number(this->fEntries) << endl;
+ kcout << "ACPI: Revision: " << number(xsdt->Revision) << endl;
+ kcout << "ACPI: Signature: " << xsdt->Signature << endl;
kcout << "ACPI: Address of XSDT: " << hex_number((UIntPtr)xsdt) << endl;
- constexpr short ACPI_SIGNATURE_LENGTH = 4;
+ const short cAcpiSignatureLength = 4;
for (Size index = 0; index < this->fEntries; ++index)
{
- SDT& sdt = xsdt[index];
+ SDT& sdt = *(SDT*)xsdt->AddressArr[index];
+
+ kcout << "ACPI: Revision: " << number(sdt.CreatorID) << endl;
- for (short signature_index = 0; signature_index < ACPI_SIGNATURE_LENGTH; ++signature_index)
+ for (short signature_index = 0; signature_index < cAcpiSignatureLength; ++signature_index)
{
if (sdt.Signature[signature_index] != signature[signature_index])
break;
- if (signature_index == 4)
+ if (signature_index == (cAcpiSignatureLength - 1))
return ErrorOr<voidPtr>(reinterpret_cast<voidPtr>(&sdt));
}
}
- return ErrorOr<voidPtr>{nullptr};
+ return ErrorOr<voidPtr>{-1};
}
/***
diff --git a/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp b/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp
index 9477ecb7..6d831d3b 100644
--- a/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp
+++ b/Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp
@@ -5,23 +5,23 @@
------------------------------------------- */
#include <ArchKit/ArchKit.hpp>
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <NewKit/String.hpp>
/// @brief Handle GPF fault.
/// @param rsp
EXTERN_C void idt_handle_gpf(NewOS::UIntPtr rsp)
{
- MUST_PASS(NewOS::ProcessScheduler::Shared().Leak().GetCurrent());
+ MUST_PASS(NewOS::ProcessScheduler::The().Leak().GetCurrent());
- NewOS::kcout << "New OS: Stack Pointer: "
+ NewOS::kcout << "newoskrnl: Stack Pointer: "
<< NewOS::StringBuilder::FromInt("rsp{%}", rsp);
NewOS::kcout
- << "New OS: General Protection Fault, caused by "
- << NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().GetName();
+ << "newoskrnl: General Protection Fault, caused by "
+ << NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().GetName();
- NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
}
/// @brief Handle the scheduler interrupt, raised from the HPET timer.
@@ -31,14 +31,14 @@ EXTERN_C void idt_handle_scheduler(NewOS::UIntPtr rsp)
NewOS::kcout << NewOS::StringBuilder::FromInt("rsp{%}", rsp);
NewOS::kcout
- << "New OS: Will be scheduled back later "
- << NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().GetName()
+ << "newoskrnl: Will be scheduled back later "
+ << NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().GetName()
<< NewOS::end_line();
/// schedule another process.
if (!NewOS::ProcessHelper::StartScheduling())
{
- NewOS::kcout << "New OS: Continue schedule this process...\r";
+ NewOS::kcout << "newoskrnl: Continue schedule this process...\r";
}
}
@@ -46,56 +46,56 @@ EXTERN_C void idt_handle_scheduler(NewOS::UIntPtr rsp)
/// @param rsp
EXTERN_C void idt_handle_pf(NewOS::UIntPtr rsp)
{
- MUST_PASS(NewOS::ProcessScheduler::Shared().Leak().GetCurrent());
+ MUST_PASS(NewOS::ProcessScheduler::The().Leak().GetCurrent());
NewOS::kcout << NewOS::StringBuilder::FromInt("rsp{%}", rsp);
NewOS::kcout
- << "New OS: Segmentation Fault, caused by "
- << NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().GetName();
+ << "newoskrnl: Segmentation Fault, caused by "
+ << NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().GetName();
- NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
}
/// @brief Handle math fault.
/// @param rsp
EXTERN_C void idt_handle_math(NewOS::UIntPtr rsp)
{
- MUST_PASS(NewOS::ProcessScheduler::Shared().Leak().GetCurrent());
+ MUST_PASS(NewOS::ProcessScheduler::The().Leak().GetCurrent());
NewOS::kcout << NewOS::StringBuilder::FromInt("rsp{%}", rsp);
NewOS::kcout
- << "New OS: Math error, caused by "
- << NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().GetName();
+ << "newoskrnl: Math error, caused by "
+ << NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().GetName();
- NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
}
/// @brief Handle any generic fault.
/// @param rsp
EXTERN_C void idt_handle_generic(NewOS::UIntPtr rsp)
{
- MUST_PASS(NewOS::ProcessScheduler::Shared().Leak().GetCurrent());
+ MUST_PASS(NewOS::ProcessScheduler::The().Leak().GetCurrent());
NewOS::kcout << NewOS::StringBuilder::FromInt("sp{%}", rsp);
NewOS::kcout
- << "New OS: Execution error, caused by "
- << NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().GetName();
+ << "newoskrnl: Execution error, caused by "
+ << NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().GetName();
- NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
}
/// @brief Handle #UD fault.
/// @param rsp
EXTERN_C void idt_handle_ud(NewOS::UIntPtr rsp)
{
- MUST_PASS(NewOS::ProcessScheduler::Shared().Leak().GetCurrent());
+ MUST_PASS(NewOS::ProcessScheduler::The().Leak().GetCurrent());
- NewOS::kcout << "New OS: Stack Pointer: "
+ NewOS::kcout << "newoskrnl: Stack Pointer: "
<< NewOS::StringBuilder::FromInt("rsp{%}", rsp);
NewOS::kcout
- << "New OS: Invalid interrupt, caused by "
- << NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().GetName();
+ << "newoskrnl: Invalid interrupt, caused by "
+ << NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().GetName();
- NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ NewOS::ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
}
diff --git a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp
index abd19586..a184efc2 100644
--- a/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp
+++ b/Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp
@@ -7,6 +7,12 @@
#include <Builtins/ACPI/ACPIFactoryInterface.hxx>
#include <HALKit/AMD64/Processor.hpp>
#include <NewKit/KernelCheck.hpp>
+#include <ArchKit/ArchKit.hpp>
+
+#define kAPIC_ICR_Low 0x300
+#define kAPIC_ICR_High 0x310
+#define kAPIC_SIPI_Vector 0x00500
+#define kAPIC_EIPI_Vector 0x00400
///////////////////////////////////////////////////////////////////////////////////////
@@ -62,7 +68,7 @@ namespace NewOS::HAL
struct MadtProcessorLocalApic final
{
Char AcpiProcessorId;
- Char Reserved;
+ Char ApicId;
UInt32 Flags;
};
@@ -102,19 +108,51 @@ namespace NewOS::HAL
///////////////////////////////////////////////////////////////////////////////////////
- void hal_system_get_cores(voidPtr rsdPtr)
+ /// @brief Send start IPI for CPU.
+ /// @param apicId
+ /// @param vector
+ /// @param targetAddress
+ /// @return
+ Void hal_send_start_ipi(UInt32 apicId, UInt8 vector, UInt32 targetAddress)
+ {
+ NewOS::ke_dma_write(targetAddress, kAPIC_ICR_High, apicId << 24);
+ NewOS::ke_dma_write(targetAddress, kAPIC_ICR_Low, kAPIC_SIPI_Vector | vector);
+ }
+
+ /// @brief Send end IPI for CPU.
+ /// @param apicId
+ /// @param vector
+ /// @param targetAddress
+ /// @return
+ Void hal_send_end_ipi(UInt32 apicId, UInt8 vector, UInt32 targetAddress)
+ {
+ NewOS::ke_dma_write(targetAddress, kAPIC_ICR_High, apicId << 24);
+ NewOS::ke_dma_write(targetAddress, kAPIC_ICR_Low, kAPIC_EIPI_Vector | vector);
+ }
+
+ Void hal_system_get_cores(voidPtr rsdPtr)
{
auto acpi = ACPIFactoryInterface(rsdPtr);
kApicMadt = acpi.Find(kApicSignature).Leak().Leak();
- if (kApicMadt)
+ if (kApicMadt != nullptr)
{
- kcout << "New OS: APIC is present...\r";
- kApicInfoBlock = (MadtType*)kApicMadt;
+ MadtType* madt = (MadtType*)kApicMadt;
+
+ constexpr auto cMaxProbableCores = 4;
+
+ for (SizeT i = 0; i < cMaxProbableCores; ++i)
+ {
+ if (madt->MadtRecords[i].Flags == 0x01) // if local apic.
+ {
+ // then register as a core for scheduler.
+ kcout << "newoskrnl: register core as scheduler thread.\r";
+ }
+ }
}
else
{
- kcout << "New OS: APIC is not present! it is a vital component.\r";
+ kcout << "newoskrnl: APIC is not present! it is a vital component.\r";
ke_stop(RUNTIME_CHECK_FAILED);
}
}
diff --git a/Kernel/HALKit/AMD64/HalDebugOutput.cxx b/Kernel/HALKit/AMD64/HalDebugOutput.cxx
index 3cec26df..22d5c072 100644
--- a/Kernel/HALKit/AMD64/HalDebugOutput.cxx
+++ b/Kernel/HALKit/AMD64/HalDebugOutput.cxx
@@ -132,7 +132,7 @@ namespace NewOS
#endif // __DEBUG__
}
- TerminalDevice& TerminalDevice::Shared() noexcept
+ TerminalDevice& TerminalDevice::The() noexcept
{
static TerminalDevice* out = nullptr;
diff --git a/Kernel/HALKit/AMD64/HalKernelMain.cxx b/Kernel/HALKit/AMD64/HalKernelMain.cxx
index 07656060..3136bf76 100644
--- a/Kernel/HALKit/AMD64/HalKernelMain.cxx
+++ b/Kernel/HALKit/AMD64/HalKernelMain.cxx
@@ -11,7 +11,7 @@
#include <KernelKit/Framebuffer.hpp>
#include <KernelKit/KernelHeap.hpp>
#include <KernelKit/PEFCodeManager.hxx>
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <KernelKit/UserHeap.hpp>
#include <NewKit/Json.hpp>
diff --git a/Kernel/HALKit/AMD64/HalSMPCore.cxx b/Kernel/HALKit/AMD64/HalSMPCore.cxx
index 90703e13..7aa13068 100644
--- a/Kernel/HALKit/AMD64/HalSMPCore.cxx
+++ b/Kernel/HALKit/AMD64/HalSMPCore.cxx
@@ -4,7 +4,7 @@
------------------------------------------- */
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
using namespace NewOS;
Void ProcessHeader::SetEntrypoint(UIntPtr& imageStart) noexcept
diff --git a/Kernel/HALKit/AMD64/Processor.hpp b/Kernel/HALKit/AMD64/Processor.hpp
index 235e425d..4916d845 100644
--- a/Kernel/HALKit/AMD64/Processor.hpp
+++ b/Kernel/HALKit/AMD64/Processor.hpp
@@ -17,6 +17,7 @@
#include <NewKit/Defines.hpp>
#include <NewKit/Utils.hpp>
#include <FirmwareKit/Handover.hxx>
+#include <HALKit/AMD64/HalPageAlloc.hpp>
#ifdef kCPUBackendName
#undef kCPUBackendName
@@ -53,6 +54,68 @@ namespace NewOS
namespace NewOS::HAL
{
+
+ enum
+ {
+ eFlagsUser,
+ eFlagsRw,
+ eFlagsExecDisable
+ };
+
+ /// @brief Map address to PDE.
+ /// @param pde a valid page directory.
+ /// @param phys_addr a valid phyiscal address.
+ /// @param virt_addr a valid virtual address.
+ /// @param flags the flags to put on the page.
+ inline Int32 ke_map_address(PDE* pde, UIntPtr phys_addr, UIntPtr virt_addr, UInt32 flags)
+ {
+ UInt16 pml4_index = (virt_addr >> 39) & 0x1FF;
+
+ if (!pde->Pte[pml4_index].Present)
+ {
+ pde->Pte[pml4_index].Present = true;
+ kcout << "PM is present now.\r";
+
+ pde->Pte[pml4_index].PhysicalAddress = phys_addr;
+ pde->Pte[pml4_index].Rw = flags & eFlagsRw;
+ pde->Pte[pml4_index].User = flags & eFlagsUser;
+ pde->Pte[pml4_index].ExecDisable = flags & eFlagsExecDisable;
+
+ return 0;
+ }
+ else
+ {
+ kcout << "PM is already present.\r";
+
+ kcout << "PhysicalAddress: " << hex_number(pde->Pte[pml4_index].PhysicalAddress) << endl;
+ kcout << "User: " << (pde->Pte[pml4_index].User ? "yes" : "no") << "\r";
+ kcout << "RW: " << (pde->Pte[pml4_index].Rw ? "yes" : "no") << "\r";
+
+ return 1;
+ }
+
+ return 0;
+ }
+
+ /// @brief Map address to PDE.
+ /// @param pde
+ /// @param phys_addr
+ /// @param virt_addr
+ /// @param flags
+ inline void ke_unmap_address(PDE* pde, UIntPtr phys_addr, UIntPtr virt_addr, UInt32 flags)
+ {
+ UInt16 pml4_index = (virt_addr >> 39) & 0x1FF;
+
+ if (pde->Pte[pml4_index].Present)
+ {
+ pde->Pte[pml4_index].Present = false;
+ pde->Pte[pml4_index].PhysicalAddress = 0;
+ pde->Pte[pml4_index].Rw = 0;
+ pde->Pte[pml4_index].User = 0;
+ pde->Pte[pml4_index].ExecDisable = 0;
+ }
+ }
+
EXTERN_C UChar In8(UInt16 port);
EXTERN_C UShort In16(UInt16 port);
EXTERN_C UInt In32(UInt16 port);
@@ -162,6 +225,8 @@ namespace NewOS::HAL
};
Void hal_system_get_cores(VoidPtr rsdPtr);
+ Void hal_send_start_ipi(UInt32 apicId, UInt8 vector, UInt32 targetAddress);
+ Void hal_send_end_ipi(UInt32 apicId, UInt8 vector, UInt32 targetAddress);
/// @brief Processor specific structures.
namespace Detail
diff --git a/Kernel/HALKit/AMD64/Storage/AHCI.cxx b/Kernel/HALKit/AMD64/Storage/AHCI.cxx
index 93cef10c..a8045617 100644
--- a/Kernel/HALKit/AMD64/Storage/AHCI.cxx
+++ b/Kernel/HALKit/AMD64/Storage/AHCI.cxx
@@ -43,7 +43,7 @@ NewOS::Boolean drv_std_init(NewOS::UInt16& PortsImplemented)
iterator[devIndex].Leak().EnableMmio(); /// enable the memory i/o for this ahci device.
kAhciDevice = iterator[devIndex].Leak(); /// and then leak the reference.
- kcout << "New Kernel: [PCI] Found AHCI controller.\r";
+ kcout << "newoskrnl: [PCI] Found AHCI controller.\r";
return true;
}
diff --git a/Kernel/KernelKit/DebugOutput.hpp b/Kernel/KernelKit/DebugOutput.hpp
index 594ca701..3acee338 100644
--- a/Kernel/KernelKit/DebugOutput.hpp
+++ b/Kernel/KernelKit/DebugOutput.hpp
@@ -73,26 +73,26 @@ namespace NewOS
NEWOS_COPY_DEFAULT(TerminalDevice);
- static TerminalDevice& Shared() noexcept;
+ static TerminalDevice& The() noexcept;
};
inline TerminalDevice& end_line()
{
- TerminalDevice& selfTerm = TerminalDevice::Shared();
+ TerminalDevice& selfTerm = TerminalDevice::The();
selfTerm << "\r";
return selfTerm;
}
inline TerminalDevice& carriage_return()
{
- TerminalDevice& selfTerm = TerminalDevice::Shared();
+ TerminalDevice& selfTerm = TerminalDevice::The();
selfTerm << "\r";
return selfTerm;
}
inline TerminalDevice& tabulate()
{
- TerminalDevice& selfTerm = TerminalDevice::Shared();
+ TerminalDevice& selfTerm = TerminalDevice::The();
selfTerm << "\t";
return selfTerm;
}
@@ -100,7 +100,7 @@ namespace NewOS
/// @brief emulate a terminal bell, like the VT100 does.
inline TerminalDevice& bell()
{
- TerminalDevice& selfTerm = TerminalDevice::Shared();
+ TerminalDevice& selfTerm = TerminalDevice::The();
selfTerm << "\a";
return selfTerm;
}
@@ -166,7 +166,7 @@ namespace NewOS
inline TerminalDevice& hex_number(const Long& x)
{
- TerminalDevice& selfTerm = TerminalDevice::Shared();
+ TerminalDevice& selfTerm = TerminalDevice::The();
selfTerm << "0x";
Detail::_write_number_hex(x, selfTerm);
@@ -176,7 +176,7 @@ namespace NewOS
inline TerminalDevice& number(const Long& x)
{
- TerminalDevice& selfTerm = TerminalDevice::Shared();
+ TerminalDevice& selfTerm = TerminalDevice::The();
Detail::_write_number(x, selfTerm);
@@ -185,7 +185,7 @@ namespace NewOS
inline TerminalDevice& get_console_in(Char* buf)
{
- TerminalDevice& selfTerm = TerminalDevice::Shared();
+ TerminalDevice& selfTerm = TerminalDevice::The();
selfTerm >> buf;
return selfTerm;
}
@@ -204,5 +204,5 @@ namespace NewOS
#undef kcout
#endif // ifdef kcout
-#define kcout TerminalDevice::Shared()
+#define kcout TerminalDevice::The()
#define endl end_line()
diff --git a/Kernel/KernelKit/DeviceManager.hpp b/Kernel/KernelKit/DeviceManager.hpp
index 6e2a803f..dc53fed5 100644
--- a/Kernel/KernelKit/DeviceManager.hpp
+++ b/Kernel/KernelKit/DeviceManager.hpp
@@ -21,8 +21,6 @@
#include <NewKit/ErrorOr.hpp>
#include <NewKit/Ref.hpp>
-#define kDriveManagerCount 4U
-
// Last Rev
// Wed, Apr 3, 2024 9:09:41 AM
@@ -70,7 +68,7 @@ namespace NewOS
}
bool operator!()
{
- return !fOut && !fIn;
+ return !fOut || !fIn;
}
private:
diff --git a/Kernel/KernelKit/DriveManager.hxx b/Kernel/KernelKit/DriveManager.hxx
index 7978221a..01058d00 100644
--- a/Kernel/KernelKit/DriveManager.hxx
+++ b/Kernel/KernelKit/DriveManager.hxx
@@ -14,8 +14,10 @@
#include <NewKit/Defines.hpp>
#include <NewKit/String.hpp>
-#define kDriveInvalidID -1
-#define kDriveNameLen 32
+#define kDriveManagerCount (4U)
+
+#define kDriveInvalidID (-1)
+#define kDriveNameLen (32)
namespace NewOS
{
@@ -111,7 +113,7 @@ namespace NewOS
return &mD;
default: {
DbgLastError() = kErrorNoSuchDisk;
- kcout << "New OS: No such disk.\n";
+ kcout << "newoskrnl: No such disk.\n";
break;
}
diff --git a/Kernel/KernelKit/Framebuffer.hpp b/Kernel/KernelKit/Framebuffer.hpp
index fd4eff04..1f189e77 100644
--- a/Kernel/KernelKit/Framebuffer.hpp
+++ b/Kernel/KernelKit/Framebuffer.hpp
@@ -39,6 +39,7 @@ namespace NewOS
: fFrameBufferAddr(addr)
{
}
+
~Framebuffer()
{
}
diff --git a/Kernel/KernelKit/KernelHeap.hpp b/Kernel/KernelKit/KernelHeap.hpp
index c7b898ed..e2ab19b5 100644
--- a/Kernel/KernelKit/KernelHeap.hpp
+++ b/Kernel/KernelKit/KernelHeap.hpp
@@ -36,4 +36,9 @@ namespace NewOS
/// @param heapPtr HIB pointer.
/// @return if it valid: point has crc now., otherwise fail.
Boolean ke_protect_ke_heap(VoidPtr heapPtr);
+
+ /// @brief Makes a kernel heap page.
+ /// @param heapPtr
+ /// @return
+ Int32 ke_make_ke_page(VoidPtr heapPtr);
} // namespace NewOS
diff --git a/Kernel/KernelKit/PEF.hpp b/Kernel/KernelKit/PEF.hpp
index 1874aa4e..98a413aa 100644
--- a/Kernel/KernelKit/PEF.hpp
+++ b/Kernel/KernelKit/PEF.hpp
@@ -44,7 +44,7 @@ namespace NewOS
{
kPefSubArchAMD,
kPefSubArchIntel,
- kPefSubArchARM,
+ kPefSubArchGeneric,
kPefSubArchIBM,
};
diff --git a/Kernel/KernelKit/ProcessScheduler.hpp b/Kernel/KernelKit/ProcessScheduler.hxx
index 8670691f..bd8cb628 100644
--- a/Kernel/KernelKit/ProcessScheduler.hpp
+++ b/Kernel/KernelKit/ProcessScheduler.hxx
@@ -14,7 +14,7 @@
#include <KernelKit/UserHeap.hpp>
#include <NewKit/MutableArray.hpp>
-#define kSchedMinMicroTime AffinityKind::kHartStandard
+#define kSchedMinMicroTime (AffinityKind::kHartStandard)
#define kSchedInvalidPID (-1)
#define kSchedProcessLimitPerTeam (100U)
@@ -163,9 +163,9 @@ namespace NewOS
enum
{
- kAppKind = 3,
- kLibKind = 3,
- kDriverKind = 0,
+ kAppKind = 1,
+ kShLibKind = 2,
+ kDriverKind = 3,
kKindCount,
};
@@ -270,7 +270,7 @@ namespace NewOS
SizeT Run() noexcept;
public:
- static Ref<ProcessScheduler&> Shared();
+ static Ref<ProcessScheduler&> The();
private:
ProcessTeam mTeam;
diff --git a/Kernel/KernelKit/SMPManager.hpp b/Kernel/KernelKit/SMPManager.hpp
index 12260a33..eb8c908a 100644
--- a/Kernel/KernelKit/SMPManager.hpp
+++ b/Kernel/KernelKit/SMPManager.hpp
@@ -105,7 +105,7 @@ namespace NewOS
public:
/// @brief Shared instance of the SMP Manager.
/// @return the reference to the smp manager.
- static Ref<SMPManager> Shared();
+ static Ref<SMPManager> The();
public:
/// @brief Returns the amount of threads present in the system.
diff --git a/Kernel/KernelKit/ThreadLocalStorage.inl b/Kernel/KernelKit/ThreadLocalStorage.inl
index 6407900f..a8269a14 100644
--- a/Kernel/KernelKit/ThreadLocalStorage.inl
+++ b/Kernel/KernelKit/ThreadLocalStorage.inl
@@ -7,7 +7,7 @@
//! @brief Allocates a pointer from the process's tls.
#ifndef __PROCESS_MANAGER__
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#endif
template <typename T>
@@ -15,9 +15,9 @@ inline T* tls_new_ptr(void)
{
using namespace NewOS;
- MUST_PASS(ProcessScheduler::Shared().Leak().GetCurrent());
+ MUST_PASS(ProcessScheduler::The().Leak().GetCurrent());
- auto ref_process = ProcessScheduler::Shared().Leak().GetCurrent();
+ auto ref_process = ProcessScheduler::The().Leak().GetCurrent();
T* pointer = (T*)ref_process.Leak().New(sizeof(T));
return pointer;
@@ -32,9 +32,9 @@ inline bool tls_delete_ptr(T* ptr)
using namespace NewOS;
- MUST_PASS(ProcessScheduler::Shared().Leak().GetCurrent());
+ MUST_PASS(ProcessScheduler::The().Leak().GetCurrent());
- auto ref_process = ProcessScheduler::Shared().Leak().GetCurrent();
+ auto ref_process = ProcessScheduler::The().Leak().GetCurrent();
return ref_process.Leak().Delete(ptr, sizeof(T));
}
diff --git a/Kernel/KernelKit/XCOFF.hxx b/Kernel/KernelKit/XCOFF.hxx
index f2e49c4c..55e37bfd 100644
--- a/Kernel/KernelKit/XCOFF.hxx
+++ b/Kernel/KernelKit/XCOFF.hxx
@@ -16,12 +16,15 @@
#include <NewKit/Defines.hpp>
-#define kXCOFF64Magic (0x01F7)
+#define cXCOFF64Magic (0x01F7)
-#define kXCOFFRelFlg (0x0001)
-#define kXCOFFExecutable (0x0002)
-#define kXCOFFLnno (0x0004)
-#define kXCOFFLSyms (0x0008)
+#define cXCOFFRelFlg (0x0001)
+#define cXCOFFExecutable (0x0002)
+#define cXCOFFLnno (0x0004)
+#define cXCOFFLSyms (0x0008)
+
+struct XCoffFileHeader;
+struct XCoffForkHeader;
/// @brief XCoff file header, meant for POWER apps.
typedef struct XCoffFileHeader
@@ -33,6 +36,15 @@ typedef struct XCoffFileHeader
NewOS::UIntPtr fSymPtr;
NewOS::UInt32 fNumSyms;
NewOS::UInt16 fOptHdr; // ?: Number of bytes in optional header
-} XCoffFileHeader;
+} XCoffFileHeader32, XCoffFileHeader64;
+
+#define cForkNameLen (255)
+
+/// @brief This the executable manifest fork.
+typedef struct XCoffForkHeader {
+ NewOS::Char fPropertiesXMLFork[cForkNameLen];
+ NewOS::Char fDynamicLoaderFork[cForkNameLen];
+ NewOS::Char fCodeSignFork[cForkNameLen];
+} XCoffForkHeader;
#endif // ifndef __XCOFF__
diff --git a/Kernel/KernelRsrc.rsrc b/Kernel/KernelRsrc.rsrc
index 6689d10c..56c94a06 100644
--- a/Kernel/KernelRsrc.rsrc
+++ b/Kernel/KernelRsrc.rsrc
@@ -11,12 +11,12 @@ BEGIN
BLOCK "080904E4"
BEGIN
VALUE "CompanyName", "SoftwareLabs"
- VALUE "FileDescription", "New OS multiplatform kernel."
+ VALUE "FileDescription", "NuX/OS kernel."
VALUE "FileVersion", KERNEL_VERSION
- VALUE "InternalName", "NewKernel"
+ VALUE "InternalName", "NeXUS"
VALUE "LegalCopyright", "SoftwareLabs"
- VALUE "OriginalFilename", "NewOSKrnl.exe"
- VALUE "ProductName", "NewKernel"
+ VALUE "OriginalFilename", "newoskrnl.exe"
+ VALUE "ProductName", "NewOSKrnl"
VALUE "ProductVersion", KERNEL_VERSION
END
END
diff --git a/Kernel/Linker/16x0.json b/Kernel/Linker/16x0.json
index 40cee7c9..77235537 100644
--- a/Kernel/Linker/16x0.json
+++ b/Kernel/Linker/16x0.json
@@ -1,6 +1,6 @@
{
"executable_type": "kernel",
- "output_name": "NewOSKrnl.exe",
+ "output_name": "newoskrnl.exe",
"start_proc": "__ImageStart",
"format": "PEF"
}
diff --git a/Kernel/Linker/32x0.json b/Kernel/Linker/32x0.json
index 40cee7c9..77235537 100644
--- a/Kernel/Linker/32x0.json
+++ b/Kernel/Linker/32x0.json
@@ -1,6 +1,6 @@
{
"executable_type": "kernel",
- "output_name": "NewOSKrnl.exe",
+ "output_name": "newoskrnl.exe",
"start_proc": "__ImageStart",
"format": "PEF"
}
diff --git a/Kernel/Linker/64x0.json b/Kernel/Linker/64x0.json
index 40cee7c9..77235537 100644
--- a/Kernel/Linker/64x0.json
+++ b/Kernel/Linker/64x0.json
@@ -1,6 +1,6 @@
{
"executable_type": "kernel",
- "output_name": "NewOSKrnl.exe",
+ "output_name": "newoskrnl.exe",
"start_proc": "__ImageStart",
"format": "PEF"
}
diff --git a/Kernel/NetworkKit/NetworkDevice.inl b/Kernel/NetworkKit/NetworkDevice.inl
index 614ccadf..750520ff 100644
--- a/Kernel/NetworkKit/NetworkDevice.inl
+++ b/Kernel/NetworkKit/NetworkDevice.inl
@@ -15,7 +15,7 @@ namespace NewOS
void (*on_cleanup)(void))
: DeviceInterface<NetworkDeviceCommand>(out, in), fCleanup(on_cleanup)
{
- kcout << "New OS: NetworkDevice initialized.\r";
+ kcout << "newoskrnl: NetworkDevice initialized.\r";
MUST_PASS(out && in && on_cleanup);
}
@@ -24,7 +24,7 @@ namespace NewOS
{
MUST_PASS(fCleanup);
- kcout << "New OS: NetworkDevice cleanup.\r";
+ kcout << "newoskrnl: NetworkDevice cleanup.\r";
if (fCleanup)
fCleanup();
}
diff --git a/Kernel/Sources/AppMain.cxx b/Kernel/Sources/AppMain.cxx
index 9ca224c3..62795893 100644
--- a/Kernel/Sources/AppMain.cxx
+++ b/Kernel/Sources/AppMain.cxx
@@ -16,7 +16,7 @@
#include <KernelKit/KernelHeap.hpp>
#include <KernelKit/PEF.hpp>
#include <KernelKit/PEFCodeManager.hxx>
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <KernelKit/UserHeap.hpp>
#include <NewKit/Json.hpp>
#include <NewKit/KernelCheck.hpp>
@@ -182,31 +182,31 @@ namespace NewOS::Detail
/// @brief System loader entrypoint.
/// @param void no parameters.
/// @return void no return value.
- STATIC NewOS::Void AppSystemLoader(NewOS::Void)
+ STATIC NewOS::Void AppSystem(NewOS::Void)
{
- NewOS::PEFLoader coreGraphicsShLib("/System/WindowServer");
+ NewOS::PEFLoader wndServer("/System/WindowServer");
- if (!coreGraphicsShLib.IsLoaded())
+ if (!wndServer.IsLoaded())
{
NewOS::ke_stop(RUNTIME_CHECK_FAILED);
}
- NewOS::Utils::execute_from_image(coreGraphicsShLib,
- NewOS::ProcessHeader::kLibKind);
+ NewOS::Utils::execute_from_image(wndServer,
+ NewOS::ProcessHeader::kAppKind);
- NewOS::PEFLoader logonService("/System/Login");
+ NewOS::PEFLoader launchServer("/System/Launcher");
- if (!logonService.IsLoaded())
+ if (!launchServer.IsLoaded())
{
NewOS::ke_stop(RUNTIME_CHECK_FAILED);
}
- NewOS::Utils::execute_from_image(logonService,
+ NewOS::Utils::execute_from_image(launchServer,
NewOS::ProcessHeader::kAppKind);
- NewOS::kcout << "SystemLoader: Exiting process, we're done initializing stuff...";
+ NewOS::kcout << "System: done, sleeping...";
- NewOS::ProcessScheduler::Shared().Leak().GetCurrent().Leak().Exit(0);
+ while (true) {}
}
} // namespace NewOS::Detail
@@ -218,8 +218,8 @@ EXTERN_C NewOS::Void AppMain(NewOS::Void)
/// Now run kernel loop, until no process are running.
NewOS::Detail::FilesystemWizard wizard; // automatic.
- auto cLoaderName = "SystemLoader";
- NewOS::execute_from_image(NewOS::Detail::AppSystemLoader, cLoaderName);
+ auto cLoaderName = "System";
+ NewOS::execute_from_image(NewOS::Detail::AppSystem, cLoaderName);
- while (NewOS::ProcessScheduler::Shared().Leak().Run() > 0) {}
+ while (NewOS::ProcessScheduler::The().Leak().Run() > 0) {}
}
diff --git a/Kernel/Sources/CodeManager.cxx b/Kernel/Sources/CodeManager.cxx
index 358481f6..10de3512 100644
--- a/Kernel/Sources/CodeManager.cxx
+++ b/Kernel/Sources/CodeManager.cxx
@@ -6,7 +6,7 @@
#include <NewKit/Utils.hpp>
#include <KernelKit/CodeManager.hpp>
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
namespace NewOS
{
@@ -25,6 +25,6 @@ namespace NewOS
Ref<ProcessHeader> refProc = proc;
- return ProcessScheduler::Shared().Leak().Add(refProc);
+ return ProcessScheduler::The().Leak().Add(refProc);
}
} // namespace NewOS \ No newline at end of file
diff --git a/Kernel/Sources/CxxAbi.cxx b/Kernel/Sources/CxxAbi.cxx
index 9aea8db7..0b01928a 100644
--- a/Kernel/Sources/CxxAbi.cxx
+++ b/Kernel/Sources/CxxAbi.cxx
@@ -14,7 +14,7 @@ uarch_t __atexit_func_count;
extern "C" void __cxa_pure_virtual()
{
- NewOS::kcout << "New OS: C++ placeholder method.\n";
+ NewOS::kcout << "newoskrnl: C++ placeholder method.\n";
}
extern "C" void ___chkstk_ms()
diff --git a/Kernel/Sources/FS/NewFS.cxx b/Kernel/Sources/FS/NewFS.cxx
index 6f19c8ed..a60fc228 100644
--- a/Kernel/Sources/FS/NewFS.cxx
+++ b/Kernel/Sources/FS/NewFS.cxx
@@ -46,7 +46,7 @@ _Output NewFork* NewFSParser::CreateFork(_Input NewCatalog* catalog,
Lba lba = (theFork.Kind == kNewFSDataForkKind) ? catalog->DataFork
: catalog->ResourceFork;
- kcout << "Fork Lba: " << hex_number(lba) << endl;
+ kcout << "newoskrnl: fork lba: " << hex_number(lba) << endl;
if (lba <= kNewFSCatalogStartAddress)
return nullptr;
@@ -73,11 +73,11 @@ _Output NewFork* NewFSParser::CreateFork(_Input NewCatalog* catalog,
drv->fInput(&drv->fPacket);
- kcout << "New OS: Next-Fork: " << hex_number(curFork.NextSibling) << endl;
+ kcout << "newoskrnl: Next-Fork: " << hex_number(curFork.NextSibling) << endl;
if (curFork.Flags == kNewFSFlagCreated)
{
- kcout << "New OS: Fork already exists.\r";
+ kcout << "newoskrnl: Fork already exists.\r";
/// sanity check.
if (StringBuilder::Equals(curFork.ForkName, theFork.ForkName) &&
@@ -126,10 +126,10 @@ _Output NewFork* NewFSParser::CreateFork(_Input NewCatalog* catalog,
drv->fOutput(&drv->fPacket);
/// log what we have now.
- kcout << "New OS: Wrote fork data at: " << hex_number(theFork.DataOffset)
+ kcout << "newoskrnl: Wrote fork data at: " << hex_number(theFork.DataOffset)
<< endl;
- kcout << "New OS: Wrote fork at: " << hex_number(lba) << endl;
+ kcout << "newoskrnl: Wrote fork at: " << hex_number(lba) << endl;
return &theFork;
}
@@ -372,9 +372,9 @@ _Output NewCatalog* NewFSParser::CreateCatalog(_Input const char* name,
drive->fOutput(&drive->fPacket);
- kcout << "New OS: Create new catalog, status: "
+ kcout << "newoskrnl: Create new catalog, status: "
<< hex_number(catalogChild->Flags) << endl;
- kcout << "New OS: Create new catalog, status: " << catalogChild->Name
+ kcout << "newoskrnl: Create new catalog, status: " << catalogChild->Name
<< endl;
drive->fPacket.fPacketContent = sectorBufPartBlock;
@@ -449,7 +449,7 @@ bool NewFSParser::Format(_Input _Output DriveTrait* drive)
partBlock->Version = kNewFSVersionInteger;
- const auto cUntitledHD = "New OS HD\0";
+ const auto cUntitledHD = "newoskrnl HD\0";
rt_copy_memory((VoidPtr)kNewFSIdent, (VoidPtr)partBlock->Ident,
kNewFSIdentLen);
@@ -475,14 +475,14 @@ bool NewFSParser::Format(_Input _Output DriveTrait* drive)
drive->fOutput(&drive->fPacket);
- kcout << "Drive-Kind: " << drive->fDriveKind() << endl;
+ kcout << "newoskrnl: drive kind: " << drive->fDriveKind() << endl;
- kcout << "Partition-Name: " << partBlock->PartitionName << endl;
- kcout << "Start-Catalog: " << hex_number(partBlock->StartCatalog) << endl;
- kcout << "Catalog-Count: " << hex_number(partBlock->CatalogCount) << endl;
- kcout << "Free-Catalog: " << hex_number(partBlock->FreeCatalog) << endl;
- kcout << "Free-Sectors: " << hex_number(partBlock->FreeSectors) << endl;
- kcout << "Sector-Size: " << hex_number(partBlock->SectorSize) << endl;
+ kcout << "newoskrnl: partition name: " << partBlock->PartitionName << endl;
+ kcout << "newoskrnl: start: " << hex_number(partBlock->StartCatalog) << endl;
+ kcout << "newoskrnl: number of catalogs: " << hex_number(partBlock->CatalogCount) << endl;
+ kcout << "newoskrnl: free catalog: " << hex_number(partBlock->FreeCatalog) << endl;
+ kcout << "newoskrnl: free sectors: " << hex_number(partBlock->FreeSectors) << endl;
+ kcout << "newoskrnl: sector size: " << hex_number(partBlock->SectorSize) << endl;
/// write the root catalog.
this->CreateCatalog(kNewFSRoot, 0, kNewFSCatalogKindDir);
@@ -490,7 +490,7 @@ bool NewFSParser::Format(_Input _Output DriveTrait* drive)
return true;
}
- kcout << "New OS: PartitionBlock already exists.\r";
+ kcout << "newoskrnl: PartitionBlock already exists.\r";
/// return success as well, do not ignore that partition.
return true;
@@ -531,14 +531,14 @@ bool NewFSParser::WriteCatalog(_Input _Output NewCatalog* catalog, voidPtr data,
drive->fInput(&drive->fPacket);
- kcout << "Fork-Name: " << forkData->ForkName << endl;
+ kcout << "newoskrnl: forkName: " << forkData->ForkName << endl;
/// sanity check the fork.
if (forkData->DataOffset <= kNewFSCatalogStartAddress)
{
DbgLastError() = kErrorDiskIsCorrupted;
- kcout << "New OS: Invalid fork offset.\r";
+ kcout << "newoskrnl: Invalid fork offset.\r";
delete forkData;
return false;
@@ -552,7 +552,8 @@ bool NewFSParser::WriteCatalog(_Input _Output NewCatalog* catalog, voidPtr data,
drive->fPacket.fPacketContent = data;
drive->fPacket.fPacketSize = sizeOfData;
drive->fPacket.fLba = forkData->DataOffset;
- kcout << "Fork-Offset: " << hex_number(forkData->DataOffset) << endl;
+
+ kcout << "newoskrnl: data offset: " << hex_number(forkData->DataOffset) << endl;
drive->fOutput(&drive->fPacket);
@@ -563,10 +564,12 @@ bool NewFSParser::WriteCatalog(_Input _Output NewCatalog* catalog, voidPtr data,
catalog == nullptr)
{
delete catalog;
+
drive->fPacket.fPacketContent = data;
drive->fPacket.fPacketSize = sizeOfData;
drive->fPacket.fLba = forkData->DataOffset;
- kcout << "Fork-Offset: " << hex_number(forkData->DataOffset) << endl;
+
+ kcout << "newoskrnl: data offset: " << hex_number(forkData->DataOffset) << endl;
drive->fOutput(&drive->fPacket);
@@ -670,7 +673,7 @@ _NewFSSearchThroughCatalogList:
NewCatalog* catalogPtr = new NewCatalog();
rt_copy_memory(catalog, catalogPtr, sizeof(NewCatalog));
- kcout << "New OS: Found catalog at: " << hex_number(startCatalogList) << endl;
+ kcout << "newoskrnl: found catalog at: " << hex_number(startCatalogList) << endl;
outLba = startCatalogList;
delete[] sectorBuf;
@@ -809,8 +812,8 @@ VoidPtr NewFSParser::ReadCatalog(_Input _Output NewCatalog* catalog,
Lba dataForkLba = catalog->DataFork;
Size dataForkSize = catalog->DataForkSize;
- kcout << "Found-Catalog: " << catalog->Name
- << ", Data-Fork: " << hex_number(dataForkLba) << endl;
+ kcout << "newoskrnl: catalog " << catalog->Name
+ << ", fork: " << hex_number(dataForkLba) << endl;
Char* sectorBuf = new Char[sizeof(NewFork)];
auto drive = sMountpointInterface.GetAddressOf(this->fDriveIndex);
@@ -830,7 +833,7 @@ VoidPtr NewFSParser::ReadCatalog(_Input _Output NewCatalog* catalog,
forkData = (NewFork*)sectorBuf;
- kcout << "Fork-Name: " << forkData->ForkName << endl;
+ kcout << "newoskrnl: name: " << forkData->ForkName << endl;
if (forkData->DataOffset <= kNewFSCatalogStartAddress)
{
@@ -930,11 +933,11 @@ namespace NewOS::Detail
if (!StringBuilder::Equals(partBlock->Ident, kNewFSIdent))
{
- kcout << "New OS: New FS Partition is corrupt.\r";
+ kcout << "newoskrnl: New FS Partition is corrupt.\r";
return false;
}
- kcout << "New OS: Read partition: " << partBlock->PartitionName << ", with success!\r";
+ kcout << "newoskrnl: Read partition: " << partBlock->PartitionName << ", with success!\r";
return true;
}
diff --git a/Kernel/Sources/IndexableProperty.cxx b/Kernel/Sources/IndexableProperty.cxx
index 16694f52..6c773b9a 100644
--- a/Kernel/Sources/IndexableProperty.cxx
+++ b/Kernel/Sources/IndexableProperty.cxx
@@ -50,7 +50,7 @@ namespace NewOS
indexer.AddFlag(kIndexerClaimed);
rt_copy_memory((VoidPtr)indexer.LeakProperty().Path, (VoidPtr)filename, filenameLen);
- kcout << "New OS: FSKit: index new file: " << filename << endl;
+ kcout << "newoskrnl: FSKit: index new file: " << filename << endl;
}
}
} // namespace Indexer
diff --git a/Kernel/Sources/KernelCheck.cxx b/Kernel/Sources/KernelCheck.cxx
index b59417d4..6b355011 100644
--- a/Kernel/Sources/KernelCheck.cxx
+++ b/Kernel/Sources/KernelCheck.cxx
@@ -98,8 +98,8 @@ namespace NewOS
if (!expr)
{
#ifdef __DEBUG__
- kcout << "New Kernel: File: " << file << "\r";
- kcout << "New Kernel: Line: " << line << "\r";
+ kcout << "newoskrnl: File: " << file << "\r";
+ kcout << "newoskrnl: Line: " << line << "\r";
#endif // __DEBUG__
diff --git a/Kernel/Sources/KernelHeap.cxx b/Kernel/Sources/KernelHeap.cxx
index a8ca467e..93f0c164 100644
--- a/Kernel/Sources/KernelHeap.cxx
+++ b/Kernel/Sources/KernelHeap.cxx
@@ -38,7 +38,10 @@ namespace NewOS
SizeT fTargetPtrSize;
/// @brief 64-bit target pointer.
UIntPtr fTargetPtr;
- UInt8 fPadding[kKernelHeapHeaderPaddingSz];
+ /// @brief Is this a page pointer?
+ Boolean fPagePtr;
+ /// @brief Padding bytes for header.
+ UInt8 fPadding[kKernelHeapHeaderPaddingSz];
};
typedef HeapInformationBlock* HeapInformationBlockPtr;
@@ -64,6 +67,7 @@ namespace NewOS
heapInfo->fMagic = kKernelHeapMagic;
heapInfo->fCRC32 = 0; // dont fill it for now.
heapInfo->fTargetPtr = wrapper.VirtualAddress();
+ heapInfo->fPagePtr = 0;
++kHeapCount;
@@ -71,6 +75,27 @@ namespace NewOS
sizeof(Detail::HeapInformationBlock));
}
+ /// @brief Makes a page heap.
+ /// @param heapPtr
+ /// @return
+ Int32 ke_make_ke_page(VoidPtr heapPtr)
+ {
+ if (kHeapCount < 1)
+ return -kErrorInternal;
+ if (((IntPtr)heapPtr - sizeof(Detail::HeapInformationBlock)) <= 0)
+ return -kErrorInternal;
+ if (((IntPtr)heapPtr - kBadPtr) < 0)
+ return -kErrorInternal;
+
+ Detail::HeapInformationBlockPtr virtualAddress =
+ reinterpret_cast<Detail::HeapInformationBlockPtr>(
+ (UIntPtr)heapPtr - sizeof(Detail::HeapInformationBlock));
+
+ virtualAddress->fPagePtr = 1;
+
+ return 0;
+ }
+
/// @brief Declare pointer as free.
/// @param heapPtr the pointer.
/// @return
diff --git a/Kernel/Sources/PEFCodeManager.cxx b/Kernel/Sources/PEFCodeManager.cxx
index 6fa7e6a1..a84730e9 100644
--- a/Kernel/Sources/PEFCodeManager.cxx
+++ b/Kernel/Sources/PEFCodeManager.cxx
@@ -8,7 +8,7 @@
#include <KernelKit/FileManager.hpp>
#include <KernelKit/KernelHeap.hpp>
#include <KernelKit/PEFCodeManager.hxx>
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <NewKit/Defines.hpp>
#include <NewKit/KernelCheck.hpp>
#include <NewKit/OwnPtr.hpp>
@@ -195,7 +195,7 @@ namespace NewOS
proc.Kind = procKind;
- return ProcessScheduler::Shared().Leak().Add(refProc);
+ return ProcessScheduler::The().Leak().Add(refProc);
}
} // namespace Utils
diff --git a/Kernel/Sources/PEFSharedObjectRT.cxx b/Kernel/Sources/PEFSharedObject.cxx
index 20af1b98..06825a3c 100644
--- a/Kernel/Sources/PEFSharedObjectRT.cxx
+++ b/Kernel/Sources/PEFSharedObject.cxx
@@ -10,7 +10,7 @@
#include <KernelKit/DebugOutput.hpp>
#include <KernelKit/PEF.hpp>
#include <KernelKit/PEFSharedObject.hxx>
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <KernelKit/ThreadLocalStorage.hxx>
#include <NewKit/Defines.hpp>
@@ -41,7 +41,7 @@ EXTERN_C SharedObjectPtr rt_library_init(void)
if (!library)
{
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
return nullptr;
}
@@ -50,17 +50,17 @@ EXTERN_C SharedObjectPtr rt_library_init(void)
if (!library->Get())
{
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
return nullptr;
}
library->Get()->fImageObject =
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().Image;
+ ProcessScheduler::The().Leak().GetCurrent().Leak().Image;
if (!library->Get()->fImageObject)
{
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
return nullptr;
}
@@ -85,7 +85,7 @@ EXTERN_C Void rt_library_free(SharedObjectPtr lib, bool* successful)
if (lib == nullptr)
{
*successful = false;
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
}
delete lib->Get();
@@ -102,6 +102,5 @@ EXTERN_C Void rt_library_free(SharedObjectPtr lib, bool* successful)
/// @param
EXTERN_C void __mh_purecall(void)
{
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
- return;
+ kcout << "newoskrnl: unimplemented symbol!\r";
}
diff --git a/Kernel/Sources/ProcessScheduler.cxx b/Kernel/Sources/ProcessScheduler.cxx
index 1e4537f1..bf088cc6 100644
--- a/Kernel/Sources/ProcessScheduler.cxx
+++ b/Kernel/Sources/ProcessScheduler.cxx
@@ -9,7 +9,7 @@
/// @brief MicroKernel process scheduler.
/***********************************************************************************/
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <KernelKit/SMPManager.hpp>
#include <KernelKit/KernelHeap.hpp>
#include <NewKit/String.hpp>
@@ -42,7 +42,7 @@ namespace NewOS
void ProcessHeader::Crash()
{
- kcout << this->Name << ": crashed. (id = " << number(39);
+ kcout << this->Name << ": crashed. (id = " << number(kErrorProcessFault);
kcout << ")\r";
if (this->Ring != kRingUserKind)
@@ -163,11 +163,11 @@ namespace NewOS
void ProcessHeader::Exit(Int32 exit_code)
{
if (this->ProcessId !=
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().ProcessId)
+ ProcessScheduler::The().Leak().GetCurrent().Leak().ProcessId)
ke_stop(RUNTIME_CHECK_PROCESS);
if (this->Ring == (Int32)ProcessSelector::kRingKernel &&
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().Ring > 0)
+ ProcessScheduler::The().Leak().GetCurrent().Leak().Ring > 0)
ke_stop(RUNTIME_CHECK_PROCESS);
kLastExitCode = exit_code;
@@ -193,7 +193,7 @@ namespace NewOS
this->Image = nullptr;
this->StackFrame = nullptr;
- ProcessScheduler::Shared().Leak().Remove(this->ProcessId);
+ ProcessScheduler::The().Leak().Remove(this->ProcessId);
}
/// @brief Add process to list.
@@ -206,7 +206,7 @@ namespace NewOS
if (!process.Leak().Image)
{
- if (process.Leak().Kind != ProcessHeader::kLibKind)
+ if (process.Leak().Kind != ProcessHeader::kShLibKind)
{
return -kErrorNoEntrypoint;
}
@@ -223,7 +223,7 @@ namespace NewOS
/// Create heap according to type of process.
if (process.Leak().Kind == ProcessHeader::kAppKind)
process.Leak().HeapPtr = rt_new_heap(kUserHeapUser | kUserHeapRw);
- else if (process.Leak().Kind == ProcessHeader::kLibKind)
+ else if (process.Leak().Kind == ProcessHeader::kShLibKind)
process.Leak().HeapPtr = rt_new_heap(kUserHeapUser | kUserHeapRw | kUserHeapShared);
else
process.Leak().HeapPtr = rt_new_heap(kUserHeapDriver | kUserHeapRw);
@@ -301,7 +301,7 @@ namespace NewOS
/// @brief Shared instance of the process scheduler.
/// @return
- Ref<ProcessScheduler&> ProcessScheduler::Shared()
+ Ref<ProcessScheduler&> ProcessScheduler::The()
{
static ProcessScheduler ref;
return {ref};
@@ -319,7 +319,7 @@ namespace NewOS
PID& ProcessHelper::GetCurrentPID()
{
kcout << "ProcessHelper::GetCurrentPID: Leaking ProcessId...\r";
- return ProcessScheduler::Shared().Leak().GetCurrent().Leak().ProcessId;
+ return ProcessScheduler::The().Leak().GetCurrent().Leak().ProcessId;
}
/// @brief Check if process can be schedulded.
@@ -355,13 +355,13 @@ namespace NewOS
bool ProcessHelper::StartScheduling()
{
if (ProcessHelper::CanBeScheduled(
- ProcessScheduler::Shared().Leak().GetCurrent()))
+ ProcessScheduler::The().Leak().GetCurrent()))
{
- --ProcessScheduler::Shared().Leak().GetCurrent().Leak().PTime;
+ --ProcessScheduler::The().Leak().GetCurrent().Leak().PTime;
return false;
}
- auto processRef = ProcessScheduler::Shared().Leak();
+ auto processRef = ProcessScheduler::The().Leak();
if (!processRef)
return false; // we have nothing to schedule. simply return.
@@ -385,29 +385,29 @@ namespace NewOS
if (!the_stack || new_pid < 0)
return false;
- for (SizeT index = 0UL; index < SMPManager::Shared().Leak().Count(); ++index)
+ for (SizeT index = 0UL; index < SMPManager::The().Leak().Count(); ++index)
{
- if (SMPManager::Shared().Leak()[index].Leak().Kind() == kInvalidHart)
+ if (SMPManager::The().Leak()[index].Leak().Kind() == kInvalidHart)
continue;
- if (SMPManager::Shared().Leak()[index].Leak().StackFrame() == the_stack)
+ if (SMPManager::The().Leak()[index].Leak().StackFrame() == the_stack)
{
- SMPManager::Shared().Leak()[index].Leak().Busy(false);
+ SMPManager::The().Leak()[index].Leak().Busy(false);
continue;
}
- if (SMPManager::Shared().Leak()[index].Leak().IsBusy())
+ if (SMPManager::The().Leak()[index].Leak().IsBusy())
continue;
- if (SMPManager::Shared().Leak()[index].Leak().Kind() !=
+ if (SMPManager::The().Leak()[index].Leak().Kind() !=
ThreadKind::kHartBoot &&
- SMPManager::Shared().Leak()[index].Leak().Kind() !=
+ SMPManager::The().Leak()[index].Leak().Kind() !=
ThreadKind::kHartSystemReserved)
{
- SMPManager::Shared().Leak()[index].Leak().Busy(true);
+ SMPManager::The().Leak()[index].Leak().Busy(true);
ProcessHelper::GetCurrentPID() = new_pid;
- return SMPManager::Shared().Leak()[index].Leak().Switch(the_stack);
+ return SMPManager::The().Leak()[index].Leak().Switch(the_stack);
}
}
diff --git a/Kernel/Sources/ProcessTeam.cxx b/Kernel/Sources/ProcessTeam.cxx
index 7e311399..068e0dbb 100644
--- a/Kernel/Sources/ProcessTeam.cxx
+++ b/Kernel/Sources/ProcessTeam.cxx
@@ -9,7 +9,7 @@
/// @brief Process teams implementation.
/***********************************************************************************/
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
namespace NewOS
{
diff --git a/Kernel/Sources/SMPManager.cxx b/Kernel/Sources/SMPManager.cxx
index 90a9d440..29e0fa26 100644
--- a/Kernel/Sources/SMPManager.cxx
+++ b/Kernel/Sources/SMPManager.cxx
@@ -5,7 +5,7 @@
------------------------------------------- */
#include <ArchKit/ArchKit.hpp>
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <KernelKit/SMPManager.hpp>
///! BUGS: 0
@@ -95,7 +95,6 @@ namespace NewOS
{
/// Keep the arguments, switch the base pointer, stack pointer
/// fs and gs registers.
-
fStack->Rbp = stack->Rbp;
fStack->Rsp = stack->Rsp;
fStack->Fs = stack->Fs;
@@ -103,6 +102,7 @@ namespace NewOS
}
rt_do_context_switch(fStack);
+
return true;
}
@@ -121,7 +121,7 @@ namespace NewOS
SMPManager::~SMPManager() = default;
/// @brief Shared singleton function
- Ref<SMPManager> SMPManager::Shared()
+ Ref<SMPManager> SMPManager::The()
{
static SMPManager manager;
return {manager};
@@ -172,6 +172,8 @@ namespace NewOS
rt_copy_memory(stack, fThreadList[idx].Leak().Leak().fStack,
sizeof(HAL::StackFrame));
+ fThreadList[idx].Leak().Leak().Switch(fThreadList[idx].Leak().Leak().fStack);
+
fThreadList[idx].Leak().Leak().fPID = ProcessHelper::GetCurrentPID();
fThreadList[idx].Leak().Leak().Busy(false);
diff --git a/Kernel/Sources/Semaphore.cxx b/Kernel/Sources/Semaphore.cxx
index 7bd1d513..e2e135d0 100644
--- a/Kernel/Sources/Semaphore.cxx
+++ b/Kernel/Sources/Semaphore.cxx
@@ -4,7 +4,7 @@
------------------------------------------- */
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <KernelKit/Semaphore.hpp>
#include <KernelKit/Timer.hpp>
diff --git a/Kernel/Sources/ThreadLocalStorage.cxx b/Kernel/Sources/ThreadLocalStorage.cxx
index c31ae1c2..f72bab67 100644
--- a/Kernel/Sources/ThreadLocalStorage.cxx
+++ b/Kernel/Sources/ThreadLocalStorage.cxx
@@ -7,7 +7,7 @@
* ========================================================
*/
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <KernelKit/ThreadLocalStorage.hxx>
///! BUGS: 0
@@ -33,7 +33,7 @@ Boolean tls_check_tib(ThreadInformationBlock* tib)
Encoder encoder;
const char* tibAsBytes = encoder.AsBytes(tib);
- kcout << "New OS: Checking for a valid cookie...\r";
+ kcout << "newoskrnl: Checking for a valid cookie...\r";
return tibAsBytes[0] == kCookieMag0 && tibAsBytes[1] == kCookieMag1 &&
tibAsBytes[2] == kCookieMag2;
@@ -50,9 +50,9 @@ EXTERN_C Void tls_check_syscall_impl(NewOS::HAL::StackFramePtr stackPtr) noexcep
if (!tls_check_tib(tib))
{
- kcout << "New OS: Verification failed, Crashing...\r";
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ kcout << "newoskrnl: Verification failed, Crashing...\r";
+ ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
}
- kcout << "New OS: Verification succeeded! Keeping on...\r";
+ kcout << "newoskrnl: Verification succeeded! Keeping on...\r";
}
diff --git a/Kernel/Sources/UserHeap.cxx b/Kernel/Sources/UserHeap.cxx
index 02c4c753..64b75641 100644
--- a/Kernel/Sources/UserHeap.cxx
+++ b/Kernel/Sources/UserHeap.cxx
@@ -4,7 +4,7 @@
------------------------------------------- */
-#include <KernelKit/ProcessScheduler.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
#include <KernelKit/UserHeap.hpp>
#include <NewKit/PageManager.hpp>
@@ -37,8 +37,9 @@ namespace NewOS
*/
class UserHeapManager final
{
- public:
UserHeapManager() = delete;
+
+ public:
~UserHeapManager() = default;
public:
@@ -46,14 +47,17 @@ namespace NewOS
{
return s_NumPools;
}
+
STATIC Ref<Pmm>& Leak()
{
return s_Pmm;
}
+
STATIC Boolean& IsEnabled()
{
return s_PoolsAreEnabled;
}
+
STATIC MutableArray<Ref<PTEWrapper>>& The()
{
return s_Pool;
@@ -146,7 +150,7 @@ namespace NewOS
{
if (!poolHdr->fFree)
{
- ProcessScheduler::Shared().Leak().GetCurrent().Leak().Crash();
+ ProcessScheduler::The().Leak().GetCurrent().Leak().Crash();
return;
}
diff --git a/Kernel/makefile b/Kernel/makefile
index b7749100..c550956a 100644
--- a/Kernel/makefile
+++ b/Kernel/makefile
@@ -37,7 +37,7 @@ LDFLAGS = -e __ImageStart --subsystem=17
LDOBJ = Objects/*.obj
# This file is the kernel, responsible of task management and memory.
-KERNEL = NewOSKrnl.exe
+KERNEL = newoskrnl.exe
.PHONY: error
error:
@@ -69,7 +69,7 @@ link-amd64-epm:
.PHONY: all
all: newos-amd64-epm link-amd64-epm
- @echo "NewKernel => OK."
+ @echo "NewOSKrnl => OK."
.PHONY: help
help:
diff --git a/License.QR.txt b/License.QR.txt
new file mode 100644
index 00000000..d660fb43
--- /dev/null
+++ b/License.QR.txt
@@ -0,0 +1,29 @@
+BSD 3-Clause License
+
+Copyright (c) 2022, Ilya Makarov
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file
diff --git a/ReadMe.md b/ReadMe.md
index 08d3df08..e6c727e8 100644
--- a/ReadMe.md
+++ b/ReadMe.md
@@ -1,4 +1,4 @@
-
+<!-- NuX OS -->
<div align="center">
<img src="Meta/NewOS.svg"/>
diff --git a/SDK/Library/.gitkeep b/SDK/Dist/.gitkeep
index e69de29b..e69de29b 100644
--- a/SDK/Library/.gitkeep
+++ b/SDK/Dist/.gitkeep
diff --git a/SDK/Library/CoreCxxRuntime/.gitkeep b/SDK/Libraries/.gitkeep
index e69de29b..e69de29b 100644
--- a/SDK/Library/CoreCxxRuntime/.gitkeep
+++ b/SDK/Libraries/.gitkeep
diff --git a/SDK/Library/CorePEFRuntime/.gitkeep b/SDK/Libraries/CoreCxxRuntime/.gitkeep
index e69de29b..e69de29b 100644
--- a/SDK/Library/CorePEFRuntime/.gitkeep
+++ b/SDK/Libraries/CoreCxxRuntime/.gitkeep
diff --git a/SDK/Library/CoreCxxRuntime/Private.xml b/SDK/Libraries/CoreCxxRuntime/Private.xml
index 7ee426c0..7ee426c0 100644
--- a/SDK/Library/CoreCxxRuntime/Private.xml
+++ b/SDK/Libraries/CoreCxxRuntime/Private.xml
diff --git a/SDK/Library/CoreCxxRuntime/Sources/New+Delete.cxx b/SDK/Libraries/CoreCxxRuntime/Sources/New+Delete.cxx
index cc59586f..cc59586f 100644
--- a/SDK/Library/CoreCxxRuntime/Sources/New+Delete.cxx
+++ b/SDK/Libraries/CoreCxxRuntime/Sources/New+Delete.cxx
diff --git a/SDK/Library/CoreSystem/.gitkeep b/SDK/Libraries/CorePEFRuntime/.gitkeep
index e69de29b..e69de29b 100644
--- a/SDK/Library/CoreSystem/.gitkeep
+++ b/SDK/Libraries/CorePEFRuntime/.gitkeep
diff --git a/SDK/Library/CorePEFRuntime/Private.xml b/SDK/Libraries/CorePEFRuntime/Private.xml
index 7ee426c0..7ee426c0 100644
--- a/SDK/Library/CorePEFRuntime/Private.xml
+++ b/SDK/Libraries/CorePEFRuntime/Private.xml
diff --git a/SDK/Library/CorePEFRuntime/Sources/PEFStart.c b/SDK/Libraries/CorePEFRuntime/Sources/PEFStart.c
index e9a45f09..e9a45f09 100644
--- a/SDK/Library/CorePEFRuntime/Sources/PEFStart.c
+++ b/SDK/Libraries/CorePEFRuntime/Sources/PEFStart.c
diff --git a/SDK/Library/CoreSystem/ARM64/.gitkeep b/SDK/Libraries/CoreSystem/.gitkeep
index e69de29b..e69de29b 100644
--- a/SDK/Library/CoreSystem/ARM64/.gitkeep
+++ b/SDK/Libraries/CoreSystem/.gitkeep
diff --git a/SDK/Library/CoreSystem/AMD64/CoreAssembly.s b/SDK/Libraries/CoreSystem/AMD64/CoreAssembly.s
index 5d1484cf..5d1484cf 100644
--- a/SDK/Library/CoreSystem/AMD64/CoreAssembly.s
+++ b/SDK/Libraries/CoreSystem/AMD64/CoreAssembly.s
diff --git a/SDK/Library/CoreSystem/RISCV/.gitkeep b/SDK/Libraries/CoreSystem/ARM64/.gitkeep
index e69de29b..e69de29b 100644
--- a/SDK/Library/CoreSystem/RISCV/.gitkeep
+++ b/SDK/Libraries/CoreSystem/ARM64/.gitkeep
diff --git a/SDK/Library/CoreSystem/Headers/Alert.h b/SDK/Libraries/CoreSystem/Headers/Alert.h
index 7decd4ca..7decd4ca 100644
--- a/SDK/Library/CoreSystem/Headers/Alert.h
+++ b/SDK/Libraries/CoreSystem/Headers/Alert.h
diff --git a/SDK/Library/CoreSystem/Headers/Defines.h b/SDK/Libraries/CoreSystem/Headers/Defines.h
index a7e46234..713d6df8 100644
--- a/SDK/Library/CoreSystem/Headers/Defines.h
+++ b/SDK/Libraries/CoreSystem/Headers/Defines.h
@@ -32,6 +32,8 @@
#endif
+#include <Headers/Alert.h>
+
struct ApplicationInterface;
struct GUID;
@@ -231,5 +233,3 @@ typedef CharacterTypeUTF8 StrType255[255];
#ifndef kInvalidRef
#define kInvalidRef 0
#endif
-
-#include <Headers/Alert.h>
diff --git a/SDK/Library/CoreSystem/Headers/File.h b/SDK/Libraries/CoreSystem/Headers/File.h
index 594b4edb..cfd9ee30 100644
--- a/SDK/Library/CoreSystem/Headers/File.h
+++ b/SDK/Libraries/CoreSystem/Headers/File.h
@@ -8,6 +8,8 @@
#include <Headers/Defines.h>
+#define kMaxForkNameLength (256U) /* long fork names. */
+
struct _Fork;
/// @brief Filesystem wrapper.
@@ -25,8 +27,6 @@ CS_EXTERN_C FSRef CSOpenFile(const CharacterTypeUTF8* path, const CharacterTypeU
/// @return
CS_EXTERN_C VoidType CSCloseFile(FSRef refCS);
-#define kMaxForkNameLength (256U) /* long fork names. */
-
/// @brief A fork information header.
typedef struct _Fork
{
@@ -49,4 +49,9 @@ CS_EXTERN_C FSForkRef CSGetFork(FSRef refCS, const CharacterTypeUTF8* forkName);
/// @return if not return false, or true.
CS_EXTERN_C BooleanType CSIsValidPath(const CharacterTypeUTF8* path);
+/// @brief Flush file
+/// @param refCS the file reference.
+/// @return
+CS_EXTERN_C VoidType CSFlushFile(FSRef refCS);
+
/// END OF FILE
diff --git a/SDK/Library/CoreSystem/Headers/Heap.h b/SDK/Libraries/CoreSystem/Headers/Heap.h
index b2ad6e74..b2ad6e74 100644
--- a/SDK/Library/CoreSystem/Headers/Heap.h
+++ b/SDK/Libraries/CoreSystem/Headers/Heap.h
diff --git a/SDK/Library/CoreSystem/Headers/Hint.h b/SDK/Libraries/CoreSystem/Headers/Hint.h
index ee14711d..ee14711d 100644
--- a/SDK/Library/CoreSystem/Headers/Hint.h
+++ b/SDK/Libraries/CoreSystem/Headers/Hint.h
diff --git a/SDK/Library/CoreSystem/Headers/Intl.h b/SDK/Libraries/CoreSystem/Headers/Intl.h
index b868adca..b868adca 100644
--- a/SDK/Library/CoreSystem/Headers/Intl.h
+++ b/SDK/Libraries/CoreSystem/Headers/Intl.h
diff --git a/SDK/Library/CoreSystem/Headers/Math.h b/SDK/Libraries/CoreSystem/Headers/Math.h
index 0a13e86f..0079803e 100644
--- a/SDK/Library/CoreSystem/Headers/Math.h
+++ b/SDK/Libraries/CoreSystem/Headers/Math.h
@@ -9,7 +9,7 @@
#include <Headers/Defines.h>
///////////////////////////////////////////////////////////////////////
-/// Random functions ///
+/// Random number generators functions ///
///////////////////////////////////////////////////////////////////////
/// @brief Number generator helper.
diff --git a/SDK/Library/CoreSystem/Headers/Rsrc.h b/SDK/Libraries/CoreSystem/Headers/Rsrc.h
index 7fe52910..7fe52910 100644
--- a/SDK/Library/CoreSystem/Headers/Rsrc.h
+++ b/SDK/Libraries/CoreSystem/Headers/Rsrc.h
diff --git a/SDK/Library/CoreSystem/Headers/Thread.h b/SDK/Libraries/CoreSystem/Headers/Thread.h
index 15b40df3..15b40df3 100644
--- a/SDK/Library/CoreSystem/Headers/Thread.h
+++ b/SDK/Libraries/CoreSystem/Headers/Thread.h
diff --git a/SDK/Library/CoreSystem/Headers/Transport.h b/SDK/Libraries/CoreSystem/Headers/Transport.h
index 3f6db3f1..3f6db3f1 100644
--- a/SDK/Library/CoreSystem/Headers/Transport.h
+++ b/SDK/Libraries/CoreSystem/Headers/Transport.h
diff --git a/SDK/Library/CoreSystem/POWER/CoreAssembly.s b/SDK/Libraries/CoreSystem/POWER/CoreAssembly.s
index e7919f23..e7919f23 100644
--- a/SDK/Library/CoreSystem/POWER/CoreAssembly.s
+++ b/SDK/Libraries/CoreSystem/POWER/CoreAssembly.s
diff --git a/SDK/Library/CoreSystem/Private.xml b/SDK/Libraries/CoreSystem/Private.xml
index 4be6c388..4be6c388 100644
--- a/SDK/Library/CoreSystem/Private.xml
+++ b/SDK/Libraries/CoreSystem/Private.xml
diff --git a/SDK/Tools/.gitkeep b/SDK/Libraries/CoreSystem/RISCV/.gitkeep
index e69de29b..e69de29b 100644
--- a/SDK/Tools/.gitkeep
+++ b/SDK/Libraries/CoreSystem/RISCV/.gitkeep
diff --git a/SDK/Library/CoreSystem/ReadMe.md b/SDK/Libraries/CoreSystem/ReadMe.md
index ae5df339..ae5df339 100644
--- a/SDK/Library/CoreSystem/ReadMe.md
+++ b/SDK/Libraries/CoreSystem/ReadMe.md
diff --git a/SDK/Library/CoreSystem/Sources/App.c b/SDK/Libraries/CoreSystem/Sources/App.c
index 42ea19c6..42ea19c6 100644
--- a/SDK/Library/CoreSystem/Sources/App.c
+++ b/SDK/Libraries/CoreSystem/Sources/App.c
diff --git a/SDK/Library/CoreSystem/Sources/CRTStartup.c b/SDK/Libraries/CoreSystem/Sources/CRTStartup.c
index 1cfad65d..1cfad65d 100644
--- a/SDK/Library/CoreSystem/Sources/CRTStartup.c
+++ b/SDK/Libraries/CoreSystem/Sources/CRTStartup.c
diff --git a/SDK/Library/CoreSystem/Sources/File.c b/SDK/Libraries/CoreSystem/Sources/File.c
index 7547e7f2..6e0e810a 100644
--- a/SDK/Library/CoreSystem/Sources/File.c
+++ b/SDK/Libraries/CoreSystem/Sources/File.c
@@ -38,10 +38,21 @@ CS_EXTERN_C VoidType CSCloseFile(FSRef refCS)
{
CS_MUST_PASS(kSharedApplication);
- kSharedApplication->Invoke(kSharedApplication, refCS, kFlushFile);
+ CSFlushFile(refCS);
+
kSharedApplication->Invoke(kSharedApplication, kCallCloseFile, refCS);
}
+/// @brief Flush file
+/// @param refCS the file reference.
+/// @return
+CS_EXTERN_C VoidType CSFlushFile(FSRef refCS)
+{
+ CS_MUST_PASS(kSharedApplication);
+
+ kSharedApplication->Invoke(kSharedApplication, refCS, kFlushFile);
+}
+
/// @brief Check if filesystem path is valid.
/// @param path
/// @return
diff --git a/SDK/Library/CoreSystem/Sources/Heap.c b/SDK/Libraries/CoreSystem/Sources/Heap.c
index e7a77ba5..e7a77ba5 100644
--- a/SDK/Library/CoreSystem/Sources/Heap.c
+++ b/SDK/Libraries/CoreSystem/Sources/Heap.c
diff --git a/SDK/Library/CoreSystem/Sources/Math.c b/SDK/Libraries/CoreSystem/Sources/Math.c
index 19df42f3..19df42f3 100644
--- a/SDK/Library/CoreSystem/Sources/Math.c
+++ b/SDK/Libraries/CoreSystem/Sources/Math.c
diff --git a/SDK/Library/CoreSystem/Sources/Thread.c b/SDK/Libraries/CoreSystem/Sources/Thread.c
index 7d00bf9e..7d00bf9e 100644
--- a/SDK/Library/CoreSystem/Sources/Thread.c
+++ b/SDK/Libraries/CoreSystem/Sources/Thread.c
diff --git a/SDK/Library/CoreSystem/amd64.mk b/SDK/Libraries/CoreSystem/amd64.mk
index e64de90f..e64de90f 100644
--- a/SDK/Library/CoreSystem/amd64.mk
+++ b/SDK/Libraries/CoreSystem/amd64.mk
diff --git a/SDK/Library/CoreSystem/compile_flags.txt b/SDK/Libraries/CoreSystem/compile_flags.txt
index 749a500e..749a500e 100644
--- a/SDK/Library/CoreSystem/compile_flags.txt
+++ b/SDK/Libraries/CoreSystem/compile_flags.txt