Port libretro reios params with less intrusive query

This commit is contained in:
Ender's Games 2018-08-18 23:40:26 -04:00
parent f2b9b2fcf7
commit 4424d84960
3 changed files with 65 additions and 2 deletions

View File

@ -15,6 +15,7 @@
#include "webui/server.h"
#include "hw/naomi/naomi_cart.h"
#include "reios/reios.h"
settings_t settings;
@ -241,9 +242,12 @@ void dc_stop()
sh4_cpu.Stop();
}
char *configFile;
void LoadCustom()
{
char *configFile = ""; // Replace with code to get a per-game config file
configFile = reios_disk_id();
settings.dynarec.Enable = cfgLoadInt(configFile,"Dynarec.Enabled", settings.dynarec.Enable ? 1 : 0) != 0;
settings.dynarec.idleskip = cfgLoadInt(configFile,"Dynarec.idleskip", settings.dynarec.idleskip ? 1 : 0) != 0;
@ -335,6 +339,16 @@ void LoadSettings()
LoadCustom();
}
void SaveCustom()
{
cfgSaveInt(configFile,"Dynarec.Enabled", settings.dynarec.Enable);
cfgSaveInt(configFile,"Dreamcast.Cable", settings.dreamcast.cable);
cfgSaveInt(configFile,"Dreamcast.RTC", settings.dreamcast.RTC);
cfgSaveInt(configFile,"Dreamcast.Region", settings.dreamcast.region);
cfgSaveInt(configFile,"Dreamcast.Broadcast",settings.dreamcast.broadcast);
}
void SaveSettings()
{
cfgSaveInt("config","Dynarec.Enabled", settings.dynarec.Enable);
@ -342,4 +356,6 @@ void SaveSettings()
cfgSaveInt("config","Dreamcast.RTC", settings.dreamcast.RTC);
cfgSaveInt("config","Dreamcast.Region", settings.dreamcast.region);
cfgSaveInt("config","Dreamcast.Broadcast",settings.dreamcast.broadcast);
SaveCustom();
}

View File

@ -97,7 +97,52 @@ bool reios_locate_bootfile(const char* bootfile="1ST_READ.BIN") {
return false;
}
char ip_bin[256];
char reios_hardware_id[17];
char reios_maker_id[17];
char reios_device_info[17];
char reios_area_symbols[9];
char reios_peripherals[9];
char reios_product_number[11];
char reios_product_version[7];
char reios_releasedate[17];
char reios_boot_filename[17];
char reios_software_company[17];
char reios_software_name[129];
char reios_bootfile[32];
char* reios_disk_id() {
if (libGDR_GetDiscType() == GdRom) {
base_fad = 45150;
descrambl = false;
}
else {
u8 ses[6];
libGDR_GetSessionInfo(ses, 0);
libGDR_GetSessionInfo(ses, ses[2]);
base_fad = (ses[3] << 16) | (ses[4] << 8) | (ses[5] << 0);
descrambl = true;
}
libGDR_ReadSector(GetMemPtr(0x8c008000, 0), base_fad, 256, 2048);
memset(ip_bin, 0, sizeof(ip_bin));
memcpy(ip_bin, GetMemPtr(0x8c008000, 0), 256);
memcpy(&reios_hardware_id[0], &ip_bin[0], 16 * sizeof(char));
memcpy(&reios_maker_id[0], &ip_bin[16], 16 * sizeof(char));
memcpy(&reios_device_info[0], &ip_bin[32], 16 * sizeof(char));
memcpy(&reios_area_symbols[0], &ip_bin[48], 8 * sizeof(char));
memcpy(&reios_peripherals[0], &ip_bin[56], 8 * sizeof(char));
memcpy(&reios_product_number[0], &ip_bin[64], 10 * sizeof(char));
memcpy(&reios_product_version[0], &ip_bin[74], 6 * sizeof(char));
memcpy(&reios_releasedate[0], &ip_bin[80], 16 * sizeof(char));
memcpy(&reios_boot_filename[0], &ip_bin[96], 16 * sizeof(char));
memcpy(&reios_software_company[0], &ip_bin[112], 16 * sizeof(char));
memcpy(&reios_software_name[0], &ip_bin[128], 128 * sizeof(char));
return reios_product_number;
}
const char* reios_locate_ip() {
if (libGDR_GetDiscType() == GdRom) {

View File

@ -9,4 +9,6 @@ void reios_term();
void DYNACALL reios_trap(u32 op);
#define REIOS_OPCODE 0x085B
char* reios_disk_id();
#define REIOS_OPCODE 0x085B