summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal <amlalelmahrouss@icloud.com>2024-04-23 08:04:24 +0000
committerAmlal <amlalelmahrouss@icloud.com>2024-04-23 08:04:24 +0000
commit4d425a7b0740a1b22f6126461736f35b8df0ca98 (patch)
tree03b546e996c56c1fa0a8dea6da0f74aaff503070
parent3cd65eae51017c242dfdce26693395b016d7856f (diff)
parent55cea3704776e727b0f38a4f5480c8cdd1834861 (diff)
Merged in MHR-11 (pull request #3)
MHR-11: Dont restrict compiler to general registers.
-rw-r--r--Private/Builtins/Toolbox/Lerp.hxx20
-rw-r--r--Private/Builtins/Toolbox/Toolbox.hxx111
-rw-r--r--Private/NewBoot/Source/HEL/AMD64/BootMain.cxx12
-rw-r--r--Private/NewBoot/Source/makefile2
-rw-r--r--Private/makefile2
5 files changed, 80 insertions, 67 deletions
diff --git a/Private/Builtins/Toolbox/Lerp.hxx b/Private/Builtins/Toolbox/Lerp.hxx
new file mode 100644
index 00000000..db03edeb
--- /dev/null
+++ b/Private/Builtins/Toolbox/Lerp.hxx
@@ -0,0 +1,20 @@
+/* -------------------------------------------
+
+ Copyright Mahrouss Logic
+
+------------------------------------------- */
+
+#pragma once
+
+/// @file Lerp.hxx
+/// @brief Linear interpolation implementation.
+
+/// @brief Linear interpolation equation solver.
+/// @param from where?
+/// @param to to?
+/// @param at which state we're at **to**.
+inline int Lerp( int from , int to , float percent ) noexcept
+{
+ int difference = to - from;
+ return from + ( difference * percent );
+}
diff --git a/Private/Builtins/Toolbox/Toolbox.hxx b/Private/Builtins/Toolbox/Toolbox.hxx
index 5a510a5a..02d2bf39 100644
--- a/Private/Builtins/Toolbox/Toolbox.hxx
+++ b/Private/Builtins/Toolbox/Toolbox.hxx
@@ -8,80 +8,69 @@
#include <NewKit/Defines.hpp>
-EXTERN_C NewOS::Void _hal_init_mouse();
-EXTERN_C NewOS::Boolean _hal_draw_mouse();
-EXTERN_C NewOS::Void _hal_handle_mouse();
-EXTERN_C NewOS::Boolean _hal_left_button_pressed();
-EXTERN_C NewOS::Boolean _hal_middle_button_pressed();
-EXTERN_C NewOS::Boolean _hal_right_button_pressed();
+EXTERN_C NewOS::Void _hal_init_mouse();
+EXTERN_C NewOS::Boolean _hal_draw_mouse();
+EXTERN_C NewOS::Void _hal_handle_mouse();
+EXTERN_C NewOS::Boolean _hal_left_button_pressed();
+EXTERN_C NewOS::Boolean _hal_middle_button_pressed();
+EXTERN_C NewOS::Boolean _hal_right_button_pressed();
-#define ToolboxInitRsrc() NewOS::SizeT uA = 0
+#define ToolboxInitRsrc() NewOS::SizeT __ToolboxCursor = 0
#define kClearClr RGB(00, 00, 00)
-#define ToolboxClearRsrc() uA = 0
+#define ToolboxClearRsrc() __ToolboxCursor = 0
/// @brief Performs OR drawing on the framebuffer.
-#define ToolboxDrawOrRsrc(ImgPtr, _Height, _Width, BaseX, BaseY) \
- uA = 0; \
- \
- for (NewOS::SizeT i = BaseX; i < _Height + BaseX; ++i) { \
- for (NewOS::SizeT u = BaseY; u < _Width + BaseY; ++u) { \
- *(((volatile NewOS::UInt32*)(kHandoverHeader->f_GOP.f_The + \
- 4 * \
- kHandoverHeader->f_GOP \
- .f_PixelPerLine * \
- i + \
- 4 * u))) |= ImgPtr[uA]; \
- \
- ++uA; \
- } \
+#define ToolboxDrawOrRsrc(ImgPtr, _Height, _Width, BaseX, BaseY) \
+ __ToolboxCursor = 0; \
+ \
+ for (NewOS::SizeT i = BaseX; i < _Height + BaseX; ++i) { \
+ for (NewOS::SizeT u = BaseY; u < _Width + BaseY; ++u) { \
+ *(((volatile NewOS::UInt32*)(kHandoverHeader->f_GOP.f_The + \
+ 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \
+ i + \
+ 4 * u))) |= ImgPtr[__ToolboxCursor]; \
+ \
+ ++__ToolboxCursor; \
+ } \
}
-
/// @brief Draws a resource.
-#define ToolboxDrawRsrc(ImgPtr, _Height, _Width, BaseX, BaseY) \
- uA = 0; \
- \
- for (NewOS::SizeT i = BaseX; i < _Height + BaseX; ++i) { \
- for (NewOS::SizeT u = BaseY; u < _Width + BaseY; ++u) { \
- *(((volatile NewOS::UInt32*)(kHandoverHeader->f_GOP.f_The + \
- 4 * \
- kHandoverHeader->f_GOP \
- .f_PixelPerLine * \
- i + \
- 4 * u))) = ImgPtr[uA]; \
- \
- ++uA; \
- } \
+#define ToolboxDrawRsrc(ImgPtr, _Height, _Width, BaseX, BaseY) \
+ __ToolboxCursor = 0; \
+ \
+ for (NewOS::SizeT i = BaseX; i < _Height + BaseX; ++i) { \
+ for (NewOS::SizeT u = BaseY; u < _Width + BaseY; ++u) { \
+ *(((volatile NewOS::UInt32*)(kHandoverHeader->f_GOP.f_The + \
+ 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \
+ i + \
+ 4 * u))) = ImgPtr[__ToolboxCursor]; \
+ \
+ ++__ToolboxCursor; \
+ } \
}
-
/// @brief Cleans a resource.
-#define ToolboxClearZone(_Height, _Width, BaseX, BaseY) \
- \
- for (NewOS::SizeT i = BaseX; i < _Height + BaseX; ++i) { \
- for (NewOS::SizeT u = BaseY; u < _Width + BaseY; ++u) { \
- *(((volatile NewOS::UInt32*)(kHandoverHeader->f_GOP.f_The + \
- 4 * \
- kHandoverHeader->f_GOP \
- .f_PixelPerLine * \
- i + \
- 4 * u))) = kClearClr; \
- } \
+#define ToolboxClearZone(_Height, _Width, BaseX, BaseY) \
+ \
+ for (NewOS::SizeT i = BaseX; i < _Height + BaseX; ++i) { \
+ for (NewOS::SizeT u = BaseY; u < _Width + BaseY; ++u) { \
+ *(((volatile NewOS::UInt32*)(kHandoverHeader->f_GOP.f_The + \
+ 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \
+ i + \
+ 4 * u))) = kClearClr; \
+ } \
}
-
/// @brief Draws inside a zone.
-#define ToolboxDrawZone(_Clr, _Height, _Width, BaseX, BaseY) \
- \
- for (NewOS::SizeT i = BaseX; i < _Width + BaseX; ++i) { \
- for (NewOS::SizeT u = BaseY; u < _Height + BaseY; ++u) { \
- *(((volatile NewOS::UInt32*)(kHandoverHeader->f_GOP.f_The + \
- 4 * \
- kHandoverHeader->f_GOP \
- .f_PixelPerLine * \
- i + \
- 4 * u))) = _Clr; \
- } \
+#define ToolboxDrawZone(_Clr, _Height, _Width, BaseX, BaseY) \
+ \
+ for (NewOS::SizeT i = BaseX; i < _Width + BaseX; ++i) { \
+ for (NewOS::SizeT u = BaseY; u < _Height + BaseY; ++u) { \
+ *(((volatile NewOS::UInt32*)(kHandoverHeader->f_GOP.f_The + \
+ 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \
+ i + \
+ 4 * u))) = _Clr; \
+ } \
}
diff --git a/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx b/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx
index 638fe37a..6373ed39 100644
--- a/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx
+++ b/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx
@@ -6,6 +6,7 @@
#include <BootKit/BootKit.hxx>
#include <BootKit/Rsrc/Driver.rsrc>
+#include <Builtins/Toolbox/Bezier.hxx>
#include <Builtins/Toolbox/Toolbox.hxx>
#include <KernelKit/MSDOS.hpp>
#include <KernelKit/PE.hxx>
@@ -169,16 +170,19 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle,
BFileReader kernelFile(L"NewKernel.exe", ImageHandle);
kernelFile.ReadAll(KIB(512), 4096);
- ExecOptionalHeaderPtr headerKind = (ExecOptionalHeaderPtr)rt_find_exec_header((DosHeaderPtr)kernelFile.Blob());
+ ExecOptionalHeaderPtr headerKind = (ExecOptionalHeaderPtr)rt_find_exec_header(
+ (DosHeaderPtr)kernelFile.Blob());
if (!headerKind) {
- EFI::RaiseHardError(L"Bad-Exec", L"New Boot can't recognize this executable.");
+ EFI::RaiseHardError(L"Bad-Exec",
+ L"New Boot can't recognize this executable.");
}
- BootMainKind main = (BootMainKind)nullptr;
+ BootMainKind main = (BootMainKind) nullptr;
if (!main) {
- EFI::RaiseHardError(L"Bad-Exec", L"New Boot can't recognize this executable.");
+ EFI::RaiseHardError(L"Bad-Exec",
+ L"New Boot can't recognize this executable.");
}
EFI::ExitBootServices(MapKey, ImageHandle);
diff --git a/Private/NewBoot/Source/makefile b/Private/NewBoot/Source/makefile
index 197eb91b..6fb945ff 100644
--- a/Private/NewBoot/Source/makefile
+++ b/Private/NewBoot/Source/makefile
@@ -30,7 +30,7 @@ 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 -fno-rtti -fno-exceptions -std=c++20 -D__HAVE_MAHROUSS_APIS__ -D__MAHROUSS__ -D__BOOTLOADER__ -I./
+FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mno-red-zone -D__KERNEL__ -DEFI_FUNCTION_WRAPPER -I../ -I../../ -I./ -c -ffreestanding -fno-rtti -fno-exceptions -std=c++20 -D__HAVE_MAHROUSS_APIS__ -D__MAHROUSS__ -D__BOOTLOADER__ -I./
.PHONY: invalid-recipe
invalid-recipe:
diff --git a/Private/makefile b/Private/makefile
index 128ccc55..37960c43 100644
--- a/Private/makefile
+++ b/Private/makefile
@@ -5,7 +5,7 @@
CC = x86_64-w64-mingw32-gcc
LD = x86_64-w64-mingw32-ld
-CCFLAGS = -c -ffreestanding -D__NEWOS_AMD64__ -mgeneral-regs-only -mno-red-zone -fno-rtti -fno-exceptions -std=c++20 -D__FSKIT_NEWFS__ -D__KERNEL__ -D__HAVE_MAHROUSS_APIS__ -D__MAHROUSS__ -I../ -I./
+CCFLAGS = -c -ffreestanding -D__NEWOS_AMD64__ -mno-red-zone -fno-rtti -fno-exceptions -std=c++20 -D__FSKIT_NEWFS__ -D__KERNEL__ -D__HAVE_MAHROUSS_APIS__ -D__MAHROUSS__ -I../ -I./
ASM = nasm
ifneq ($(ATA_PIO_SUPPORT), )