}
static const char *men_gpu_dithering[] = { "OFF", "ON", "Force", NULL };
+static const char *men_bios_boot[] = { "OFF", "ON", "ON w/o PCSX", NULL };
static const char h_bios[] = "HLE is simulated BIOS. BIOS selection is saved in\n"
"savestates and can't be changed there. Must save\n"
return 0;
}
+static int slowboot_sel;
+
static menu_entry e_menu_plugin_options[] =
{
mee_enum_h ("BIOS", 0, bios_sel, bioses, h_bios),
+ mee_enum ("BIOS logo (slow boot)", 0, slowboot_sel, men_bios_boot),
mee_enum ("GPU Dithering", 0, pl_rearmed_cbs.dithering, men_gpu_dithering),
mee_enum_h ("GPU plugin", 0, gpu_plugsel, gpu_plugins, h_plugin_gpu),
mee_enum_h ("SPU plugin", 0, spu_plugsel, spu_plugins, h_plugin_spu),
static int menu_loop_plugin_options(int id, int keys)
{
static int sel = 0;
+ slowboot_sel = Config.SlowBoot;
me_loop(e_menu_plugin_options, &sel);
+ Config.SlowBoot = slowboot_sel;
// sync BIOS/plugins
snprintf(Config.Bios, sizeof(Config.Bios), "%s", bioses[bios_sel]);
ready_to_go = 0;
if (reload_plugins(NULL) != 0)
return -1;
- Config.SlowBoot = 1;
+ Config.SlowBoot = 2;
SysReset();
Config.SlowBoot = origSlowBoot;
CDR_LOG_I("CdlID: %02x %02x %02x %02x\n", cdr.Result[0],
cdr.Result[1], cdr.Result[2], cdr.Result[3]);
- /* This adds the string "PCSX" in Playstation bios boot screen */
- memcpy((char *)&cdr.Result[4], "PCSX", 4);
+ /* 4-char string in Playstation bios boot screen */
+ if (Config.SlowBoot == 1)
+ memcpy(&cdr.Result[4], "PCSX", 4);
+ else {
+ cdr.Result[4] = 'S';
+ cdr.Result[5] = 'C';
+ cdr.Result[6] = 'E';
+ if (Config.PsxType == PSX_TYPE_PAL)
+ cdr.Result[7] = 'E';
+ else if (CdromId[2] == 'P' || CdromId[2] == 'p')
+ cdr.Result[7] = 'I';
+ else
+ cdr.Result[7] = 'A';
+ }
IrqStat = Complete;
break;
case CdlReadToc + CMD_WHILE_NOT_READY:
cdr.LocL[0] = LOCL_INVALID;
second_resp_time = cdReadTime * 180 / 4;
+ if (!Config.HLE && Config.SlowBoot) {
+ // hack: compensate cdrom being emulated too fast
+ // and bios finishing before the reverb decays
+ second_resp_time += cdReadTime * 75*2;
+ if ((psxRegs.pc >> 28) == 0x0b)
+ second_resp_time += cdReadTime * 75*3;
+ }
start_rotating = 1;
break;