Skip to content

Commit

Permalink
BIOS loading
Browse files Browse the repository at this point in the history
  • Loading branch information
drhelius committed Jan 28, 2025
1 parent 09e1e89 commit c040ce9
Show file tree
Hide file tree
Showing 14 changed files with 260 additions and 83 deletions.
18 changes: 13 additions & 5 deletions platforms/libretro/libretro.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@
#include "libretro.h"
#include "../../src/gearlynx.h"

// #ifdef _WIN32
// static const char slash = '\\';
// #else
// static const char slash = '/';
// #endif
#ifdef _WIN32
static const char slash = '\\';
#else
static const char slash = '/';
#endif

#define RETRO_DEVICE_LYNX_PAD RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 0)

Expand Down Expand Up @@ -99,6 +99,12 @@ static int IsButtonPressed(int joypad_bits, int button)
return (joypad_bits & (1 << button)) ? 1 : 0;
}

static void load_bootroms(void)
{
char bios_path[4113];
sprintf(bios_path, "%s%lynxboot.img", retro_system_directory, slash);
core->GetMemory()->LoadBios(bios_path);
}

unsigned retro_api_version(void)
{
Expand Down Expand Up @@ -183,6 +189,7 @@ void retro_reset(void)
log_cb(RETRO_LOG_DEBUG, "Resetting...\n");

check_variables();
load_bootroms();
core->ResetROM(true);
}

Expand Down Expand Up @@ -278,6 +285,7 @@ void retro_run(void)
bool retro_load_game(const struct retro_game_info *info)
{
check_variables();
load_bootroms();

snprintf(retro_game_path, sizeof(retro_game_path), "%s", info->path);
log_cb(RETRO_LOG_INFO, "Loading game: %s\n", retro_game_path);
Expand Down
2 changes: 2 additions & 0 deletions platforms/shared/desktop/config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ void config_read(void)
config_emulator.ffwd_speed = read_int("Emulator", "FFWD", 1);
config_emulator.save_slot = read_int("Emulator", "SaveSlot", 0);
config_emulator.start_paused = read_bool("Emulator", "StartPaused", false);
config_emulator.bios_path = read_string("Emulator", "BiosPath");
config_emulator.savefiles_dir_option = read_int("Emulator", "SaveFilesDirOption", 0);
config_emulator.savefiles_path = read_string("Emulator", "SaveFilesPath");
config_emulator.savestates_dir_option = read_int("Emulator", "SaveStatesDirOption", 0);
Expand Down Expand Up @@ -225,6 +226,7 @@ void config_write(void)
write_int("Emulator", "FFWD", config_emulator.ffwd_speed);
write_int("Emulator", "SaveSlot", config_emulator.save_slot);
write_bool("Emulator", "StartPaused", config_emulator.start_paused);
write_string("Emulator", "BiosPath", config_emulator.bios_path);
write_int("Emulator", "SaveFilesDirOption", config_emulator.savefiles_dir_option);
write_string("Emulator", "SaveFilesPath", config_emulator.savefiles_path);
write_int("Emulator", "SaveStatesDirOption", config_emulator.savestates_dir_option);
Expand Down
1 change: 1 addition & 0 deletions platforms/shared/desktop/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ struct config_Emulator
int ffwd_speed = 1;
bool show_info = false;
std::string recent_roms[config_max_recent_roms];
std::string bios_path;
int savefiles_dir_option = 0;
std::string savefiles_path;
int savestates_dir_option = 0;
Expand Down
10 changes: 10 additions & 0 deletions platforms/shared/desktop/emu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,16 @@ bool emu_is_empty(void)
return !core->GetCartridge()->IsReady();
}

bool emu_is_bios_loaded(void)
{
return core->GetMemory()->IsBiosLoaded();
}

void emu_load_bios(const char* file_path)
{
core->GetMemory()->LoadBios(file_path);
}

void emu_reset(void)
{
emu_debug_command = Debug_Command_None;
Expand Down
3 changes: 3 additions & 0 deletions platforms/shared/desktop/emu.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ EXTERN void emu_resume(void);
EXTERN bool emu_is_paused(void);
EXTERN bool emu_is_debug_idle(void);
EXTERN bool emu_is_empty(void);
EXTERN bool emu_is_bios_loaded(void);
EXTERN void emu_load_bios(const char* file_path);
EXTERN void emu_load_bios(const char* file_path);
EXTERN void emu_reset(void);
EXTERN void emu_audio_mute(bool mute);
EXTERN void emu_audio_reset(void);
Expand Down
29 changes: 28 additions & 1 deletion platforms/shared/desktop/gui_filedialogs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include "gui_debug_memory.h"
#include "gui_debug_disassembler.h"
#include "gui_debug_trace_logger.h"
#include "gui_menus.h"
#include "application.h"
#include "config.h"
#include "emu.h"
Expand Down Expand Up @@ -163,7 +164,9 @@ void gui_file_dialog_choose_savestate_path(void)
nfdresult_t result = NFD_PickFolderU8_With(&outPath, &args);
if (result == NFD_OKAY)
{
strcpy(gui_savestates_path, outPath);
config_emulator.savestates_path.assign(outPath);
update_savestates_data();
NFD_FreePath(outPath);
}
else if (result != NFD_CANCEL)
Expand All @@ -182,8 +185,8 @@ void gui_file_dialog_choose_screenshot_path(void)
nfdresult_t result = NFD_PickFolderU8_With(&outPath, &args);
if (result == NFD_OKAY)
{
strcpy(gui_screenshots_path, outPath);
config_emulator.screenshots_path.assign(outPath);
update_savestates_data();
NFD_FreePath(outPath);
}
else if (result != NFD_CANCEL)
Expand All @@ -192,6 +195,30 @@ void gui_file_dialog_choose_screenshot_path(void)
}
}

void gui_file_dialog_load_bios(void)
{
nfdchar_t *outPath;
nfdfilteritem_t filterItem[1] = { { "BIOS Files", "img" } };
nfdopendialogu8args_t args = { };
args.filterList = filterItem;
args.filterCount = 1;
args.defaultPath = config_emulator.last_open_path.c_str();
file_dialog_set_native_window(application_sdl_window, &args.parentWindow);

nfdresult_t result = NFD_OpenDialogU8_With(&outPath, &args);
if (result == NFD_OKAY)
{
strcpy(gui_bios_path, outPath);
config_emulator.bios_path.assign(outPath);
emu_load_bios(outPath);
NFD_FreePath(outPath);
}
else if (result != NFD_CANCEL)
{
Log("Load Bios Error: %s", NFD_GetError());
}
}

void gui_file_dialog_load_symbols(void)
{
nfdchar_t *outPath;
Expand Down
1 change: 1 addition & 0 deletions platforms/shared/desktop/gui_filedialogs.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ EXTERN void gui_file_dialog_load_state(void);
EXTERN void gui_file_dialog_save_state(void);
EXTERN void gui_file_dialog_choose_savestate_path(void);
EXTERN void gui_file_dialog_choose_screenshot_path(void);
EXTERN void gui_file_dialog_load_bios(void);
EXTERN void gui_file_dialog_load_symbols(void);
EXTERN void gui_file_dialog_save_screenshot(void);
EXTERN void gui_file_dialog_save_memory_dump(void);
Expand Down
Loading

0 comments on commit c040ce9

Please sign in to comment.