mirror of
https://github.com/RetroDECK/Supermodel.git
synced 2024-11-21 21:35:38 +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
|
8. Force Feedback
|
||||||
9. Save States and NVRAM
|
9. Save States and NVRAM
|
||||||
10. Game-Specific Comments and Tips
|
10. Game-Specific Comments and Tips
|
||||||
11. Merging Split ROM Sets
|
11. The Configuration File
|
||||||
12. The Configuration File
|
12. Index of Command Line Options
|
||||||
13. Index of Command Line Options
|
13. Index of Configuration File Settings
|
||||||
14. Index of Configuration File Settings
|
14. Compiling the Source Code
|
||||||
15. Compiling the Source Code
|
15. Contact Information
|
||||||
16. Contact Information
|
16. Acknowledgments
|
||||||
17. Acknowledgments
|
|
||||||
|
|
||||||
|
|
||||||
=======================
|
=======================
|
||||||
|
@ -807,38 +806,7 @@ and, in the 'Game Assignments' menu, performing the following sequence:
|
||||||
|
|
||||||
|
|
||||||
==============================
|
==============================
|
||||||
11. Merging Split ROM Sets
|
11. The Configuration File
|
||||||
==============================
|
|
||||||
|
|
||||||
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
|
|
||||||
==============================
|
==============================
|
||||||
|
|
||||||
Supermodel reads configuration settings from 'Supermodel.ini' located in the
|
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
|
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.
|
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
|
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:
|
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.
|
Numerous people contributed their precious time and energy to this project.
|
||||||
|
|
|
@ -689,6 +689,8 @@ namespace Debugger
|
||||||
else if (mappedIO == NULL)
|
else if (mappedIO == NULL)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (m_break)
|
||||||
|
WaitCommand(HaltUntil);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void CCPUDebug::CheckWrite(UINT32 addr, unsigned dataSize, UINT64 data)
|
inline void CCPUDebug::CheckWrite(UINT32 addr, unsigned dataSize, UINT64 data)
|
||||||
|
@ -735,6 +737,8 @@ namespace Debugger
|
||||||
}
|
}
|
||||||
else if (mappedIO == NULL)
|
else if (mappedIO == NULL)
|
||||||
return;
|
return;
|
||||||
|
if (m_break)
|
||||||
|
WaitCommand(HaltUntil);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -777,6 +781,8 @@ namespace Debugger
|
||||||
CWatch *watch = (CWatch*)m_memWatchTable->Get(addr);
|
CWatch *watch = (CWatch*)m_memWatchTable->Get(addr);
|
||||||
if (watch != NULL && watch->CheckRead(addr, dataSize, data))
|
if (watch != NULL && watch->CheckRead(addr, dataSize, data))
|
||||||
MemWatchTriggered(watch, addr, dataSize, data, true);
|
MemWatchTriggered(watch, addr, dataSize, data, true);
|
||||||
|
if (m_break)
|
||||||
|
WaitCommand(HaltUntil);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void CCPUDebug::CheckRead16(UINT32 addr, UINT16 data)
|
inline void CCPUDebug::CheckRead16(UINT32 addr, UINT16 data)
|
||||||
|
@ -820,9 +826,10 @@ namespace Debugger
|
||||||
CWatch *watch = (CWatch*)m_memWatchTable->Get(addr);
|
CWatch *watch = (CWatch*)m_memWatchTable->Get(addr);
|
||||||
if (watch != NULL && watch->CheckWrite(addr, dataSize, data))
|
if (watch != NULL && watch->CheckWrite(addr, dataSize, data))
|
||||||
MemWatchTriggered(watch, addr, dataSize, data, false);
|
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)
|
if ((addr&m_mem16AndMask) == m_mem16AndMask && (addr&m_mem16OrMask) == 0)
|
||||||
CheckWrite(addr, 2, data);
|
CheckWrite(addr, 2, data);
|
||||||
|
|
|
@ -1030,7 +1030,7 @@ namespace Debugger
|
||||||
m_cpu->WriteMem(addr, size, data);
|
m_cpu->WriteMem(addr, size, data);
|
||||||
m_cpu->FormatData(dataStr, size, data);
|
m_cpu->FormatData(dataStr, size, data);
|
||||||
m_cpu->FormatAddress(addrStr, addr);
|
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
|
else if (CheckToken(token, "lo", "listios")) // listios
|
||||||
{
|
{
|
||||||
|
|
|
@ -38,6 +38,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Sega Bass Fishing
|
// Sega Bass Fishing
|
||||||
{
|
{
|
||||||
"bass",
|
"bass",
|
||||||
|
NULL,
|
||||||
"Sega Bass Fishing",
|
"Sega Bass Fishing",
|
||||||
"Sega",
|
"Sega",
|
||||||
1997,
|
1997,
|
||||||
|
@ -105,6 +106,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Daytona USA 2 (Revision A)
|
// Daytona USA 2 (Revision A)
|
||||||
{
|
{
|
||||||
"daytona2",
|
"daytona2",
|
||||||
|
NULL,
|
||||||
"Daytona USA 2 Battle on the Edge",
|
"Daytona USA 2 Battle on the Edge",
|
||||||
"Sega",
|
"Sega",
|
||||||
1998,
|
1998,
|
||||||
|
@ -188,6 +190,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Daytona USA 2 Power Edition
|
// Daytona USA 2 Power Edition
|
||||||
{
|
{
|
||||||
"dayto2pe",
|
"dayto2pe",
|
||||||
|
NULL,
|
||||||
"Daytona USA 2 Power Edition",
|
"Daytona USA 2 Power Edition",
|
||||||
"Sega",
|
"Sega",
|
||||||
1998,
|
1998,
|
||||||
|
@ -271,6 +274,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Dirt Devils (Revision A)
|
// Dirt Devils (Revision A)
|
||||||
{
|
{
|
||||||
"dirtdvls",
|
"dirtdvls",
|
||||||
|
NULL,
|
||||||
"Dirt Devils",
|
"Dirt Devils",
|
||||||
"Sega",
|
"Sega",
|
||||||
1998,
|
1998,
|
||||||
|
@ -333,6 +337,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Dirt Devils (Alt)(Revision A)
|
// Dirt Devils (Alt)(Revision A)
|
||||||
{
|
{
|
||||||
"dirtdvlsa",
|
"dirtdvlsa",
|
||||||
|
"dirtdvls",
|
||||||
"Dirt Devils (Alt.)",
|
"Dirt Devils (Alt.)",
|
||||||
"Sega",
|
"Sega",
|
||||||
1998,
|
1998,
|
||||||
|
@ -395,6 +400,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Emergency Call Ambulance
|
// Emergency Call Ambulance
|
||||||
{
|
{
|
||||||
"eca",
|
"eca",
|
||||||
|
NULL,
|
||||||
"Emergency Call Ambulance",
|
"Emergency Call Ambulance",
|
||||||
"Sega",
|
"Sega",
|
||||||
1999,
|
1999,
|
||||||
|
@ -464,6 +470,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Emergency Call Ambulance (Export)
|
// Emergency Call Ambulance (Export)
|
||||||
{
|
{
|
||||||
"ecax",
|
"ecax",
|
||||||
|
"eca",
|
||||||
"Emergency Call Ambulance (Export)",
|
"Emergency Call Ambulance (Export)",
|
||||||
"Sega",
|
"Sega",
|
||||||
1999,
|
1999,
|
||||||
|
@ -533,6 +540,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Fighting Vipers 2 (Revision A)
|
// Fighting Vipers 2 (Revision A)
|
||||||
{
|
{
|
||||||
"fvipers2",
|
"fvipers2",
|
||||||
|
NULL,
|
||||||
"Fighting Vipers 2",
|
"Fighting Vipers 2",
|
||||||
"Sega",
|
"Sega",
|
||||||
1998,
|
1998,
|
||||||
|
@ -608,6 +616,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Get Bass
|
// Get Bass
|
||||||
{
|
{
|
||||||
"getbass",
|
"getbass",
|
||||||
|
NULL,
|
||||||
"Get Bass",
|
"Get Bass",
|
||||||
"Sega",
|
"Sega",
|
||||||
1997,
|
1997,
|
||||||
|
@ -675,6 +684,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Harley-Davidson & L.A. Riders (Revision A)
|
// Harley-Davidson & L.A. Riders (Revision A)
|
||||||
{
|
{
|
||||||
"harley",
|
"harley",
|
||||||
|
NULL,
|
||||||
"Harley-Davidson & L.A. Riders",
|
"Harley-Davidson & L.A. Riders",
|
||||||
"Sega",
|
"Sega",
|
||||||
1997,
|
1997,
|
||||||
|
@ -744,6 +754,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Harley-Davidson & L.A. Riders (Revision B)
|
// Harley-Davidson & L.A. Riders (Revision B)
|
||||||
{
|
{
|
||||||
"harleyb",
|
"harleyb",
|
||||||
|
"harley",
|
||||||
"Harley-Davidson & L.A. Riders (Revision B)",
|
"Harley-Davidson & L.A. Riders (Revision B)",
|
||||||
"Sega",
|
"Sega",
|
||||||
1997,
|
1997,
|
||||||
|
@ -813,6 +824,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// L.A. Machineguns
|
// L.A. Machineguns
|
||||||
{
|
{
|
||||||
"lamachin",
|
"lamachin",
|
||||||
|
NULL,
|
||||||
"L.A. Machineguns",
|
"L.A. Machineguns",
|
||||||
"Sega",
|
"Sega",
|
||||||
1998,
|
1998,
|
||||||
|
@ -882,6 +894,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Le Mans 24
|
// Le Mans 24
|
||||||
{
|
{
|
||||||
"lemans24",
|
"lemans24",
|
||||||
|
NULL,
|
||||||
"Le Mans 24",
|
"Le Mans 24",
|
||||||
"Sega",
|
"Sega",
|
||||||
1997,
|
1997,
|
||||||
|
@ -949,6 +962,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// The Lost World
|
// The Lost World
|
||||||
{
|
{
|
||||||
"lostwsga",
|
"lostwsga",
|
||||||
|
NULL,
|
||||||
"The Lost World",
|
"The Lost World",
|
||||||
"Sega",
|
"Sega",
|
||||||
1997,
|
1997,
|
||||||
|
@ -1022,6 +1036,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Magical Truck Adventure
|
// Magical Truck Adventure
|
||||||
{
|
{
|
||||||
"magtruck",
|
"magtruck",
|
||||||
|
NULL,
|
||||||
"Magical Truck Adventure",
|
"Magical Truck Adventure",
|
||||||
"Sega",
|
"Sega",
|
||||||
1998,
|
1998,
|
||||||
|
@ -1079,6 +1094,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// The Ocean Hunter
|
// The Ocean Hunter
|
||||||
{
|
{
|
||||||
"oceanhun",
|
"oceanhun",
|
||||||
|
NULL,
|
||||||
"The Ocean Hunter",
|
"The Ocean Hunter",
|
||||||
"Sega",
|
"Sega",
|
||||||
1998,
|
1998,
|
||||||
|
@ -1148,6 +1164,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Scud Race (Australia)
|
// Scud Race (Australia)
|
||||||
{
|
{
|
||||||
"scud",
|
"scud",
|
||||||
|
NULL,
|
||||||
"Scud Race (Australia)",
|
"Scud Race (Australia)",
|
||||||
"Sega",
|
"Sega",
|
||||||
1996,
|
1996,
|
||||||
|
@ -1223,6 +1240,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Scud Race (Export)
|
// Scud Race (Export)
|
||||||
{
|
{
|
||||||
"scuda",
|
"scuda",
|
||||||
|
"scud",
|
||||||
"Scud Race (Export)",
|
"Scud Race (Export)",
|
||||||
"Sega",
|
"Sega",
|
||||||
1996,
|
1996,
|
||||||
|
@ -1298,6 +1316,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Scud Race (Japan)
|
// Scud Race (Japan)
|
||||||
{
|
{
|
||||||
"scudj",
|
"scudj",
|
||||||
|
"scud",
|
||||||
"Scud Race (Japan)",
|
"Scud Race (Japan)",
|
||||||
"Sega",
|
"Sega",
|
||||||
1996,
|
1996,
|
||||||
|
@ -1373,6 +1392,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Scud Race Plus (Revision A)
|
// Scud Race Plus (Revision A)
|
||||||
{
|
{
|
||||||
"scudp",
|
"scudp",
|
||||||
|
"scud",
|
||||||
"Scud Race Plus",
|
"Scud Race Plus",
|
||||||
"Sega",
|
"Sega",
|
||||||
1997,
|
1997,
|
||||||
|
@ -1454,6 +1474,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Ski Champ
|
// Ski Champ
|
||||||
{
|
{
|
||||||
"skichamp",
|
"skichamp",
|
||||||
|
NULL,
|
||||||
"Ski Champ",
|
"Ski Champ",
|
||||||
"Sega",
|
"Sega",
|
||||||
1998,
|
1998,
|
||||||
|
@ -1527,6 +1548,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Spikeout Final Edition (disabled because this is a bad dump according to MAME)
|
// Spikeout Final Edition (disabled because this is a bad dump according to MAME)
|
||||||
{
|
{
|
||||||
"spikeofe",
|
"spikeofe",
|
||||||
|
NULL,
|
||||||
"Spikeout Final Edition",
|
"Spikeout Final Edition",
|
||||||
"Sega",
|
"Sega",
|
||||||
1999,
|
1999,
|
||||||
|
@ -1607,6 +1629,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Spikeout (Revision C)
|
// Spikeout (Revision C)
|
||||||
{
|
{
|
||||||
"spikeout",
|
"spikeout",
|
||||||
|
NULL,
|
||||||
"Spikeout",
|
"Spikeout",
|
||||||
"Sega",
|
"Sega",
|
||||||
1998,
|
1998,
|
||||||
|
@ -1687,6 +1710,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Sega Rally 2
|
// Sega Rally 2
|
||||||
{
|
{
|
||||||
"srally2",
|
"srally2",
|
||||||
|
NULL,
|
||||||
"Sega Rally 2",
|
"Sega Rally 2",
|
||||||
"Sega",
|
"Sega",
|
||||||
1998,
|
1998,
|
||||||
|
@ -1762,6 +1786,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Sega Rally 2 DX
|
// Sega Rally 2 DX
|
||||||
{
|
{
|
||||||
"srally2x",
|
"srally2x",
|
||||||
|
NULL,
|
||||||
"Sega Rally 2 DX",
|
"Sega Rally 2 DX",
|
||||||
"Sega",
|
"Sega",
|
||||||
1998,
|
1998,
|
||||||
|
@ -1832,6 +1857,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Star Wars Trilogy (Revision A)
|
// Star Wars Trilogy (Revision A)
|
||||||
{
|
{
|
||||||
"swtrilgy",
|
"swtrilgy",
|
||||||
|
NULL,
|
||||||
"Star Wars Trilogy (Revision A)",
|
"Star Wars Trilogy (Revision A)",
|
||||||
"Sega, LucasArts",
|
"Sega, LucasArts",
|
||||||
1998,
|
1998,
|
||||||
|
@ -1904,6 +1930,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Star Wars Trilogy
|
// Star Wars Trilogy
|
||||||
{
|
{
|
||||||
"swtrilgya",
|
"swtrilgya",
|
||||||
|
"swtrilgy",
|
||||||
"Star Wars Trilogy",
|
"Star Wars Trilogy",
|
||||||
"Sega, LucasArts",
|
"Sega, LucasArts",
|
||||||
1998,
|
1998,
|
||||||
|
@ -1976,6 +2003,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Virtua Fighter 3 (Revision C)
|
// Virtua Fighter 3 (Revision C)
|
||||||
{
|
{
|
||||||
"vf3",
|
"vf3",
|
||||||
|
NULL,
|
||||||
"Virtua Fighter 3",
|
"Virtua Fighter 3",
|
||||||
"Sega",
|
"Sega",
|
||||||
1996,
|
1996,
|
||||||
|
@ -2049,6 +2077,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Virtua Fighter 3 (Revision A)
|
// Virtua Fighter 3 (Revision A)
|
||||||
{
|
{
|
||||||
"vf3a",
|
"vf3a",
|
||||||
|
"vf3",
|
||||||
"Virtua Fighter 3 (Revision A)",
|
"Virtua Fighter 3 (Revision A)",
|
||||||
"Sega",
|
"Sega",
|
||||||
1996,
|
1996,
|
||||||
|
@ -2122,6 +2151,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Virtua Fighter 3 Team Battle
|
// Virtua Fighter 3 Team Battle
|
||||||
{
|
{
|
||||||
"vf3tb",
|
"vf3tb",
|
||||||
|
"vf3",
|
||||||
"Virtua Fighter 3 Team Battle",
|
"Virtua Fighter 3 Team Battle",
|
||||||
"Sega",
|
"Sega",
|
||||||
1996,
|
1996,
|
||||||
|
@ -2195,6 +2225,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Virtual On: Oratorio Tangram (Revision B)
|
// Virtual On: Oratorio Tangram (Revision B)
|
||||||
{
|
{
|
||||||
"von2",
|
"von2",
|
||||||
|
NULL,
|
||||||
"Virtual On: Oratorio Tangram",
|
"Virtual On: Oratorio Tangram",
|
||||||
"Sega",
|
"Sega",
|
||||||
1998,
|
1998,
|
||||||
|
@ -2270,6 +2301,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Virtual On: Oratorio Tangram (Version 5.4g)
|
// Virtual On: Oratorio Tangram (Version 5.4g)
|
||||||
{
|
{
|
||||||
"von254g",
|
"von254g",
|
||||||
|
"von2",
|
||||||
"Virtual On: Oratorio Tangram (Version 5.4g)",
|
"Virtual On: Oratorio Tangram (Version 5.4g)",
|
||||||
"Sega",
|
"Sega",
|
||||||
1998,
|
1998,
|
||||||
|
@ -2345,6 +2377,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Virtua Striker 2 (Step 2.0)
|
// Virtua Striker 2 (Step 2.0)
|
||||||
{
|
{
|
||||||
"vs2",
|
"vs2",
|
||||||
|
NULL,
|
||||||
"Virtua Striker 2 (Step 2.0)",
|
"Virtua Striker 2 (Step 2.0)",
|
||||||
"Sega",
|
"Sega",
|
||||||
1997,
|
1997,
|
||||||
|
@ -2418,6 +2451,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Virtua Striker 2 (Step 1.5)
|
// Virtua Striker 2 (Step 1.5)
|
||||||
{
|
{
|
||||||
"vs215",
|
"vs215",
|
||||||
|
"vs2",
|
||||||
"Virtua Striker 2 (Step 1.5)",
|
"Virtua Striker 2 (Step 1.5)",
|
||||||
"Sega",
|
"Sega",
|
||||||
1997,
|
1997,
|
||||||
|
@ -2491,6 +2525,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Virtua Striker 2 '98 (Step 2.0)
|
// Virtua Striker 2 '98 (Step 2.0)
|
||||||
{
|
{
|
||||||
"vs298",
|
"vs298",
|
||||||
|
NULL,
|
||||||
"Virtua Striker 2 '98 (Step 2.0)",
|
"Virtua Striker 2 '98 (Step 2.0)",
|
||||||
"Sega",
|
"Sega",
|
||||||
1998,
|
1998,
|
||||||
|
@ -2564,6 +2599,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Virtua Striker 2 '98 (Step 1.5)
|
// Virtua Striker 2 '98 (Step 1.5)
|
||||||
{
|
{
|
||||||
"vs29815",
|
"vs29815",
|
||||||
|
"vs298",
|
||||||
"Virtua Striker 2 '98 (Step 1.5)",
|
"Virtua Striker 2 '98 (Step 1.5)",
|
||||||
"Sega",
|
"Sega",
|
||||||
1998,
|
1998,
|
||||||
|
@ -2637,6 +2673,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Virtua Striker 2 '99
|
// Virtua Striker 2 '99
|
||||||
{
|
{
|
||||||
"vs299",
|
"vs299",
|
||||||
|
"vs2v991",
|
||||||
"Virtua Striker 2 '99",
|
"Virtua Striker 2 '99",
|
||||||
"Sega",
|
"Sega",
|
||||||
1999,
|
1999,
|
||||||
|
@ -2710,6 +2747,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Virtua Striker 2 '99 (Revision A)
|
// Virtua Striker 2 '99 (Revision A)
|
||||||
{
|
{
|
||||||
"vs299a",
|
"vs299a",
|
||||||
|
"vs2v991",
|
||||||
"Virtua Striker 2 '99 (Revision A)",
|
"Virtua Striker 2 '99 (Revision A)",
|
||||||
"Sega",
|
"Sega",
|
||||||
1999,
|
1999,
|
||||||
|
@ -2783,6 +2821,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Virtua Striker 2 '99 (Revision B)
|
// Virtua Striker 2 '99 (Revision B)
|
||||||
{
|
{
|
||||||
"vs299b",
|
"vs299b",
|
||||||
|
"vs2v991",
|
||||||
"Virtua Striker 2 '99 (Revision B)",
|
"Virtua Striker 2 '99 (Revision B)",
|
||||||
"Sega",
|
"Sega",
|
||||||
1999,
|
1999,
|
||||||
|
@ -2856,6 +2895,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
// Virtua Striker 2 '99.1 (Revision B)
|
// Virtua Striker 2 '99.1 (Revision B)
|
||||||
{
|
{
|
||||||
"vs2v991",
|
"vs2v991",
|
||||||
|
NULL,
|
||||||
"Virtua Striker 2 '99.1",
|
"Virtua Striker 2 '99.1",
|
||||||
"Sega",
|
"Sega",
|
||||||
1999,
|
1999,
|
||||||
|
@ -2931,6 +2971,7 @@ const struct GameInfo g_Model3GameList[] =
|
||||||
"",
|
"",
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
|
|
@ -67,6 +67,7 @@ struct GameInfo
|
||||||
{
|
{
|
||||||
// Game information
|
// Game information
|
||||||
const char id[10]; // 9-character game identifier (also serves as zip archive file name)
|
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 *title; // complete game title
|
||||||
const char *mfgName; // name of manufacturer
|
const char *mfgName; // name of manufacturer
|
||||||
unsigned year; // year released (in decimal)
|
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)
|
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;
|
unz_file_info fileInfo;
|
||||||
const struct GameInfo *Game = NULL;
|
const struct GameInfo *Game = NULL;
|
||||||
const struct GameInfo *CurGame; // this is the game to which the last ROM found is thought to belong
|
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
|
int romIdx; // index within Game->ROM
|
||||||
unsigned romsFound[sizeof(Game->ROM)/sizeof(struct ROMInfo)], numROMs;
|
unsigned romsFound[sizeof(Game->ROM)/sizeof(struct ROMInfo)], numROMs;
|
||||||
int err;
|
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
|
// Second pass: check if all ROM files for the identified game are present
|
||||||
err = unzGoToFirstFile(zf);
|
err = unzGoToFirstFile(zf);
|
||||||
if (UNZ_OK != err)
|
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
|
// If we have found a ROM for the correct game, mark its corresponding indicator
|
||||||
romsFound[romIdx] = 1;
|
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
|
// Compute how many ROM files this game has
|
||||||
for (numROMs = 0; Game->ROM[numROMs].region != NULL; numROMs++)
|
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++)
|
for (i = 0; i < numROMs; i++)
|
||||||
{
|
{
|
||||||
if ((0 == romsFound[i]) && !Game->ROM[i].optional) // if not found and also not optional
|
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)
|
if (err != OKAY)
|
||||||
{
|
{
|
||||||
unzClose(zf);
|
unzClose(zf);
|
||||||
|
if (zfp) unzClose(zfp);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -314,6 +367,7 @@ const struct GameInfo * LoadROMSetFromZIPFile(const struct ROMMap *Map, const st
|
||||||
if (NULL == buf)
|
if (NULL == buf)
|
||||||
{
|
{
|
||||||
unzClose(zf);
|
unzClose(zf);
|
||||||
|
if (zfp) unzClose(zfp);
|
||||||
ErrorLog("Insufficient memory to load ROM files (%d bytes).", maxSize);
|
ErrorLog("Insufficient memory to load ROM files (%d bytes).", maxSize);
|
||||||
return NULL;
|
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))
|
if (OKAY == LoadROM(buf, maxSize, Map, &Game->ROM[romIdx], zf, zipFile, loadAll))
|
||||||
romsFound[romIdx] = 1; // success! mark as loaded
|
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
|
// Ensure all ROMs were loaded
|
||||||
if (loadAll)
|
if (loadAll)
|
||||||
{
|
{
|
||||||
|
@ -350,7 +428,7 @@ const struct GameInfo * LoadROMSetFromZIPFile(const struct ROMMap *Map, const st
|
||||||
for (i = 0; i < numROMs; i++)
|
for (i = 0; i < numROMs; i++)
|
||||||
{
|
{
|
||||||
if (!(romsFound[i] || Game->ROM[i].optional)) // if ROM not found and also not optional
|
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
|
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