diff options
| author | Amlal <amlalelmahrouss@icloud.com> | 2024-06-06 10:27:55 +0000 |
|---|---|---|
| committer | Amlal <amlalelmahrouss@icloud.com> | 2024-06-06 10:27:55 +0000 |
| commit | 4e75e05a20ddd0dbca982e8f3bc2ea8043ed3a3f (patch) | |
| tree | 95409c0e32b644578b94a5c230417da684d79dc9 | |
| parent | f5081a8f9a8537ad5be5d639955cd1d0e68a9e1d (diff) | |
| parent | 9994b8f3f88131f41be1061fb0947177e66dc7b0 (diff) | |
Merged in MHR-23 (pull request #14)
Draft: MHR-23
| -rw-r--r-- | .vscode/c_cpp_properties.json | 12 | ||||
| -rw-r--r-- | Boot/BootKit/BootKit.hxx | 6 | ||||
| -rw-r--r-- | Boot/ReadMe.md | 2 | ||||
| -rw-r--r-- | Boot/Sources/BootloaderRsrc.rsrc | 6 | ||||
| -rw-r--r-- | Boot/Sources/HEL/AMD64/BootATA.cxx | 2 | ||||
| -rw-r--r-- | Boot/Sources/HEL/AMD64/BootFileReader.cxx | 8 | ||||
| -rw-r--r-- | Boot/Sources/HEL/AMD64/BootMain.cxx | 6 | ||||
| -rw-r--r-- | Boot/Sources/HEL/POWER/CoreBootStartup.S | 2 | ||||
| -rw-r--r-- | Boot/Sources/HEL/RISCV/BootRISCV.S | 4 | ||||
| -rw-r--r-- | Boot/Sources/Root/SplashScreen.fmt | 4 | ||||
| -rw-r--r-- | Boot/makefile | 10 | ||||
| -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.txt | 4 | ||||
| -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.hpp | 41 | ||||
| -rw-r--r-- | Kernel/Builtins/ACPI/ACPI.hxx | 23 | ||||
| -rw-r--r-- | Kernel/Docs/Explicit Partition Map.pdf | bin | 0 -> 12326 bytes | |||
| -rw-r--r-- | Kernel/Docs/SPECIFICATION.md | 2 | ||||
| -rw-r--r-- | Kernel/Docs/TODO-LIST.md | 2 | ||||
| -rw-r--r-- | Kernel/Drivers/MahroussUpdate/DriverRsrc.rsrc | 25 | ||||
| -rw-r--r-- | Kernel/Drivers/MahroussUpdate/MahroussUpdate.cc | 24 | ||||
| -rw-r--r-- | Kernel/Drivers/MahroussUpdate/MahroussUpdate.hxx | 37 | ||||
| -rw-r--r-- | Kernel/Drivers/MahroussUpdate/x86_64.mk | 53 | ||||
| -rw-r--r-- | Kernel/HALKit/AMD64/HalACPIFactoryInterface.cxx | 37 | ||||
| -rw-r--r-- | Kernel/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cpp | 52 | ||||
| -rw-r--r-- | Kernel/HALKit/AMD64/HalCoreMultiProcessingAMD64.cpp | 50 | ||||
| -rw-r--r-- | Kernel/HALKit/AMD64/HalDebugOutput.cxx | 2 | ||||
| -rw-r--r-- | Kernel/HALKit/AMD64/HalKernelMain.cxx | 2 | ||||
| -rw-r--r-- | Kernel/HALKit/AMD64/HalSMPCore.cxx | 2 | ||||
| -rw-r--r-- | Kernel/HALKit/AMD64/Processor.hpp | 65 | ||||
| -rw-r--r-- | Kernel/HALKit/AMD64/Storage/AHCI.cxx | 2 | ||||
| -rw-r--r-- | Kernel/KernelKit/DebugOutput.hpp | 18 | ||||
| -rw-r--r-- | Kernel/KernelKit/DeviceManager.hpp | 4 | ||||
| -rw-r--r-- | Kernel/KernelKit/DriveManager.hxx | 8 | ||||
| -rw-r--r-- | Kernel/KernelKit/Framebuffer.hpp | 1 | ||||
| -rw-r--r-- | Kernel/KernelKit/KernelHeap.hpp | 5 | ||||
| -rw-r--r-- | Kernel/KernelKit/PEF.hpp | 2 | ||||
| -rw-r--r-- | Kernel/KernelKit/ProcessScheduler.hxx (renamed from Kernel/KernelKit/ProcessScheduler.hpp) | 10 | ||||
| -rw-r--r-- | Kernel/KernelKit/SMPManager.hpp | 2 | ||||
| -rw-r--r-- | Kernel/KernelKit/ThreadLocalStorage.inl | 10 | ||||
| -rw-r--r-- | Kernel/KernelKit/XCOFF.hxx | 24 | ||||
| -rw-r--r-- | Kernel/KernelRsrc.rsrc | 8 | ||||
| -rw-r--r-- | Kernel/Linker/16x0.json | 2 | ||||
| -rw-r--r-- | Kernel/Linker/32x0.json | 2 | ||||
| -rw-r--r-- | Kernel/Linker/64x0.json | 2 | ||||
| -rw-r--r-- | Kernel/NetworkKit/NetworkDevice.inl | 4 | ||||
| -rw-r--r-- | Kernel/Sources/AppMain.cxx | 28 | ||||
| -rw-r--r-- | Kernel/Sources/CodeManager.cxx | 4 | ||||
| -rw-r--r-- | Kernel/Sources/CxxAbi.cxx | 2 | ||||
| -rw-r--r-- | Kernel/Sources/FS/NewFS.cxx | 55 | ||||
| -rw-r--r-- | Kernel/Sources/IndexableProperty.cxx | 2 | ||||
| -rw-r--r-- | Kernel/Sources/KernelCheck.cxx | 4 | ||||
| -rw-r--r-- | Kernel/Sources/KernelHeap.cxx | 27 | ||||
| -rw-r--r-- | Kernel/Sources/PEFCodeManager.cxx | 4 | ||||
| -rw-r--r-- | Kernel/Sources/PEFSharedObject.cxx (renamed from Kernel/Sources/PEFSharedObjectRT.cxx) | 15 | ||||
| -rw-r--r-- | Kernel/Sources/ProcessScheduler.cxx | 42 | ||||
| -rw-r--r-- | Kernel/Sources/ProcessTeam.cxx | 2 | ||||
| -rw-r--r-- | Kernel/Sources/SMPManager.cxx | 8 | ||||
| -rw-r--r-- | Kernel/Sources/Semaphore.cxx | 2 | ||||
| -rw-r--r-- | Kernel/Sources/ThreadLocalStorage.cxx | 10 | ||||
| -rw-r--r-- | Kernel/Sources/UserHeap.cxx | 10 | ||||
| -rw-r--r-- | Kernel/makefile | 4 | ||||
| -rw-r--r-- | License.QR.txt | 29 | ||||
| -rw-r--r-- | ReadMe.md | 2 | ||||
| -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 Binary files differnew file mode 100644 index 00000000..1e2f5318 --- /dev/null +++ b/Kernel/Docs/Explicit Partition Map.pdf 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 @@ -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 |
