- fixed a bug in MatrixStackInit
- fixed various other savestated variables not getting cleared on reset - fixed game staying frozen after loading a savestate after the game crashes - added emu.reset Lua function - removed a few unused values from savestates
This commit is contained in:
parent
1a7bb26c39
commit
7e1c184144
|
@ -891,8 +891,8 @@ void MMU_DeInit(void) {
|
|||
|
||||
u32 rom_mask = 0;
|
||||
|
||||
u32 DMASrc[2][4] = {{0, 0, 0, 0}, {0, 0, 0, 0}};
|
||||
u32 DMADst[2][4] = {{0, 0, 0, 0}, {0, 0, 0, 0}};
|
||||
//u32 DMASrc[2][4] = {{0, 0, 0, 0}, {0, 0, 0, 0}};
|
||||
//u32 DMADst[2][4] = {{0, 0, 0, 0}, {0, 0, 0, 0}};
|
||||
|
||||
void MMU_Reset()
|
||||
{
|
||||
|
@ -938,6 +938,17 @@ void MMU_Reset()
|
|||
|
||||
memset(MMU.dscard, 0, sizeof(nds_dscard) * 2);
|
||||
|
||||
MMU.divRunning = 0;
|
||||
MMU.divResult = 0;
|
||||
MMU.divMod = 0;
|
||||
MMU.divCnt = 0;
|
||||
MMU.divCycles = 0;
|
||||
|
||||
MMU.sqrtRunning = 0;
|
||||
MMU.sqrtResult = 0;
|
||||
MMU.sqrtCnt = 0;
|
||||
MMU.sqrtCycles = 0;
|
||||
|
||||
MMU.SPI_CNT = 0;
|
||||
MMU.AUX_SPI_CNT = 0;
|
||||
|
||||
|
|
|
@ -353,8 +353,8 @@ struct MMU_struct
|
|||
memory_chip_t fw;
|
||||
|
||||
nds_dscard dscard[2];
|
||||
u32 CheckTimers;
|
||||
u32 CheckDMAs;
|
||||
//u32 CheckTimers;
|
||||
//u32 CheckDMAs;
|
||||
};
|
||||
|
||||
//this contains things which can't be memzeroed because they are smarter classes
|
||||
|
|
|
@ -533,9 +533,7 @@ int NDS_Init( void) {
|
|||
if (SPU_Init(SNDCORE_DUMMY, 740) != 0)
|
||||
return -1;
|
||||
|
||||
#ifdef EXPERIMENTAL_WIFI
|
||||
WIFI_Init() ;
|
||||
#endif
|
||||
|
||||
nds.FW_ARM9BootCode = NULL;
|
||||
nds.FW_ARM7BootCode = NULL;
|
||||
|
@ -2392,6 +2390,8 @@ void execHardware_interrupts()
|
|||
}
|
||||
}
|
||||
|
||||
static void resetUserInput();
|
||||
|
||||
bool _HACK_DONT_STOPMOVIE = false;
|
||||
void NDS_Reset()
|
||||
{
|
||||
|
@ -2576,6 +2576,8 @@ void NDS_Reset()
|
|||
LidClosed = FALSE;
|
||||
countLid = 0;
|
||||
|
||||
resetUserInput();
|
||||
|
||||
/*
|
||||
* Setup a copy of the firmware user settings in memory.
|
||||
* (this is what the DS firmware would do).
|
||||
|
@ -2624,9 +2626,7 @@ void NDS_Reset()
|
|||
gpu3D->NDS_3D_Reset();
|
||||
SPU_Reset();
|
||||
|
||||
#ifdef EXPERIMENTAL_WIFI
|
||||
WIFI_Reset();
|
||||
#endif
|
||||
|
||||
memcpy(FW_Mac, (MMU.fw.data + 0x36), 6);
|
||||
|
||||
|
@ -2725,6 +2725,10 @@ static bool loadUserInput(EMUFILE* is, UserInput& input, int version)
|
|||
read32le(&input.mic.micButtonPressed, is);
|
||||
return true;
|
||||
}
|
||||
static void resetUserInput(UserInput& input)
|
||||
{
|
||||
memset(&input, 0, sizeof(UserInput));
|
||||
}
|
||||
// (userinput is kind of a misnomer, e.g. finalUserInput has to mirror nds.pad, nds.touchX, etc.)
|
||||
static void saveUserInput(EMUFILE* os)
|
||||
{
|
||||
|
@ -2744,6 +2748,11 @@ static bool loadUserInput(EMUFILE* is, int version)
|
|||
read32le((u32*)&TurboTime.array[i], is);
|
||||
return rv;
|
||||
}
|
||||
static void resetUserInput()
|
||||
{
|
||||
resetUserInput(finalUserInput);
|
||||
resetUserInput(intermediateUserInput);
|
||||
}
|
||||
|
||||
static inline void gotInputRequest()
|
||||
{
|
||||
|
|
|
@ -342,7 +342,7 @@ static u8 MM3x3ind = 0;
|
|||
// Data for vertex submission
|
||||
static CACHE_ALIGN float coord[4] = {0.0, 0.0, 0.0, 0.0};
|
||||
static char coordind = 0;
|
||||
static u32 vtxFormat;
|
||||
static u32 vtxFormat = 0;
|
||||
static BOOL inBegin = FALSE;
|
||||
|
||||
// Data for basic transforms
|
||||
|
@ -350,7 +350,7 @@ static CACHE_ALIGN float trans[4] = {0.0, 0.0, 0.0, 0.0};
|
|||
static int transind = 0;
|
||||
static CACHE_ALIGN float scale[4] = {0.0, 0.0, 0.0, 0.0};
|
||||
static int scaleind = 0;
|
||||
static u32 viewport;
|
||||
static u32 viewport = 0;
|
||||
|
||||
//various other registers
|
||||
static float _t=0, _s=0;
|
||||
|
@ -514,6 +514,24 @@ void gfx3d_reset()
|
|||
gfx3d.polylist = polylist;
|
||||
gfx3d.vertlist = vertlist;
|
||||
|
||||
polyAttr = 0;
|
||||
textureFormat = 0;
|
||||
texturePalette = 0;
|
||||
polyAttrPending = 0;
|
||||
mode = 0;
|
||||
memset(coord, 0, sizeof(coord));
|
||||
coordind = 0;
|
||||
vtxFormat = 0;
|
||||
memset(trans, 0, sizeof(trans));
|
||||
transind = 0;
|
||||
memset(scale, 0, sizeof(scale));
|
||||
scaleind = 0;
|
||||
viewport = 0;
|
||||
memset(gxPIPE.cmd, 0, sizeof(gxPIPE.cmd));
|
||||
memset(gxPIPE.param, 0, sizeof(gxPIPE.param));
|
||||
memset(colorRGB, 0, sizeof(colorRGB));
|
||||
memset(&tempVertInfo, 0, sizeof(tempVertInfo));
|
||||
|
||||
MatrixInit (mtxCurrent[0]);
|
||||
MatrixInit (mtxCurrent[1]);
|
||||
MatrixInit (mtxCurrent[2]);
|
||||
|
|
|
@ -3307,6 +3307,15 @@ DEFINE_LUA_FUNCTION(emu_openscript, "filename")
|
|||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_LUA_FUNCTION(emu_reset, "")
|
||||
{
|
||||
extern bool _HACK_DONT_STOPMOVIE;
|
||||
_HACK_DONT_STOPMOVIE = true;
|
||||
NDS_Reset();
|
||||
_HACK_DONT_STOPMOVIE = false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// TODO
|
||||
/*
|
||||
DEFINE_LUA_FUNCTION(emu_loadrom, "filename")
|
||||
|
@ -4051,6 +4060,7 @@ static const struct luaL_reg emulib [] =
|
|||
{"print", print}, // sure, why not
|
||||
{"openscript", emu_openscript},
|
||||
// {"loadrom", emu_loadrom},
|
||||
{"reset", emu_reset},
|
||||
// alternative names
|
||||
// {"openrom", emu_loadrom},
|
||||
{NULL, NULL}
|
||||
|
|
|
@ -185,7 +185,7 @@ void MatrixStackInit(MatrixStack *stack)
|
|||
{
|
||||
for (int i = 0; i < stack->size; i++)
|
||||
{
|
||||
MatrixInit(&stack->matrix[i]);
|
||||
MatrixInit(&stack->matrix[i*16]);
|
||||
}
|
||||
stack->position = 0;
|
||||
}
|
||||
|
|
|
@ -178,8 +178,8 @@ SFORMAT SF_NDS[]={
|
|||
{ 0 }
|
||||
};
|
||||
|
||||
extern u32 DMASrc[2][4];
|
||||
extern u32 DMADst[2][4];
|
||||
//extern u32 DMASrc[2][4];
|
||||
//extern u32 DMADst[2][4];
|
||||
|
||||
SFORMAT SF_MMU[]={
|
||||
{ "M7BI", 1, sizeof(MMU.ARM7_BIOS), MMU.ARM7_BIOS},
|
||||
|
@ -212,8 +212,8 @@ SFORMAT SF_MMU[]={
|
|||
{ "MDCR", 4, 8, MMU.DMACrt},
|
||||
{ "MDMA", 4, 8, MMU.DMAing},
|
||||
{ "MDMC", 4, 8, MMU.DMACompleted},
|
||||
{ "MDSR", 4, 8, DMASrc},
|
||||
{ "MDDS", 4, 8, DMADst},
|
||||
//{ "MDSR", 4, 8, DMASrc},
|
||||
//{ "MDDS", 4, 8, DMADst},
|
||||
|
||||
{ "MDV1", 4, 1, &MMU.divRunning},
|
||||
{ "MDV2", 8, 1, &MMU.divResult},
|
||||
|
@ -239,8 +239,8 @@ SFORMAT SF_MMU[]={
|
|||
{ "MC0T", 4, 1, &MMU.dscard[0].transfer_count},
|
||||
{ "MC1A", 4, 1, &MMU.dscard[1].address},
|
||||
{ "MC1T", 4, 1, &MMU.dscard[1].transfer_count},
|
||||
{ "MCHT", 4, 1, &MMU.CheckTimers},
|
||||
{ "MCHD", 4, 1, &MMU.CheckDMAs},
|
||||
//{ "MCHT", 4, 1, &MMU.CheckTimers},
|
||||
//{ "MCHD", 4, 1, &MMU.CheckDMAs},
|
||||
|
||||
//fifos
|
||||
{ "F0TH", 1, 1, &ipc_fifo[0].head},
|
||||
|
@ -1113,6 +1113,8 @@ static void loadstate()
|
|||
// no need to restore 0x60 since control and MMU.ARM9_REG are both in the savestates, and restoring it could mess up the ack bits anyway
|
||||
|
||||
SetupMMU(nds.debugConsole);
|
||||
|
||||
execute = !driver->EMU_IsEmulationPaused();
|
||||
}
|
||||
|
||||
bool savestate_load(EMUFILE* is)
|
||||
|
|
|
@ -673,10 +673,12 @@ bool WIFI_Init()
|
|||
|
||||
WIFI_resetRF(&wifiMac.RF) ;
|
||||
wifi_netEnabled = false;
|
||||
#ifdef EXPERIMENTAL_WIFI
|
||||
if(driver->WIFI_Host_InitSystem())
|
||||
{
|
||||
wifi_netEnabled = true;
|
||||
}
|
||||
#endif
|
||||
wifiMac.powerOn = FALSE;
|
||||
wifiMac.powerOnPending = FALSE;
|
||||
|
||||
|
@ -684,7 +686,9 @@ bool WIFI_Init()
|
|||
wifiMac.rfPins = 0x0004;
|
||||
|
||||
wifiCom = wifiComs[CommonSettings.wifi.mode];
|
||||
#ifdef EXPERIMENTAL_WIFI
|
||||
wifiCom->Init();
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -700,10 +704,12 @@ void WIFI_Reset()
|
|||
|
||||
WIFI_resetRF(&wifiMac.RF) ;
|
||||
wifi_netEnabled = false;
|
||||
#ifdef EXPERIMENTAL_WIFI
|
||||
if(driver->WIFI_Host_InitSystem())
|
||||
{
|
||||
wifi_netEnabled = true;
|
||||
}
|
||||
#endif
|
||||
wifiMac.powerOn = FALSE;
|
||||
wifiMac.powerOnPending = FALSE;
|
||||
|
||||
|
@ -711,7 +717,9 @@ void WIFI_Reset()
|
|||
wifiMac.rfPins = 0x0004;
|
||||
|
||||
wifiCom = wifiComs[CommonSettings.wifi.mode];
|
||||
#ifdef EXPERIMENTAL_WIFI
|
||||
wifiCom->Reset();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue