Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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;
}
Ejemplo n.º 3
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();
}
Ejemplo n.º 4
0
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;
}