- remove double load/reset backup memory;
This commit is contained in:
mtabachenko 2013-10-25 22:55:50 +00:00
parent 3384b93c4a
commit c9507d2e8e
4 changed files with 41 additions and 62 deletions

View File

@ -920,7 +920,6 @@ void MMU_Init(void)
GFX_PIPEclear(); GFX_PIPEclear();
GFX_FIFOclear(); GFX_FIFOclear();
DISP_FIFOinit(); DISP_FIFOinit();
new(&MMU_new) MMU_struct_new;
mc_init(&MMU.fw, MC_TYPE_FLASH); /* init fw device */ mc_init(&MMU.fw, MC_TYPE_FLASH); /* init fw device */
mc_alloc(&MMU.fw, NDS_FW_SIZE_V1); mc_alloc(&MMU.fw, NDS_FW_SIZE_V1);
@ -1039,19 +1038,7 @@ void MMU_Reset()
MMU.dscard[1].transfer_count = 0; MMU.dscard[1].transfer_count = 0;
MMU.dscard[1].mode = eCardMode_RAW; MMU.dscard[1].mode = eCardMode_RAW;
//HACK!!!
//until we improve all our session tracking stuff, we need to save the backup memory filename
std::string bleh = MMU_new.backupDevice.getFilename();
BackupDevice tempBackupDevice;
bool bleh2 = MMU_new.backupDevice.isMovieMode;
if(bleh2) tempBackupDevice = MMU_new.backupDevice;
reconstruct(&MMU_new); 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();

View File

@ -47,8 +47,8 @@
//int xxctr=0; //int xxctr=0;
//#define LOG_ARM9 //#define LOG_ARM9
//#define LOG_ARM7 //#define LOG_ARM7
#define dolog (currFrameCounter>30) //#define dolog (currFrameCounter>30)
//bool dolog=false; bool dolog = false;
//#define LOG_TO_FILE //#define LOG_TO_FILE
//#define LOG_TO_FILE_REGS //#define LOG_TO_FILE_REGS
@ -650,11 +650,6 @@ int NDS_LoadROM(const char *filename, const char *physicalName, const char *logi
if(gameInfo.isHomebrew) if(gameInfo.isHomebrew)
DLDI::tryPatch((void*)gameInfo.romdata, gameInfo.romsize); DLDI::tryPatch((void*)gameInfo.romdata, gameInfo.romsize);
memset(buf, 0, MAX_PATH);
path.getpathnoext(path.BATTERY, buf);
strcat(buf, ".dsv"); // DeSmuME memory card :)
MMU_new.backupDevice.load_rom(buf);
if (cheats != NULL) if (cheats != NULL)
{ {
memset(buf, 0, MAX_PATH); memset(buf, 0, MAX_PATH);
@ -1912,7 +1907,8 @@ FORCEINLINE void arm9log()
#ifdef LOG_TO_FILE #ifdef LOG_TO_FILE
if (!fp_dis9) return; if (!fp_dis9) return;
#ifdef LOG_TO_FILE_REGS #ifdef LOG_TO_FILE_REGS
fprintf(fp_dis9, "\t\t;R0:%08X R1:%08X R2:%08X R3:%08X R4:%08X R5:%08X R6:%08X R7:%08X R8:%08X R9:%08X\n\t\t;R10:%08X R11:%08X R12:%08X R13:%08X R14:%08X R15:%08X| next %08X, N:%i Z:%i C:%i V:%i\n", fprintf(fp_dis9, "\t\t;%05d:%03d %12lld\n\t\t;R0:%08X R1:%08X R2:%08X R3:%08X R4:%08X R5:%08X R6:%08X R7:%08X R8:%08X R9:%08X\n\t\t;R10:%08X R11:%08X R12:%08X R13:%08X R14:%08X R15:%08X| next %08X, N:%i Z:%i C:%i V:%i\n",
currFrameCounter, nds.VCount, nds_timer,
NDS_ARM9.R[0], NDS_ARM9.R[1], NDS_ARM9.R[2], NDS_ARM9.R[3], NDS_ARM9.R[4], NDS_ARM9.R[5], NDS_ARM9.R[6], NDS_ARM9.R[7], NDS_ARM9.R[0], NDS_ARM9.R[1], NDS_ARM9.R[2], NDS_ARM9.R[3], NDS_ARM9.R[4], NDS_ARM9.R[5], NDS_ARM9.R[6], NDS_ARM9.R[7],
NDS_ARM9.R[8], NDS_ARM9.R[9], NDS_ARM9.R[10], NDS_ARM9.R[11], NDS_ARM9.R[12], NDS_ARM9.R[13], NDS_ARM9.R[14], NDS_ARM9.R[15], NDS_ARM9.R[8], NDS_ARM9.R[9], NDS_ARM9.R[10], NDS_ARM9.R[11], NDS_ARM9.R[12], NDS_ARM9.R[13], NDS_ARM9.R[14], NDS_ARM9.R[15],
NDS_ARM9.next_instruction, NDS_ARM9.CPSR.bits.N, NDS_ARM9.CPSR.bits.Z, NDS_ARM9.CPSR.bits.C, NDS_ARM9.CPSR.bits.V); NDS_ARM9.next_instruction, NDS_ARM9.CPSR.bits.N, NDS_ARM9.CPSR.bits.Z, NDS_ARM9.CPSR.bits.C, NDS_ARM9.CPSR.bits.V);
@ -1947,7 +1943,8 @@ FORCEINLINE void arm7log()
#ifdef LOG_TO_FILE #ifdef LOG_TO_FILE
if (!fp_dis7) return; if (!fp_dis7) return;
#ifdef LOG_TO_FILE_REGS #ifdef LOG_TO_FILE_REGS
fprintf(fp_dis7, "\t\t;R0:%08X R1:%08X R2:%08X R3:%08X R4:%08X R5:%08X R6:%08X R7:%08X R8:%08X R9:%08X\n\t\t;R10:%08X R11:%08X R12:%08X R13:%08X R14:%08X R15:%08X| next %08X, N:%i Z:%i C:%i V:%i\n", fprintf(fp_dis7, "\t\t;%05d:%03d %12lld\n\t\t;R0:%08X R1:%08X R2:%08X R3:%08X R4:%08X R5:%08X R6:%08X R7:%08X R8:%08X R9:%08X\n\t\t;R10:%08X R11:%08X R12:%08X R13:%08X R14:%08X R15:%08X| next %08X, N:%i Z:%i C:%i V:%i\n",
currFrameCounter, nds.VCount, nds_timer,
NDS_ARM7.R[0], NDS_ARM7.R[1], NDS_ARM7.R[2], NDS_ARM7.R[3], NDS_ARM7.R[4], NDS_ARM7.R[5], NDS_ARM7.R[6], NDS_ARM7.R[7], NDS_ARM7.R[0], NDS_ARM7.R[1], NDS_ARM7.R[2], NDS_ARM7.R[3], NDS_ARM7.R[4], NDS_ARM7.R[5], NDS_ARM7.R[6], NDS_ARM7.R[7],
NDS_ARM7.R[8], NDS_ARM7.R[9], NDS_ARM7.R[10], NDS_ARM7.R[11], NDS_ARM7.R[12], NDS_ARM7.R[13], NDS_ARM7.R[14], NDS_ARM7.R[15], NDS_ARM7.R[8], NDS_ARM7.R[9], NDS_ARM7.R[10], NDS_ARM7.R[11], NDS_ARM7.R[12], NDS_ARM7.R[13], NDS_ARM7.R[14], NDS_ARM7.R[15],
NDS_ARM7.next_instruction, NDS_ARM7.CPSR.bits.N, NDS_ARM7.CPSR.bits.Z, NDS_ARM7.CPSR.bits.C, NDS_ARM7.CPSR.bits.V); NDS_ARM7.next_instruction, NDS_ARM7.CPSR.bits.N, NDS_ARM7.CPSR.bits.Z, NDS_ARM7.CPSR.bits.C, NDS_ARM7.CPSR.bits.V);

View File

@ -26,10 +26,11 @@
#include "movie.h" #include "movie.h"
#include "readwrite.h" #include "readwrite.h"
#include "NDSSystem.h" #include "NDSSystem.h"
#include "path.h"
#include "utils/advanscene.h" #include "utils/advanscene.h"
//#define _NO_LOAD_BACKUP //#define _DONT_LOAD_BACKUP
//#define _NO_SAVE_BACKUP //#define _DONT_SAVE_BACKUP
// TODO: motion device was broken // TODO: motion device was broken
//#define _ENABLE_MOTION //#define _ENABLE_MOTION
@ -170,18 +171,12 @@ bool BackupDevice::load_state(EMUFILE* is)
BackupDevice::BackupDevice() BackupDevice::BackupDevice()
{ {
isMovieMode = false; char buf[MAX_PATH] = {0};
reset(); memset(buf, 0, MAX_PATH);
} path.getpathnoext(path.BATTERY, buf);
filename = std::string(buf) + ".dsv"; // DeSmuME memory card
//due to unfortunate shortcomings in the emulator architecture,
//at reset-time, we won't have a filename to the .dsv file.
//so the only difference between load_rom (init) and reset is that
//one of them saves the filename
void BackupDevice::load_rom(const char* filename)
{
isMovieMode = false; isMovieMode = false;
this->filename = filename;
reset(); reset();
} }
@ -289,7 +284,6 @@ void BackupDevice::detect()
//SM64 (KOR) makes it here with autodetect_size=11 and nothing interesting in the buffer //SM64 (KOR) makes it here with autodetect_size=11 and nothing interesting in the buffer
addr_size = autodetect_size & 3; addr_size = autodetect_size & 3;
if(!memcmp(gameInfo.header.gameCode,"BDE", 3)) addr_size = 2; // Dementium II if(!memcmp(gameInfo.header.gameCode,"BDE", 3)) addr_size = 2; // Dementium II
break; break;
} }
@ -417,6 +411,7 @@ u8 BackupDevice::data_command(u8 val, u8 PROCNUM)
switch (com) switch (com)
{ {
case BM_CMD_NOP: break; case BM_CMD_NOP: break;
#ifdef _ENABLE_MOTION #ifdef _ENABLE_MOTION
case 0xFE: case 0xFE:
if(motionInitState == MOTION_INIT_STATE_IDLE) { motionInitState = MOTION_INIT_STATE_FE; return 0; } if(motionInitState == MOTION_INIT_STATE_IDLE) { motionInitState = MOTION_INIT_STATE_FE; return 0; }
@ -470,6 +465,7 @@ u8 BackupDevice::data_command(u8 val, u8 PROCNUM)
break; break;
case BM_CMD_WRITEENABLE: case BM_CMD_WRITEENABLE:
//printf("MC%c: write enable\n", PROCNUM?'7':'9');
write_enable = TRUE; write_enable = TRUE;
break; break;
@ -826,7 +822,7 @@ void BackupDevice::loadfile()
if(isMovieMode) return; if(isMovieMode) return;
if(filename.length() ==0) return; //No sense crashing if no filename supplied if(filename.length() ==0) return; //No sense crashing if no filename supplied
#ifdef _NO_LOAD_BACKUP #ifdef _DONT_LOAD_BACKUP
return; return;
#endif #endif
@ -838,10 +834,9 @@ void BackupDevice::loadfile()
printf("DeSmuME .dsv save file not found. Trying to load an old raw .sav file.\n"); printf("DeSmuME .dsv save file not found. Trying to load an old raw .sav file.\n");
//change extension to sav //change extension to sav
char tmp[MAX_PATH]; char tmp[MAX_PATH] = {0};
strcpy(tmp,filename.c_str()); path.getpathnoext(path.BATTERY, tmp);
tmp[strlen(tmp)-3] = 0; strcat(tmp, ".sav");
strcat(tmp,"sav");
inf = new EMUFILE_FILE(tmp,"rb"); inf = new EMUFILE_FILE(tmp,"rb");
if(inf->fail()) if(inf->fail())
@ -926,14 +921,16 @@ void BackupDevice::loadfile()
if (info.type == 0xFF) info.type = 0; if (info.type == 0xFF) info.type = 0;
} }
u32 ss = info.size * 8 / 1024; u32 ss = (info.padSize * 8) / 1024;
bool _Mbit = false;
if (ss >= 1024) if (ss >= 1024)
{ {
ss /= 1024; ss /= 1024;
printf("Backup size: %i Mbit\n", ss); _Mbit = true;
} }
else
printf("Backup size: %i Kbit\n", ss); printf("Backup size: %u %cbit\n", ss, _Mbit?'M':'K');
delete inf; delete inf;
} }
@ -981,7 +978,7 @@ void BackupDevice::flush()
//never use save files if we are in movie mode //never use save files if we are in movie mode
if(isMovieMode) return; if(isMovieMode) return;
#ifdef _NO_SAVE_BACKUP #ifdef _DONT_SAVE_BACKUP
return; return;
#endif #endif

View File

@ -60,8 +60,6 @@ class BackupDevice
public: public:
BackupDevice(); BackupDevice();
//signals the save system that we are in our regular mode, loading up a rom. initializes for that case.
void load_rom(const char* filename);
//signals the save system that we are in MOVIE mode. doesnt load up a rom, and never saves it. initializes for that case. //signals the save system that we are in MOVIE mode. doesnt load up a rom, and never saves it. initializes for that case.
void movie_mode(); void movie_mode();