|
@@ -1,7 +1,10 @@
|
|
|
#include "../gb_cartridge_app.h"
|
|
#include "../gb_cartridge_app.h"
|
|
|
|
|
+#include <lib/toolbox/value_index.h>
|
|
|
|
|
+#include <gui/elements.h>
|
|
|
|
|
+#include <ctype.h>
|
|
|
|
|
|
|
|
enum SubmenuIndex {
|
|
enum SubmenuIndex {
|
|
|
- SubmenuIndexScene1 = 10,
|
|
|
|
|
|
|
+ SubmenuIndexScene1,
|
|
|
SubmenuIndexScene2,
|
|
SubmenuIndexScene2,
|
|
|
SubmenuIndexScene3,
|
|
SubmenuIndexScene3,
|
|
|
SubmenuIndexScene4,
|
|
SubmenuIndexScene4,
|
|
@@ -9,22 +12,69 @@ enum SubmenuIndex {
|
|
|
SubmenuIndexSettings,
|
|
SubmenuIndexSettings,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+const char* const gameboy_rom_option_text[2] = {
|
|
|
|
|
+ "gb",
|
|
|
|
|
+ "gbc",
|
|
|
|
|
+};
|
|
|
|
|
+const uint32_t gameboy_rom_option_value[2] = {
|
|
|
|
|
+ GBCartridgeRomOptionGB,
|
|
|
|
|
+ GBCartridgeRomOptionGBC,
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+void toUpperCase(char *str) {
|
|
|
|
|
+ while (*str) {
|
|
|
|
|
+ *str = toupper((unsigned char)*str);
|
|
|
|
|
+ str++;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
void gb_cartridge_scene_menu_submenu_callback(void* context, uint32_t index) {
|
|
void gb_cartridge_scene_menu_submenu_callback(void* context, uint32_t index) {
|
|
|
GBCartridge* app = context;
|
|
GBCartridge* app = context;
|
|
|
view_dispatcher_send_custom_event(app->view_dispatcher, index);
|
|
view_dispatcher_send_custom_event(app->view_dispatcher, index);
|
|
|
}
|
|
}
|
|
|
|
|
+static char* rom_option_uppercase(uint32_t index) {
|
|
|
|
|
+ const char *gameboy_rom_option = gameboy_rom_option_text[index];
|
|
|
|
|
+ char *gameboy_rom_option_uppercase = (char*)malloc(strlen(gameboy_rom_option) + 1); // +1 para el carácter nulo
|
|
|
|
|
+
|
|
|
|
|
+ if (gameboy_rom_option_uppercase) {
|
|
|
|
|
+ strcpy(gameboy_rom_option_uppercase, gameboy_rom_option);
|
|
|
|
|
+ toUpperCase(gameboy_rom_option_uppercase);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // Manejo de error en caso de falta de memoria
|
|
|
|
|
+ return NULL;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return gameboy_rom_option_uppercase;
|
|
|
|
|
+}
|
|
|
|
|
+static void gameboy_cartridge_set_rom_option(VariableItem* item) {
|
|
|
|
|
+ GBCartridge* app = variable_item_get_context(item);
|
|
|
|
|
+ uint8_t index = variable_item_get_current_value_index(item);
|
|
|
|
|
+ variable_item_set_current_value_text(item, rom_option_uppercase(index));
|
|
|
|
|
+ app->gameboy_rom_option_selected_index = gameboy_rom_option_value[index];
|
|
|
|
|
+ app->gameboy_rom_option_selected_text = (char*)gameboy_rom_option_text[index];
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
void gb_cartridge_scene_menu_on_enter(void* context) {
|
|
void gb_cartridge_scene_menu_on_enter(void* context) {
|
|
|
GBCartridge* app = context;
|
|
GBCartridge* app = context;
|
|
|
|
|
|
|
|
- submenu_add_item(app->submenu, "Cartridge Information", SubmenuIndexScene1, gb_cartridge_scene_menu_submenu_callback, app);
|
|
|
|
|
- submenu_add_item(app->submenu, "Dump ROM Cartridge", SubmenuIndexScene2, gb_cartridge_scene_menu_submenu_callback, app);
|
|
|
|
|
- submenu_add_item(app->submenu, "Dump RAM Cartridge", SubmenuIndexScene3, gb_cartridge_scene_menu_submenu_callback, app);
|
|
|
|
|
- submenu_add_item(app->submenu, "Write ROM", SubmenuIndexScene4, gb_cartridge_scene_menu_submenu_callback, app);
|
|
|
|
|
- submenu_add_item(app->submenu, "Write RAM", SubmenuIndexSettings, gb_cartridge_scene_menu_submenu_callback, app);
|
|
|
|
|
- submenu_add_item(app->submenu, "Settings", SubmenuIndexSettings, gb_cartridge_scene_menu_submenu_callback, app);
|
|
|
|
|
|
|
+ variable_item_list_add(app->submenu, "Cartridge Information", 1, NULL, NULL);
|
|
|
|
|
+ variable_item_list_add(app->submenu, "Dump ROM Cartridge", 1, NULL, NULL);
|
|
|
|
|
+ variable_item_list_add(app->submenu, "Dump RAM Cartridge", 1, NULL, NULL);
|
|
|
|
|
+
|
|
|
|
|
+ VariableItem* item = variable_item_list_add(
|
|
|
|
|
+ app->submenu,
|
|
|
|
|
+ "Write ROM",
|
|
|
|
|
+ 2,
|
|
|
|
|
+ gameboy_cartridge_set_rom_option,
|
|
|
|
|
+ app);
|
|
|
|
|
+ app->gameboy_rom_option_selected_index = value_index_uint32(app->gameboy_rom_option_selected_index, gameboy_rom_option_value, 2);
|
|
|
|
|
+ variable_item_set_current_value_index(item, app->gameboy_rom_option_selected_index);
|
|
|
|
|
+ variable_item_set_current_value_text(item, rom_option_uppercase(app->gameboy_rom_option_selected_index));
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ variable_item_list_add(app->submenu, "Write RAM", 1, NULL, NULL);
|
|
|
|
|
|
|
|
- submenu_set_selected_item(app->submenu, scene_manager_get_scene_state(app->scene_manager, GBCartridgeSceneMenu));
|
|
|
|
|
|
|
+ variable_item_list_set_enter_callback(app->submenu, gb_cartridge_scene_menu_submenu_callback, app);
|
|
|
|
|
|
|
|
view_dispatcher_switch_to_view(app->view_dispatcher, GBCartridgeViewIdMenu);
|
|
view_dispatcher_switch_to_view(app->view_dispatcher, GBCartridgeViewIdMenu);
|
|
|
}
|
|
}
|
|
@@ -68,5 +118,7 @@ bool gb_cartridge_scene_menu_on_event(void* context, SceneManagerEvent event) {
|
|
|
|
|
|
|
|
void gb_cartridge_scene_menu_on_exit(void* context) {
|
|
void gb_cartridge_scene_menu_on_exit(void* context) {
|
|
|
GBCartridge* app = context;
|
|
GBCartridge* app = context;
|
|
|
- submenu_reset(app->submenu);
|
|
|
|
|
|
|
+ // submenu_reset(app->submenu);
|
|
|
|
|
+ variable_item_list_set_selected_item(app->submenu, 0);
|
|
|
|
|
+ variable_item_list_reset(app->submenu);
|
|
|
}
|
|
}
|