Merge pull request #460 from LuigiBlood/64dd

Added "AllowROMWrites" RDB setting, DMA READ to ROM and updated RDB file
This commit is contained in:
zilmar 2015-05-15 07:52:01 +10:00
commit fa2d34e751
4 changed files with 74 additions and 11 deletions

View File

@ -2806,6 +2806,7 @@ Core Note=Saves not supported
Counter Factor=1
RDRAM Size=8
Sync Audio=0
AllowROMWrites=Yes
[69256460-B9A3F586-C:45]
Good Name=Jeopardy! (U)
@ -3139,20 +3140,22 @@ RDRAM Size=8
Save Type=16kbit Eeprom
[0837F87A-D1436FF8-C:4A]
Good Name=Kyojin no Doshin 1 (J) [CART HACK]
Good Name=Kyojin no Doshin (J) [CART HACK]
Status=Issues (core)
Core Note=Saves not supported
Counter Factor=1
RDRAM Size=8
Sync Audio=0
AllowROMWrites=Yes
[E7BDA0BE-ADA09CAC-C:4A]
Good Name=Kyojin no Doshin 1 (J) (Kiosk Demo) [CART HACK]
Good Name=Kyojin no Doshin (J) (Kiosk Demo) [CART HACK]
Status=Issues (core)
Core Note=Saves not supported
Counter Factor=1
RDRAM Size=8
Sync Audio=0
AllowROMWrites=Yes
[8C47CE8B-06019FEF-C:4A]
Good Name=Kyojin no Doshin - Kaihou Sensen Chibikko Chikko Daishuugou (J) [CART HACK]
@ -3161,6 +3164,7 @@ Core Note=Saves not supported
Counter Factor=1
RDRAM Size=8
Sync Audio=0
AllowROMWrites=Yes
//================ L ================
[7F304099-52CF5276-C:4A]
@ -3354,36 +3358,39 @@ Status=Issues (plugin)
Plugin Note=[video] slow; use 1.6 plugin (see GameFAQ)
[AB9EB27D-5F05605F-C:4A]
Good Name=Mario Artist - Communications Kit (J) [CART HACK]
Status=Issues (core)
Core Note=Saves not supported
Good Name=Mario Artist - Communication Kit (J) [CART HACK]
Status=Compatible
Counter Factor=1
RDRAM Size=8
Sync Audio=0
AllowROMWrites=Yes
[3A3EB7FB-0DDD515C-C:4A]
Good Name=Mario Artist - Paint Studio (J) [CART HACK]
Status=Issues (core)
Core Note=Saves not supported
Status=Issues (plugin)
Plugin Note=[video] HLE not fully supported; stamps not working
Counter Factor=1
RDRAM Size=8
Sync Audio=0
AllowROMWrites=Yes
[2D5EFCC5-98CF79D2-C:4A]
Good Name=Mario Artist - Polygon Studio (J) [CART HACK]
Status=Issues (core)
Core Note=Saves not supported
Status=Issues (plugin)
Plugin Note=[video] HLE not fully supported; cannot model
Counter Factor=1
RDRAM Size=8
AllowROMWrites=Yes
[4CBC3B56-FDB69B1C-C:4A]
Good Name=Mario Artist - Talent Studio (J) [CART HACK]
Status=Issues (core)
Core Note=Saves not supported
Status=Issues (plugin)
Plugin Note=[video] HLE not fully supported; face and animation editing does not work
32bit=No
Counter Factor=1
RDRAM Size=8
Sync Audio=0
AllowROMWrites=Yes
[62E957D0-7FC15A5D-C:50]
Good Name=Mario Golf (E)
@ -5306,6 +5313,15 @@ Plugin Note=[video] HLE not supported; flicker
HLE GFX=No
RDRAM Size=8
[909535F8-118FEF8F-C:4A]
Good Name=Sim City 64 (J) [CART HACK]
Status=Issues (plugin)
Plugin Note=[video] HLE not supported; rendering problems in city
Counter Factor=1
HLE GFX=No
RDRAM Size=8
AllowROMWrites=Yes
[B1D5280C-4BA7BC2A-C:4A]
Good Name=Sim City 2000 (J)
Internal Name=SIM CITY 2000

View File

@ -48,6 +48,47 @@ void CDMA::PI_DMA_READ()
return;
}
if (g_Reg->PI_CART_ADDR_REG >= 0x10000000 && g_Reg->PI_CART_ADDR_REG <= 0x1FBFFFFF && g_Settings->LoadBool(Game_AllowROMWrites))
{
DWORD i;
BYTE * ROM = g_Rom->GetRomAddress();
BYTE * RDRAM = g_MMU->Rdram();
DWORD OldProtect;
VirtualProtect(ROM, g_Rom->GetRomSize(), PAGE_READWRITE, &OldProtect);
g_Reg->PI_CART_ADDR_REG -= 0x10000000;
if (g_Reg->PI_CART_ADDR_REG + g_Reg->PI_RD_LEN_REG < g_Rom->GetRomSize())
{
for (i = 0; i < g_Reg->PI_RD_LEN_REG; i++)
{
*(ROM + ((g_Reg->PI_CART_ADDR_REG + i) ^ 3)) = *(RDRAM + ((g_Reg->PI_DRAM_ADDR_REG + i) ^ 3));
}
}
else
{
DWORD Len;
Len = g_Rom->GetRomSize() - g_Reg->PI_CART_ADDR_REG;
for (i = 0; i < Len; i++)
{
*(ROM + ((g_Reg->PI_CART_ADDR_REG + i) ^ 3)) = *(RDRAM + ((g_Reg->PI_DRAM_ADDR_REG + i) ^ 3));
}
}
g_Reg->PI_CART_ADDR_REG += 0x10000000;
if (!g_System->DmaUsed())
{
g_System->SetDmaUsed(true);
OnFirstDMA();
}
if (g_Recompiler && g_System->bSMM_PIDMA())
{
g_Recompiler->ClearRecompCode_Phys(g_Reg->PI_DRAM_ADDR_REG, g_Reg->PI_WR_LEN_REG, CRecompiler::Remove_DMA);
}
VirtualProtect(ROM, g_Rom->GetRomSize(), PAGE_READONLY, &OldProtect);
}
if ( g_Reg->PI_CART_ADDR_REG >= 0x08000000 && g_Reg->PI_CART_ADDR_REG <= 0x08010000)
{
if (g_System->m_SaveUsing == SaveChip_Auto)
@ -151,6 +192,7 @@ void CDMA::PI_DMA_WRITE()
if ( g_Reg->PI_CART_ADDR_REG >= 0x10000000 && g_Reg->PI_CART_ADDR_REG <= 0x1FBFFFFF)
{
DWORD i;
#ifdef tofix
#ifdef ROM_IN_MAPSPACE
if (WrittenToRom)
@ -160,6 +202,7 @@ void CDMA::PI_DMA_WRITE()
}
#endif
#endif
BYTE * ROM = g_Rom->GetRomAddress();
BYTE * RDRAM = g_MMU->Rdram();
g_Reg->PI_CART_ADDR_REG -= 0x10000000;

View File

@ -96,6 +96,7 @@ enum SettingID {
Rdb_ViRefreshRate,
Rdb_AiCountPerBytes,
Rdb_AudioResetOnLoad,
Rdb_AllowROMWrites,
//Individual Game Settings
Game_IniKey,
@ -141,6 +142,7 @@ enum SettingID {
Game_ViRefreshRate,
Game_AiCountPerBytes,
Game_AudioResetOnLoad,
Game_AllowROMWrites,
// General Game running info
GameRunning_LoadingInProgress,

View File

@ -168,6 +168,7 @@ void CSettings::AddHowToHandleSetting ()
AddHandler(Rdb_ViRefreshRate, new CSettingTypeRomDatabase("ViRefresh",1500));
AddHandler(Rdb_AiCountPerBytes, new CSettingTypeRomDatabase("AiCountPerBytes",400));
AddHandler(Rdb_AudioResetOnLoad, new CSettingTypeRDBYesNo("AudioResetOnLoad", false));
AddHandler(Rdb_AllowROMWrites, new CSettingTypeRDBYesNo("AllowROMWrites", false));
AddHandler(Game_IniKey, new CSettingTypeTempString(""));
AddHandler(Game_GameName, new CSettingTypeTempString(""));
@ -212,6 +213,7 @@ void CSettings::AddHowToHandleSetting ()
AddHandler(Game_ViRefreshRate, new CSettingTypeGame("ViRefresh",Rdb_ViRefreshRate));
AddHandler(Game_AiCountPerBytes, new CSettingTypeGame("AiCountPerBytes",Rdb_AiCountPerBytes));
AddHandler(Game_AudioResetOnLoad, new CSettingTypeGame("AudioResetOnLoad", Rdb_AudioResetOnLoad));
AddHandler(Game_AllowROMWrites, new CSettingTypeGame("AllowROMWrites", Rdb_AllowROMWrites));
//User Interface
AddHandler(UserInterface_BasicMode, new CSettingTypeApplication("","Basic Mode", (DWORD)true));