why doesnt it work :(((
This commit is contained in:
parent
c8a714e684
commit
1b0f312834
@ -16,7 +16,7 @@
|
|||||||
DevicePathLib|edk2/MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
|
DevicePathLib|edk2/MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
|
||||||
UefiBootServicesTableLib|edk2/MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
|
UefiBootServicesTableLib|edk2/MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
|
||||||
UefiRuntimeServicesTableLib|edk2/MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
|
UefiRuntimeServicesTableLib|edk2/MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
|
||||||
DebugLib|edk2/MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
|
DebugLib|edk2/MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
|
||||||
PrintLib|edk2/MdePkg/Library/BasePrintLib/BasePrintLib.inf
|
PrintLib|edk2/MdePkg/Library/BasePrintLib/BasePrintLib.inf
|
||||||
PcdLib|edk2/MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
|
PcdLib|edk2/MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
|
||||||
RegisterFilterLib|edk2/MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.inf
|
RegisterFilterLib|edk2/MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.inf
|
||||||
|
@ -24,7 +24,8 @@ RegisterFilterLib|edk2/MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNul
|
|||||||
StackCheckLib|edk2/MdePkg/Library/StackCheckLibNull/StackCheckLibNull.inf
|
StackCheckLib|edk2/MdePkg/Library/StackCheckLibNull/StackCheckLibNull.inf
|
||||||
TimerLib|edk2/MdePkg/Library/SecPeiDxeTimerLibCpu/SecPeiDxeTimerLibCpu.inf
|
TimerLib|edk2/MdePkg/Library/SecPeiDxeTimerLibCpu/SecPeiDxeTimerLibCpu.inf
|
||||||
IoLib|edk2/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
|
IoLib|edk2/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
|
||||||
|
RngLib|edk2/MdePkg/Library/BaseRngLib/BaseRngLib.inf
|
||||||
|
SerialPortLib|edk2/MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
|
||||||
|
|
||||||
|
|
||||||
[Components]
|
[Components]
|
||||||
|
6
build.sh
6
build.sh
@ -1,5 +1,9 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
export PACKAGES_PATH=$PWD:$PWD/edk2
|
export PACKAGES_PATH=$PWD:$PWD/edk2
|
||||||
build -a X64 -t GCC5 -p UEFI_fireworks.dsc
|
if [ "$1" == "debug" ]; then
|
||||||
|
build -a X64 -t GCC5 -p UEFI_fireworks.dsc -b DEBUG
|
||||||
|
else
|
||||||
|
build -a X64 -t GCC5 -p UEFI_fireworks.dsc
|
||||||
|
fi
|
||||||
mkdir -p build
|
mkdir -p build
|
||||||
cp edk2/Build/UEFI_fireworks/DEBUG_GCC5/X64/UEFI_fireworks.efi build/
|
cp edk2/Build/UEFI_fireworks/DEBUG_GCC5/X64/UEFI_fireworks.efi build/
|
||||||
|
@ -25,9 +25,11 @@
|
|||||||
DebugLib
|
DebugLib
|
||||||
PrintLib
|
PrintLib
|
||||||
TimerLib
|
TimerLib
|
||||||
|
RngLib
|
||||||
|
SerialPortLib
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
|
gEfiRngProtocolGuid
|
||||||
[Guids]
|
[Guids]
|
||||||
|
|
||||||
[Pcd]
|
[Pcd]
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#include "Library/UefiApplicationEntryPoint.h"
|
||||||
#include "ProcessorBind.h"
|
#include "ProcessorBind.h"
|
||||||
#include "drawing.h"
|
#include "drawing.h"
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
@ -5,7 +6,10 @@
|
|||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include <Base.h>
|
#include <Base.h>
|
||||||
#include <Library/BaseLib.h>
|
#include <Library/BaseLib.h>
|
||||||
|
#include <Library/DebugLib.h>
|
||||||
#include <Library/MemoryAllocationLib.h>
|
#include <Library/MemoryAllocationLib.h>
|
||||||
|
#include <Library/RngLib.h>
|
||||||
|
#include <Library/SerialPortLib.h>
|
||||||
#include <Library/TimerLib.h>
|
#include <Library/TimerLib.h>
|
||||||
#include <Library/UefiBootServicesTableLib.h>
|
#include <Library/UefiBootServicesTableLib.h>
|
||||||
#include <Library/UefiLib.h>
|
#include <Library/UefiLib.h>
|
||||||
@ -38,20 +42,58 @@ EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE imgHandle,
|
|||||||
|
|
||||||
clear_screen(GraphicsOutput);
|
clear_screen(GraphicsOutput);
|
||||||
|
|
||||||
struct firework_instance firework = {500,
|
|
||||||
500,
|
|
||||||
100,
|
|
||||||
{0, 0, 0},
|
|
||||||
{COLOR_FROM_HEX(0xff0000),
|
|
||||||
COLOR_FROM_HEX(0x00ff00),
|
|
||||||
COLOR_FROM_HEX(0x0000ff)},
|
|
||||||
0};
|
|
||||||
while (step_firework(&firework)) {
|
|
||||||
MicroSecondDelay(50000);
|
|
||||||
}
|
|
||||||
|
|
||||||
LIST_ENTRY firework_list;
|
LIST_ENTRY firework_list;
|
||||||
InitializeListHead(&firework_list);
|
InitializeListHead(&firework_list);
|
||||||
|
|
||||||
|
if (SerialPortInitialize() == RETURN_SUCCESS) {
|
||||||
|
SERIAL_PRINT("Serial initialized");
|
||||||
|
} else {
|
||||||
|
Print(L"Failed to initialize Serial");
|
||||||
|
Exit(RETURN_DEVICE_ERROR);
|
||||||
|
}
|
||||||
|
while (TRUE) {
|
||||||
|
UINT32 random;
|
||||||
|
GetRandomNumber32(&random);
|
||||||
|
if (random % 6 == 0) {
|
||||||
|
// spawn new firework
|
||||||
|
firework_node *new_firework_node =
|
||||||
|
AllocateZeroPool(sizeof(firework_node));
|
||||||
|
if (new_firework_node == NULL) {
|
||||||
|
return EFI_OUT_OF_RESOURCES;
|
||||||
|
}
|
||||||
|
new_firework_node->Signature = FIREWORK_NODE_SIGNATURE;
|
||||||
|
GetRandomNumber32(&random);
|
||||||
|
new_firework_node->Firework.max_r =
|
||||||
|
random % 501; // so max number can be 500
|
||||||
|
for (UINT8 i = 0; i < ARRAY_SIZE(new_firework_node->Firework.color);
|
||||||
|
i++) {
|
||||||
|
GetRandomNumber32(
|
||||||
|
(UINT32 *)&new_firework_node->Firework.color[i]); // belive
|
||||||
|
new_firework_node->Firework.r[i] = 0;
|
||||||
|
}
|
||||||
|
new_firework_node->Firework.cleanup_r = 0;
|
||||||
|
GetRandomNumber32(&random);
|
||||||
|
new_firework_node->Firework.x =
|
||||||
|
random % GraphicsOutput->Mode->Info->HorizontalResolution + 1;
|
||||||
|
GetRandomNumber32(&random);
|
||||||
|
new_firework_node->Firework.y =
|
||||||
|
random % GraphicsOutput->Mode->Info->VerticalResolution + 1;
|
||||||
|
|
||||||
|
InsertTailList(&firework_list, &new_firework_node->Link);
|
||||||
|
}
|
||||||
|
|
||||||
|
firework_node *current_node = NULL;
|
||||||
|
for (LIST_ENTRY *node = GetFirstNode(&firework_list);
|
||||||
|
!IsNodeAtEnd(&firework_list, node);
|
||||||
|
node = GetNextNode(&firework_list, node)) {
|
||||||
|
// Print(L"Processing firework\r\n");
|
||||||
|
|
||||||
|
current_node = CR(node, firework_node, Link, FIREWORK_NODE_SIGNATURE);
|
||||||
|
if (!step_firework(¤t_node->Firework)) {
|
||||||
|
RemoveEntryList(node); // remove if firework ended
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MicroSecondDelay(500000);
|
||||||
|
}
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -11,12 +11,10 @@ void draw_pixel(const UINT32 x, const UINT32 y,
|
|||||||
const EFI_GRAPHICS_OUTPUT_BLT_PIXEL pixel) {
|
const EFI_GRAPHICS_OUTPUT_BLT_PIXEL pixel) {
|
||||||
UINTN framebuffer_offset =
|
UINTN framebuffer_offset =
|
||||||
(y * GraphicsOutput->Mode->Info->PixelsPerScanLine) + x;
|
(y * GraphicsOutput->Mode->Info->PixelsPerScanLine) + x;
|
||||||
if (framebuffer_offset >= GraphicsOutput->Mode->FrameBufferSize) {
|
if (framebuffer_offset <
|
||||||
Print(L"Atepted out of bounds write to framebuffer\r\n");
|
GraphicsOutput->Mode->FrameBufferSize) { // ignre when out of bounds
|
||||||
Exit(RETURN_WARN_BUFFER_TOO_SMALL);
|
|
||||||
}
|
|
||||||
|
|
||||||
framebuffer[framebuffer_offset] = pixel;
|
framebuffer[framebuffer_offset] = pixel;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// uses Mid-Point Circle Drawing Algorithm
|
// uses Mid-Point Circle Drawing Algorithm
|
||||||
@ -87,7 +85,7 @@ void clear_screen() {
|
|||||||
BOOLEAN step_firework(struct firework_instance *firework) {
|
BOOLEAN step_firework(struct firework_instance *firework) {
|
||||||
for (UINT8 i = 0; i < ARRAY_SIZE(firework->r); i++) {
|
for (UINT8 i = 0; i < ARRAY_SIZE(firework->r); i++) {
|
||||||
if (firework->r[i] < firework->max_r) {
|
if (firework->r[i] < firework->max_r) {
|
||||||
if (i == 0 || (firework->max_r / 3) * i <= firework->r[i - 1]) {
|
if (i == 0 || (firework->max_r / 3.5) * i <= firework->r[i - 1]) {
|
||||||
draw_circle(firework->x, firework->y, firework->r[i],
|
draw_circle(firework->x, firework->y, firework->r[i],
|
||||||
firework->color[i]);
|
firework->color[i]);
|
||||||
firework->r[i]++;
|
firework->r[i]++;
|
||||||
|
@ -4,3 +4,5 @@
|
|||||||
.Green = ((hex) >> 8) & 0xFF, \
|
.Green = ((hex) >> 8) & 0xFF, \
|
||||||
.Red = ((hex) >> 16) & 0xFF, \
|
.Red = ((hex) >> 16) & 0xFF, \
|
||||||
.Reserved = 0}
|
.Reserved = 0}
|
||||||
|
|
||||||
|
#define SERIAL_PRINT(str) SerialPortWrite((UINT8 *)str, AsciiStrLen(str))
|
@ -11,9 +11,9 @@ struct firework_instance {
|
|||||||
UINT16 cleanup_r;
|
UINT16 cleanup_r;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct firework_node {
|
typedef struct {
|
||||||
UINTN Signature;
|
UINTN Signature;
|
||||||
struct firework_instance Firework;
|
struct firework_instance Firework;
|
||||||
LIST_ENTRY Link;
|
LIST_ENTRY Link;
|
||||||
};
|
} firework_node;
|
||||||
#define FIREWORK_NODE_SIGNATURE SIGNATURE_32('f', 'w', 'r', 'k')
|
#define FIREWORK_NODE_SIGNATURE SIGNATURE_32('f', 'w', 'r', 'k')
|
6
test.sh
6
test.sh
@ -6,5 +6,9 @@ qemu-system-x86_64 \
|
|||||||
-machine type=q35,accel=kvm \
|
-machine type=q35,accel=kvm \
|
||||||
-drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \
|
-drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \
|
||||||
-drive if=pflash,format=raw,file=./my_ovmf_vars.fd \
|
-drive if=pflash,format=raw,file=./my_ovmf_vars.fd \
|
||||||
-hda fat:rw:$(dirname build/UEFI_fireworks.efi)
|
-hda fat:rw:$(dirname build/UEFI_fireworks.efi) \
|
||||||
|
-smp 4 \
|
||||||
|
-s \
|
||||||
|
-serial mon:stdio
|
||||||
|
|
||||||
rm ./my_ovmf_vars.fd
|
rm ./my_ovmf_vars.fd
|
||||||
|
Loading…
x
Reference in New Issue
Block a user