* A couple of fixes which deal with "multiple ROMs in a single archive" case. The loading procedure now takes into account actual ROM name when loading ROM from an archive containing multiple files. This affects PAL/NTSC detection (in case there were ROMs of different regions inside a single zip). Also, "auto-resume play" now loads actual ROM on startup (instead of prompting a list of archived files to choose). Also, NL files (symbolic debug) are named correctly when debugging a ROM from such an archive, etc.
This commit is contained in:
parent
c61bc9d104
commit
f07e49b270
|
@ -1385,7 +1385,8 @@ BOOL CALLBACK IDC_DEBUGGER_DISASSEMBLY_WndProc(HWND hwndDlg, UINT uMsg, WPARAM w
|
|||
if (i >= 0x8000)
|
||||
{
|
||||
dotdot[0] = 0;
|
||||
if (!(ptr = iNesShortFName()))
|
||||
ptr = iNesShortFName();
|
||||
if (!ptr)
|
||||
ptr = "...";
|
||||
if (strlen(ptr) > 60)
|
||||
strcpy(dotdot, "...");
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
*/
|
||||
|
||||
#include "common.h"
|
||||
#include "utils/xstring.h"
|
||||
#include "debuggersp.h"
|
||||
#include "debugger.h"
|
||||
#include "../../fceu.h"
|
||||
|
@ -549,7 +550,7 @@ void loadNameFiles()
|
|||
free(ramBankNames);
|
||||
|
||||
// The NL file for the RAM addresses has the name nesrom.nes.ram.nl
|
||||
strcpy(NLfilename, LoadedRomFName);
|
||||
strcpy(NLfilename, mass_replace(LoadedRomFName, "|", ".").c_str());
|
||||
strcat(NLfilename, ".ram.nl");
|
||||
|
||||
// Load the address descriptions for the RAM addresses
|
||||
|
@ -568,7 +569,7 @@ void loadNameFiles()
|
|||
lastBank = cb;
|
||||
|
||||
// Get the name of the NL file
|
||||
sprintf(NLfilename, "%s.%X.nl", LoadedRomFName, lastBank);
|
||||
sprintf(NLfilename, "%s.%X.nl", mass_replace(LoadedRomFName, "|", ".").c_str(), lastBank);
|
||||
|
||||
if (lastBankNames)
|
||||
freeList(lastBankNames);
|
||||
|
@ -591,7 +592,7 @@ void loadNameFiles()
|
|||
loadedBank = cb;
|
||||
|
||||
// Get the name of the NL file
|
||||
sprintf(NLfilename, "%s.%X.nl", LoadedRomFName, loadedBank);
|
||||
sprintf(NLfilename, "%s.%X.nl", mass_replace(LoadedRomFName, "|", ".").c_str(), loadedBank);
|
||||
|
||||
if (loadedBankNames)
|
||||
freeList(loadedBankNames);
|
||||
|
|
|
@ -157,7 +157,7 @@ int storeHexPreferences(FILE* f)
|
|||
* @param romname Name of the ROM
|
||||
* @return 0 on success or an error code.
|
||||
**/
|
||||
int storePreferences(char* romname)
|
||||
int storePreferences(const char* romname)
|
||||
{
|
||||
|
||||
if (debuggerSaveLoadDEBFiles == false) {
|
||||
|
@ -197,7 +197,7 @@ int storePreferences(char* romname)
|
|||
*/
|
||||
|
||||
filename = (char*)malloc(strlen(romname) + 5);
|
||||
strcpy(filename, mass_replace(romname, "|", ".").c_str()); //convert | to . for archive filenames
|
||||
strcpy(filename, romname);
|
||||
strcat(filename, ".deb");
|
||||
|
||||
f = fopen(filename, "wb");
|
||||
|
@ -380,7 +380,7 @@ int loadHexPreferences(FILE* f)
|
|||
* @param romname Name of the active ROM file
|
||||
* @return 0 or an error code.
|
||||
**/
|
||||
int loadPreferences(char* romname)
|
||||
int loadPreferences(const char* romname)
|
||||
{
|
||||
if (debuggerSaveLoadDEBFiles == false) {
|
||||
return 0;
|
||||
|
@ -394,7 +394,7 @@ int loadPreferences(char* romname)
|
|||
|
||||
// Get the name of the preferences file
|
||||
char* filename = (char*)malloc(strlen(romname) + 5);
|
||||
strcpy(filename, mass_replace(romname, "|", ".").c_str()); //convert | to . for archive filenames
|
||||
strcpy(filename, romname);
|
||||
strcat(filename, ".deb");
|
||||
|
||||
f = fopen(filename, "rb");
|
||||
|
|
|
@ -23,6 +23,6 @@
|
|||
extern int myNumWPs;
|
||||
extern bool inDebugger;
|
||||
|
||||
int storePreferences(char* romname);
|
||||
int loadPreferences(char* romname);
|
||||
int storePreferences(const char* romname);
|
||||
int loadPreferences(const char* romname);
|
||||
void DoDebuggerDataReload();
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
#include "ines.h"
|
||||
#ifdef WIN32
|
||||
#include "drivers/win/pref.h"
|
||||
#include "utils/xstring.h"
|
||||
|
||||
extern void CDLoggerROMClosed();
|
||||
extern void CDLoggerROMChanged();
|
||||
|
@ -155,10 +156,8 @@ static void FCEU_CloseGame(void)
|
|||
|
||||
#ifdef WIN32
|
||||
extern char LoadedRomFName[2048];
|
||||
if (storePreferences(LoadedRomFName))
|
||||
{
|
||||
if (storePreferences(mass_replace(LoadedRomFName, "|", ".").c_str()))
|
||||
FCEUD_PrintError("Couldn't store debugging data");
|
||||
}
|
||||
CDLoggerROMClosed();
|
||||
#endif
|
||||
|
||||
|
@ -396,8 +395,7 @@ FCEUGI *FCEUI_LoadGameVirtual(const char *name, int OverwriteVidMode, bool silen
|
|||
//----------
|
||||
//attempt to open the files
|
||||
FCEUFILE *fp;
|
||||
|
||||
FCEU_printf("Loading %s...\n\n", name);
|
||||
char fullname[2048]; // this name contains both archive name and ROM file name
|
||||
|
||||
const char* romextensions[] = { "nes", "fds", 0 };
|
||||
fp = FCEU_fopen(name, 0, "rb", 0, -1, romextensions);
|
||||
|
@ -407,16 +405,21 @@ FCEUGI *FCEUI_LoadGameVirtual(const char *name, int OverwriteVidMode, bool silen
|
|||
if (!silent)
|
||||
FCEU_PrintError("Error opening \"%s\"!", name);
|
||||
return 0;
|
||||
} else if (fp->archiveFilename != "")
|
||||
{
|
||||
strcpy(fullname, fp->archiveFilename.c_str());
|
||||
strcat(fullname, "|");
|
||||
strcat(fullname, fp->filename.c_str());
|
||||
} else
|
||||
{
|
||||
strcpy(fullname, name);
|
||||
}
|
||||
|
||||
GetFileBase(fp->filename.c_str());
|
||||
//---------
|
||||
|
||||
//file opened ok. start loading.
|
||||
|
||||
FCEU_printf("Loading %s...\n\n", fullname);
|
||||
GetFileBase(fp->filename.c_str());
|
||||
ResetGameLoaded();
|
||||
|
||||
//reset parameters so theyre cleared just in case a format's loader doesnt know to do the clearing
|
||||
//reset parameters so they're cleared just in case a format's loader doesn't know to do the clearing
|
||||
MasterRomInfoParams = TMasterRomInfoParams();
|
||||
|
||||
if (!AutosaveStatus)
|
||||
|
@ -429,7 +432,8 @@ FCEUGI *FCEUI_LoadGameVirtual(const char *name, int OverwriteVidMode, bool silen
|
|||
memset(GameInfo, 0, sizeof(FCEUGI));
|
||||
|
||||
GameInfo->filename = strdup(fp->filename.c_str());
|
||||
if (fp->archiveFilename != "") GameInfo->archiveFilename = strdup(fp->archiveFilename.c_str());
|
||||
if (fp->archiveFilename != "")
|
||||
GameInfo->archiveFilename = strdup(fp->archiveFilename.c_str());
|
||||
GameInfo->archiveCount = fp->archiveCount;
|
||||
|
||||
GameInfo->soundchan = 0;
|
||||
|
@ -445,13 +449,13 @@ FCEUGI *FCEUI_LoadGameVirtual(const char *name, int OverwriteVidMode, bool silen
|
|||
bool FCEUXLoad(const char *name, FCEUFILE * fp);
|
||||
/*if(FCEUXLoad(name,fp))
|
||||
goto endlseq;*/
|
||||
if (iNESLoad(name, fp, OverwriteVidMode))
|
||||
if (iNESLoad(fullname, fp, OverwriteVidMode))
|
||||
goto endlseq;
|
||||
if (NSFLoad(name, fp))
|
||||
if (NSFLoad(fullname, fp))
|
||||
goto endlseq;
|
||||
if (UNIFLoad(name, fp))
|
||||
if (UNIFLoad(fullname, fp))
|
||||
goto endlseq;
|
||||
if (FDSLoad(name, fp))
|
||||
if (FDSLoad(fullname, fp))
|
||||
goto endlseq;
|
||||
|
||||
if (!silent)
|
||||
|
@ -472,7 +476,7 @@ FCEUGI *FCEUI_LoadGameVirtual(const char *name, int OverwriteVidMode, bool silen
|
|||
extern char LoadedRomFName[2048];
|
||||
extern int loadDebugDataFailed;
|
||||
|
||||
if ((loadDebugDataFailed = loadPreferences(LoadedRomFName)))
|
||||
if ((loadDebugDataFailed = loadPreferences(mass_replace(LoadedRomFName, "|", ".").c_str())))
|
||||
if (!silent)
|
||||
FCEU_printf("Couldn't load debugging data.\n");
|
||||
|
||||
|
|
|
@ -949,8 +949,10 @@ int iNesSaveAs(char* name)
|
|||
char *iNesShortFName() {
|
||||
char *ret;
|
||||
|
||||
if (!(ret = strrchr(LoadedRomFName, '\\'))) {
|
||||
if (!(ret = strrchr(LoadedRomFName, '/'))) return 0;
|
||||
if (!(ret = strrchr(LoadedRomFName, '\\')))
|
||||
{
|
||||
if (!(ret = strrchr(LoadedRomFName, '/')))
|
||||
return 0;
|
||||
}
|
||||
return ret + 1;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue