From 38cbba79e296b8dd8e1c1d93cef004ec7e070674 Mon Sep 17 00:00:00 2001 From: scawful Date: Tue, 6 Aug 2024 22:23:43 -0400 Subject: [PATCH] implement load_rom and unload_rom --- src/CMakeLists.txt | 2 +- src/yaze.cc | 25 +++++++++++++++++++++++-- src/yaze.h | 4 ++++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 46e788c9..a42920c2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -115,7 +115,7 @@ include(test/CMakeLists.txt) # Yaze C API add_library(yaze_c SHARED - app/yaze.cc + ./yaze.cc app/rom.cc ${YAZE_APP_EMU_SRC} ${YAZE_APP_CORE_SRC} diff --git a/src/yaze.cc b/src/yaze.cc index 27d5abdb..e48221b4 100644 --- a/src/yaze.cc +++ b/src/yaze.cc @@ -1,15 +1,36 @@ #include "yaze.h" +#include "app/rom.h" + // TODO: Implement yaze_initialize void yaze_initialize(void) {} // TODO: Implement yaze_cleanup void yaze_cleanup(void) {} -// TODO: Implement load_rom Rom load_rom(const char* filename) { + yaze::app::Rom* internal_rom; + internal_rom = new yaze::app::Rom(); + if (!internal_rom->LoadFromFile(filename).ok()) { + delete internal_rom; + Rom rom; + rom.impl = nullptr; + rom.filename = filename; + rom.data = nullptr; + rom.size = 0; + return rom; + } + Rom rom; + rom.impl = internal_rom; rom.filename = filename; - rom.data = nullptr; + rom.data = internal_rom->data(); + rom.size = internal_rom->size(); return rom; +} + +void unload_rom(Rom rom) { + if (rom.impl) { + delete static_cast(rom.impl); + } } \ No newline at end of file diff --git a/src/yaze.h b/src/yaze.h index 28134983..79052f8e 100644 --- a/src/yaze.h +++ b/src/yaze.h @@ -1,6 +1,7 @@ #ifndef YAZE_H #define YAZE_H +#include #include #ifdef __cplusplus @@ -16,9 +17,12 @@ typedef struct Rom Rom; struct Rom { const char* filename; const uint8_t* data; + size_t size; + void* impl; // yaze::app::Rom* }; Rom load_rom(const char* filename); +void unload_rom(Rom rom); #ifdef __cplusplus }