Files
Nova64/src/nova64_core.c
T
Lukas Höppner 2f48b3efc8 initial commit
2026-08-09 15:02:21 +02:00

76 lines
2.1 KiB
C

#include "nova64_core.h"
#include "FreeRTOS.h"
#include "queue.h"
#include "task.h"
#include <stdio.h>
#if defined(ESP_PLATFORM)
/* ESP32-spezifische Header für Low-Power & Watchdog */
#include "esp_pm.h"
#include "esp_rom_sys.h"
#include "esp_task_wdt.h"
#elif defined(_WIN32)
/* Windows API für Schlafen im Desktop-Thread */
#include <windows.h>
#else
/* POSIX / Linux / macOS Sleep */
#define _POSIX_C_SOURCE 199309L
#include <time.h>
#endif
static bool is_initialized = false;
static QueueHandle_t event_queue = NULL;
NOVA64_API bool nova64_init_io(const nova64_io_interface_t *io_interface) {
printf("[Nova64 Core] System Initializing...\n");
event_queue = xQueueCreate(10, sizeof(uint32_t));
is_initialized = true;
return true;
}
NOVA64_API int32_t nova64_process_tick(uint32_t delta_ms) {
if (!is_initialized)
return -1;
// Core Game-Logic & State Machine Ticks
return 0; // OK
}
NOVA64_API uint32_t nova64_get_version(void) {
return 0x010000; // v1.0.0
}
/* FreeRTOS hook: called by the kernel when the idle task runs.
* Required because configUSE_IDLE_HOOK is enabled in FreeRTOSConfig.h
*/
void vApplicationIdleHook(void) {
#if defined(ESP_PLATFORM)
// -------------------------------------------------------------------------
// ESP32-specific idle hook code
// -------------------------------------------------------------------------
#if CONFIG_ESP_TASK_WDT
// Feed the watchdog to prevent reset
esp_task_wdt_reset();
#endif
asm volatile("wfi"); // Wait for interrupt to save power
#elif defined(_WIN32)
// -------------------------------------------------------------------------
// Windows-specific idle hook code
// -------------------------------------------------------------------------
Sleep(1); // Sleep for 1 millisecond to yield CPU
#else
// -------------------------------------------------------------------------
// POSIX-specific idle hook code
// -------------------------------------------------------------------------
struct timespec ts = {0, 1000000}; // 1 millisecond
nanosleep(&ts, NULL);
#endif
}