diff --git a/core/nullDC.cpp b/core/nullDC.cpp index bb66b11f4..db3c185a6 100755 --- a/core/nullDC.cpp +++ b/core/nullDC.cpp @@ -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(); } diff --git a/core/reios/reios.cpp b/core/reios/reios.cpp index ac3ae4c9c..28b68303d 100644 --- a/core/reios/reios.cpp +++ b/core/reios/reios.cpp @@ -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) { diff --git a/core/reios/reios.h b/core/reios/reios.h index 1670068d2..0b3d4a96f 100644 --- a/core/reios/reios.h +++ b/core/reios/reios.h @@ -9,4 +9,6 @@ void reios_term(); void DYNACALL reios_trap(u32 op); -#define REIOS_OPCODE 0x085B \ No newline at end of file +char* reios_disk_id(); + +#define REIOS_OPCODE 0x085B