feat: add experimental game engine & demo game, fix ACPI events

This commit is contained in:
2026-03-18 14:26:50 +01:00
parent ffffb6a0c5
commit b5d2cc515c
42 changed files with 2237 additions and 12 deletions
+8 -3
View File
@@ -79,8 +79,7 @@ namespace Hal {
KernelLogStream(INFO, "ACPI") << "Sleep button pressed";
}
// Send EOI
LocalApic::SendEOI();
// Note: EOI is sent by HalIrqDispatch after this handler returns.
}
// ============================================================================
@@ -88,7 +87,13 @@ namespace Hal {
// Initialize
// ============================================================================
void Initialize(const FADT::ParsedFADT& fadt) {
void Initialize(ACPI::CommonSDTHeader* xsdt) {
FADT::ParsedFADT fadt{};
if (!FADT::Parse(xsdt, fadt) || !fadt.Valid) {
KernelLogStream(ERROR, "ACPI") << "Failed to parse FADT - ACPI events unavailable";
return;
}
g_pm1aEventBlock = fadt.PM1aEventBlock;
g_pm1bEventBlock = fadt.PM1bEventBlock;
g_pm1EventLength = fadt.PM1EventLength;
+2 -2
View File
@@ -13,8 +13,8 @@ namespace Hal {
// Initialize ACPI event handling: route the SCI interrupt,
// register the handler, and enable fixed events (power button).
// Must be called after APIC and FADT initialization.
void Initialize(const FADT::ParsedFADT& fadt);
// Must be called after APIC initialization.
void Initialize(ACPI::CommonSDTHeader* xsdt);
// Re-enable ACPI events after S3 resume.
void Reinitialize();
+2 -2
View File
@@ -69,8 +69,8 @@ namespace Hal {
// Initialize S3 suspend support (reads FACS and \_S3_ from namespace)
AcpiSleep::Initialize(xsdt);
// Initialize ACPI event handling (SCI interrupt, power button)
AcpiEvents::Initialize(fadt);
// Note: ACPI event handling (SCI, power button) is initialized
// from Main.cpp after the APIC subsystem is ready.
}
bool IsAvailable() {
+4
View File
@@ -21,6 +21,7 @@
#include <Memory/Paging.hpp>
#include <ACPI/ACPI.hpp>
#include <ACPI/AcpiShutdown.hpp>
#include <ACPI/AcpiEvents.hpp>
#include <Hal/Apic/ApicInit.hpp>
#include <Pci/Pci.hpp>
#include <Timekeeping/ApicTimer.hpp>
@@ -144,6 +145,9 @@ extern "C" void kmain() {
Hal::ApicInitialize(g_acpi.GetXSDT());
// Initialize ACPI events (SCI, power button) after APIC is ready
Hal::AcpiEvents::Initialize(g_acpi.GetXSDT());
Pci::Initialize(g_acpi.GetXSDT());
Drivers::ProbeEarly();