This commit is contained in:
zilmar 2017-10-20 20:01:25 +11:00
commit e97764a2c4
12 changed files with 133 additions and 15 deletions

View File

@ -21,6 +21,7 @@ LOCAL_SRC_FILES := \
$(SRCDIR)/MemoryManagement.cpp \
$(SRCDIR)/path.cpp \
$(SRCDIR)/Platform.cpp \
$(SRCDIR)/Random.cpp \
$(SRCDIR)/StdString.cpp \
$(SRCDIR)/SyncEvent.cpp \
$(SRCDIR)/Thread.cpp \
@ -30,4 +31,4 @@ LOCAL_SRC_FILES := \
LOCAL_CFLAGS := $(COMMON_CFLAGS)
LOCAL_CPPFLAGS := $(COMMON_CPPFLAGS)
include $(BUILD_STATIC_LIBRARY)
include $(BUILD_STATIC_LIBRARY)

View File

@ -2478,6 +2478,7 @@ Status=Compatible
Good Name=Ide Yousuke no Mahjong Juku (J)
Internal Name=²ÃÞÖ³½¹ÉÏ°¼Þ¬Ý¼Þ­¸
Status=Compatible
Save Type=16kbit Eeprom
[D692CC5E-EC58D072-C:50]
Good Name=Iggy's Reckin' Balls (E)
@ -3134,7 +3135,6 @@ Internal Name=Madden NFL 2002
Status=Compatible
Counter Factor=1
RDRAM Size=8
Save Type=16kbit Eeprom
[3925D625-8C83C75E-C:50]
Good Name=Madden NFL 99 (E)
@ -4311,6 +4311,7 @@ Good Name=Pokemon Snap (A)
Internal Name=POKEMON SNAP
Status=Issues (plugin)
Plugin Note= broken; needs accurate FB emu
Counter Factor=1
Cheat0=D1382D1C 802C,80382D0F 0000 //Pass 1st Level and Controller Fix
Cheat1=D11E3C44 2881,811E3C44 2001,D11E3C46 0098,811E3C46 0001 //Make Picture selectable
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
@ -4321,6 +4322,7 @@ Good Name=Pokemon Snap (E)
Internal Name=POKEMON SNAP
Status=Issues (plugin)
Plugin Note= broken; needs accurate FB emu
Counter Factor=1
Cheat0=D1381BFC 802C,80381BEF 0000 //Pass 1st Level and Controller Fix
Cheat1=D11E3824 2881,811E3824 2001,D11E3826 0098,811E3826 0001 //Make Picture selectable
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
@ -4331,6 +4333,7 @@ Good Name=Pokemon Snap (F)
Internal Name=POKEMON SNAP
Status=Issues (plugin)
Plugin Note= broken; needs accurate FB emu
Counter Factor=1
Cheat0=D1381BFC 802C,80381BEF 0000 //Pass 1st Level and Controller Fix
Cheat1=D11E3744 2881,811E3744 2001,D11E3746 0098,811E3746 0001 //Make Picture selectable
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
@ -4341,6 +4344,7 @@ Good Name=Pokemon Snap (G)
Internal Name=POKEMON SNAP
Status=Issues (plugin)
Plugin Note= broken; needs accurate FB emu
Counter Factor=1
Cheat0=D1381BDC 802C,80381BCF 0000 //Pass 1st Level and Controller Fix
Cheat1=D11E3744 2881,811E3744 2001,D11E3746 0098,811E3746 0001 //Make Picture selectable
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
@ -4351,6 +4355,7 @@ Good Name=Pokemon Snap (I)
Internal Name=POKEMON SNAP
Status=Issues (plugin)
Plugin Note= broken; needs accurate FB emu
Counter Factor=1
Cheat0=D1381BFC 802C,80381BEF 0000 //Pass 1st Level and Controller Fix
Cheat1=D11E3994 2881,811E3994 2001,D11E3996 0098,811E3996 0001 //Make Picture selectable
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
@ -4361,6 +4366,7 @@ Good Name=Pokemon Snap (J) (V1.0)
Internal Name=POKEMON SNAP
Status=Issues (plugin)
Plugin Note= broken; needs accurate FB emu
Counter Factor=1
Cheat0=D136D22C 802A,8036D21F 0000 //Pass 1st Level and Controller Fix
Cheat1=D11E1EC4 2881,811E1EC4 2001,D11E1EC6 0098,811E1EC6 0001 //Make Picture selectable
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
@ -4371,6 +4377,7 @@ Good Name=Pokemon Snap (J) (V1.1)
Internal Name=POKEMON SNAP
Status=Issues (plugin)
Plugin Note= broken; needs accurate FB emu
Counter Factor=1
Cheat0=D136D22C 802A,8036D21F 0000 //Pass 1st Level and Controller Fix
Cheat1=D11E1EC4 2881,811E1EC4 2001,D11E1EC6 0098,811E1EC6 0001 //Make Picture selectable
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
@ -4381,6 +4388,7 @@ Good Name=Pokemon Snap (S)
Internal Name=POKEMON SNAP
Status=Issues (plugin)
Plugin Note= broken; needs accurate FB emu
Counter Factor=1
Cheat0=D1381BFC 802C,80381BEF 0000 //Pass 1st Level and Controller Fix
Cheat1=D11E38C4 2881,811E38C4 2001,D11E38C6 0098,811E38C6 0001 //Make Picture selectable
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
@ -4391,6 +4399,7 @@ Good Name=Pokemon Snap (U)
Internal Name=POKEMON SNAP
Status=Issues (plugin)
Plugin Note= broken; needs accurate FB emu
Counter Factor=1
Cheat0=D1382D1C 802C,80382D0F 0000 //Pass 1st Level and Controller Fix
Cheat1=D11E3184 2881,811E3184 2001,D11E3186 0098,811E3186 0001 //Make Picture selectable
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64
@ -4401,6 +4410,7 @@ Good Name=Pokemon Snap Station (U)
Internal Name=POKEMON SNAP
Status=Issues (plugin)
Plugin Note= broken; needs accurate FB emu
Counter Factor=1
Cheat0=D1382D1C 802C,80382D0F 0000 //Pass 1st Level and Controller Fix
Cheat1=D11E30F4 2881,811E30F4 2001,D11E30F6 0098,811E30F6 0001 //Make Picture selectable
CheatPlugin0=Jabo's Direct3D8,Glide64 For PJ64

View File

@ -43,6 +43,7 @@
<ClCompile Include="MemTest.cpp" />
<ClCompile Include="path.cpp" />
<ClCompile Include="Platform.cpp" />
<ClCompile Include="Random.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader>Create</PrecompiledHeader>
</ClCompile>
@ -64,6 +65,7 @@
<ClInclude Include="MemTest.h" />
<ClInclude Include="path.h" />
<ClInclude Include="Platform.h" />
<ClInclude Include="Random.h" />
<ClInclude Include="SmartPointer.h" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="StdString.h" />

View File

@ -62,6 +62,9 @@
<ClCompile Include="DateTimeClass.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Random.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="stdafx.h">
@ -124,5 +127,8 @@
<ClInclude Include="DateTimeClass.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Random.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

54
Source/Common/Random.cpp Normal file
View File

@ -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;
}

32
Source/Common/Random.h Normal file
View File

@ -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;
};

View File

@ -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_Reg->PI_STATUS_REG &= ~PI_STATUS_DMA_BUSY;
g_Reg->MI_INTR_REG |= MI_INTR_PI;
g_Reg->CheckInterrupts();
g_SystemTimer->SetTimer(g_SystemTimer->PiTimer, PI_WR_LEN_REG/8 + (g_Random->next() % 0x40), false);
//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));
return;

View File

@ -358,13 +358,14 @@ void CPifRam::SI_DMA_READ()
if (g_System->bDelaySI())
{
g_SystemTimer->SetTimer(CSystemTimer::SiTimer, 0x900, false);
g_SystemTimer->SetTimer(CSystemTimer::SiTimer, 0x900 + (g_Random->next() % 0x40), false);
}
else
{
g_Reg->MI_INTR_REG |= MI_INTR_SI;
g_Reg->SI_STATUS_REG |= SI_STATUS_INTERRUPT;
g_Reg->CheckInterrupts();
g_SystemTimer->SetTimer(CSystemTimer::SiTimer, g_Random->next() % 0x40, false);
//g_Reg->MI_INTR_REG |= MI_INTR_SI;
//g_Reg->SI_STATUS_REG |= SI_STATUS_INTERRUPT;
//g_Reg->CheckInterrupts();
}
}

View File

@ -30,7 +30,7 @@
#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),
m_EndEmulation(false),
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_hPauseEvent(true),
m_CheatsSlectionChanged(false),
m_SyncCpu(SyncSystem)
m_SyncCpu(SyncSystem),
m_Random(randomizer_seed)
{
WriteTrace(TraceN64System, TraceDebug, "Start");
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));
m_SyncPlugins = new CPlugins(Directory_PluginSync, true);
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);
@ -359,7 +360,7 @@ bool CN64System::RunFileImage(const char * FileLoc)
void CN64System::RunLoadedImage(void)
{
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)
{
g_BaseSystem->StartEmulation(true);
@ -716,6 +717,7 @@ void CN64System::Reset(bool bInitReg, bool ClearMenory)
m_SyncCPU->Reset(bInitReg, ClearMenory);
}
g_Settings->SaveBool(GameRunning_InReset, true);
WriteTrace(TraceN64System, TraceDebug, "Done");
}
@ -763,6 +765,7 @@ bool CN64System::SetActiveSystem(bool bActive)
R4300iOp::m_TestTimer = m_TestTimer;
R4300iOp::m_NextInstruction = m_NextInstruction;
R4300iOp::m_JumpToLocation = m_JumpToLocation;
g_Random = &m_Random;
}
else
{
@ -782,6 +785,7 @@ bool CN64System::SetActiveSystem(bool bActive)
g_Plugins = m_Plugins;
g_TLBLoadAddress = NULL;
g_TLBStoreAddress = NULL;
g_Random = NULL;
}
}

View File

@ -10,6 +10,7 @@
****************************************************************************/
#pragma once
#include <Common/Random.h>
#include <Common/SyncEvent.h>
#include <Common/Thread.h>
#include <Project64-core/Settings/N64SystemSettings.h>
@ -48,7 +49,7 @@ class CN64System :
protected CDebugSettings
{
public:
CN64System(CPlugins * Plugins, bool SavesReadOnly, bool SyncSystem);
CN64System(CPlugins * Plugins, uint32_t randomizer_seed, bool SavesReadOnly, bool SyncSystem);
virtual ~CN64System(void);
CCheats m_Cheats;
@ -164,6 +165,7 @@ private:
uint32_t m_SyncCount;
bool m_SyncCpu;
bool m_CheatsSlectionChanged;
CRandom m_Random;
//When Syncing cores this is the PC where it last Sync'ed correctly
uint32_t m_LastSuccessSyncPC[10];

View File

@ -32,5 +32,6 @@ uint32_t * g_TLBStoreAddress = NULL;
CDebugger * g_Debugger = NULL;
uint8_t ** g_RecompPos = NULL;
CMempak * g_Mempak = NULL;
CRandom * g_Random = NULL;
int * g_NextTimer;

View File

@ -62,4 +62,7 @@ extern CDebugger * g_Debugger;
extern uint8_t ** g_RecompPos;
class CMempak;
extern CMempak * g_Mempak;
extern CMempak * g_Mempak;
class CRandom;
extern CRandom * g_Random;