[GTK3] Make use of GB_set_boot_rom_load_callback
This commit is contained in:
parent
5208481337
commit
dea2ad8e55
58
gtk3/main.c
58
gtk3/main.c
@ -2097,57 +2097,42 @@ static void init(GuiData *gui_data) {
|
|||||||
GB_set_input_callback(&gb, sync_console_input);
|
GB_set_input_callback(&gb, sync_console_input);
|
||||||
GB_set_async_input_callback(&gb, async_console_input);
|
GB_set_async_input_callback(&gb, async_console_input);
|
||||||
GB_set_log_callback(&gb, console_log);
|
GB_set_log_callback(&gb, console_log);
|
||||||
|
GB_set_boot_rom_load_callback(&gb, load_boot_rom);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void load_boot_rom(GuiData *gui_data) {
|
static void load_boot_rom(GB_gameboy_t *gb, GB_boot_rom_t type) {
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
char *boot_rom_path = NULL;
|
char *boot_rom_path = NULL;
|
||||||
char *boot_rom_name = NULL;
|
|
||||||
GBytes *boot_rom_f = NULL;
|
GBytes *boot_rom_f = NULL;
|
||||||
const guchar *boot_rom_data;
|
const guchar *boot_rom_data;
|
||||||
gsize boot_rom_size;
|
gsize boot_rom_size;
|
||||||
|
|
||||||
if (gui_data->cli_options.boot_rom_path != NULL) {
|
static const char *const names[] = {
|
||||||
g_message("Trying to load boot ROM from %s", gui_data->cli_options.boot_rom_path);
|
[GB_BOOT_ROM_DMG0] = "dmg0_boot.bin",
|
||||||
if (GB_load_boot_rom(&gb, gui_data->cli_options.boot_rom_path)) {
|
[GB_BOOT_ROM_DMG] = "dmg_boot.bin",
|
||||||
|
[GB_BOOT_ROM_MGB] = "mgb_boot.bin",
|
||||||
|
[GB_BOOT_ROM_SGB] = "sgb_boot.bin",
|
||||||
|
[GB_BOOT_ROM_SGB2] = "sgb2_boot.bin",
|
||||||
|
[GB_BOOT_ROM_CGB0] = "cgb0_boot.bin",
|
||||||
|
[GB_BOOT_ROM_CGB] = "cgb_boot.bin",
|
||||||
|
[GB_BOOT_ROM_AGB] = "agb_boot.bin",
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *const boot_rom_name = names[type];
|
||||||
|
|
||||||
|
if (gui_data.cli_options.boot_rom_path != NULL) {
|
||||||
|
g_message("[CLI override] Trying to load boot ROM from %s", gui_data.cli_options.boot_rom_path);
|
||||||
|
if (GB_load_boot_rom(gb, gui_data.cli_options.boot_rom_path)) {
|
||||||
g_warning("Falling back to boot ROM from config");
|
g_warning("Falling back to boot ROM from config");
|
||||||
goto config_boot_rom;
|
goto config_boot_rom;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { config_boot_rom:
|
else { config_boot_rom:
|
||||||
// TODO: Synchronize with GB_model_t (Core/gb.h)
|
|
||||||
switch (get_model()) {
|
|
||||||
case GB_MODEL_DMG_B:
|
|
||||||
boot_rom_name = "dmg_boot.bin";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GB_MODEL_SGB:
|
|
||||||
case GB_MODEL_SGB_PAL:
|
|
||||||
case GB_MODEL_SGB_NO_SFC:
|
|
||||||
case GB_MODEL_SGB_PAL_NO_SFC:
|
|
||||||
boot_rom_name = "sgb_boot.bin";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GB_MODEL_SGB2:
|
|
||||||
case GB_MODEL_SGB2_NO_SFC:
|
|
||||||
boot_rom_name = "sgb2_boot.bin";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GB_MODEL_CGB_C:
|
|
||||||
case GB_MODEL_CGB_E:
|
|
||||||
boot_rom_name = "cgb_boot.bin";
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GB_MODEL_AGB:
|
|
||||||
boot_rom_name = "agb_boot.bin";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config.boot_rom_path != NULL && g_strcmp0(config.boot_rom_path, "other") != 0 && g_strcmp0(config.boot_rom_path, "auto") != 0) {
|
if (config.boot_rom_path != NULL && g_strcmp0(config.boot_rom_path, "other") != 0 && g_strcmp0(config.boot_rom_path, "auto") != 0) {
|
||||||
boot_rom_path = g_build_filename(config.boot_rom_path, boot_rom_name, NULL);
|
boot_rom_path = g_build_filename(config.boot_rom_path, boot_rom_name, NULL);
|
||||||
g_message("Trying to load boot ROM from %s", boot_rom_path);
|
g_message("Trying to load boot ROM from %s", boot_rom_path);
|
||||||
|
|
||||||
if (GB_load_boot_rom(&gb, boot_rom_path)) {
|
if (GB_load_boot_rom(gb, boot_rom_path)) {
|
||||||
g_free(boot_rom_path);
|
g_free(boot_rom_path);
|
||||||
g_warning("Falling back to internal boot ROM");
|
g_warning("Falling back to internal boot ROM");
|
||||||
goto internal_boot_rom;
|
goto internal_boot_rom;
|
||||||
@ -2158,6 +2143,8 @@ static void load_boot_rom(GuiData *gui_data) {
|
|||||||
else { internal_boot_rom:
|
else { internal_boot_rom:
|
||||||
boot_rom_path = g_build_filename(RESOURCE_PREFIX "bootroms/", boot_rom_name, NULL);
|
boot_rom_path = g_build_filename(RESOURCE_PREFIX "bootroms/", boot_rom_name, NULL);
|
||||||
boot_rom_f = g_resources_lookup_data(boot_rom_path, G_RESOURCE_LOOKUP_FLAGS_NONE, &error);
|
boot_rom_f = g_resources_lookup_data(boot_rom_path, G_RESOURCE_LOOKUP_FLAGS_NONE, &error);
|
||||||
|
|
||||||
|
g_message("Loading internal boot ROM: %s", boot_rom_path);
|
||||||
g_free(boot_rom_path);
|
g_free(boot_rom_path);
|
||||||
|
|
||||||
if (boot_rom_f == NULL) {
|
if (boot_rom_f == NULL) {
|
||||||
@ -2167,7 +2154,7 @@ static void load_boot_rom(GuiData *gui_data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
boot_rom_data = g_bytes_get_data(boot_rom_f, &boot_rom_size);
|
boot_rom_data = g_bytes_get_data(boot_rom_f, &boot_rom_size);
|
||||||
GB_load_boot_rom_from_buffer(&gb, boot_rom_data, boot_rom_size);
|
GB_load_boot_rom_from_buffer(gb, boot_rom_data, boot_rom_size);
|
||||||
|
|
||||||
g_bytes_unref(boot_rom_f);
|
g_bytes_unref(boot_rom_f);
|
||||||
}
|
}
|
||||||
@ -2214,7 +2201,6 @@ static void reset(GuiData *gui_data) {
|
|||||||
update_window_geometry();
|
update_window_geometry();
|
||||||
}
|
}
|
||||||
|
|
||||||
load_boot_rom(gui_data);
|
|
||||||
|
|
||||||
char *path = g_file_get_path(gui_data->file);
|
char *path = g_file_get_path(gui_data->file);
|
||||||
|
|
||||||
|
@ -159,7 +159,7 @@ static void update_window_geometry();
|
|||||||
static void run(GuiData *gui_data);
|
static void run(GuiData *gui_data);
|
||||||
static gpointer run_thread(gpointer user_data_gptr);
|
static gpointer run_thread(gpointer user_data_gptr);
|
||||||
static void init(GuiData *gui_data);
|
static void init(GuiData *gui_data);
|
||||||
static void load_boot_rom(GuiData *gui_data);
|
static void load_boot_rom(GB_gameboy_t *gb, GB_boot_rom_t type);
|
||||||
|
|
||||||
static void handle_events(GB_gameboy_t *gb);
|
static void handle_events(GB_gameboy_t *gb);
|
||||||
static uint32_t convert_color(uint16_t color);
|
static uint32_t convert_color(uint16_t color);
|
||||||
|
Loading…
Reference in New Issue
Block a user