try to fix backup memory in movie mode which was pretty much completely broken
This commit is contained in:
parent
522bbb7cec
commit
5e3b0bb527
|
@ -969,8 +969,15 @@ void MMU_Reset()
|
||||||
//HACK!!!
|
//HACK!!!
|
||||||
//until we improve all our session tracking stuff, we need to save the backup memory filename
|
//until we improve all our session tracking stuff, we need to save the backup memory filename
|
||||||
std::string bleh = MMU_new.backupDevice.filename;
|
std::string bleh = MMU_new.backupDevice.filename;
|
||||||
new(&MMU_new) MMU_struct_new;
|
BackupDevice tempBackupDevice;
|
||||||
MMU_new.backupDevice.load_rom(bleh.c_str());
|
bool bleh2 = MMU_new.backupDevice.isMovieMode;
|
||||||
|
if(bleh2) tempBackupDevice = MMU_new.backupDevice;
|
||||||
|
reconstruct(&MMU_new);
|
||||||
|
if(bleh2) {
|
||||||
|
MMU_new.backupDevice = tempBackupDevice;
|
||||||
|
MMU_new.backupDevice.reset_hardware();
|
||||||
|
}
|
||||||
|
else MMU_new.backupDevice.load_rom(bleh.c_str());
|
||||||
|
|
||||||
MMU_timing.arm7codeFetch.Reset();
|
MMU_timing.arm7codeFetch.Reset();
|
||||||
MMU_timing.arm7dataFetch.Reset();
|
MMU_timing.arm7dataFetch.Reset();
|
||||||
|
|
|
@ -339,18 +339,23 @@ void BackupDevice::movie_mode()
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BackupDevice::reset()
|
void BackupDevice::reset_hardware()
|
||||||
{
|
{
|
||||||
|
write_enable = FALSE;
|
||||||
com = 0;
|
com = 0;
|
||||||
addr = addr_counter = 0;
|
addr = addr_counter = 0;
|
||||||
flushPending = false;
|
|
||||||
lazyFlushPending = false;
|
|
||||||
data.resize(0);
|
|
||||||
write_enable = FALSE;
|
|
||||||
data_autodetect.resize(0);
|
|
||||||
motionInitState = MOTION_INIT_STATE_IDLE;
|
motionInitState = MOTION_INIT_STATE_IDLE;
|
||||||
motionFlag = MOTION_FLAG_NONE;
|
motionFlag = MOTION_FLAG_NONE;
|
||||||
state = DETECTING;
|
state = DETECTING;
|
||||||
|
flushPending = false;
|
||||||
|
lazyFlushPending = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BackupDevice::reset()
|
||||||
|
{
|
||||||
|
reset_hardware();
|
||||||
|
data.resize(0);
|
||||||
|
data_autodetect.resize(0);
|
||||||
addr_size = 0;
|
addr_size = 0;
|
||||||
loadfile();
|
loadfile();
|
||||||
|
|
||||||
|
|
|
@ -82,6 +82,7 @@ public:
|
||||||
|
|
||||||
void reset();
|
void reset();
|
||||||
void close_rom();
|
void close_rom();
|
||||||
|
void reset_hardware();
|
||||||
|
|
||||||
bool save_state(EMUFILE* os);
|
bool save_state(EMUFILE* os);
|
||||||
bool load_state(EMUFILE* is);
|
bool load_state(EMUFILE* is);
|
||||||
|
@ -120,13 +121,13 @@ public:
|
||||||
|
|
||||||
public: //SHOULD BE PRIVATE!!!!!!!!
|
public: //SHOULD BE PRIVATE!!!!!!!!
|
||||||
std::string filename;
|
std::string filename;
|
||||||
|
bool isMovieMode;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool write_enable; //is write enabled?
|
bool write_enable; //is write enabled?
|
||||||
u32 com; //persistent command actually handled
|
u32 com; //persistent command actually handled
|
||||||
u32 addr_size, addr_counter;
|
u32 addr_size, addr_counter;
|
||||||
u32 addr;
|
u32 addr;
|
||||||
bool isMovieMode;
|
|
||||||
|
|
||||||
std::vector<u8> data;
|
std::vector<u8> data;
|
||||||
std::vector<u8> data_autodetect;
|
std::vector<u8> data_autodetect;
|
||||||
|
|
|
@ -3779,7 +3779,7 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
|
||||||
DesEnableMenuItem(mainMenu, IDM_FILE_RECORDAVI, romloaded);
|
DesEnableMenuItem(mainMenu, IDM_FILE_RECORDAVI, romloaded);
|
||||||
DesEnableMenuItem(mainMenu, IDM_FILE_RECORDWAV, romloaded);
|
DesEnableMenuItem(mainMenu, IDM_FILE_RECORDWAV, romloaded);
|
||||||
DesEnableMenuItem(mainMenu, IDM_EJECTCARD, romloaded && movieMode == MOVIEMODE_INACTIVE);
|
DesEnableMenuItem(mainMenu, IDM_EJECTCARD, romloaded && movieMode == MOVIEMODE_INACTIVE);
|
||||||
DesEnableMenuItem(mainMenu, IDM_RESET, romloaded && movieMode != MOVIEMODE_PLAY);
|
DesEnableMenuItem(mainMenu, IDM_RESET, romloaded && !(movieMode == MOVIEMODE_PLAY && movie_readonly));
|
||||||
DesEnableMenuItem(mainMenu, IDM_CLOSEROM, romloaded);
|
DesEnableMenuItem(mainMenu, IDM_CLOSEROM, romloaded);
|
||||||
DesEnableMenuItem(mainMenu, IDM_SHUT_UP, romloaded);
|
DesEnableMenuItem(mainMenu, IDM_SHUT_UP, romloaded);
|
||||||
DesEnableMenuItem(mainMenu, IDM_CHEATS_LIST, romloaded);
|
DesEnableMenuItem(mainMenu, IDM_CHEATS_LIST, romloaded);
|
||||||
|
@ -6059,7 +6059,7 @@ static LRESULT CALLBACK SoundSettingsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam
|
||||||
|
|
||||||
void ResetGame()
|
void ResetGame()
|
||||||
{
|
{
|
||||||
if(movieMode != MOVIEMODE_PLAY)
|
if(!(movieMode == MOVIEMODE_PLAY && movie_readonly))
|
||||||
{
|
{
|
||||||
NDS_Reset();
|
NDS_Reset();
|
||||||
if(movieMode == MOVIEMODE_INACTIVE && !emu_paused)
|
if(movieMode == MOVIEMODE_INACTIVE && !emu_paused)
|
||||||
|
|
Loading…
Reference in New Issue