From fb0d208bb2c6d8322ff1d483d92d143c6aaef9c1 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Tue, 13 Feb 2024 08:48:42 +0100 Subject: HCR-15: Improve kernel and bootloader. Signed-off-by: Amlal El Mahrouss --- BUG_LIST.TXT | 3 ++ Private/ArchKit/SyscallImpl.hpp | 13 ------ Private/EFIKit/Api.hxx | 4 +- Private/EFIKit/EFI.hxx | 2 +- Private/EFIKit/EPM.hxx | 2 +- Private/EFIKit/UEFI.hxx | 2 +- Private/HintKit/CompilerHint.hxx | 21 ++++++++++ Private/KernelKit/FileManager.hpp | 2 +- Private/KernelKit/ThreadLocalStorage.hxx | 12 +++--- Private/NewBoot/BootKit/BootKit.hxx | 2 +- Private/NewBoot/BootKit/EPM.hxx | 2 +- Private/NewBoot/BootKit/Platform.hxx | 2 +- Private/NewBoot/Source/FileReader.cxx | 17 ++++---- Private/NewBoot/Source/HEL/AMD64/AMD64-AHCI.cxx | 2 +- Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx | 2 +- Private/NewBoot/Source/RuntimeMain.cxx | 6 ++- Private/NewKit/Defines.hpp | 6 +++ Private/NewKit/RuntimeCheck.hpp | 2 - Private/Source/PEFCodeManager.cxx | 2 +- Private/Source/SMPManager.cxx | 16 ++++---- Private/Source/UserHeap.cxx | 54 ++++++++++++------------- Public/BUG_LIST.TXT | 3 -- Public/SPECIFICATION.TXT | 32 --------------- Public/TODO_LIST.TXT | 21 ---------- ReadMe.md | 2 +- SPECIFICATION.TXT | 32 +++++++++++++++ TODO_LIST.TXT | 21 ++++++++++ 27 files changed, 148 insertions(+), 137 deletions(-) create mode 100644 BUG_LIST.TXT delete mode 100644 Private/ArchKit/SyscallImpl.hpp create mode 100644 Private/HintKit/CompilerHint.hxx delete mode 100644 Public/BUG_LIST.TXT delete mode 100644 Public/SPECIFICATION.TXT delete mode 100644 Public/TODO_LIST.TXT create mode 100644 SPECIFICATION.TXT create mode 100644 TODO_LIST.TXT diff --git a/BUG_LIST.TXT b/BUG_LIST.TXT new file mode 100644 index 00000000..1fa4e00a --- /dev/null +++ b/BUG_LIST.TXT @@ -0,0 +1,3 @@ +ADD THE BUGS HERE: + +None diff --git a/Private/ArchKit/SyscallImpl.hpp b/Private/ArchKit/SyscallImpl.hpp deleted file mode 100644 index 26acdd38..00000000 --- a/Private/ArchKit/SyscallImpl.hpp +++ /dev/null @@ -1,13 +0,0 @@ -/* - * ======================================================== - * - * HCore - * Copyright Mahrouss Logic, all rights reserved. - * - * ======================================================== - */ - -#pragma once - -#include - diff --git a/Private/EFIKit/Api.hxx b/Private/EFIKit/Api.hxx index 0297ad96..7338235a 100644 --- a/Private/EFIKit/Api.hxx +++ b/Private/EFIKit/Api.hxx @@ -2,7 +2,7 @@ * ======================================================== * * h-core - * Copyright 2024, Mahrouss Logic, all rights reserved. + * Copyright, Mahrouss Logic, all rights reserved. * * ======================================================== */ @@ -30,8 +30,6 @@ Bascially frees everything we have in the EFI side. inline void ExitBootServices(UInt64 MapKey, EfiHandlePtr ImageHandle) noexcept { if (!ST) return; - ST->ConOut->OutputString(ST->ConOut, L"HCoreLdr: Exit BootServices...\r\n"); - /// The MapKey may be invalid. /// If so, then hang the computer. if (ST->BootServices->ExitBootServices(ImageHandle, MapKey) != kEfiOk) { diff --git a/Private/EFIKit/EFI.hxx b/Private/EFIKit/EFI.hxx index 30899ca9..dfaf68eb 100644 --- a/Private/EFIKit/EFI.hxx +++ b/Private/EFIKit/EFI.hxx @@ -2,7 +2,7 @@ * ======================================================== * * h-core - * Copyright 2024, Mahrouss Logic, all rights reserved. + * Copyright, Mahrouss Logic, all rights reserved. * * ======================================================== */ diff --git a/Private/EFIKit/EPM.hxx b/Private/EFIKit/EPM.hxx index 8c8f724f..bd0e07ff 100644 --- a/Private/EFIKit/EPM.hxx +++ b/Private/EFIKit/EPM.hxx @@ -2,7 +2,7 @@ * ======================================================== * * h-core - * Copyright 2024, Mahrouss Logic, all rights reserved. + * Copyright, Mahrouss Logic, all rights reserved. * * ======================================================== */ diff --git a/Private/EFIKit/UEFI.hxx b/Private/EFIKit/UEFI.hxx index aeee81cb..de211a4a 100644 --- a/Private/EFIKit/UEFI.hxx +++ b/Private/EFIKit/UEFI.hxx @@ -2,7 +2,7 @@ * ======================================================== * * h-core - * Copyright 2024, Mahrouss Logic, all rights reserved. + * Copyright, Mahrouss Logic, all rights reserved. * * ======================================================== */ diff --git a/Private/HintKit/CompilerHint.hxx b/Private/HintKit/CompilerHint.hxx new file mode 100644 index 00000000..e74f349a --- /dev/null +++ b/Private/HintKit/CompilerHint.hxx @@ -0,0 +1,21 @@ +/* + * ======================================================== + * + * HintKit + * Copyright Mahrouss Logic, all rights reserved. + * + * ======================================================== + */ + +#ifndef __HINTKIT_COMPILER_HINT_HXX__ +#define __HINTKIT_COMPILER_HINT_HXX__ + +#define _Input +#define _Output + +#define _Optional + +#define _StrictCheckInput +#define _StrictCheckOutput + +#endif // ifndef __HINTKIT_COMPILER_HINT_HXX__ diff --git a/Private/KernelKit/FileManager.hpp b/Private/KernelKit/FileManager.hpp index 29c5e755..a191368e 100644 --- a/Private/KernelKit/FileManager.hpp +++ b/Private/KernelKit/FileManager.hpp @@ -185,7 +185,7 @@ class FileStream final { return ErrorOr(H_INVALID_DATA); } - VoidPtr ReadAll() noexcept { + VoidPtr Read() noexcept { auto man = FSClass::GetMounted(); if (man) { diff --git a/Private/KernelKit/ThreadLocalStorage.hxx b/Private/KernelKit/ThreadLocalStorage.hxx index e7c55ee7..db04c054 100644 --- a/Private/KernelKit/ThreadLocalStorage.hxx +++ b/Private/KernelKit/ThreadLocalStorage.hxx @@ -29,14 +29,16 @@ T *hcore_tls_new_class(Args &&...args); typedef HCore::Char rt_cookie_type[3]; +#define kTIBNameLen 256 + /// @brief Thread Information Block for Local Storage. /// Located in GS on AMD64, Virtual Address 0x10000 (64x0, 32x0, ARM64) struct ThreadInformationBlock final { - HCore::Char Name[kNameLen]; // Module Name - HCore::UIntPtr StartCode; // Start Address - HCore::UIntPtr StartData; // Allocation Heap - HCore::UIntPtr StartStack; // Stack Pointer. - HCore::Int32 Arch; // Architecture and/or platform. + HCore::Char Name[kTIBNameLen]; // Module Name + HCore::UIntPtr StartCode; // Start Address + HCore::UIntPtr StartData; // Allocation Heap + HCore::UIntPtr StartStack; // Stack Pointer. + HCore::Int32 Arch; // Architecture and/or platform. rt_cookie_type Cookie; // Not shown in public header, this is the way we tell // something went wrong. }; diff --git a/Private/NewBoot/BootKit/BootKit.hxx b/Private/NewBoot/BootKit/BootKit.hxx index 2eaea9d1..0c747643 100644 --- a/Private/NewBoot/BootKit/BootKit.hxx +++ b/Private/NewBoot/BootKit/BootKit.hxx @@ -64,7 +64,7 @@ class BFileReader final { explicit BFileReader(const CharacterType *path, EfiHandlePtr ImageHandle); ~BFileReader(); - Void ReadAll(); + Void Read(); enum { kOperationOkay, diff --git a/Private/NewBoot/BootKit/EPM.hxx b/Private/NewBoot/BootKit/EPM.hxx index 359eed1b..328906f2 100644 --- a/Private/NewBoot/BootKit/EPM.hxx +++ b/Private/NewBoot/BootKit/EPM.hxx @@ -2,7 +2,7 @@ * ======================================================== * * h-core - * Copyright 2024, Mahrouss Logic, all rights reserved. + * Copyright, Mahrouss Logic, all rights reserved. * * ======================================================== */ diff --git a/Private/NewBoot/BootKit/Platform.hxx b/Private/NewBoot/BootKit/Platform.hxx index 917678b9..346357cb 100644 --- a/Private/NewBoot/BootKit/Platform.hxx +++ b/Private/NewBoot/BootKit/Platform.hxx @@ -2,7 +2,7 @@ * ======================================================== * * h-core - * Copyright 2024, Mahrouss Logic, all rights reserved. + * Copyright, Mahrouss Logic, all rights reserved. * * ======================================================== */ diff --git a/Private/NewBoot/Source/FileReader.cxx b/Private/NewBoot/Source/FileReader.cxx index b26c4d78..5768cae0 100644 --- a/Private/NewBoot/Source/FileReader.cxx +++ b/Private/NewBoot/Source/FileReader.cxx @@ -19,11 +19,12 @@ /// BUGS: 0 //////////////////////////////////////////////////////////////////////////////////////////////////// -// -// -// @brief BImageReader class -// -// +/// +/// +/// @name BFileReader class +/// @brief Reads the file as a blob. +/// +/// //////////////////////////////////////////////////////////////////////////////////////////////////// /*** @@ -102,11 +103,7 @@ BFileReader::~BFileReader() { @brief this reads all of the buffer. @param ImageHandle used internally. */ -Void BFileReader::ReadAll() { - mWriter.WriteString(L"HCoreLdr: ReadAll: ") - .WriteString(mPath) - .WriteString(L"\r\n"); - +Void BFileReader::Read() { /// Allocate Handover page. if (mBlob == nullptr) { diff --git a/Private/NewBoot/Source/HEL/AMD64/AMD64-AHCI.cxx b/Private/NewBoot/Source/HEL/AMD64/AMD64-AHCI.cxx index 2363f8cb..357bd591 100644 --- a/Private/NewBoot/Source/HEL/AMD64/AMD64-AHCI.cxx +++ b/Private/NewBoot/Source/HEL/AMD64/AMD64-AHCI.cxx @@ -14,7 +14,7 @@ * @version 0.1 * @date 2024-02-02 * - * @copyright Copyright (c) 2024 Mahrouss Logic + * @copyright Copyright (c) Mahrouss Logic * */ diff --git a/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx b/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx index 757c294d..5382fd30 100644 --- a/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx +++ b/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx @@ -14,7 +14,7 @@ * @version 0.1 * @date 2024-02-02 * - * @copyright Copyright (c) 2024 Mahrouss Logic + * @copyright Copyright (c) Mahrouss Logic * */ diff --git a/Private/NewBoot/Source/RuntimeMain.cxx b/Private/NewBoot/Source/RuntimeMain.cxx index 40d9e819..a520b980 100644 --- a/Private/NewBoot/Source/RuntimeMain.cxx +++ b/Private/NewBoot/Source/RuntimeMain.cxx @@ -48,10 +48,14 @@ EFI_EXTERN_C EFI_API Int EfiMain(EfiHandlePtr ImageHandle, .WriteString(SystemTable->FirmwareVendor) .WriteString(L"\r\n"); + writer.WriteString(L"HCoreLdr: Reading: ") + .WriteString(L"HCOREKRNL.EXE") + .WriteString(L"\r\n"); + BFileReader img(L"HCOREKRNL.EXE", ImageHandle); img.Size() = Detail::kBufferReadSz; - img.ReadAll(); + img.Read(); if (img.Error() == BFileReader::kOperationOkay) { BlobType blob = (BlobType)img.Blob(); diff --git a/Private/NewKit/Defines.hpp b/Private/NewKit/Defines.hpp index 3c07c1e4..9a766f5a 100644 --- a/Private/NewKit/Defines.hpp +++ b/Private/NewKit/Defines.hpp @@ -91,3 +91,9 @@ Args &&move(Args &&arg) { #define No (false) #define VoidStar HCore::voidPtr + +#ifdef INIT +#undef INIT +#endif // ifdef INIT + +#define INIT(OBJ, TYPE, ...) TYPE OBJ = TYPE(__VA_ARGS__) diff --git a/Private/NewKit/RuntimeCheck.hpp b/Private/NewKit/RuntimeCheck.hpp index 4a10d31c..7221b3ea 100644 --- a/Private/NewKit/RuntimeCheck.hpp +++ b/Private/NewKit/RuntimeCheck.hpp @@ -52,8 +52,6 @@ void ke_stop(const Int &id); #undef TRY #endif -#define INIT(OBJ, TYPE, ...) TYPE OBJ = TYPE(__VA_ARGS__) - #define TRY(FN) \ if (!FN()) { \ MUST_PASS(false); \ diff --git a/Private/Source/PEFCodeManager.cxx b/Private/Source/PEFCodeManager.cxx index e7e0d9a0..530667cf 100644 --- a/Private/Source/PEFCodeManager.cxx +++ b/Private/Source/PEFCodeManager.cxx @@ -48,7 +48,7 @@ PEFLoader::PEFLoader(const char *path) : fCachedBlob(nullptr), fBad(false) { if (StringBuilder::Equals(file->MIME(), this->MIME())) { fPath = StringBuilder::Construct(path).Leak(); - fCachedBlob = file->ReadAll(); + fCachedBlob = file->Read(); PEFContainer *container = reinterpret_cast(fCachedBlob); diff --git a/Private/Source/SMPManager.cxx b/Private/Source/SMPManager.cxx index 0b3e1550..3db349fe 100644 --- a/Private/Source/SMPManager.cxx +++ b/Private/Source/SMPManager.cxx @@ -11,19 +11,19 @@ #include #include -/// BUGS: 0 +///! BUGS: 0 ///! @brief This file handles multi processing in HCore. ///! @brief Multi processing is needed for multi-tasking operations. namespace HCore { -// A HardwareThread class takes care of it's owned hardware thread. -// It has a stack for it's core. +///! A HardwareThread class takes care of it's owned hardware thread. +///! It has a stack for it's core. -// @brief constructor +///! @brief constructor HardwareThread::HardwareThread() = default; -// @brief destructor +///! @brief destructor HardwareThread::~HardwareThread() = default; //! @brief returns the id @@ -110,14 +110,14 @@ bool SMPManager::Switch(HAL::StackFrame* stack) { continue; // to avoid any null deref. - if (!stack, m_ThreadList[idx].Leak().Leak().m_Stack) continue; + if (!m_ThreadList[idx].Leak().Leak().m_Stack) continue; + if (m_ThreadList[idx].Leak().Leak().m_Stack->Rsp == 0) continue; + if (m_ThreadList[idx].Leak().Leak().m_Stack->Rbp == 0) continue; m_ThreadList[idx].Leak().Leak().Busy(true); m_ThreadList[idx].Leak().Leak().m_ID = idx; - m_ThreadList[idx].Leak().Leak().Busy(true); - /// I figured out this: /// Allocate stack /// Set APIC base to stack diff --git a/Private/Source/UserHeap.cxx b/Private/Source/UserHeap.cxx index 4690db9f..5b086111 100644 --- a/Private/Source/UserHeap.cxx +++ b/Private/Source/UserHeap.cxx @@ -45,12 +45,12 @@ Ref HeapManager::s_Pmm; Boolean HeapManager::s_PoolsAreEnabled = true; Array, kPoolMaxSz> HeapManager::s_Pool; -STATIC voidPtr ke_find_unused_heap(Int flags); -STATIC void ke_free_heap_internal(voidPtr vaddr); -STATIC voidPtr ke_make_heap(voidPtr vaddr, Int flags); -STATIC Boolean ke_check_and_free_heap(const SizeT& index, voidPtr ptr); +STATIC VoidPtr ke_find_unused_heap(Int flags); +STATIC void ke_free_heap_internal(VoidPtr vaddr); +STATIC VoidPtr ke_make_heap(VoidPtr vaddr, Int flags); +STATIC Boolean ke_check_and_free_heap(const SizeT& index, VoidPtr ptr); -STATIC voidPtr ke_find_unused_heap(Int flags) { +STATIC VoidPtr ke_find_unused_heap(Int flags) { for (SizeT index = 0; index < kPoolMaxSz; ++index) { if (HeapManager::The()[index] && !HeapManager::The()[index].Leak().Leak().Leak()->Present()) { @@ -58,7 +58,7 @@ STATIC voidPtr ke_find_unused_heap(Int flags) { HeapManager::The()[index].Leak().Leak(), true); kcout << "[ke_find_unused_heap] Done, trying now to make a pool\r\n"; - return ke_make_heap((voidPtr)HeapManager::The()[index] + return ke_make_heap((VoidPtr)HeapManager::The()[index] .Leak() .Leak() .Leak() @@ -70,21 +70,21 @@ STATIC voidPtr ke_find_unused_heap(Int flags) { return nullptr; } -STATIC voidPtr ke_make_heap(voidPtr virtualAddress, Int flags) { +STATIC VoidPtr ke_make_heap(VoidPtr virtualAddress, Int flags) { if (virtualAddress) { - HeapHeader* pool_hdr = reinterpret_cast(virtualAddress); + HeapHeader* poolHdr = reinterpret_cast(virtualAddress); - if (!pool_hdr->Free) { - kcout << "[ke_make_heap] pool_hdr->Free, Pool already exists\n"; + if (!poolHdr->Free) { + kcout << "[ke_make_heap] poolHdr->Free, Pool already exists\n"; return nullptr; } - pool_hdr->Flags = flags; - pool_hdr->Magic = kPoolMag; - pool_hdr->Free = false; + poolHdr->Flags = flags; + poolHdr->Magic = kPoolMag; + poolHdr->Free = false; kcout << "[ke_make_heap] New allocation has been done.\n"; - return reinterpret_cast( + return reinterpret_cast( (reinterpret_cast(virtualAddress) + sizeof(HeapHeader))); } @@ -92,13 +92,13 @@ STATIC voidPtr ke_make_heap(voidPtr virtualAddress, Int flags) { return nullptr; } -STATIC void ke_free_heap_internal(voidPtr virtualAddress) { - HeapHeader* pool_hdr = reinterpret_cast( +STATIC void ke_free_heap_internal(VoidPtr virtualAddress) { + HeapHeader* poolHdr = reinterpret_cast( reinterpret_cast(virtualAddress) - sizeof(HeapHeader)); - if (pool_hdr->Magic == kPoolMag) { - pool_hdr->Free = false; - pool_hdr->Flags = 0; + if (poolHdr->Magic == kPoolMag) { + poolHdr->Free = false; + poolHdr->Flags = 0; kcout << "[ke_free_heap_internal] Successfully marked header as free!\r\n"; } @@ -111,11 +111,11 @@ STATIC void ke_free_heap_internal(voidPtr virtualAddress) { * @param ptr The ptr to check. * @return Boolean true if successful. */ -STATIC Boolean ke_check_and_free_heap(const SizeT& index, voidPtr ptr) { +STATIC Boolean ke_check_and_free_heap(const SizeT& index, VoidPtr ptr) { if (HeapManager::The()[index]) { // ErrorOr<>::operator Boolean - /// if address matches - /// -> Free Pool. + /// if (address matches) + /// -> Free Pool. if (HeapManager::The()[index].Leak().Leak().Leak()->VirtualAddress() == (UIntPtr)ptr) { HeapManager::Leak().Leak().FreePage( @@ -136,12 +136,12 @@ STATIC Boolean ke_check_and_free_heap(const SizeT& index, voidPtr ptr) { /// @brief Creates a new pool pointer. /// @param flags the flags attached to it. /// @return a pool pointer with selected permissions. -voidPtr ke_new_heap(Int32 flags) { +VoidPtr ke_new_heap(Int32 flags) { if (!HeapManager::IsEnabled()) return nullptr; if (HeapManager::Count() > kPoolMaxSz) return nullptr; - if (voidPtr ret = ke_find_unused_heap(flags)) return ret; + if (VoidPtr ret = ke_find_unused_heap(flags)) return ret; // this wasn't set to true auto ref_page = HeapManager::Leak().Leak().RequestPage(((flags & kPoolUser)), @@ -154,11 +154,9 @@ voidPtr ke_new_heap(Int32 flags) { ++ref; // increment the number of addresses we have now. - ref_page->NoExecute(true); - // finally make the pool address. return ke_make_heap( - reinterpret_cast(ref_page.Leak()->VirtualAddress()), flags); + reinterpret_cast(ref_page.Leak()->VirtualAddress()), flags); } return nullptr; @@ -167,7 +165,7 @@ voidPtr ke_new_heap(Int32 flags) { /// @brief free a pool pointer. /// @param ptr The pool pointer to free. /// @return status code -Int32 ke_free_heap(voidPtr ptr) { +Int32 ke_free_heap(VoidPtr ptr) { if (!HeapManager::IsEnabled()) return -1; if (ptr) { diff --git a/Public/BUG_LIST.TXT b/Public/BUG_LIST.TXT deleted file mode 100644 index 1fa4e00a..00000000 --- a/Public/BUG_LIST.TXT +++ /dev/null @@ -1,3 +0,0 @@ -ADD THE BUGS HERE: - -None diff --git a/Public/SPECIFICATION.TXT b/Public/SPECIFICATION.TXT deleted file mode 100644 index 6a129d9e..00000000 --- a/Public/SPECIFICATION.TXT +++ /dev/null @@ -1,32 +0,0 @@ -=================================== -0: General Information -=================================== - -- ABI and Format: PEF/PE32+. -- Kernel architecture: Microkernel. -- Language: C++/(Assembly (AMD64, X64000, X86S, ARM64)) - -=================================== -1: The HCore Microkernel -=================================== - -- Drive/Device Abstraction. -- SMP, Preemptive Multi Threading. -- Separation of Files/Devices. -- Networking. -- Hardware Abstraction Layer. -- Native Filesystem support (NewFS). -- Program Loader. -- TLS. -- Canary bird. -- Dynamic Libraries. -- Cross platform code (it has to work for each platform) - -=================================== -2: The Filesystem -=================================== - -- Catalog based with forks. -- Large storage support. -- Long file names. -- UNIX path style. diff --git a/Public/TODO_LIST.TXT b/Public/TODO_LIST.TXT deleted file mode 100644 index d3a2eed2..00000000 --- a/Public/TODO_LIST.TXT +++ /dev/null @@ -1,21 +0,0 @@ -- We need preemptive multi-threading. [ X ] -- We then need sync primitives. [ X ] -- We also need a system library for the OS. [ X ] -- We need a bootloader for AMD64/ARM [ X ] - - Implement Boot Services [ X ] - - Design Handover [ X ] - - Load kernel into memory [ X ] - - Fix bug in kernel loader, which causes a 06 #UD. [ X ] - - Load Stage 2 bootloader [ ] -- Context switch x87/SSE/AVX registers [ ] -- Framebuffer and ATA support [ ] -- Native Subsystem and GUI [ ] - -Status: - -HCoreLdr: Working. -HCoreKrnl: Not run yet. - -Prioritize: -HCoreLdr: Protocol and API. -HCoreKrnl: Complying to specs. diff --git a/ReadMe.md b/ReadMe.md index 2115dd94..3549c26e 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -22,4 +22,4 @@ make all You'd also need The SDK and MinGW, to build and link the components. For Tools look at `Public/Tools` -##### Copyright 2024, Mahrouss Logic, all rights reserved. \ No newline at end of file +##### Copyright, Mahrouss Logic, all rights reserved. diff --git a/SPECIFICATION.TXT b/SPECIFICATION.TXT new file mode 100644 index 00000000..6a129d9e --- /dev/null +++ b/SPECIFICATION.TXT @@ -0,0 +1,32 @@ +=================================== +0: General Information +=================================== + +- ABI and Format: PEF/PE32+. +- Kernel architecture: Microkernel. +- Language: C++/(Assembly (AMD64, X64000, X86S, ARM64)) + +=================================== +1: The HCore Microkernel +=================================== + +- Drive/Device Abstraction. +- SMP, Preemptive Multi Threading. +- Separation of Files/Devices. +- Networking. +- Hardware Abstraction Layer. +- Native Filesystem support (NewFS). +- Program Loader. +- TLS. +- Canary bird. +- Dynamic Libraries. +- Cross platform code (it has to work for each platform) + +=================================== +2: The Filesystem +=================================== + +- Catalog based with forks. +- Large storage support. +- Long file names. +- UNIX path style. diff --git a/TODO_LIST.TXT b/TODO_LIST.TXT new file mode 100644 index 00000000..d3a2eed2 --- /dev/null +++ b/TODO_LIST.TXT @@ -0,0 +1,21 @@ +- We need preemptive multi-threading. [ X ] +- We then need sync primitives. [ X ] +- We also need a system library for the OS. [ X ] +- We need a bootloader for AMD64/ARM [ X ] + - Implement Boot Services [ X ] + - Design Handover [ X ] + - Load kernel into memory [ X ] + - Fix bug in kernel loader, which causes a 06 #UD. [ X ] + - Load Stage 2 bootloader [ ] +- Context switch x87/SSE/AVX registers [ ] +- Framebuffer and ATA support [ ] +- Native Subsystem and GUI [ ] + +Status: + +HCoreLdr: Working. +HCoreKrnl: Not run yet. + +Prioritize: +HCoreLdr: Protocol and API. +HCoreKrnl: Complying to specs. -- cgit v1.2.3