fix on real hardware

This commit is contained in:
PoliEcho 2025-08-15 19:26:00 +02:00
parent 24edc2599b
commit f2ad30047a
7 changed files with 50 additions and 12 deletions

View File

@ -24,12 +24,12 @@ RegisterFilterLib|edk2/MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNul
StackCheckLib|edk2/MdePkg/Library/StackCheckLibNull/StackCheckLibNull.inf
IoLib|edk2/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
RngLib|edk2/MdePkg/Library/BaseRngLib/BaseRngLib.inf
SerialPortLib|edk2/UefiPayloadPkg/Library/BaseSerialPortLibHob/BaseSerialPortLibHob.inf
TimerLib|edk2/OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.inf
PciLib|edk2/MdePkg/Library/BasePciLibCf8/BasePciLibCf8.inf
HobLib|edk2/MdePkg/Library/DxeHobLib/DxeHobLib.inf
PciCf8Lib|edk2/MdePkg/Library/BasePciCf8Lib/BasePciCf8Lib.inf
SerialPortLib|edk2/MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
DebugPrintErrorLevelLib|edk2/MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf
LocalApicLib|edk2/UefiCpuPkg/Library/BaseXApicLib/BaseXApicLib.inf
CpuLib|edk2/MdePkg/Library/BaseCpuLib/BaseCpuLib.inf
UefiRuntimeServicesTableLib|edk2/MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
TimerLib|edk2/MdePkg/Library/BaseTimerLibNullTemplate/BaseTimerLibNullTemplate.inf
[Components]
src/UEFI_fireworks/UEFI_fireworks.inf

View File

@ -5,5 +5,6 @@ if [ "$1" == "debug" ]; then
else
build -a X64 -t GCC5 -p UEFI_fireworks.dsc
fi
mkdir -p build
mkdir -p build/EFI/BOOT/
cp edk2/Build/UEFI_fireworks/DEBUG_GCC5/X64/UEFI_fireworks.efi build/
cp edk2/Build/UEFI_fireworks/DEBUG_GCC5/X64/UEFI_fireworks.efi build/EFI/BOOT/BOOTX64.EFI

View File

@ -10,6 +10,7 @@
UefiMain.c
drawing.c
rng.c
time.c
[Packages]
edk2/MdePkg/MdePkg.dec
@ -28,6 +29,7 @@
TimerLib
RngLib
SerialPortLib
UefiRuntimeServicesTableLib
[Protocols]
gEfiRngProtocolGuid

View File

@ -4,6 +4,7 @@
#include "global.h"
#include "macros.h"
#include "rng.h"
#include "time.h"
#include "types.h"
#include <Base.h>
#include <Library/BaseLib.h>
@ -11,9 +12,9 @@
#include <Library/MemoryAllocationLib.h>
#include <Library/RngLib.h>
#include <Library/SerialPortLib.h>
#include <Library/TimerLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>
#include <Protocol/GraphicsOutput.h>
#include <Uefi.h>
#include <stdint.h>
@ -24,9 +25,11 @@ EFI_GRAPHICS_OUTPUT_BLT_PIXEL *framebuffer = NULL;
EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE imgHandle,
IN EFI_SYSTEM_TABLE *sysTable) {
Print(L"Starting program\n");
gST = sysTable;
gBS = sysTable->BootServices;
gImageHandle = imgHandle;
gRT = sysTable->RuntimeServices;
// UEFI apps automatically exit after 5 minutes. Stop that here
gBS->SetWatchdogTimer(0, 0, 0, NULL);
@ -40,6 +43,11 @@ EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE imgHandle,
gBS->LocateProtocol(&gEfiGraphicsOutputProtocolGuid, NULL,
(VOID **)&GraphicsOutput);
if (GraphicsOutput == NULL) {
Print(L"GraphicsOutput protocol not found!\n");
return EFI_NOT_FOUND;
}
framebuffer =
(EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)GraphicsOutput->Mode->FrameBufferBase;
@ -58,9 +66,9 @@ EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE imgHandle,
gBS->SetMem(firework_array, sizeof(firework_array),
0); // make all pointers null
SERIAL_PRINT("DOES it work?");
SERIAL_PRINT("DOES it work?\n");
Print(L"If you see this message timer does not work\n");
MicroSecondDelay(1000);
milisleep(100);
clear_screen();
while (TRUE) {
@ -86,7 +94,7 @@ EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE imgHandle,
goto assgned;
} // firework will not be created if if all slots are full
}
Print(L"NO free slots\n");
SERIAL_PRINT("NO free slots\n");
}
assgned:
for (UINT8 i = 0; i < ARRAY_SIZE(firework_array); i++) {
@ -102,7 +110,7 @@ EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE imgHandle,
}
}
MicroSecondDelay(100000);
milisleep(10);
}
return EFI_SUCCESS;

View File

@ -2,6 +2,7 @@
#include "Library/UefiBootServicesTableLib.h"
#include "Library/UefiLib.h"
#include "ProcessorBind.h"
#include "time.h"
#include <Library/BaseLib.h>
#include <Library/RngLib.h>
#include <Library/TimerLib.h>
@ -63,7 +64,7 @@ void init_rng() {
Print(L"Continuing in ");
for (UINT8 i = 5; i > 0; i--) {
Print(L"\b%d", i);
MicroSecondDelay(1000000);
milisleep(1000);
}
fill_random_bytes = fill_random_bytes_LFSR;

24
src/UEFI_fireworks/time.c Normal file
View File

@ -0,0 +1,24 @@
#include "Library/UefiLib.h"
#include <Library/UefiBootServicesTableLib.h>
EFI_STATUS
milisleep(UINTN Milliseconds) {
EFI_STATUS Status;
EFI_EVENT TimerEvent;
Status =
gBS->CreateEvent(EVT_TIMER, TPL_APPLICATION, NULL, NULL, &TimerEvent);
if (EFI_ERROR(Status)) {
return Status;
}
Status = gBS->SetTimer(TimerEvent, TimerRelative,
EFI_TIMER_PERIOD_MILLISECONDS(Milliseconds));
if (!EFI_ERROR(Status)) {
gBS->WaitForEvent(1, &TimerEvent, NULL);
}
gBS->CloseEvent(TimerEvent);
return Status;
}

View File

@ -0,0 +1,2 @@
#pragma once
void milisleep(UINTN Milliseconds);