bool retro_load_game(const struct retro_game_info *game) { int loaded; struct retro_memory_map map; init_descriptors(); memorydesc_c = 0; map.descriptors = memorydesc + MAX_MAPS - memorydesc_c; map.num_descriptors = memorydesc_c; /* Hack. S9x cannot do stuff from RAM. <_< */ memstream_set_buffer((uint8_t*)game->data, game->size); loaded = LoadROM(""); if (!loaded) { if (log_cb) log_cb(RETRO_LOG_ERROR, "ROM loading failed...\n"); return FALSE; } check_variables(); environ_cb(RETRO_ENVIRONMENT_SET_MEMORY_MAPS, &map); return TRUE; }
void retro_get_system_av_info(struct retro_system_av_info *info) { check_variables(); info->geometry.base_width = rtwi; info->geometry.base_height = rthe; if (log_cb) log_cb(RETRO_LOG_INFO, "AV_INFO: width=%d height=%d\n",info->geometry.base_width,info->geometry.base_height); info->geometry.max_width = 1600; info->geometry.max_height = 1200; if (log_cb) log_cb(RETRO_LOG_INFO, "AV_INFO: max_width=%d max_height=%d\n",info->geometry.max_width,info->geometry.max_height); info->geometry.aspect_ratio = rtaspect; if (log_cb) log_cb(RETRO_LOG_INFO, "AV_INFO: aspect_ratio=%f\n",info->geometry.aspect_ratio); info->timing.fps = 60; info->timing.sample_rate = 48000.0; if (log_cb) log_cb(RETRO_LOG_INFO, "AV_INFO: fps=%f sample_rate=%f\n",info->timing.fps,info->timing.sample_rate); }
void retro_run() { MDFNGI *curgame = game; input_poll_cb(); update_input(); static int16_t sound_buf[0x10000]; static MDFN_Rect rects[FB_MAX_HEIGHT]; rects[0].w = ~0; EmulateSpecStruct spec = {0}; spec.surface = surf; spec.SoundRate = 44100; spec.SoundBuf = sound_buf; spec.LineWidths = rects; spec.SoundBufMaxSize = sizeof(sound_buf) / 2; spec.SoundVolume = 1.0; spec.soundmultiplier = 1.0; spec.SoundBufSize = 0; spec.VideoFormatChanged = false; spec.SoundFormatChanged = false; if (memcmp(&last_pixel_format, &spec.surface->format, sizeof(MDFN_PixelFormat))) { spec.VideoFormatChanged = TRUE; last_pixel_format = spec.surface->format; } if (spec.SoundRate != last_sound_rate) { spec.SoundFormatChanged = true; last_sound_rate = spec.SoundRate; } curgame->Emulate(&spec); int16 *const SoundBuf = spec.SoundBuf + spec.SoundBufSizeALMS * curgame->soundchan; int32 SoundBufSize = spec.SoundBufSize - spec.SoundBufSizeALMS; const int32 SoundBufMaxSize = spec.SoundBufMaxSize - spec.SoundBufSizeALMS; spec.SoundBufSize = spec.SoundBufSizeALMS + SoundBufSize; unsigned width = spec.DisplayRect.w; unsigned height = spec.DisplayRect.h; const uint16_t *pix = surf->pixels16; video_cb(pix, width, height, FB_WIDTH << 1); video_frames++; audio_frames += spec.SoundBufSize; audio_batch_cb(spec.SoundBuf, spec.SoundBufSize); bool updated = false; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated) check_variables(); }
bool retro_load_game(const struct retro_game_info *info) { if (failed_init) return false; overscan = false; environ_cb(RETRO_ENVIRONMENT_GET_OVERSCAN, &overscan); set_basename(info->path); game = MDFNI_LoadGame(MEDNAFEN_CORE_NAME_MODULE, info->path); if (!game) return false; MDFN_PixelFormat pix_fmt(MDFN_COLORSPACE_RGB, 16, 8, 0, 24); memset(&last_pixel_format, 0, sizeof(MDFN_PixelFormat)); surf = new MDFN_Surface(NULL, FB_WIDTH, FB_HEIGHT, FB_WIDTH, pix_fmt); hookup_ports(true); check_variables(); return game; }
bool retro_load_game(const struct retro_game_info *info) { struct retro_input_descriptor desc[] = { { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "Left" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "Up" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "Down" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "Right" }, { 0 }, }; environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, desc); enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_RGB565; if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { log_cb(RETRO_LOG_INFO, "RGB565 is not supported.\n"); return false; } struct retro_keyboard_callback cb = { keyboard_cb }; environ_cb(RETRO_ENVIRONMENT_SET_KEYBOARD_CALLBACK, &cb); if (environ_cb(RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE, &rumble)) log_cb(RETRO_LOG_INFO, "Rumble environment supported.\n"); else log_cb(RETRO_LOG_INFO, "Rumble environment not supported.\n"); struct retro_audio_callback audio_cb = { audio_callback, audio_set_state }; use_audio_cb = environ_cb(RETRO_ENVIRONMENT_SET_AUDIO_CALLBACK, &audio_cb); check_variables(); (void)info; return true; }
void retro_run(void) { bool updated = false; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated) check_variables(); update_input(); JaguarExecuteNew(); static int lastw=STARTWIDTH; if(lastw!=TOMGetVideoModeWidth()){ retro_get_system_av_info(&g_av_info); printf("width change:%d-" ,lastw); lastw=TOMGetVideoModeWidth(); printf(">%d\n" ,lastw); game_width = TOMGetVideoModeWidth(); game_height = TOMGetVideoModeHeight(); tomWidth = game_width; tomHeight = game_height; printf("new res:%dx%d %f\n",game_width,game_height,(float)game_width/game_height); bool ret; ret = environ_cb(RETRO_ENVIRONMENT_SET_GEOMETRY, &g_av_info.geometry); } SDLSoundCallback(NULL,sampleBuffer, vjs.hardwareTypeNTSC==1?BUFNTSC:BUFPAL); video_cb(videoBuffer, game_width, game_height, MAXWIDTH << 2); audio_batch_cb((int16_t *)sampleBuffer, vjs.hardwareTypeNTSC==1?BUFNTSC/2:BUFPAL/2); }
void retro_run (void) { bool updated = false; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated) check_variables(); if(NEWGAME_FROM_OSD==1) { struct retro_system_av_info ninfo; retro_get_system_av_info(&ninfo); environ_cb(RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO, &ninfo); printf("ChangeAV: w:%d h:%d ra:%f %f \n",ninfo.geometry.base_width,ninfo.geometry.base_height,ninfo.geometry.aspect_ratio); NEWGAME_FROM_OSD=0; } retro_poll_mame_input(); if (draw_this_frame) video_cb(videoBuffer,rtwi, rthe, topw << LOG_PIXEL_BYTES); else video_cb(NULL,rtwi, rthe, topw << LOG_PIXEL_BYTES); co_switch(emuThread); }
void retro_init (void) { struct retro_log_callback log; if (environ_cb(RETRO_ENVIRONMENT_GET_LOG_INTERFACE, &log)) log_cb = log.log; else log_cb = NULL; colorMode = RETRO_PIXEL_FORMAT_RGB565; if(!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &colorMode)) return; check_variables(true); // Init DeSmuME struct NDS_fw_config_data fw_config; NDS_FillDefaultFirmwareConfigData(&fw_config); fw_config.language = firmwareLanguage; //addonsChangePak(NDS_ADDON_NONE); NDS_Init(); SPU_ChangeSoundCore(0, 735 * 2); NDS_CreateDummyFirmware(&fw_config); Change3DCoreWithFallback(GPU3D_SWRAST); backup_setManualBackupType(MC_TYPE_AUTODETECT); msgbox = &msgBoxWnd; check_system_specs(); }
void retro_reset(void) { check_variables(); core->SetDMGPalette(current_palette[0], current_palette[1], current_palette[2], current_palette[3]); core->ResetROMPreservingRAM(force_dmg); }
void retro_run (void) { bool updated = false; poll_cb(); report_buttons(); S9xMainLoop(); if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated) check_variables(); }
void retro_run(void) { update_input(); render_checkered(); if (!use_audio_cb) audio_callback(); bool updated = false; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated) check_variables(); }
bool retro_load_game(const struct retro_game_info *info) { int i; static char ROMName_buffer[MAXCARTS][1024]; enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_RGB565; if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { if (log_cb) log_cb(RETRO_LOG_INFO, "RGB565 is not supported.\n"); return false; } environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &ProgDir); check_variables(); set_input_descriptors(); Verbose=1; UPeriod=100; strcpy(ROMName_buffer[0], info->path); ROMName[0]=ROMName_buffer[0]; SETJOYTYPE(0,1); // ProgDir="."; static Image fMSX_image; fMSX_image.Cropped = 0; fMSX_image.D = 16; fMSX_image.Data = image_buffer; fMSX_image.W = image_buffer_width; fMSX_image.H = image_buffer_height; fMSX_image.L = image_buffer_width; GenericSetVideo(&fMSX_image,0,0,image_buffer_width,image_buffer_height); for(i = 0; i < 80; i++) SetColor(i, 0, 0, 0); for(i = 0; i < 256; i++) BPal[i]=PIXEL(((i>>2)&0x07)*255/7,((i>>5)&0x07)*255/7,(i&0x03)*255/3); memset((void *)XKeyState,0xFF,sizeof(XKeyState)); InitSound(SND_RATE, 0); SetChannels(255/MAXCHANNELS, (1<<MAXCHANNELS)-1); ExitNow = 1; StartMSX(Mode,RAMPages,VRAMPages); printf ("Mode %i, RAMPages %i, VRAMPages %i", Mode, RAMPages, VRAMPages); return true; }
void retro_run (void) { bool updated = false; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated) check_variables(); retro_poll_mame_input(); if (draw_this_frame) video_cb(videoBuffer,rtwi, rthe, topw << LOG_PIXEL_BYTES); else video_cb(NULL,rtwi, rthe, topw << LOG_PIXEL_BYTES); co_switch(emuThread); }
bool GONG_CORE_PREFIX(retro_load_game)(const struct retro_game_info *info) { enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_XRGB8888; check_variables(); if (!GONG_CORE_PREFIX(environ_cb)(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { if (GONG_CORE_PREFIX(log_cb)) GONG_CORE_PREFIX(log_cb)(RETRO_LOG_INFO, "XRGB8888 is not supported.\n"); return false; } return true; }
bool retro_load_game(const struct retro_game_info *info) { check_variables(); #ifdef M16B memset(videoBuffer,0,1024*1024*2); #else memset(videoBuffer,0,1024*1024*2*2); #endif char basename[128]; extract_basename(basename, info->path, sizeof(basename)); extract_directory(g_rom_dir, info->path, sizeof(g_rom_dir)); strcpy(RPATH,info->path); return 1; }
/** This constructor is called for a standard letter-envelope iterator instantiation. In this case, set_db_list_nodes has been called and probDescDB can be queried for settings from the method specification. It is not currently used, as there is not yet a separate nond_cubature method specification. */ NonDCubature::NonDCubature(Model& model): NonDIntegration(model), cubIntOrderRef(probDescDB.get_ushort("method.nond.cubature_integrand")) { // initialize the numerical integration driver numIntDriver = Pecos::IntegrationDriver(Pecos::CUBATURE); cubDriver = (Pecos::CubatureDriver*)numIntDriver.driver_rep(); // natafTransform available: initialize_random_variables() called in // NonDIntegration ctor const Pecos::ShortArray& u_types = natafTransform.u_types(); check_variables(natafTransform.x_types()); check_integration(u_types, iteratedModel.aleatory_distribution_parameters()); // update CubatureDriver::{numVars,cubIntOrder,integrationRule} cubDriver->initialize_grid(u_types, cubIntOrderRef, cubIntRule); maxConcurrency *= cubDriver->grid_size(); }
bool retro_load_game(const struct retro_game_info *info) { enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_XRGB8888; if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { fprintf(stderr, "Pixel format XRGB8888 not supported by platform, cannot use.\n"); return false; } const char *full_path; if(failed_init) return false; full_path = info->path; vjs.renderType = 0; check_variables(); jaguarCartInserted = true; if (log_enabled) { bool success = (bool)LogInit("./virtualjaguar.log"); // Init logfile if (!success) printf("Failed to open virtualjaguar.log for writing!\n"); } //strcpy(vjs.EEPROMPath, "/path/to/eeproms/"); // battery saves JaguarInit(); // set up hardware memcpy(jagMemSpace + 0xE00000, (vjs.biosType == BT_K_SERIES ? jaguarBootROM : jaguarBootROM2), 0x20000); // Use the stock BIOS //memcpy(jagMemSpace + 0x800000, jaguarCDBootROM, 0x40000); JaguarSetScreenPitch(videoWidth); JaguarSetScreenBuffer(videoBuffer); //Init video for (int i = 0; i < videoWidth * videoHeight; ++i) videoBuffer[i] = 0xFF00FFFF; SET32(jaguarMainRAM, 0, 0x00200000); // set up stack JaguarLoadFile((char *)full_path); // load rom JaguarReset(); return true; }
bool retro_load_game(const struct retro_game_info* game) { init_descriptors(); check_variables(); uint8_t bios_data[256]; char bios_path[PATH_MAX_LENGTH]; char* system_dir; if(environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &system_dir) && system_dir) strncpy(bios_path, system_dir, sizeof(bios_path)); else if (game->path) strncpy(bios_path, game->path, sizeof(bios_path)); else strncpy(bios_path, ".", sizeof(bios_path)); #if defined(_WIN32) char slash = '\\'; #else char slash = '/'; #endif char* tmp = strrchr(bios_path, slash); if(!tmp) tmp = strrchr(bios_path, '\0'); *tmp++ = slash; strcpy(tmp, "gbbios.gb"); retro_sleep(10); fflush(stdout); gbemu_printf("romd info\n"); gbemu_printf("path : %s\n", game->path); gbemu_printf("size : %u\n", game->size); fflush(stdout); gbemu_printf("loading bios from : %s\n", bios_path); FILE* fp = fopen(bios_path, "rb"); if(fp) { fread(bios_data, 1, sizeof(bios_data), fp); fclose(fp); } else gbemu_printf("bios not found !\n"); gbemu_load_game(game->data, game->size, fp? bios_data: NULL); return true; }
void retro_run(void) { unsigned i; bool updated = false; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated) check_variables(); audio_size = SAMPLEFRAME; input_poll_cb(); //YabauseExec(); runs from handle events if(PERCore) PERCore->HandleEvents(); video_cb(dispbuffer, game_width, game_height, game_width * 2); }
void retro_run(void) { bool updated = false; static int frames = 0; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated) check_variables(); poll_cb(); gbemu_update_input(); RETRO_PERFORMANCE_INIT(gbemu_main_func); RETRO_PERFORMANCE_START(gbemu_main_func); gbemu_run(); RETRO_PERFORMANCE_STOP(gbemu_main_func); // if(!GB.LCDC.LCD_enable) // memset(gbemu_frame, 0xFF, sizeof(gbemu_frame)); #ifdef VIEW_TILEMAP gbemu_draw_sprite_map(); gbemu_draw_bgmap(); gbemu_draw_tilemap(); gbemu_dump_memory(); #endif uint16_t* read_pos = gbemu_sound_buffer; while (read_pos < GB.APU.write_pos - 2048) { audio_batch_cb(read_pos, 1024); read_pos += 2048; } audio_batch_cb(read_pos, (GB.APU.write_pos - read_pos) >> 1); // gbemu_printf("samples played : %i\n", (GB.APU.write_pos - gbemu_sound_buffer) >> 1); video_cb(gbemu_frame, GBEMU_DRAWBUFFER_W, GBEMU_DRAWBUFFER_H, GBEMU_DRAWBUFFER_W * 2); // DEBUG_HOLD(); // gbemu_printf("frame : %i\n", frames); frames++; fflush(stdout); // gbemu_check_exit_request(); }
bool retro_load_game(const struct retro_game_info *info) { bool can_dupe = false; environ_cb(RETRO_ENVIRONMENT_GET_CAN_DUPE, &can_dupe); if (!can_dupe) { if (log_cb) log_cb(RETRO_LOG_INFO, "[Gambatte]: Cannot dupe frames!\n"); return false; } #ifdef VIDEO_RGB565 enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_RGB565; if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { if (log_cb) log_cb(RETRO_LOG_INFO, "[Gambatte]: RGB565 is not supported.\n"); return false; } #else enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_XRGB8888; if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { if (log_cb) log_cb(RETRO_LOG_INFO, "[Gambatte]: XRGB8888 is not supported.\n"); return false; } #endif if (gb.load(info->data, info->size)) return false; rom_path = info->path ? info->path : ""; strncpy(internal_game_name, (const char*)info->data + 0x134, sizeof(internal_game_name) - 1); if (log_cb) log_cb(RETRO_LOG_INFO, "[Gambatte]: Got internal game name: %s.\n", internal_game_name); check_variables(); check_palette(); return true; }
void retro_run(void) { bool updated = false; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated) { check_variables(); core->SetDMGPalette(current_palette[0], current_palette[1], current_palette[2], current_palette[3]); } update_input(); core->RunToVBlank(gearboy_frame_buf, audio_buf, &audio_sample_count); video_cb((uint8_t*)gearboy_frame_buf, VIDEO_WIDTH, VIDEO_HEIGHT, VIDEO_WIDTH * sizeof(GB_Color)); if (audio_sample_count > 0) audio_batch_cb(audio_buf, audio_sample_count / 2); audio_sample_count = 0; }
bool retro_load_game(const struct retro_game_info *info) { (void)info; check_variables(); //create socket if ( (s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == SOCKET_ERROR) { log_cb(RETRO_LOG_INFO, "socket failed"); } //setup address structure memset((char *) &si_other, 0, sizeof(si_other)); si_other.sin_family = AF_INET; si_other.sin_port = htons(port); #if defined(_WIN32) || defined(HAVE_SOCKET_LEGACY) si_other.sin_addr.S_un.S_addr = inet_addr(server); #else si_other.sin_addr.s_addr = inet_addr(server); inet_aton(server , &si_other.sin_addr); #endif log_cb(RETRO_LOG_INFO, "Server IP Address: %s\n" , server); return true; }
bool retro_load_game(const struct retro_game_info *game) { int loaded; struct retro_memory_map map; init_descriptors(); memorydesc_c = 0; map.descriptors = memorydesc + MAX_MAPS - memorydesc_c; map.num_descriptors = memorydesc_c; /* Hack. S9x cannot do stuff from RAM. <_< */ memstream_set_buffer((uint8_t*)game->data, game->size); loaded = LoadROM(""); if (!loaded) { struct retro_message msg; char msg_local[256]; snprintf(msg_local, sizeof(msg_local), "ROM loading failed..."); if (log_cb) log_cb(RETRO_LOG_ERROR, "ROM loading failed...\n"); msg.msg = msg_local; msg.frames = 360; if (environ_cb) environ_cb(RETRO_ENVIRONMENT_SET_MESSAGE, (void*)&msg); return FALSE; } check_variables(); environ_cb(RETRO_ENVIRONMENT_SET_MEMORY_MAPS, &map); return TRUE; }
bool retro_load_game(const struct retro_game_info *info) { check_variables(); core->SetDMGPalette(current_palette[0], current_palette[1], current_palette[2], current_palette[3]); core->LoadROMFromBuffer(reinterpret_cast<const u8*>(info->data), info->size, force_dmg); struct retro_input_descriptor desc[] = { { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "Left" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "Up" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "Down" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "Right" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "B" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "A" }, { 0 }, }; environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, desc); enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_XRGB8888; if (!environ_cb(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt)) { log_cb(RETRO_LOG_INFO, "XRGB8888 is not supported.\n"); return false; } snprintf(retro_game_path, sizeof(retro_game_path), "%s", info->path); struct retro_memory_descriptor descs[10]; memset(descs, 0, sizeof(descs)); // IE descs[0].ptr = core->GetMemory()->GetMemoryMap() + 0xFFFF; descs[0].start = 0xFFFF; descs[0].len = 1; // HRAM descs[1].ptr = core->GetMemory()->GetMemoryMap() + 0xFF80; descs[1].start = 0xFF80; descs[1].len = 0x0080; // RAM bank 0 descs[2].ptr = core->IsCGB() ? core->GetMemory()->GetCGBRAM() : (core->GetMemory()->GetMemoryMap() + 0xC000); descs[2].start = 0xC000; descs[2].len = 0x1000; // RAM bank 1 descs[3].ptr = core->IsCGB() ? (core->GetMemory()->GetCGBRAM() + (0x1000)) : (core->GetMemory()->GetMemoryMap() + 0xD000); descs[3].start = 0xD000; descs[3].len = 0x1000; // CART RAM descs[4].ptr = core->GetMemory()->GetCurrentRule()->GetCurrentRamBank(); descs[4].start = 0xA000; descs[4].len = 0x2000; // VRAM descs[5].ptr = core->GetMemory()->GetMemoryMap() + 0x8000; // todo: fix GBC descs[5].start = 0x8000; descs[5].len = 0x2000; // ROM bank 0 descs[6].ptr = core->GetMemory()->GetCurrentRule()->GetRomBank0(); descs[6].start = 0x0000; descs[6].len = 0x4000; // ROM bank x descs[7].ptr = core->GetMemory()->GetCurrentRule()->GetCurrentRomBank1(); descs[7].start = 0x4000; descs[7].len = 0x4000; // OAM descs[8].ptr = core->GetMemory()->GetMemoryMap() + 0xFE00; descs[8].start = 0xFE00; descs[8].len = 0x00A0; // CGB RAM banks 2-7 descs[9].ptr = core->IsCGB() ? (core->GetMemory()->GetCGBRAM() + 0x2000) : (core->GetMemory()->GetMemoryMap() + 0xD000); descs[9].start = 0x10000; descs[9].len = core->IsCGB() ? 0x6000 : 0; struct retro_memory_map mmaps; mmaps.descriptors = descs; mmaps.num_descriptors = sizeof(descs) / sizeof(descs[0]); environ_cb(RETRO_ENVIRONMENT_SET_MEMORY_MAPS, &mmaps); bool achievements = true; environ_cb(RETRO_ENVIRONMENT_SET_SUPPORT_ACHIEVEMENTS, &achievements); return true; }
bool retro_load_game(const struct retro_game_info *info) { int ret; struct retro_input_descriptor desc[] = { { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "D-Pad Left" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "D-Pad Up" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "D-Pad Down" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "D-Pad Right" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "B" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "C" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "X" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "A" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Y" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "Z" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "L" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2, "R" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, { 0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, "Analog X" }, { 0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, "Analog Y" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "D-Pad Left" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "D-Pad Up" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "D-Pad Down" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "D-Pad Right" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "B" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "C" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "X" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "A" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Y" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "Z" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "L" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2, "R" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, { 1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, "Analog X" }, { 1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, "Analog Y" }, { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "D-Pad Left" }, { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "D-Pad Up" }, { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "D-Pad Down" }, { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "D-Pad Right" }, { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "B" }, { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "C" }, { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "X" }, { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "A" }, { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Y" }, { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "Z" }, { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "L" }, { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2, "R" }, { 2, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, { 2, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, "Analog X" }, { 2, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, "Analog Y" }, { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "D-Pad Left" }, { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "D-Pad Up" }, { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "D-Pad Down" }, { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "D-Pad Right" }, { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "B" }, { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "C" }, { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "X" }, { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "A" }, { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Y" }, { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "Z" }, { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "L" }, { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2, "R" }, { 3, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, { 3, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, "Analog X" }, { 3, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, "Analog Y" }, { 4, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "D-Pad Left" }, { 4, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "D-Pad Up" }, { 4, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "D-Pad Down" }, { 4, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "D-Pad Right" }, { 4, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "B" }, { 4, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "C" }, { 4, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "X" }, { 4, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "A" }, { 4, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Y" }, { 4, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "Z" }, { 4, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "L" }, { 4, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2, "R" }, { 4, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, { 4, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, "Analog X" }, { 4, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, "Analog Y" }, { 5, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "D-Pad Left" }, { 5, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "D-Pad Up" }, { 5, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "D-Pad Down" }, { 5, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "D-Pad Right" }, { 5, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "B" }, { 5, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "C" }, { 5, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "X" }, { 5, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "A" }, { 5, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Y" }, { 5, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "Z" }, { 5, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "L" }, { 5, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2, "R" }, { 5, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, { 5, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, "Analog X" }, { 5, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, "Analog Y" }, { 6, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "D-Pad Left" }, { 6, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "D-Pad Up" }, { 6, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "D-Pad Down" }, { 6, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "D-Pad Right" }, { 6, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "B" }, { 6, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "C" }, { 6, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "X" }, { 6, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "A" }, { 6, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Y" }, { 6, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "Z" }, { 6, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "L" }, { 6, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2, "R" }, { 6, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, { 6, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, "Analog X" }, { 6, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, "Analog Y" }, { 7, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "D-Pad Left" }, { 7, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "D-Pad Up" }, { 7, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "D-Pad Down" }, { 7, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "D-Pad Right" }, { 7, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "B" }, { 7, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "C" }, { 7, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "X" }, { 7, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "A" }, { 7, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Y" }, { 7, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "Z" }, { 7, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "L" }, { 7, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2, "R" }, { 7, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, { 7, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, "Analog X" }, { 7, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, "Analog Y" }, { 8, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "D-Pad Left" }, { 8, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "D-Pad Up" }, { 8, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "D-Pad Down" }, { 8, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "D-Pad Right" }, { 8, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "B" }, { 8, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "C" }, { 8, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "X" }, { 8, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "A" }, { 8, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Y" }, { 8, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "Z" }, { 8, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "L" }, { 8, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2, "R" }, { 8, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, { 8, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, "Analog X" }, { 8, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, "Analog Y" }, { 9, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "D-Pad Left" }, { 9, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "D-Pad Up" }, { 9, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "D-Pad Down" }, { 9, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "D-Pad Right" }, { 9, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "B" }, { 9, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "C" }, { 9, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "X" }, { 9, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "A" }, { 9, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Y" }, { 9, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "Z" }, { 9, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "L" }, { 9, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2, "R" }, { 9, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, { 9, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, "Analog X" }, { 9, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, "Analog Y" }, { 10, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "D-Pad Left" }, { 10, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "D-Pad Up" }, { 10, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "D-Pad Down" }, { 10, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "D-Pad Right" }, { 10, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "B" }, { 10, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "C" }, { 10, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "X" }, { 10, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "A" }, { 10, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Y" }, { 10, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "Z" }, { 10, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "L" }, { 10, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2, "R" }, { 10, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, { 10, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, "Analog X" }, { 10, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, "Analog Y" }, { 11, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "D-Pad Left" }, { 11, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "D-Pad Up" }, { 11, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "D-Pad Down" }, { 11, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "D-Pad Right" }, { 11, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "B" }, { 11, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "C" }, { 11, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "X" }, { 11, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "A" }, { 11, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Y" }, { 11, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "Z" }, { 11, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "L" }, { 11, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2, "R" }, { 11, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, { 11, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X, "Analog X" }, { 11, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y, "Analog Y" }, { 0 }, }; if (!info) return false; check_variables(); snprintf(full_path, sizeof(full_path), "%s", info->path); environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, desc); yinit.cdcoretype = CDCORE_ISO; yinit.cdpath = full_path; /* Emulate BIOS */ yinit.biospath = (bios_path[0] != '\0' && does_file_exist(bios_path) && !hle_bios_force) ? bios_path : NULL; yinit.percoretype = PERCORE_LIBRETRO; #ifdef SH2_DYNAREC yinit.sh2coretype = 2; #else yinit.sh2coretype = SH2CORE_INTERPRETER; #endif yinit.vidcoretype = VIDCORE_SOFT; yinit.sndcoretype = SNDCORE_LIBRETRO; yinit.m68kcoretype = M68KCORE_C68K; yinit.carttype = addon_cart_type; yinit.regionid = REGION_AUTODETECT; yinit.buppath = NULL; yinit.mpegpath = NULL; yinit.videoformattype = VIDEOFORMATTYPE_NTSC; yinit.frameskip = frameskip_enable; yinit.clocksync = 0; yinit.basetime = 0; #ifdef HAVE_THREADS yinit.usethreads = 1; yinit.numthreads = numthreads; #else yinit.usethreads = 0; #endif ret = YabauseInit(&yinit); YabauseSetDecilineMode(1); return !ret; }
static void load_state(const void *data, size_t size) { int i = 0; int j = 0; const unsigned char *buf = (const unsigned char*)data; (void)size; memset(g_state, 0, sizeof(*g_state)); g_state->version = swap_if_little32(*(unsigned*)buf); buf += sizeof(unsigned); g_state->player1_score = swap_if_little32(*(unsigned*)buf); buf += sizeof(unsigned); g_state->player2_score = swap_if_little32(*(unsigned*)buf); buf += sizeof(unsigned); g_state->player2_speed.u = swap_if_little32(*(unsigned*)buf); buf += sizeof(unsigned); g_state->ball_px.u = swap_if_little32(*(unsigned*)buf); buf += sizeof(unsigned); g_state->ball_py.u = swap_if_little32(*(unsigned*)buf); buf += sizeof(unsigned); g_state->ball_dpx.u = swap_if_little32(*(unsigned*)buf); buf += sizeof(unsigned); g_state->ball_dpy.u = swap_if_little32(*(unsigned*)buf); buf += sizeof(unsigned); g_state->ball_speed.u = swap_if_little32(*(unsigned*)buf); buf += sizeof(unsigned); g_state->current_play_points.u = swap_if_little32(*(unsigned*)buf); buf += sizeof(unsigned); g_state->is_initialized = (bool)swap_if_little32(*(unsigned*)buf); buf += sizeof(unsigned); g_state->player2_human = (bool)swap_if_little32(*(unsigned*)buf); buf += sizeof(unsigned); /* previnput */ for (i = 0; i < MAX_PLAYERS; i++) { uint16_t previnput = swap_if_little16(*(uint16_t*)buf); g_state->previnput[i] = previnput; buf += sizeof(uint16_t); } /* g_input */ for (i = 0; i < MAX_PLAYERS; i++) { for (j = 0; j < B_COUNT; j++) { int half_transition_count; bool ended_down; half_transition_count = (int)swap_if_little32(*(unsigned*)buf); g_state->g_input[i].buttons[j].half_transition_count = half_transition_count; buf += sizeof(int); ended_down = (bool)swap_if_little32(*(unsigned*)buf); g_state->g_input[i].buttons[j].ended_down = ended_down; buf += sizeof(unsigned); } } /* player */ for (i = 0; i < MAX_PLAYERS; i++) { g_state->player[i].py.u = swap_if_little32(*(unsigned*)buf); buf += sizeof(unsigned); g_state->player[i].dpy.u = swap_if_little32(*(unsigned*)buf); buf += sizeof(unsigned); } check_variables(); }
void GONG_CORE_PREFIX(retro_reset)(void) { memset(g_state, 0, sizeof(*g_state)); check_variables(); }
void retro_run(void) { int i; bool updated = false; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated) check_variables(); input_poll_cb(); for (i=0; i < 130; i++) KBD_RES(i); for (i=0; i < sizeof(keymap)/sizeof(keymap_t); i++) if (input_state_cb(0, RETRO_DEVICE_KEYBOARD, 0, keymap[i].retro)) KBD_SET(keymap[i].fmsx); joystate = 0; for (i = 0; i < sizeof(joymap) / sizeof(keymap_t); i++) { if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, joymap[i].retro)) { if (i < joy_keyboard_begin) JOY_SET(joymap[i].fmsx); else KBD_SET(joymap[i].fmsx); } } RETRO_PERFORMANCE_INIT(core_retro_run); RETRO_PERFORMANCE_START(core_retro_run); RunZ80(&CPU); RenderAndPlayAudio(SND_RATE / 60); RETRO_PERFORMANCE_STOP(core_retro_run); fflush(stdout); #ifdef PSP static unsigned int __attribute__((aligned(16))) d_list[32]; void* const texture_vram_p = (void*) (0x44200000 - (640 * 480)); // max VRAM address - frame size sceKernelDcacheWritebackRange(XBuf, 256*240 ); sceGuStart(GU_DIRECT, d_list); sceGuCopyImage(GU_PSM_5650, 0, 0, image_buffer_width, image_buffer_height, image_buffer_width, image_buffer, 0, 0, image_buffer_width, texture_vram_p); sceGuTexSync(); sceGuTexImage(0, 512, 256, image_buffer_width, texture_vram_p); sceGuTexMode(GU_PSM_5650, 0, 0, GU_FALSE); sceGuTexFunc(GU_TFX_REPLACE, GU_TCC_RGB); sceGuDisable(GU_BLEND); sceGuFinish(); video_cb(texture_vram_p, image_buffer_width, image_buffer_height, image_buffer_width * sizeof(uint16_t)); #else video_cb(image_buffer, image_buffer_width, image_buffer_height, image_buffer_width * sizeof(uint16_t)); #endif }
void GONG_CORE_PREFIX(retro_run)(void) { int i = 0; int port = 0; bool updated = false; retro_inputs inputs[MAX_PLAYERS] = {{0}}; if (GONG_CORE_PREFIX(environ_cb)(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated) check_variables(); GONG_CORE_PREFIX(input_poll_cb)(); for (port = 0; port < MAX_PLAYERS; port++) { for (i = 0; i < 16; i++) { if (GONG_CORE_PREFIX(input_state_cb)(port, RETRO_DEVICE_JOYPAD, 0, i)) { inputs[port].realinput |= 1 << i; } } inputs[port].analogYLeft = GONG_CORE_PREFIX(input_state_cb)(port, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y) / 5000.0f; inputs[port].analogYRight = GONG_CORE_PREFIX(input_state_cb)(port, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y) / 5000.0f; if (inputs[port].analogYLeft > 0) inputs[port].realinput |= (1 << RETRO_DEVICE_ID_JOYPAD_DOWN); else if (inputs[port].analogYRight > 0) inputs[port].realinput |= (1 << RETRO_DEVICE_ID_JOYPAD_DOWN); if (inputs[port].analogYLeft < 0) inputs[port].realinput |= (1 << RETRO_DEVICE_ID_JOYPAD_UP); else if (inputs[port].analogYRight < 0) inputs[port].realinput |= (1 << RETRO_DEVICE_ID_JOYPAD_UP); inputs[port].input = inputs[port].realinput & ~g_state->previnput[port]; inputs[port].not_input = g_state->previnput[port] & ~inputs[port].realinput; if (is_key_up_or_down(inputs[port].input, inputs[port].not_input, RETRO_DEVICE_ID_JOYPAD_UP)) process_joypad(&g_state->g_input[port].buttons[B_MOVE_UP], inputs[port].realinput & (1 << RETRO_DEVICE_ID_JOYPAD_UP)); else if (is_key_up_or_down(inputs[port].input, inputs[port].not_input, RETRO_DEVICE_ID_JOYPAD_DOWN)) process_joypad(&g_state->g_input[port].buttons[B_MOVE_DOWN], inputs[port].realinput & (1 << RETRO_DEVICE_ID_JOYPAD_DOWN)); else if (is_key_up_or_down(inputs[port].input, inputs[port].not_input, RETRO_DEVICE_ID_JOYPAD_DOWN)) process_joypad(&g_state->g_input[port].buttons[B_MOVE_DOWN], inputs[port].realinput & (1 << RETRO_DEVICE_ID_JOYPAD_DOWN)); if (is_key_up_or_down(inputs[port].input, inputs[port].not_input, RETRO_DEVICE_ID_JOYPAD_A)) process_joypad(&g_state->g_input[port].buttons[B_SPEED_UP], inputs[port].realinput & (1 << RETRO_DEVICE_ID_JOYPAD_A)); else if (is_key_up_or_down(inputs[port].input, inputs[port].not_input, RETRO_DEVICE_ID_JOYPAD_B)) process_joypad(&g_state->g_input[port].buttons[B_SPEED_UP], inputs[port].realinput & (1 << RETRO_DEVICE_ID_JOYPAD_B)); else if (is_key_up_or_down(inputs[port].input, inputs[port].not_input, RETRO_DEVICE_ID_JOYPAD_X)) process_joypad(&g_state->g_input[port].buttons[B_SPEED_UP], inputs[port].realinput & (1 << RETRO_DEVICE_ID_JOYPAD_X)); else if (is_key_up_or_down(inputs[port].input, inputs[port].not_input, RETRO_DEVICE_ID_JOYPAD_Y)) process_joypad(&g_state->g_input[port].buttons[B_SPEED_UP], inputs[port].realinput & (1 << RETRO_DEVICE_ID_JOYPAD_Y)); g_state->previnput[port] = inputs[port].realinput; } game_update_and_render(g_state->g_input, &game_buffer); GONG_CORE_PREFIX(video_cb)(video_buf, WIDTH, HEIGHT, WIDTH * sizeof(uint32_t)); }