int main(int argc, char *argv[]) { Copcodes *popcode_list; char path[] = "./opcodes.txt"; char outpath[] = "./"; //char ROMpath[] = "../rom/Super Mario Bros. (W) [!].nes"; //char ROMpath[] = "../rom/nes/Balloon Fight (JU) [!].nes"; //char ROMpath[] = "../rom/nes/dev/ppu0/ppu0.nes"; //char ROMpath[] = "../rom/Xevious (E).nes"; //char ROMpath[] = "../rom/Galaga (U).nes"; char *ROMpath; char *OutputPath; Ivideo scr; if (argc > 1) ROMpath = argv[1]; else { printf("Usage: upernes romname.nes [output directory]\n\n"); return 0; } if (argc > 2) { OutputPath = argv[2]; } else { OutputPath = outpath; } scr.init_video(640, 480); popcode_list = NULL; popcode_list = new Copcodes(); if (popcode_list->fill_structure((char*)path) == 0) { #if 0 popcode_list->print_list(); #else printf("\n\n"); #endif open_rom(ROMpath, OutputPath, popcode_list); } delete popcode_list; scr.free_video(); return 0; }
static int usf_startup(usf_state_t * state) { if (state->g_rom == NULL) { state->g_rom_size = 0; } if (state->save_state == NULL) { DebugMessage(state, 1, "Save State is missing\n"); return -1; } // Detect the Ramsize before the memory allocation if(get_le32(state->save_state + 4) == 0x400000) { void * savestate; savestate = realloc(state->save_state, 0x40275c); if ( savestate ) state->save_state = savestate; state->save_state_size = 0x40275c; } open_rom(state); if (main_start(state) != M64ERR_SUCCESS) { DebugMessage(state, 1, "Invalid Project64 Save State\n"); return -1; } if (state->enable_trimming_mode) { state->barray_rom = bit_array_create(state->g_rom_size / 4); state->barray_ram_read = bit_array_create(get_le32(state->save_state + 4) / 4); state->barray_ram_written_first = bit_array_create(get_le32(state->save_state + 4) / 4); } state->MemoryState = 1; return 0; }
static void callback_play_rom(GtkWidget* widget, gpointer data) { GList *list = NULL, *llist = NULL; cache_entry* entry; GtkTreeIter iter; GtkTreeModel* model = gtk_tree_view_get_model(GTK_TREE_VIEW(g_MainWindow.romDisplay)); GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(g_MainWindow.romDisplay)); list = gtk_tree_selection_get_selected_rows (selection, &model); if(!list) /* Should never happen since the item is only active when a row is selected. */ return; llist = g_list_first(list); gtk_tree_model_get_iter(model, &iter, (GtkTreePath*)llist->data); gtk_tree_model_get(model, &iter, 22, &entry, -1); g_list_foreach(list, (GFunc) gtk_tree_path_free, NULL); g_list_free(list); if(open_rom(entry->filename, entry->archivefile)==0) startEmulation(); }
EXPORT m64p_error CALL CoreDoCommand(m64p_command Command, int ParamInt, void *ParamPtr) { m64p_error rval; int keysym, keymod; if (!l_CoreInit) return M64ERR_NOT_INIT; switch(Command) { case M64CMD_NOP: return M64ERR_SUCCESS; case M64CMD_ROM_OPEN: if (g_EmulatorRunning || l_ROMOpen) return M64ERR_INVALID_STATE; if (ParamPtr == NULL || ParamInt < 4096) return M64ERR_INPUT_ASSERT; rval = open_rom((const unsigned char *) ParamPtr, ParamInt); if (rval == M64ERR_SUCCESS) { l_ROMOpen = 1; } return rval; case M64CMD_ROM_CLOSE: if (g_EmulatorRunning || !l_ROMOpen) return M64ERR_INVALID_STATE; l_ROMOpen = 0; return close_rom(); case M64CMD_ROM_GET_HEADER: if (!l_ROMOpen) return M64ERR_INVALID_STATE; if (ParamPtr == NULL) return M64ERR_INPUT_ASSERT; if (sizeof(m64p_rom_header) < ParamInt) ParamInt = sizeof(m64p_rom_header); memcpy(ParamPtr, &ROM_HEADER, ParamInt); // Mupen64Plus used to keep a m64p_rom_header with a clean ROM name // Keep returning a clean ROM name for backwards compatibility if (ParamInt >= 0x20) { int size = (ParamInt >= 0x20 + 20) ? 20 : (ParamInt - 0x20); memcpy((char *)ParamPtr + 0x20, ROM_PARAMS.headername, size); } return M64ERR_SUCCESS; case M64CMD_ROM_GET_SETTINGS: if (!l_ROMOpen) return M64ERR_INVALID_STATE; if (ParamPtr == NULL) return M64ERR_INPUT_ASSERT; if (sizeof(m64p_rom_settings) < ParamInt) ParamInt = sizeof(m64p_rom_settings); memcpy(ParamPtr, &ROM_SETTINGS, ParamInt); return M64ERR_SUCCESS; case M64CMD_EXECUTE: if (g_EmulatorRunning || !l_ROMOpen) return M64ERR_INVALID_STATE; /* the main_run() function will not return until the player has quit the game */ rval = main_run(); return rval; case M64CMD_STOP: if (!g_EmulatorRunning) return M64ERR_INVALID_STATE; /* this stop function is asynchronous. The emulator may not terminate until later */ return main_core_state_set(M64CORE_EMU_STATE, M64EMU_STOPPED); case M64CMD_PAUSE: if (!g_EmulatorRunning) return M64ERR_INVALID_STATE; return main_core_state_set(M64CORE_EMU_STATE, M64EMU_PAUSED); case M64CMD_RESUME: if (!g_EmulatorRunning) return M64ERR_INVALID_STATE; return main_core_state_set(M64CORE_EMU_STATE, M64EMU_RUNNING); case M64CMD_CORE_STATE_QUERY: if (ParamPtr == NULL) return M64ERR_INPUT_ASSERT; return main_core_state_query((m64p_core_param) ParamInt, (int *) ParamPtr); case M64CMD_CORE_STATE_SET: if (ParamPtr == NULL) return M64ERR_INPUT_ASSERT; return main_core_state_set((m64p_core_param) ParamInt, *((int *)ParamPtr)); case M64CMD_SET_FRAME_CALLBACK: g_FrameCallback = (m64p_frame_callback) ParamPtr; return M64ERR_SUCCESS; case M64CMD_READ_SCREEN: if (!g_EmulatorRunning) return M64ERR_INVALID_STATE; if (ParamPtr == NULL) return M64ERR_INPUT_ASSERT; if (ParamInt < 0 || ParamInt > 1) return M64ERR_INPUT_INVALID; return main_read_screen(ParamPtr, ParamInt); case M64CMD_RESET: if (!g_EmulatorRunning) return M64ERR_INVALID_STATE; if (ParamInt < 0 || ParamInt > 1) return M64ERR_INPUT_INVALID; return main_reset(ParamInt); case M64CMD_ADVANCE_FRAME: if (!g_EmulatorRunning) return M64ERR_INVALID_STATE; main_advance_one(); return M64ERR_SUCCESS; default: return M64ERR_INPUT_INVALID; } return M64ERR_INTERNAL; }