void pemu_sound_start(void) { gp2x_soc_t soc; emu_sound_start(); if (currentConfig.EmuOpt & EOPT_EN_SOUND) { soc = soc_detect(); if (soc == SOCID_POLLUX) { PsndRate = pollux_get_real_snd_rate(PsndRate); PsndRerate(Pico.m.frame_count ? 1 : 0); } plat_target_step_volume(¤tConfig.volume, 0); } }
bool retro_load_game(const struct retro_game_info *info) { enum media_type_e media_type; static char carthw_path[256]; size_t i; 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_B, "B" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "C" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Y" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "A" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "X" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "Z" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT,"Mode" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, { 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_B, "B" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "C" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Y" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "A" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "X" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "Z" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT,"Mode" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, { 0 }, }; struct retro_input_descriptor desc_sms[] = { { 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_B, "Button 1 Start" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "Button 2" }, { 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Button Pause" }, { 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_B, "Button 1 Start" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "Button 2" }, { 1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Button Pause" }, { 0 }, }; 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_ERROR, "RGB565 support required, sorry\n"); return false; } if (info == NULL || info->path == NULL) { if (log_cb) log_cb(RETRO_LOG_ERROR, "info->path required\n"); return false; } for (i = 0; i < sizeof(disks) / sizeof(disks[0]); i++) { if (disks[i].fname != NULL) { free(disks[i].fname); disks[i].fname = NULL; } } disk_current_index = 0; disk_count = 1; disks[0].fname = strdup(info->path); make_system_path(carthw_path, sizeof(carthw_path), "carthw", ".cfg"); media_type = PicoLoadMedia(info->path, carthw_path, find_bios, NULL); switch (media_type) { case PM_BAD_DETECT: if (log_cb) log_cb(RETRO_LOG_ERROR, "Failed to detect ROM/CD image type.\n"); return false; case PM_BAD_CD: if (log_cb) log_cb(RETRO_LOG_ERROR, "Invalid CD image\n"); return false; case PM_BAD_CD_NO_BIOS: if (log_cb) log_cb(RETRO_LOG_ERROR, "Missing BIOS\n"); return false; case PM_ERROR: if (log_cb) log_cb(RETRO_LOG_ERROR, "Load error\n"); return false; default: break; } if (media_type == PM_MARK3) environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, desc_sms); else environ_cb(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, desc); PicoLoopPrepare(); PicoWriteSound = snd_write; memset(sndBuffer, 0, sizeof(sndBuffer)); PsndOut = sndBuffer; PsndRerate(0); return true; }
static void update_variables(void) { struct retro_variable var; var.value = NULL; var.key = "picodrive_input1"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) PicoSetInputDevice(0, input_name_to_val(var.value)); var.value = NULL; var.key = "picodrive_input2"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) PicoSetInputDevice(1, input_name_to_val(var.value)); var.value = NULL; var.key = "picodrive_sprlim"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { if (strcmp(var.value, "enabled") == 0) PicoOpt |= POPT_DIS_SPRITE_LIM; else PicoOpt &= ~POPT_DIS_SPRITE_LIM; } var.value = NULL; var.key = "picodrive_ramcart"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { if (strcmp(var.value, "enabled") == 0) PicoOpt |= POPT_EN_MCD_RAMCART; else PicoOpt &= ~POPT_EN_MCD_RAMCART; } int OldPicoRegionOverride = PicoRegionOverride; var.value = NULL; var.key = "picodrive_region"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { if (strcmp(var.value, "Auto") == 0) PicoRegionOverride = 0; else if (strcmp(var.value, "Japan NTSC") == 0) PicoRegionOverride = 1; else if (strcmp(var.value, "Japan PAL") == 0) PicoRegionOverride = 2; else if (strcmp(var.value, "US") == 0) PicoRegionOverride = 4; else if (strcmp(var.value, "Europe") == 0) PicoRegionOverride = 8; } int OldPicoRegionFPSOverride = PicoRegionFPSOverride; var.value = NULL; var.key = "picodrive_region_fps"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { if (strcmp(var.value, "Auto") == 0) PicoRegionFPSOverride = 0; else if (strcmp(var.value, "NTSC") == 0) PicoRegionFPSOverride = 1; else if (strcmp(var.value, "PAL") == 0) PicoRegionFPSOverride = 2; } // Update region, fps and sound flags if needed if (PicoRegionOverride != OldPicoRegionOverride || PicoRegionFPSOverride != OldPicoRegionFPSOverride) { PicoDetectRegion(); PicoLoopPrepare(); PsndRerate(1); } #ifdef DRC_SH2 var.value = NULL; var.key = "picodrive_drc"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { if (strcmp(var.value, "enabled") == 0) PicoOpt |= POPT_EN_DRC; else PicoOpt &= ~POPT_EN_DRC; } #endif #ifdef _3DS if(!ctr_svchack_successful) PicoOpt &= ~POPT_EN_DRC; #endif }