diff options
| author | Amlal <amlalelmahrouss@icloud.com> | 2024-04-23 08:04:24 +0000 |
|---|---|---|
| committer | Amlal <amlalelmahrouss@icloud.com> | 2024-04-23 08:04:24 +0000 |
| commit | 4d425a7b0740a1b22f6126461736f35b8df0ca98 (patch) | |
| tree | 03b546e996c56c1fa0a8dea6da0f74aaff503070 | |
| parent | 3cd65eae51017c242dfdce26693395b016d7856f (diff) | |
| parent | 55cea3704776e727b0f38a4f5480c8cdd1834861 (diff) | |
Merged in MHR-11 (pull request #3)
MHR-11: Dont restrict compiler to general registers.
| -rw-r--r-- | Private/Builtins/Toolbox/Lerp.hxx | 20 | ||||
| -rw-r--r-- | Private/Builtins/Toolbox/Toolbox.hxx | 111 | ||||
| -rw-r--r-- | Private/NewBoot/Source/HEL/AMD64/BootMain.cxx | 12 | ||||
| -rw-r--r-- | Private/NewBoot/Source/makefile | 2 | ||||
| -rw-r--r-- | Private/makefile | 2 |
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), ) |
