diff options
| author | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-24 09:04:34 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-24 09:04:34 +0100 |
| commit | 917eae9453ecac6d9aeb04254d5d5c97e5a6c9e1 (patch) | |
| tree | 767f6aeabb24f02c119e073e3efd2c710aabed5d /Private/KernelKit | |
| parent | 5563deabd8f7ce3fc713ea23f8cf5bbac33b4024 (diff) | |
Kernel: MS-1: Microkernel and bootloader.
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private/KernelKit')
| -rw-r--r-- | Private/KernelKit/DeviceManager.hpp | 23 | ||||
| -rw-r--r-- | Private/KernelKit/HError.hpp | 7 | ||||
| -rw-r--r-- | Private/KernelKit/Loader.hpp | 36 |
3 files changed, 42 insertions, 24 deletions
diff --git a/Private/KernelKit/DeviceManager.hpp b/Private/KernelKit/DeviceManager.hpp index 9a689b26..582d1194 100644 --- a/Private/KernelKit/DeviceManager.hpp +++ b/Private/KernelKit/DeviceManager.hpp @@ -24,6 +24,8 @@ #include <NewKit/ErrorOr.hpp> #include <NewKit/Ref.hpp> +#include "NewKit/KernelCheck.hpp" + namespace HCore { template <typename T> class DeviceInterface; @@ -61,10 +63,18 @@ class DeviceInterface { void (*m_In)(T Data); }; +/// +/// +/// @brief Input Output Buffer +/// Used mainly to communicate between hardware. +/// template <typename T> class IOBuf final { public: - explicit IOBuf(T Dat) : m_Data(Dat) {} + explicit IOBuf(T Dat) : m_Data(Dat) { + // at least pass something valid when instancating this struct. + MUST_PASS(Dat); + } IOBuf &operator=(const IOBuf<T> &) = default; IOBuf(const IOBuf<T> &) = default; @@ -72,8 +82,15 @@ class IOBuf final { ~IOBuf() = default; public: - T operator->() const { return m_Data; } - T &operator[](Size index) const { return m_Data[index]; } + template <typename R> + R operator->() const { + return m_Data; + } + + template <typename R> + R &operator[](Size index) const { + return m_Data[index]; + } private: T m_Data; diff --git a/Private/KernelKit/HError.hpp b/Private/KernelKit/HError.hpp index 0d412154..247608f9 100644 --- a/Private/KernelKit/HError.hpp +++ b/Private/KernelKit/HError.hpp @@ -31,5 +31,8 @@ inline constexpr HError kErrorHeapOutOfMemory = 44; Boolean ke_bug_check(void) noexcept; } // namespace HCore -#define KernIsOk(HERR) (HERR == HCore::kErrorSuccess) -#define KernHasFailed(HERR) (HERR != HCore::kErrorSuccess) +#define IsOk(HERR) (HERR == HCore::kErrorSuccess) +#define HasFailed(HERR) (HERR != HCore::kErrorSuccess) +#define GetLastError() LastError + +inline HCore::HError LastError = 0; diff --git a/Private/KernelKit/Loader.hpp b/Private/KernelKit/Loader.hpp index a293e2e4..36da444f 100644 --- a/Private/KernelKit/Loader.hpp +++ b/Private/KernelKit/Loader.hpp @@ -9,26 +9,24 @@ #pragma once -#include <NewKit/ErrorOr.hpp> -#include <NewKit/Defines.hpp> #include <CompilerKit/CompilerKit.hpp> +#include <NewKit/Defines.hpp> +#include <NewKit/ErrorOr.hpp> -namespace HCore -{ - class Loader - { - public: - Loader() = default; - virtual ~Loader() = default; - - HCORE_COPY_DEFAULT(Loader); +namespace HCore { +/// This interface is used to make loader contracts (MSCOFF, PEF). +class Loader { + public: + Loader() = default; + virtual ~Loader() = default; - public: - virtual const char* Format() = 0; - virtual const char* MIME() = 0; - virtual const char* Path() = 0; - virtual ErrorOr<VoidPtr> LoadStart() = 0; - virtual VoidPtr FindSymbol(const char* name, Int32 kind) = 0; + HCORE_COPY_DEFAULT(Loader); - }; -} + public: + virtual const char* Format() = 0; + virtual const char* MIME() = 0; + virtual const char* Path() = 0; + virtual ErrorOr<VoidPtr> LoadStart() = 0; + virtual VoidPtr FindSymbol(const char* name, Int32 kind) = 0; +}; +} // namespace HCore |
