Merge branch 'master' into AudioSync
This commit is contained in:
commit
2a41a10479
|
@ -21,6 +21,7 @@ LOCAL_SRC_FILES := \
|
||||||
$(SRCDIR)/MemoryManagement.cpp \
|
$(SRCDIR)/MemoryManagement.cpp \
|
||||||
$(SRCDIR)/path.cpp \
|
$(SRCDIR)/path.cpp \
|
||||||
$(SRCDIR)/Platform.cpp \
|
$(SRCDIR)/Platform.cpp \
|
||||||
|
$(SRCDIR)/Random.cpp \
|
||||||
$(SRCDIR)/StdString.cpp \
|
$(SRCDIR)/StdString.cpp \
|
||||||
$(SRCDIR)/SyncEvent.cpp \
|
$(SRCDIR)/SyncEvent.cpp \
|
||||||
$(SRCDIR)/Thread.cpp \
|
$(SRCDIR)/Thread.cpp \
|
||||||
|
|
|
@ -2478,6 +2478,7 @@ Status=Compatible
|
||||||
Good Name=Ide Yousuke no Mahjong Juku (J)
|
Good Name=Ide Yousuke no Mahjong Juku (J)
|
||||||
Internal Name=²ÃÞÖ³½¹ÉÏ°¼Þ¬Ý¼Þ¸
|
Internal Name=²ÃÞÖ³½¹ÉÏ°¼Þ¬Ý¼Þ¸
|
||||||
Status=Compatible
|
Status=Compatible
|
||||||
|
Save Type=16kbit Eeprom
|
||||||
|
|
||||||
[D692CC5E-EC58D072-C:50]
|
[D692CC5E-EC58D072-C:50]
|
||||||
Good Name=Iggy's Reckin' Balls (E)
|
Good Name=Iggy's Reckin' Balls (E)
|
||||||
|
@ -3134,7 +3135,6 @@ Internal Name=Madden NFL 2002
|
||||||
Status=Compatible
|
Status=Compatible
|
||||||
Counter Factor=1
|
Counter Factor=1
|
||||||
RDRAM Size=8
|
RDRAM Size=8
|
||||||
Save Type=16kbit Eeprom
|
|
||||||
|
|
||||||
[3925D625-8C83C75E-C:50]
|
[3925D625-8C83C75E-C:50]
|
||||||
Good Name=Madden NFL 99 (E)
|
Good Name=Madden NFL 99 (E)
|
||||||
|
@ -4311,6 +4311,7 @@ Good Name=Pokemon Snap (A)
|
||||||
Internal Name=POKEMON SNAP
|
Internal Name=POKEMON SNAP
|
||||||
Status=Issues (plugin)
|
Status=Issues (plugin)
|
||||||
Plugin Note= broken; needs accurate FB emu
|
Plugin Note= broken; needs accurate FB emu
|
||||||
|
Counter Factor=1
|
||||||
Cheat0=D1382D1C 802C,80382D0F 0000 //Pass 1st Level and Controller Fix
|
Cheat0=D1382D1C 802C,80382D0F 0000 //Pass 1st Level and Controller Fix
|
||||||
Cheat1=D11E3C44 2881,811E3C44 2001,D11E3C46 0098,811E3C46 0001 //Make Picture selectable
|
Cheat1=D11E3C44 2881,811E3C44 2001,D11E3C46 0098,811E3C46 0001 //Make Picture selectable
|
||||||
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
||||||
|
@ -4321,6 +4322,7 @@ Good Name=Pokemon Snap (E)
|
||||||
Internal Name=POKEMON SNAP
|
Internal Name=POKEMON SNAP
|
||||||
Status=Issues (plugin)
|
Status=Issues (plugin)
|
||||||
Plugin Note= broken; needs accurate FB emu
|
Plugin Note= broken; needs accurate FB emu
|
||||||
|
Counter Factor=1
|
||||||
Cheat0=D1381BFC 802C,80381BEF 0000 //Pass 1st Level and Controller Fix
|
Cheat0=D1381BFC 802C,80381BEF 0000 //Pass 1st Level and Controller Fix
|
||||||
Cheat1=D11E3824 2881,811E3824 2001,D11E3826 0098,811E3826 0001 //Make Picture selectable
|
Cheat1=D11E3824 2881,811E3824 2001,D11E3826 0098,811E3826 0001 //Make Picture selectable
|
||||||
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
||||||
|
@ -4331,6 +4333,7 @@ Good Name=Pokemon Snap (F)
|
||||||
Internal Name=POKEMON SNAP
|
Internal Name=POKEMON SNAP
|
||||||
Status=Issues (plugin)
|
Status=Issues (plugin)
|
||||||
Plugin Note= broken; needs accurate FB emu
|
Plugin Note= broken; needs accurate FB emu
|
||||||
|
Counter Factor=1
|
||||||
Cheat0=D1381BFC 802C,80381BEF 0000 //Pass 1st Level and Controller Fix
|
Cheat0=D1381BFC 802C,80381BEF 0000 //Pass 1st Level and Controller Fix
|
||||||
Cheat1=D11E3744 2881,811E3744 2001,D11E3746 0098,811E3746 0001 //Make Picture selectable
|
Cheat1=D11E3744 2881,811E3744 2001,D11E3746 0098,811E3746 0001 //Make Picture selectable
|
||||||
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
||||||
|
@ -4341,6 +4344,7 @@ Good Name=Pokemon Snap (G)
|
||||||
Internal Name=POKEMON SNAP
|
Internal Name=POKEMON SNAP
|
||||||
Status=Issues (plugin)
|
Status=Issues (plugin)
|
||||||
Plugin Note= broken; needs accurate FB emu
|
Plugin Note= broken; needs accurate FB emu
|
||||||
|
Counter Factor=1
|
||||||
Cheat0=D1381BDC 802C,80381BCF 0000 //Pass 1st Level and Controller Fix
|
Cheat0=D1381BDC 802C,80381BCF 0000 //Pass 1st Level and Controller Fix
|
||||||
Cheat1=D11E3744 2881,811E3744 2001,D11E3746 0098,811E3746 0001 //Make Picture selectable
|
Cheat1=D11E3744 2881,811E3744 2001,D11E3746 0098,811E3746 0001 //Make Picture selectable
|
||||||
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
||||||
|
@ -4351,6 +4355,7 @@ Good Name=Pokemon Snap (I)
|
||||||
Internal Name=POKEMON SNAP
|
Internal Name=POKEMON SNAP
|
||||||
Status=Issues (plugin)
|
Status=Issues (plugin)
|
||||||
Plugin Note= broken; needs accurate FB emu
|
Plugin Note= broken; needs accurate FB emu
|
||||||
|
Counter Factor=1
|
||||||
Cheat0=D1381BFC 802C,80381BEF 0000 //Pass 1st Level and Controller Fix
|
Cheat0=D1381BFC 802C,80381BEF 0000 //Pass 1st Level and Controller Fix
|
||||||
Cheat1=D11E3994 2881,811E3994 2001,D11E3996 0098,811E3996 0001 //Make Picture selectable
|
Cheat1=D11E3994 2881,811E3994 2001,D11E3996 0098,811E3996 0001 //Make Picture selectable
|
||||||
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
||||||
|
@ -4361,6 +4366,7 @@ Good Name=Pokemon Snap (J) (V1.0)
|
||||||
Internal Name=POKEMON SNAP
|
Internal Name=POKEMON SNAP
|
||||||
Status=Issues (plugin)
|
Status=Issues (plugin)
|
||||||
Plugin Note= broken; needs accurate FB emu
|
Plugin Note= broken; needs accurate FB emu
|
||||||
|
Counter Factor=1
|
||||||
Cheat0=D136D22C 802A,8036D21F 0000 //Pass 1st Level and Controller Fix
|
Cheat0=D136D22C 802A,8036D21F 0000 //Pass 1st Level and Controller Fix
|
||||||
Cheat1=D11E1EC4 2881,811E1EC4 2001,D11E1EC6 0098,811E1EC6 0001 //Make Picture selectable
|
Cheat1=D11E1EC4 2881,811E1EC4 2001,D11E1EC6 0098,811E1EC6 0001 //Make Picture selectable
|
||||||
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
||||||
|
@ -4371,6 +4377,7 @@ Good Name=Pokemon Snap (J) (V1.1)
|
||||||
Internal Name=POKEMON SNAP
|
Internal Name=POKEMON SNAP
|
||||||
Status=Issues (plugin)
|
Status=Issues (plugin)
|
||||||
Plugin Note= broken; needs accurate FB emu
|
Plugin Note= broken; needs accurate FB emu
|
||||||
|
Counter Factor=1
|
||||||
Cheat0=D136D22C 802A,8036D21F 0000 //Pass 1st Level and Controller Fix
|
Cheat0=D136D22C 802A,8036D21F 0000 //Pass 1st Level and Controller Fix
|
||||||
Cheat1=D11E1EC4 2881,811E1EC4 2001,D11E1EC6 0098,811E1EC6 0001 //Make Picture selectable
|
Cheat1=D11E1EC4 2881,811E1EC4 2001,D11E1EC6 0098,811E1EC6 0001 //Make Picture selectable
|
||||||
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
||||||
|
@ -4381,6 +4388,7 @@ Good Name=Pokemon Snap (S)
|
||||||
Internal Name=POKEMON SNAP
|
Internal Name=POKEMON SNAP
|
||||||
Status=Issues (plugin)
|
Status=Issues (plugin)
|
||||||
Plugin Note= broken; needs accurate FB emu
|
Plugin Note= broken; needs accurate FB emu
|
||||||
|
Counter Factor=1
|
||||||
Cheat0=D1381BFC 802C,80381BEF 0000 //Pass 1st Level and Controller Fix
|
Cheat0=D1381BFC 802C,80381BEF 0000 //Pass 1st Level and Controller Fix
|
||||||
Cheat1=D11E38C4 2881,811E38C4 2001,D11E38C6 0098,811E38C6 0001 //Make Picture selectable
|
Cheat1=D11E38C4 2881,811E38C4 2001,D11E38C6 0098,811E38C6 0001 //Make Picture selectable
|
||||||
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
||||||
|
@ -4391,6 +4399,7 @@ Good Name=Pokemon Snap (U)
|
||||||
Internal Name=POKEMON SNAP
|
Internal Name=POKEMON SNAP
|
||||||
Status=Issues (plugin)
|
Status=Issues (plugin)
|
||||||
Plugin Note= broken; needs accurate FB emu
|
Plugin Note= broken; needs accurate FB emu
|
||||||
|
Counter Factor=1
|
||||||
Cheat0=D1382D1C 802C,80382D0F 0000 //Pass 1st Level and Controller Fix
|
Cheat0=D1382D1C 802C,80382D0F 0000 //Pass 1st Level and Controller Fix
|
||||||
Cheat1=D11E3184 2881,811E3184 2001,D11E3186 0098,811E3186 0001 //Make Picture selectable
|
Cheat1=D11E3184 2881,811E3184 2001,D11E3186 0098,811E3186 0001 //Make Picture selectable
|
||||||
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
||||||
|
@ -4401,6 +4410,7 @@ Good Name=Pokemon Snap Station (U)
|
||||||
Internal Name=POKEMON SNAP
|
Internal Name=POKEMON SNAP
|
||||||
Status=Issues (plugin)
|
Status=Issues (plugin)
|
||||||
Plugin Note= broken; needs accurate FB emu
|
Plugin Note= broken; needs accurate FB emu
|
||||||
|
Counter Factor=1
|
||||||
Cheat0=D1382D1C 802C,80382D0F 0000 //Pass 1st Level and Controller Fix
|
Cheat0=D1382D1C 802C,80382D0F 0000 //Pass 1st Level and Controller Fix
|
||||||
Cheat1=D11E30F4 2881,811E30F4 2001,D11E30F6 0098,811E30F6 0001 //Make Picture selectable
|
Cheat1=D11E30F4 2881,811E30F4 2001,D11E30F6 0098,811E30F6 0001 //Make Picture selectable
|
||||||
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
<ClCompile Include="MemTest.cpp" />
|
<ClCompile Include="MemTest.cpp" />
|
||||||
<ClCompile Include="path.cpp" />
|
<ClCompile Include="path.cpp" />
|
||||||
<ClCompile Include="Platform.cpp" />
|
<ClCompile Include="Platform.cpp" />
|
||||||
|
<ClCompile Include="Random.cpp" />
|
||||||
<ClCompile Include="stdafx.cpp">
|
<ClCompile Include="stdafx.cpp">
|
||||||
<PrecompiledHeader>Create</PrecompiledHeader>
|
<PrecompiledHeader>Create</PrecompiledHeader>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -64,6 +65,7 @@
|
||||||
<ClInclude Include="MemTest.h" />
|
<ClInclude Include="MemTest.h" />
|
||||||
<ClInclude Include="path.h" />
|
<ClInclude Include="path.h" />
|
||||||
<ClInclude Include="Platform.h" />
|
<ClInclude Include="Platform.h" />
|
||||||
|
<ClInclude Include="Random.h" />
|
||||||
<ClInclude Include="SmartPointer.h" />
|
<ClInclude Include="SmartPointer.h" />
|
||||||
<ClInclude Include="stdafx.h" />
|
<ClInclude Include="stdafx.h" />
|
||||||
<ClInclude Include="StdString.h" />
|
<ClInclude Include="StdString.h" />
|
||||||
|
|
|
@ -62,6 +62,9 @@
|
||||||
<ClCompile Include="DateTimeClass.cpp">
|
<ClCompile Include="DateTimeClass.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="Random.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="stdafx.h">
|
<ClInclude Include="stdafx.h">
|
||||||
|
@ -124,5 +127,8 @@
|
||||||
<ClInclude Include="DateTimeClass.h">
|
<ClInclude Include="DateTimeClass.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="Random.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -0,0 +1,54 @@
|
||||||
|
/****************************************************************************
|
||||||
|
* *
|
||||||
|
* Project64 - A Nintendo 64 emulator. *
|
||||||
|
* http://www.pj64-emu.com/ *
|
||||||
|
* Copyright (C) 2017 Project64. All rights reserved. *
|
||||||
|
* *
|
||||||
|
* License: *
|
||||||
|
* GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html *
|
||||||
|
* *
|
||||||
|
****************************************************************************/
|
||||||
|
/*
|
||||||
|
* Implements the CRandom class.
|
||||||
|
*
|
||||||
|
* This class implements the Lehmer Random Number Generator.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "Random.h"
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
CRandom::CRandom()
|
||||||
|
{
|
||||||
|
m_state = (uint32_t)time(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
CRandom::CRandom(uint32_t state_value)
|
||||||
|
{
|
||||||
|
m_state = state_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CRandom::randomizer(uint32_t val)
|
||||||
|
{
|
||||||
|
return ((uint64_t)val * 279470273UL) % 4294967291UL;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CRandom::next()
|
||||||
|
{
|
||||||
|
m_state = randomizer(m_state);
|
||||||
|
return m_state;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRandom::set_state(uint32_t state_value)
|
||||||
|
{
|
||||||
|
if (state_value == 0)
|
||||||
|
m_state = 1;
|
||||||
|
else
|
||||||
|
m_state = state_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t CRandom::get_state()
|
||||||
|
{
|
||||||
|
return m_state;
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
/****************************************************************************
|
||||||
|
* *
|
||||||
|
* Project64 - A Nintendo 64 emulator. *
|
||||||
|
* http://www.pj64-emu.com/ *
|
||||||
|
* Copyright (C) 2017 Project64. All rights reserved. *
|
||||||
|
* *
|
||||||
|
* License: *
|
||||||
|
* GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html *
|
||||||
|
* *
|
||||||
|
****************************************************************************/
|
||||||
|
/*
|
||||||
|
* Defines the CRandom class.
|
||||||
|
*
|
||||||
|
* This class implements the Lehmer Random Number Generator.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
#include <Common/stdtypes.h>
|
||||||
|
|
||||||
|
class CRandom
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CRandom();
|
||||||
|
CRandom(uint32_t seed_value);
|
||||||
|
uint32_t next();
|
||||||
|
uint32_t get_state();
|
||||||
|
void set_state(uint32_t state_value);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
uint32_t randomizer(uint32_t val);
|
||||||
|
uint32_t m_state;
|
||||||
|
};
|
|
@ -354,7 +354,7 @@ void CCheats::ModifyMemory8(uint32_t Address, uint8_t Value)
|
||||||
m_MMU.SB_VAddr(Address, OriginalValue.Changed);
|
m_MMU.SB_VAddr(Address, OriginalValue.Changed);
|
||||||
if (g_Recompiler)
|
if (g_Recompiler)
|
||||||
{
|
{
|
||||||
g_Recompiler->ClearRecompCode_Virt(Address, 1, CRecompiler::Remove_Cheats);
|
g_Recompiler->ClearRecompCode_Virt(Address & ~0xFFF, 0x1000, CRecompiler::Remove_Cheats);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -374,7 +374,7 @@ void CCheats::ModifyMemory16(uint32_t Address, uint16_t Value)
|
||||||
m_MMU.SH_VAddr(Address, OriginalValue.Changed);
|
m_MMU.SH_VAddr(Address, OriginalValue.Changed);
|
||||||
if (g_Recompiler)
|
if (g_Recompiler)
|
||||||
{
|
{
|
||||||
g_Recompiler->ClearRecompCode_Virt(Address, 2, CRecompiler::Remove_Cheats);
|
g_Recompiler->ClearRecompCode_Virt(Address & ~0xFFF, 0x1000, CRecompiler::Remove_Cheats);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -458,9 +458,11 @@ void CDMA::PI_DMA_WRITE()
|
||||||
{
|
{
|
||||||
g_Recompiler->ClearRecompCode_Phys(g_Reg->PI_DRAM_ADDR_REG, g_Reg->PI_WR_LEN_REG, CRecompiler::Remove_DMA);
|
g_Recompiler->ClearRecompCode_Phys(g_Reg->PI_DRAM_ADDR_REG, g_Reg->PI_WR_LEN_REG, CRecompiler::Remove_DMA);
|
||||||
}
|
}
|
||||||
g_Reg->PI_STATUS_REG &= ~PI_STATUS_DMA_BUSY;
|
g_SystemTimer->SetTimer(g_SystemTimer->PiTimer, PI_WR_LEN_REG/8 + (g_Random->next() % 0x40), false);
|
||||||
g_Reg->MI_INTR_REG |= MI_INTR_PI;
|
|
||||||
g_Reg->CheckInterrupts();
|
//g_Reg->PI_STATUS_REG &= ~PI_STATUS_DMA_BUSY;
|
||||||
|
//g_Reg->MI_INTR_REG |= MI_INTR_PI;
|
||||||
|
//g_Reg->CheckInterrupts();
|
||||||
//ChangeTimer(PiTimer,(int32_t)(PI_WR_LEN_REG * 8.9) + 50);
|
//ChangeTimer(PiTimer,(int32_t)(PI_WR_LEN_REG * 8.9) + 50);
|
||||||
//ChangeTimer(PiTimer,(int32_t)(PI_WR_LEN_REG * 8.9));
|
//ChangeTimer(PiTimer,(int32_t)(PI_WR_LEN_REG * 8.9));
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -358,13 +358,14 @@ void CPifRam::SI_DMA_READ()
|
||||||
|
|
||||||
if (g_System->bDelaySI())
|
if (g_System->bDelaySI())
|
||||||
{
|
{
|
||||||
g_SystemTimer->SetTimer(CSystemTimer::SiTimer, 0x900, false);
|
g_SystemTimer->SetTimer(CSystemTimer::SiTimer, 0x900 + (g_Random->next() % 0x40), false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_Reg->MI_INTR_REG |= MI_INTR_SI;
|
g_SystemTimer->SetTimer(CSystemTimer::SiTimer, g_Random->next() % 0x40, false);
|
||||||
g_Reg->SI_STATUS_REG |= SI_STATUS_INTERRUPT;
|
//g_Reg->MI_INTR_REG |= MI_INTR_SI;
|
||||||
g_Reg->CheckInterrupts();
|
//g_Reg->SI_STATUS_REG |= SI_STATUS_INTERRUPT;
|
||||||
|
//g_Reg->CheckInterrupts();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
#pragma warning(disable:4355) // Disable 'this' : used in base member initializer list
|
#pragma warning(disable:4355) // Disable 'this' : used in base member initializer list
|
||||||
|
|
||||||
CN64System::CN64System(CPlugins * Plugins, bool SavesReadOnly, bool SyncSystem) :
|
CN64System::CN64System(CPlugins * Plugins, uint32_t randomizer_seed, bool SavesReadOnly, bool SyncSystem) :
|
||||||
CSystemEvents(this, Plugins),
|
CSystemEvents(this, Plugins),
|
||||||
m_EndEmulation(false),
|
m_EndEmulation(false),
|
||||||
m_SaveUsing((SAVE_CHIP_TYPE)g_Settings->LoadDword(Game_SaveChip)),
|
m_SaveUsing((SAVE_CHIP_TYPE)g_Settings->LoadDword(Game_SaveChip)),
|
||||||
|
@ -57,7 +57,8 @@ CN64System::CN64System(CPlugins * Plugins, bool SavesReadOnly, bool SyncSystem)
|
||||||
m_thread(NULL),
|
m_thread(NULL),
|
||||||
m_hPauseEvent(true),
|
m_hPauseEvent(true),
|
||||||
m_CheatsSlectionChanged(false),
|
m_CheatsSlectionChanged(false),
|
||||||
m_SyncCpu(SyncSystem)
|
m_SyncCpu(SyncSystem),
|
||||||
|
m_Random(randomizer_seed)
|
||||||
{
|
{
|
||||||
WriteTrace(TraceN64System, TraceDebug, "Start");
|
WriteTrace(TraceN64System, TraceDebug, "Start");
|
||||||
memset(m_LastSuccessSyncPC, 0, sizeof(m_LastSuccessSyncPC));
|
memset(m_LastSuccessSyncPC, 0, sizeof(m_LastSuccessSyncPC));
|
||||||
|
@ -110,7 +111,7 @@ CN64System::CN64System(CPlugins * Plugins, bool SavesReadOnly, bool SyncSystem)
|
||||||
g_Plugins->CopyPlugins(g_Settings->LoadStringVal(Directory_PluginSync));
|
g_Plugins->CopyPlugins(g_Settings->LoadStringVal(Directory_PluginSync));
|
||||||
m_SyncPlugins = new CPlugins(Directory_PluginSync, true);
|
m_SyncPlugins = new CPlugins(Directory_PluginSync, true);
|
||||||
m_SyncPlugins->SetRenderWindows(g_Plugins->SyncWindow(), NULL);
|
m_SyncPlugins->SetRenderWindows(g_Plugins->SyncWindow(), NULL);
|
||||||
m_SyncCPU = new CN64System(m_SyncPlugins, true, true);
|
m_SyncCPU = new CN64System(m_SyncPlugins, randomizer_seed, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
Reset(true, true);
|
Reset(true, true);
|
||||||
|
@ -359,7 +360,7 @@ bool CN64System::RunFileImage(const char * FileLoc)
|
||||||
void CN64System::RunLoadedImage(void)
|
void CN64System::RunLoadedImage(void)
|
||||||
{
|
{
|
||||||
WriteTrace(TraceN64System, TraceDebug, "Start");
|
WriteTrace(TraceN64System, TraceDebug, "Start");
|
||||||
g_BaseSystem = new CN64System(g_Plugins, false, false);
|
g_BaseSystem = new CN64System(g_Plugins, (uint32_t)time(NULL), false, false);
|
||||||
if (g_BaseSystem)
|
if (g_BaseSystem)
|
||||||
{
|
{
|
||||||
g_BaseSystem->StartEmulation(true);
|
g_BaseSystem->StartEmulation(true);
|
||||||
|
@ -717,6 +718,7 @@ void CN64System::Reset(bool bInitReg, bool ClearMenory)
|
||||||
m_SyncCPU->Reset(bInitReg, ClearMenory);
|
m_SyncCPU->Reset(bInitReg, ClearMenory);
|
||||||
}
|
}
|
||||||
g_Settings->SaveBool(GameRunning_InReset, true);
|
g_Settings->SaveBool(GameRunning_InReset, true);
|
||||||
|
|
||||||
WriteTrace(TraceN64System, TraceDebug, "Done");
|
WriteTrace(TraceN64System, TraceDebug, "Done");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -764,6 +766,7 @@ bool CN64System::SetActiveSystem(bool bActive)
|
||||||
R4300iOp::m_TestTimer = m_TestTimer;
|
R4300iOp::m_TestTimer = m_TestTimer;
|
||||||
R4300iOp::m_NextInstruction = m_NextInstruction;
|
R4300iOp::m_NextInstruction = m_NextInstruction;
|
||||||
R4300iOp::m_JumpToLocation = m_JumpToLocation;
|
R4300iOp::m_JumpToLocation = m_JumpToLocation;
|
||||||
|
g_Random = &m_Random;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -783,6 +786,7 @@ bool CN64System::SetActiveSystem(bool bActive)
|
||||||
g_Plugins = m_Plugins;
|
g_Plugins = m_Plugins;
|
||||||
g_TLBLoadAddress = NULL;
|
g_TLBLoadAddress = NULL;
|
||||||
g_TLBStoreAddress = NULL;
|
g_TLBStoreAddress = NULL;
|
||||||
|
g_Random = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <Common/Random.h>
|
||||||
#include <Common/SyncEvent.h>
|
#include <Common/SyncEvent.h>
|
||||||
#include <Common/Thread.h>
|
#include <Common/Thread.h>
|
||||||
#include <Project64-core/Settings/N64SystemSettings.h>
|
#include <Project64-core/Settings/N64SystemSettings.h>
|
||||||
|
@ -48,7 +49,7 @@ class CN64System :
|
||||||
protected CDebugSettings
|
protected CDebugSettings
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CN64System(CPlugins * Plugins, bool SavesReadOnly, bool SyncSystem);
|
CN64System(CPlugins * Plugins, uint32_t randomizer_seed, bool SavesReadOnly, bool SyncSystem);
|
||||||
virtual ~CN64System(void);
|
virtual ~CN64System(void);
|
||||||
|
|
||||||
CCheats m_Cheats;
|
CCheats m_Cheats;
|
||||||
|
@ -163,6 +164,7 @@ private:
|
||||||
uint32_t m_SyncCount;
|
uint32_t m_SyncCount;
|
||||||
bool m_SyncCpu;
|
bool m_SyncCpu;
|
||||||
bool m_CheatsSlectionChanged;
|
bool m_CheatsSlectionChanged;
|
||||||
|
CRandom m_Random;
|
||||||
|
|
||||||
//When Syncing cores this is the PC where it last Sync'ed correctly
|
//When Syncing cores this is the PC where it last Sync'ed correctly
|
||||||
uint32_t m_LastSuccessSyncPC[10];
|
uint32_t m_LastSuccessSyncPC[10];
|
||||||
|
|
|
@ -32,5 +32,6 @@ uint32_t * g_TLBStoreAddress = NULL;
|
||||||
CDebugger * g_Debugger = NULL;
|
CDebugger * g_Debugger = NULL;
|
||||||
uint8_t ** g_RecompPos = NULL;
|
uint8_t ** g_RecompPos = NULL;
|
||||||
CMempak * g_Mempak = NULL;
|
CMempak * g_Mempak = NULL;
|
||||||
|
CRandom * g_Random = NULL;
|
||||||
|
|
||||||
int * g_NextTimer;
|
int * g_NextTimer;
|
|
@ -63,3 +63,6 @@ extern uint8_t ** g_RecompPos;
|
||||||
|
|
||||||
class CMempak;
|
class CMempak;
|
||||||
extern CMempak * g_Mempak;
|
extern CMempak * g_Mempak;
|
||||||
|
|
||||||
|
class CRandom;
|
||||||
|
extern CRandom * g_Random;
|
||||||
|
|
|
@ -31,6 +31,8 @@ CToolTipDialog<CDebugCommandsView>()
|
||||||
m_StartAddress = 0x80000000;
|
m_StartAddress = 0x80000000;
|
||||||
m_Breakpoints = m_Debugger->Breakpoints();
|
m_Breakpoints = m_Debugger->Breakpoints();
|
||||||
m_bEditing = false;
|
m_bEditing = false;
|
||||||
|
m_CommandListRows = 39;
|
||||||
|
m_RowHeight = 13;
|
||||||
}
|
}
|
||||||
|
|
||||||
CDebugCommandsView::~CDebugCommandsView(void)
|
CDebugCommandsView::~CDebugCommandsView(void)
|
||||||
|
@ -57,8 +59,6 @@ LRESULT CDebugCommandsView::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARA
|
||||||
DlgResize_Init(false, true);
|
DlgResize_Init(false, true);
|
||||||
DlgToolTip_Init();
|
DlgToolTip_Init();
|
||||||
|
|
||||||
m_CommandListRows = 39;
|
|
||||||
|
|
||||||
CheckCPUType();
|
CheckCPUType();
|
||||||
|
|
||||||
GetWindowRect(&m_DefaultWindowRect);
|
GetWindowRect(&m_DefaultWindowRect);
|
||||||
|
@ -871,7 +871,19 @@ LRESULT CDebugCommandsView::OnMeasureItem(UINT uMsg, WPARAM wParam, LPARAM lPara
|
||||||
if (wParam == IDC_CMD_LIST)
|
if (wParam == IDC_CMD_LIST)
|
||||||
{
|
{
|
||||||
MEASUREITEMSTRUCT* lpMeasureItem = (MEASUREITEMSTRUCT*)lParam;
|
MEASUREITEMSTRUCT* lpMeasureItem = (MEASUREITEMSTRUCT*)lParam;
|
||||||
lpMeasureItem->itemHeight = CCommandList::ROW_HEIGHT;
|
HWND hCmdList = GetDlgItem(IDC_CMD_LIST);
|
||||||
|
HWND hHeader = ListView_GetHeader(hCmdList);
|
||||||
|
RECT header_rc = { 0 }, control_rc = { 0 };
|
||||||
|
if (::GetClientRect(hHeader, &header_rc) && GetClientRect(&control_rc))
|
||||||
|
{
|
||||||
|
int height = (control_rc.bottom - control_rc.top) - (header_rc.bottom - header_rc.top);
|
||||||
|
m_RowHeight = height / m_CommandListRows;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_RowHeight = 13;
|
||||||
|
}
|
||||||
|
lpMeasureItem->itemHeight = m_RowHeight;
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -928,8 +940,8 @@ void CDebugCommandsView::DrawBranchArrows(HDC listDC)
|
||||||
int begX = baseX - arrow.startMargin * 3;
|
int begX = baseX - arrow.startMargin * 3;
|
||||||
int endX = baseX - arrow.endMargin * 3;
|
int endX = baseX - arrow.endMargin * 3;
|
||||||
|
|
||||||
int begY = baseY + arrow.startPos * CCommandList::ROW_HEIGHT;
|
int begY = baseY + arrow.startPos * m_RowHeight;
|
||||||
int endY = baseY + arrow.endPos * CCommandList::ROW_HEIGHT;
|
int endY = baseY + arrow.endPos * m_RowHeight;
|
||||||
|
|
||||||
bool bEndVisible = true;
|
bool bEndVisible = true;
|
||||||
|
|
||||||
|
@ -1405,7 +1417,7 @@ LRESULT CDebugCommandsView::OnSizing(UINT uMsg, WPARAM wParam, LPARAM lParam, BO
|
||||||
|
|
||||||
int rowsHeight = listRect.Height() - headRect.Height();
|
int rowsHeight = listRect.Height() - headRect.Height();
|
||||||
|
|
||||||
int nRows = (rowsHeight / CCommandList::ROW_HEIGHT);
|
int nRows = (rowsHeight / m_RowHeight);
|
||||||
|
|
||||||
if (m_CommandListRows != nRows)
|
if (m_CommandListRows != nRows)
|
||||||
{
|
{
|
||||||
|
|
|
@ -29,10 +29,6 @@ public:
|
||||||
COL_SYMBOL
|
COL_SYMBOL
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
|
||||||
ROW_HEIGHT = 13,
|
|
||||||
};
|
|
||||||
|
|
||||||
void Attach(HWND hWndNew)
|
void Attach(HWND hWndNew)
|
||||||
{
|
{
|
||||||
CListViewCtrl::Attach(hWndNew);
|
CListViewCtrl::Attach(hWndNew);
|
||||||
|
@ -143,6 +139,7 @@ private:
|
||||||
OPCODE& m_SelectedOpCode = m_SelectedOpInfo.m_OpCode;
|
OPCODE& m_SelectedOpCode = m_SelectedOpInfo.m_OpCode;
|
||||||
|
|
||||||
uint32_t m_FollowAddress;
|
uint32_t m_FollowAddress;
|
||||||
|
uint32_t m_RowHeight;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint32_t address;
|
uint32_t address;
|
||||||
|
|
|
@ -19,14 +19,6 @@ bool CRegisterTabs::m_bColorsEnabled = false;
|
||||||
void CRegisterTabs::Attach(HWND hWndNew)
|
void CRegisterTabs::Attach(HWND hWndNew)
|
||||||
{
|
{
|
||||||
CTabCtrl::Attach(hWndNew);
|
CTabCtrl::Attach(hWndNew);
|
||||||
LOGFONT lf;
|
|
||||||
GetObject((HFONT)GetCurrentObject(GetDC(), OBJ_FONT), sizeof(LOGFONT), &lf);
|
|
||||||
|
|
||||||
HFONT monoFont = CreateFont(lf.lfHeight * -1, 0, 0, 0,
|
|
||||||
FW_DONTCARE, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
|
|
||||||
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
|
|
||||||
CLEARTYPE_QUALITY, FF_DONTCARE, "Consolas"
|
|
||||||
);
|
|
||||||
|
|
||||||
m_GPRTab = AddTab("GPR", IDD_Debugger_RegGPR, TabProcGPR);
|
m_GPRTab = AddTab("GPR", IDD_Debugger_RegGPR, TabProcGPR);
|
||||||
m_FPRTab = AddTab("FPR", IDD_Debugger_RegFPR, TabProcFPR);
|
m_FPRTab = AddTab("FPR", IDD_Debugger_RegFPR, TabProcFPR);
|
||||||
|
@ -42,36 +34,36 @@ void CRegisterTabs::Attach(HWND hWndNew)
|
||||||
m_SITab = AddTab("SI", IDD_Debugger_RegSI, TabProcDefault);
|
m_SITab = AddTab("SI", IDD_Debugger_RegSI, TabProcDefault);
|
||||||
m_DDTab = AddTab("DD", IDD_Debugger_RegDD, TabProcDefault);
|
m_DDTab = AddTab("DD", IDD_Debugger_RegDD, TabProcDefault);
|
||||||
|
|
||||||
InitRegisterEdits64(m_GPRTab, m_GPREdits, GPREditIds, monoFont);
|
InitRegisterEdits64(m_GPRTab, m_GPREdits, GPREditIds);
|
||||||
InitRegisterEdit64(m_GPRTab, m_HIEdit, IDC_HI_EDIT, monoFont);
|
InitRegisterEdit64(m_GPRTab, m_HIEdit, IDC_HI_EDIT);
|
||||||
InitRegisterEdit64(m_GPRTab, m_LOEdit, IDC_LO_EDIT, monoFont);
|
InitRegisterEdit64(m_GPRTab, m_LOEdit, IDC_LO_EDIT);
|
||||||
|
|
||||||
InitRegisterEdits(m_FPRTab, m_FPREdits, FPREditIds, monoFont);
|
InitRegisterEdits(m_FPRTab, m_FPREdits, FPREditIds);
|
||||||
InitRegisterEdit(m_FPRTab, m_FCSREdit, IDC_FCSR_EDIT, monoFont);
|
InitRegisterEdit(m_FPRTab, m_FCSREdit, IDC_FCSR_EDIT);
|
||||||
|
|
||||||
InitRegisterEdits(m_COP0Tab, m_COP0Edits, COP0EditIds, monoFont);
|
InitRegisterEdits(m_COP0Tab, m_COP0Edits, COP0EditIds);
|
||||||
m_CauseTip.Attach(m_COP0Tab.GetDlgItem(IDC_CAUSE_TIP));
|
m_CauseTip.Attach(m_COP0Tab.GetDlgItem(IDC_CAUSE_TIP));
|
||||||
|
|
||||||
InitRegisterEdits(m_RDRAMTab, m_RDRAMEdits, RDRAMEditIds, monoFont);
|
InitRegisterEdits(m_RDRAMTab, m_RDRAMEdits, RDRAMEditIds);
|
||||||
|
|
||||||
InitRegisterEdits(m_SPTab, m_SPEdits, SPEditIds, monoFont);
|
InitRegisterEdits(m_SPTab, m_SPEdits, SPEditIds);
|
||||||
InitRegisterEdit(m_SPTab, m_SPPCEdit, IDC_SP_PC_EDIT, monoFont);
|
InitRegisterEdit(m_SPTab, m_SPPCEdit, IDC_SP_PC_EDIT);
|
||||||
|
|
||||||
InitRegisterEdits(m_DPCTab, m_DPCEdits, DPCEditIds, monoFont);
|
InitRegisterEdits(m_DPCTab, m_DPCEdits, DPCEditIds);
|
||||||
|
|
||||||
InitRegisterEdits(m_MITab, m_MIEdits, MIEditIds, monoFont);
|
InitRegisterEdits(m_MITab, m_MIEdits, MIEditIds);
|
||||||
|
|
||||||
InitRegisterEdits(m_VITab, m_VIEdits, VIEditIds, monoFont);
|
InitRegisterEdits(m_VITab, m_VIEdits, VIEditIds);
|
||||||
|
|
||||||
InitRegisterEdits(m_AITab, m_AIEdits, AIEditIds, monoFont);
|
InitRegisterEdits(m_AITab, m_AIEdits, AIEditIds);
|
||||||
|
|
||||||
InitRegisterEdits(m_PITab, m_PIEdits, PIEditIds, monoFont);
|
InitRegisterEdits(m_PITab, m_PIEdits, PIEditIds);
|
||||||
|
|
||||||
InitRegisterEdits(m_RITab, m_RIEdits, RIEditIds, monoFont);
|
InitRegisterEdits(m_RITab, m_RIEdits, RIEditIds);
|
||||||
|
|
||||||
InitRegisterEdits(m_SITab, m_SIEdits, SIEditIds, monoFont);
|
InitRegisterEdits(m_SITab, m_SIEdits, SIEditIds);
|
||||||
|
|
||||||
InitRegisterEdits(m_DDTab, m_DDEdits, DDEditIds, monoFont);
|
InitRegisterEdits(m_DDTab, m_DDEdits, DDEditIds);
|
||||||
|
|
||||||
SetColorsEnabled(false);
|
SetColorsEnabled(false);
|
||||||
RefreshEdits();
|
RefreshEdits();
|
||||||
|
@ -668,32 +660,30 @@ void CRegisterTabs::SetColorsEnabled(bool bColorsEnabled)
|
||||||
m_bColorsEnabled = bColorsEnabled;
|
m_bColorsEnabled = bColorsEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRegisterTabs::InitRegisterEdit(CWindow& tab, CEditNumber& edit, WORD ctrlId, HFONT font)
|
void CRegisterTabs::InitRegisterEdit(CWindow& tab, CEditNumber& edit, WORD ctrlId)
|
||||||
{
|
{
|
||||||
edit.Attach(tab.GetDlgItem(ctrlId));
|
edit.Attach(tab.GetDlgItem(ctrlId));
|
||||||
edit.SetDisplayType(CEditNumber::DisplayHex);
|
edit.SetDisplayType(CEditNumber::DisplayHex);
|
||||||
edit.SetFont(font);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRegisterTabs::InitRegisterEdits(CWindow& tab, CEditNumber* edits, const DWORD* ctrlIds, HFONT font)
|
void CRegisterTabs::InitRegisterEdits(CWindow& tab, CEditNumber* edits, const DWORD* ctrlIds)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < ctrlIds[i] != 0; i++)
|
for (int i = 0; i < ctrlIds[i] != 0; i++)
|
||||||
{
|
{
|
||||||
InitRegisterEdit(tab, edits[i], ctrlIds[i], font);
|
InitRegisterEdit(tab, edits[i], ctrlIds[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRegisterTabs::InitRegisterEdit64(CWindow& tab, CEditReg64& edit, WORD ctrlId, HFONT font)
|
void CRegisterTabs::InitRegisterEdit64(CWindow& tab, CEditReg64& edit, WORD ctrlId)
|
||||||
{
|
{
|
||||||
edit.Attach(tab.GetDlgItem(ctrlId));
|
edit.Attach(tab.GetDlgItem(ctrlId));
|
||||||
edit.SetFont(font);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRegisterTabs::InitRegisterEdits64(CWindow& tab, CEditReg64* edits, const DWORD* ctrlIds, HFONT font)
|
void CRegisterTabs::InitRegisterEdits64(CWindow& tab, CEditReg64* edits, const DWORD* ctrlIds)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < ctrlIds[i] != 0; i++)
|
for (int i = 0; i < ctrlIds[i] != 0; i++)
|
||||||
{
|
{
|
||||||
InitRegisterEdit64(tab, edits[i], ctrlIds[i], font);
|
InitRegisterEdit64(tab, edits[i], ctrlIds[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -261,10 +261,10 @@ private:
|
||||||
static INT_PTR CALLBACK TabProcGPR(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
|
static INT_PTR CALLBACK TabProcGPR(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
static INT_PTR CALLBACK TabProcFPR(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
|
static INT_PTR CALLBACK TabProcFPR(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
static void InitRegisterEdit(CWindow& tab, CEditNumber& edit, WORD ctrlId, HFONT font);
|
static void InitRegisterEdit(CWindow& tab, CEditNumber& edit, WORD ctrlId);
|
||||||
static void InitRegisterEdits(CWindow& tab, CEditNumber* edits, const DWORD* ctrlIds, HFONT font);
|
static void InitRegisterEdits(CWindow& tab, CEditNumber* edits, const DWORD* ctrlIds);
|
||||||
static void InitRegisterEdit64(CWindow& tab, CEditReg64& edit, WORD ctrlId, HFONT font);
|
static void InitRegisterEdit64(CWindow& tab, CEditReg64& edit, WORD ctrlId);
|
||||||
static void InitRegisterEdits64(CWindow& tab, CEditReg64* edits, const DWORD* ctrlIds, HFONT font);
|
static void InitRegisterEdits64(CWindow& tab, CEditReg64* edits, const DWORD* ctrlIds);
|
||||||
static void ZeroRegisterEdit(CEditNumber& edit);
|
static void ZeroRegisterEdit(CEditNumber& edit);
|
||||||
static void ZeroRegisterEdits(CEditNumber* edits, const DWORD* ctrlIds);
|
static void ZeroRegisterEdits(CEditNumber* edits, const DWORD* ctrlIds);
|
||||||
static void ZeroRegisterEdit64(CEditReg64& edit);
|
static void ZeroRegisterEdit64(CEditReg64& edit);
|
||||||
|
|
Loading…
Reference in New Issue