mirror of
https://github.com/RetroDECK/Supermodel.git
synced 2024-11-21 13:25:40 +00:00
Applied a series of patches by John Peterson:
- Fixed a printf statement in ConsoleDebugger.cpp. - Fixed memory watches not breaking in CPUDebug.h. - Added some helpful batch files to the VS2008 directory. - Added support for automatic loading of parent ROM sets.
This commit is contained in:
parent
93b71c8429
commit
3963a7a53c
|
@ -64,13 +64,12 @@ still low.
|
|||
8. Force Feedback
|
||||
9. Save States and NVRAM
|
||||
10. Game-Specific Comments and Tips
|
||||
11. Merging Split ROM Sets
|
||||
12. The Configuration File
|
||||
13. Index of Command Line Options
|
||||
14. Index of Configuration File Settings
|
||||
15. Compiling the Source Code
|
||||
16. Contact Information
|
||||
17. Acknowledgments
|
||||
11. The Configuration File
|
||||
12. Index of Command Line Options
|
||||
13. Index of Configuration File Settings
|
||||
14. Compiling the Source Code
|
||||
15. Contact Information
|
||||
16. Acknowledgments
|
||||
|
||||
|
||||
=======================
|
||||
|
@ -807,38 +806,7 @@ and, in the 'Game Assignments' menu, performing the following sequence:
|
|||
|
||||
|
||||
==============================
|
||||
11. Merging Split ROM Sets
|
||||
==============================
|
||||
|
||||
ROMs that are split into parent and child sets (eg., 'Scud Race Plus', whose
|
||||
parent ROM set is 'Scud Race') must be combined into a single ZIP file. ROM
|
||||
files from the parent set that have the same IC numbers (usually the file
|
||||
extension but sometimes the number in the file name itself) as child ROMs
|
||||
should be deleted, otherwise Supermodel may choose to load the parent game.
|
||||
|
||||
For example, 'Scud Race Plus' is normally distributed containing only the
|
||||
following files:
|
||||
|
||||
epr-20092a.17
|
||||
epr-20093a.18
|
||||
epr-20094a.19
|
||||
epr-20095a.20
|
||||
epr-20096a.21
|
||||
mpr-20097.13
|
||||
mpr-20098.14
|
||||
mpr-20099.15
|
||||
mpr-20100.16
|
||||
mpr-20101.24
|
||||
|
||||
To merge with the parent ROM set, copy over all files from 'Scud Race' except
|
||||
those with extension numbers 17-21, 13-16, and 24. Some 'Scud Race Plus' ROM
|
||||
sets may have 'mpr-20101.23' instead of 'mpr-20101.24'. They are the same file
|
||||
and in both cases should replace the file with extension 24 from 'Scud Race'
|
||||
('mpr-19671.24').
|
||||
|
||||
|
||||
==============================
|
||||
12. The Configuration File
|
||||
11. The Configuration File
|
||||
==============================
|
||||
|
||||
Supermodel reads configuration settings from 'Supermodel.ini' located in the
|
||||
|
@ -1116,7 +1084,7 @@ option '-input-system=rawinput' and the input mappings configured for each gun.
|
|||
|
||||
|
||||
=====================================
|
||||
13. Index of Command Line Options
|
||||
12. Index of Command Line Options
|
||||
=====================================
|
||||
|
||||
All valid command line settings are listed here, ordered by category. Defaults
|
||||
|
@ -1290,7 +1258,7 @@ not. All options are case sensitive.
|
|||
|
||||
|
||||
============================================
|
||||
14. Index of Configuration File Settings
|
||||
13. Index of Configuration File Settings
|
||||
============================================
|
||||
|
||||
All valid configuration file settings are listed here, ordered by category.
|
||||
|
@ -1860,7 +1828,7 @@ All settings are case sensitive.
|
|||
|
||||
|
||||
=================================
|
||||
15. Compiling the Source Code
|
||||
14. Compiling the Source Code
|
||||
=================================
|
||||
|
||||
First, ensure that OpenGL, SDL (http://www.libsdl.org), and zlib
|
||||
|
@ -1894,7 +1862,7 @@ When everything is ready, rename the appropriate Makefile to 'Makefile' and run
|
|||
|
||||
|
||||
===========================
|
||||
16. Contact Information
|
||||
15. Contact Information
|
||||
===========================
|
||||
|
||||
The official Supermodel web site is:
|
||||
|
@ -1915,7 +1883,7 @@ We ask that you remain mindful of the following courtesies:
|
|||
|
||||
|
||||
=======================
|
||||
17. Acknowledgments
|
||||
16. Acknowledgments
|
||||
=======================
|
||||
|
||||
Numerous people contributed their precious time and energy to this project.
|
||||
|
|
|
@ -689,6 +689,8 @@ namespace Debugger
|
|||
else if (mappedIO == NULL)
|
||||
return;
|
||||
}
|
||||
if (m_break)
|
||||
WaitCommand(HaltUntil);
|
||||
}
|
||||
|
||||
inline void CCPUDebug::CheckWrite(UINT32 addr, unsigned dataSize, UINT64 data)
|
||||
|
@ -735,6 +737,8 @@ namespace Debugger
|
|||
}
|
||||
else if (mappedIO == NULL)
|
||||
return;
|
||||
if (m_break)
|
||||
WaitCommand(HaltUntil);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -777,6 +781,8 @@ namespace Debugger
|
|||
CWatch *watch = (CWatch*)m_memWatchTable->Get(addr);
|
||||
if (watch != NULL && watch->CheckRead(addr, dataSize, data))
|
||||
MemWatchTriggered(watch, addr, dataSize, data, true);
|
||||
if (m_break)
|
||||
WaitCommand(HaltUntil);
|
||||
}
|
||||
|
||||
inline void CCPUDebug::CheckRead16(UINT32 addr, UINT16 data)
|
||||
|
@ -820,9 +826,10 @@ namespace Debugger
|
|||
CWatch *watch = (CWatch*)m_memWatchTable->Get(addr);
|
||||
if (watch != NULL && watch->CheckWrite(addr, dataSize, data))
|
||||
MemWatchTriggered(watch, addr, dataSize, data, false);
|
||||
if (m_break)
|
||||
WaitCommand(HaltUntil);
|
||||
}
|
||||
|
||||
inline void CCPUDebug::CheckWrite16(UINT32 addr, UINT16 data)
|
||||
{
|
||||
if ((addr&m_mem16AndMask) == m_mem16AndMask && (addr&m_mem16OrMask) == 0)
|
||||
CheckWrite(addr, 2, data);
|
||||
|
|
|
@ -1030,7 +1030,7 @@ namespace Debugger
|
|||
m_cpu->WriteMem(addr, size, data);
|
||||
m_cpu->FormatData(dataStr, size, data);
|
||||
m_cpu->FormatAddress(addrStr, addr);
|
||||
Print("Set %s data at %s to %s.\n", addrStr, dataStr);
|
||||
Print("Set %s data at %s to %s.\n", uSizeStr, addrStr, dataStr);
|
||||
}
|
||||
else if (CheckToken(token, "lo", "listios")) // listios
|
||||
{
|
||||
|
|
|
@ -38,6 +38,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Sega Bass Fishing
|
||||
{
|
||||
"bass",
|
||||
NULL,
|
||||
"Sega Bass Fishing",
|
||||
"Sega",
|
||||
1997,
|
||||
|
@ -105,6 +106,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Daytona USA 2 (Revision A)
|
||||
{
|
||||
"daytona2",
|
||||
NULL,
|
||||
"Daytona USA 2 Battle on the Edge",
|
||||
"Sega",
|
||||
1998,
|
||||
|
@ -188,6 +190,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Daytona USA 2 Power Edition
|
||||
{
|
||||
"dayto2pe",
|
||||
NULL,
|
||||
"Daytona USA 2 Power Edition",
|
||||
"Sega",
|
||||
1998,
|
||||
|
@ -271,6 +274,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Dirt Devils (Revision A)
|
||||
{
|
||||
"dirtdvls",
|
||||
NULL,
|
||||
"Dirt Devils",
|
||||
"Sega",
|
||||
1998,
|
||||
|
@ -333,6 +337,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Dirt Devils (Alt)(Revision A)
|
||||
{
|
||||
"dirtdvlsa",
|
||||
"dirtdvls",
|
||||
"Dirt Devils (Alt.)",
|
||||
"Sega",
|
||||
1998,
|
||||
|
@ -395,6 +400,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Emergency Call Ambulance
|
||||
{
|
||||
"eca",
|
||||
NULL,
|
||||
"Emergency Call Ambulance",
|
||||
"Sega",
|
||||
1999,
|
||||
|
@ -464,6 +470,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Emergency Call Ambulance (Export)
|
||||
{
|
||||
"ecax",
|
||||
"eca",
|
||||
"Emergency Call Ambulance (Export)",
|
||||
"Sega",
|
||||
1999,
|
||||
|
@ -533,6 +540,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Fighting Vipers 2 (Revision A)
|
||||
{
|
||||
"fvipers2",
|
||||
NULL,
|
||||
"Fighting Vipers 2",
|
||||
"Sega",
|
||||
1998,
|
||||
|
@ -608,6 +616,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Get Bass
|
||||
{
|
||||
"getbass",
|
||||
NULL,
|
||||
"Get Bass",
|
||||
"Sega",
|
||||
1997,
|
||||
|
@ -675,6 +684,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Harley-Davidson & L.A. Riders (Revision A)
|
||||
{
|
||||
"harley",
|
||||
NULL,
|
||||
"Harley-Davidson & L.A. Riders",
|
||||
"Sega",
|
||||
1997,
|
||||
|
@ -744,6 +754,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Harley-Davidson & L.A. Riders (Revision B)
|
||||
{
|
||||
"harleyb",
|
||||
"harley",
|
||||
"Harley-Davidson & L.A. Riders (Revision B)",
|
||||
"Sega",
|
||||
1997,
|
||||
|
@ -813,6 +824,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// L.A. Machineguns
|
||||
{
|
||||
"lamachin",
|
||||
NULL,
|
||||
"L.A. Machineguns",
|
||||
"Sega",
|
||||
1998,
|
||||
|
@ -882,6 +894,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Le Mans 24
|
||||
{
|
||||
"lemans24",
|
||||
NULL,
|
||||
"Le Mans 24",
|
||||
"Sega",
|
||||
1997,
|
||||
|
@ -949,6 +962,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// The Lost World
|
||||
{
|
||||
"lostwsga",
|
||||
NULL,
|
||||
"The Lost World",
|
||||
"Sega",
|
||||
1997,
|
||||
|
@ -1022,6 +1036,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Magical Truck Adventure
|
||||
{
|
||||
"magtruck",
|
||||
NULL,
|
||||
"Magical Truck Adventure",
|
||||
"Sega",
|
||||
1998,
|
||||
|
@ -1079,6 +1094,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// The Ocean Hunter
|
||||
{
|
||||
"oceanhun",
|
||||
NULL,
|
||||
"The Ocean Hunter",
|
||||
"Sega",
|
||||
1998,
|
||||
|
@ -1148,6 +1164,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Scud Race (Australia)
|
||||
{
|
||||
"scud",
|
||||
NULL,
|
||||
"Scud Race (Australia)",
|
||||
"Sega",
|
||||
1996,
|
||||
|
@ -1223,6 +1240,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Scud Race (Export)
|
||||
{
|
||||
"scuda",
|
||||
"scud",
|
||||
"Scud Race (Export)",
|
||||
"Sega",
|
||||
1996,
|
||||
|
@ -1298,6 +1316,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Scud Race (Japan)
|
||||
{
|
||||
"scudj",
|
||||
"scud",
|
||||
"Scud Race (Japan)",
|
||||
"Sega",
|
||||
1996,
|
||||
|
@ -1373,6 +1392,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Scud Race Plus (Revision A)
|
||||
{
|
||||
"scudp",
|
||||
"scud",
|
||||
"Scud Race Plus",
|
||||
"Sega",
|
||||
1997,
|
||||
|
@ -1454,6 +1474,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Ski Champ
|
||||
{
|
||||
"skichamp",
|
||||
NULL,
|
||||
"Ski Champ",
|
||||
"Sega",
|
||||
1998,
|
||||
|
@ -1527,6 +1548,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Spikeout Final Edition (disabled because this is a bad dump according to MAME)
|
||||
{
|
||||
"spikeofe",
|
||||
NULL,
|
||||
"Spikeout Final Edition",
|
||||
"Sega",
|
||||
1999,
|
||||
|
@ -1607,6 +1629,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Spikeout (Revision C)
|
||||
{
|
||||
"spikeout",
|
||||
NULL,
|
||||
"Spikeout",
|
||||
"Sega",
|
||||
1998,
|
||||
|
@ -1687,6 +1710,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Sega Rally 2
|
||||
{
|
||||
"srally2",
|
||||
NULL,
|
||||
"Sega Rally 2",
|
||||
"Sega",
|
||||
1998,
|
||||
|
@ -1762,6 +1786,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Sega Rally 2 DX
|
||||
{
|
||||
"srally2x",
|
||||
NULL,
|
||||
"Sega Rally 2 DX",
|
||||
"Sega",
|
||||
1998,
|
||||
|
@ -1832,6 +1857,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Star Wars Trilogy (Revision A)
|
||||
{
|
||||
"swtrilgy",
|
||||
NULL,
|
||||
"Star Wars Trilogy (Revision A)",
|
||||
"Sega, LucasArts",
|
||||
1998,
|
||||
|
@ -1904,6 +1930,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Star Wars Trilogy
|
||||
{
|
||||
"swtrilgya",
|
||||
"swtrilgy",
|
||||
"Star Wars Trilogy",
|
||||
"Sega, LucasArts",
|
||||
1998,
|
||||
|
@ -1976,6 +2003,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Virtua Fighter 3 (Revision C)
|
||||
{
|
||||
"vf3",
|
||||
NULL,
|
||||
"Virtua Fighter 3",
|
||||
"Sega",
|
||||
1996,
|
||||
|
@ -2049,6 +2077,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Virtua Fighter 3 (Revision A)
|
||||
{
|
||||
"vf3a",
|
||||
"vf3",
|
||||
"Virtua Fighter 3 (Revision A)",
|
||||
"Sega",
|
||||
1996,
|
||||
|
@ -2122,6 +2151,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Virtua Fighter 3 Team Battle
|
||||
{
|
||||
"vf3tb",
|
||||
"vf3",
|
||||
"Virtua Fighter 3 Team Battle",
|
||||
"Sega",
|
||||
1996,
|
||||
|
@ -2195,6 +2225,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Virtual On: Oratorio Tangram (Revision B)
|
||||
{
|
||||
"von2",
|
||||
NULL,
|
||||
"Virtual On: Oratorio Tangram",
|
||||
"Sega",
|
||||
1998,
|
||||
|
@ -2270,6 +2301,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Virtual On: Oratorio Tangram (Version 5.4g)
|
||||
{
|
||||
"von254g",
|
||||
"von2",
|
||||
"Virtual On: Oratorio Tangram (Version 5.4g)",
|
||||
"Sega",
|
||||
1998,
|
||||
|
@ -2345,6 +2377,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Virtua Striker 2 (Step 2.0)
|
||||
{
|
||||
"vs2",
|
||||
NULL,
|
||||
"Virtua Striker 2 (Step 2.0)",
|
||||
"Sega",
|
||||
1997,
|
||||
|
@ -2418,6 +2451,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Virtua Striker 2 (Step 1.5)
|
||||
{
|
||||
"vs215",
|
||||
"vs2",
|
||||
"Virtua Striker 2 (Step 1.5)",
|
||||
"Sega",
|
||||
1997,
|
||||
|
@ -2491,6 +2525,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Virtua Striker 2 '98 (Step 2.0)
|
||||
{
|
||||
"vs298",
|
||||
NULL,
|
||||
"Virtua Striker 2 '98 (Step 2.0)",
|
||||
"Sega",
|
||||
1998,
|
||||
|
@ -2564,6 +2599,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Virtua Striker 2 '98 (Step 1.5)
|
||||
{
|
||||
"vs29815",
|
||||
"vs298",
|
||||
"Virtua Striker 2 '98 (Step 1.5)",
|
||||
"Sega",
|
||||
1998,
|
||||
|
@ -2637,6 +2673,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Virtua Striker 2 '99
|
||||
{
|
||||
"vs299",
|
||||
"vs2v991",
|
||||
"Virtua Striker 2 '99",
|
||||
"Sega",
|
||||
1999,
|
||||
|
@ -2710,6 +2747,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Virtua Striker 2 '99 (Revision A)
|
||||
{
|
||||
"vs299a",
|
||||
"vs2v991",
|
||||
"Virtua Striker 2 '99 (Revision A)",
|
||||
"Sega",
|
||||
1999,
|
||||
|
@ -2783,6 +2821,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Virtua Striker 2 '99 (Revision B)
|
||||
{
|
||||
"vs299b",
|
||||
"vs2v991",
|
||||
"Virtua Striker 2 '99 (Revision B)",
|
||||
"Sega",
|
||||
1999,
|
||||
|
@ -2856,6 +2895,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
// Virtua Striker 2 '99.1 (Revision B)
|
||||
{
|
||||
"vs2v991",
|
||||
NULL,
|
||||
"Virtua Striker 2 '99.1",
|
||||
"Sega",
|
||||
1999,
|
||||
|
@ -2931,6 +2971,7 @@ const struct GameInfo g_Model3GameList[] =
|
|||
"",
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
|
|
|
@ -67,6 +67,7 @@ struct GameInfo
|
|||
{
|
||||
// Game information
|
||||
const char id[10]; // 9-character game identifier (also serves as zip archive file name)
|
||||
const char *parent; // parent game identifier
|
||||
const char *title; // complete game title
|
||||
const char *mfgName; // name of manufacturer
|
||||
unsigned year; // year released (in decimal)
|
||||
|
|
|
@ -204,10 +204,11 @@ static bool LoadROM(UINT8 *buf, unsigned bufSize, const struct ROMMap *Map, cons
|
|||
*/
|
||||
const struct GameInfo * LoadROMSetFromZIPFile(const struct ROMMap *Map, const struct GameInfo *GameList, const char *zipFile, bool loadAll)
|
||||
{
|
||||
unzFile zf;
|
||||
unzFile zf, zfp = NULL;
|
||||
unz_file_info fileInfo;
|
||||
const struct GameInfo *Game = NULL;
|
||||
const struct GameInfo *CurGame; // this is the game to which the last ROM found is thought to belong
|
||||
string zipFileParent, zfpErr = "";
|
||||
int romIdx; // index within Game->ROM
|
||||
unsigned romsFound[sizeof(Game->ROM)/sizeof(struct ROMInfo)], numROMs;
|
||||
int err;
|
||||
|
@ -263,6 +264,34 @@ const struct GameInfo * LoadROMSetFromZIPFile(const struct ROMMap *Map, const st
|
|||
}
|
||||
}
|
||||
|
||||
if (CurGame->parent)
|
||||
{
|
||||
// Create parent zip file name
|
||||
string path = "";
|
||||
if (strstr(zipFile, "/"))
|
||||
{
|
||||
path = string(zipFile);
|
||||
path = path.substr(0, path.find_last_of("/") + 1);
|
||||
}
|
||||
if (strstr(zipFile, "\\"))
|
||||
{
|
||||
path = string(zipFile);
|
||||
path = path.substr(0, path.find_last_of("\\") + 1);
|
||||
}
|
||||
zipFileParent = path + CurGame->parent + ".zip";
|
||||
|
||||
// Create error message
|
||||
zfpErr = " or '" + string(zipFileParent) + "'";
|
||||
|
||||
// Try to open file
|
||||
zfp = unzOpen(zipFileParent.c_str());
|
||||
if (NULL == zfp)
|
||||
{
|
||||
ErrorLog("Parent ROM set '%s' is missing.", zipFileParent.c_str());
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// Second pass: check if all ROM files for the identified game are present
|
||||
err = unzGoToFirstFile(zf);
|
||||
if (UNZ_OK != err)
|
||||
|
@ -285,7 +314,30 @@ const struct GameInfo * LoadROMSetFromZIPFile(const struct ROMMap *Map, const st
|
|||
// If we have found a ROM for the correct game, mark its corresponding indicator
|
||||
romsFound[romIdx] = 1;
|
||||
}
|
||||
|
||||
if (zfp)
|
||||
{
|
||||
err = unzGoToFirstFile(zfp);
|
||||
if (UNZ_OK != err)
|
||||
{
|
||||
ErrorLog("Unable to read the contents of '%s' (code %X)", zipFileParent.c_str(), err);
|
||||
return NULL;
|
||||
}
|
||||
for (; err != UNZ_END_OF_LIST_OF_FILE; err = unzGoToNextFile(zfp))
|
||||
{
|
||||
// Identify the file we're looking at
|
||||
err = unzGetCurrentFileInfo(zfp, &fileInfo, NULL, 0, NULL, 0, NULL, 0);
|
||||
if (err != UNZ_OK)
|
||||
continue;
|
||||
|
||||
// If it's not part of the game we've identified, skip it
|
||||
if (OKAY != FindROMByCRCInGame(&CurGame, &romIdx, Game, fileInfo.crc))
|
||||
continue;
|
||||
|
||||
// If we have found a ROM for the correct game, mark its corresponding indicator
|
||||
romsFound[romIdx] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Compute how many ROM files this game has
|
||||
for (numROMs = 0; Game->ROM[numROMs].region != NULL; numROMs++)
|
||||
;
|
||||
|
@ -295,11 +347,12 @@ const struct GameInfo * LoadROMSetFromZIPFile(const struct ROMMap *Map, const st
|
|||
for (i = 0; i < numROMs; i++)
|
||||
{
|
||||
if ((0 == romsFound[i]) && !Game->ROM[i].optional) // if not found and also not optional
|
||||
err |= (int) ErrorLog("'%s' (CRC=%08X) is missing from '%s'.", Game->ROM[i].fileName, Game->ROM[i].crc, zipFile);
|
||||
err |= (int) ErrorLog("'%s' (CRC=%08X) is missing from '%s'%s.", Game->ROM[i].fileName, Game->ROM[i].crc, zipFile, zfp ? zfpErr.c_str() : "");
|
||||
}
|
||||
if (err != OKAY)
|
||||
{
|
||||
unzClose(zf);
|
||||
if (zfp) unzClose(zfp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -314,6 +367,7 @@ const struct GameInfo * LoadROMSetFromZIPFile(const struct ROMMap *Map, const st
|
|||
if (NULL == buf)
|
||||
{
|
||||
unzClose(zf);
|
||||
if (zfp) unzClose(zfp);
|
||||
ErrorLog("Insufficient memory to load ROM files (%d bytes).", maxSize);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -341,7 +395,31 @@ const struct GameInfo * LoadROMSetFromZIPFile(const struct ROMMap *Map, const st
|
|||
if (OKAY == LoadROM(buf, maxSize, Map, &Game->ROM[romIdx], zf, zipFile, loadAll))
|
||||
romsFound[romIdx] = 1; // success! mark as loaded
|
||||
}
|
||||
|
||||
if (zfp)
|
||||
{
|
||||
err = unzGoToFirstFile(zfp);
|
||||
if (UNZ_OK != err)
|
||||
{
|
||||
ErrorLog("Unable to read the contents of '%s' (code %X).", zipFileParent.c_str(), err);
|
||||
err = FAIL;
|
||||
goto Quit;
|
||||
}
|
||||
for (; err != UNZ_END_OF_LIST_OF_FILE; err = unzGoToNextFile(zfp))
|
||||
{
|
||||
err = unzGetCurrentFileInfo(zfp, &fileInfo, NULL, 0, NULL, 0, NULL, 0);
|
||||
if (err != UNZ_OK)
|
||||
continue;
|
||||
|
||||
// If this ROM is not part of the game we're loading, skip it
|
||||
if (OKAY != FindROMByCRCInGame(&CurGame, &romIdx, Game, fileInfo.crc))
|
||||
continue;
|
||||
|
||||
// Load the ROM and mark that we did so successfully
|
||||
if (OKAY == LoadROM(buf, maxSize, Map, &Game->ROM[romIdx], zfp, zipFileParent.c_str(), loadAll))
|
||||
romsFound[romIdx] = 1; // success! mark as loaded
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure all ROMs were loaded
|
||||
if (loadAll)
|
||||
{
|
||||
|
@ -350,7 +428,7 @@ const struct GameInfo * LoadROMSetFromZIPFile(const struct ROMMap *Map, const st
|
|||
for (i = 0; i < numROMs; i++)
|
||||
{
|
||||
if (!(romsFound[i] || Game->ROM[i].optional)) // if ROM not found and also not optional
|
||||
err = ErrorLog("Could not load '%s' (CRC=%08X) from '%s'.", Game->ROM[i].fileName, Game->ROM[i].crc, zipFile);
|
||||
err = ErrorLog("Could not load '%s' (CRC=%08X) from '%s'%s.", Game->ROM[i].fileName, Game->ROM[i].crc, zipFile, zfp ? zfpErr.c_str() : "");
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
2
VS2008/Build.Release.Debugger.bat
Normal file
2
VS2008/Build.Release.Debugger.bat
Normal file
|
@ -0,0 +1,2 @@
|
|||
SET CL=/DSUPERMODEL_DEBUGGER
|
||||
call Build.Release.bat %1
|
4
VS2008/Build.Release.bat
Normal file
4
VS2008/Build.Release.bat
Normal file
|
@ -0,0 +1,4 @@
|
|||
call Build.bat Release x64 Supermodel %1
|
||||
call Build.bat Release Win32 Supermodel %1
|
||||
@echo All builds succeeded
|
||||
pause
|
1
VS2008/Rebuild.Release.Debugger.bat
Normal file
1
VS2008/Rebuild.Release.Debugger.bat
Normal file
|
@ -0,0 +1 @@
|
|||
call Build.Release.Debugger.bat Rebuild
|
1
VS2008/Rebuild.Release.bat
Normal file
1
VS2008/Rebuild.Release.bat
Normal file
|
@ -0,0 +1 @@
|
|||
call Build.Release.bat Rebuild
|
Loading…
Reference in a new issue