naomi: search parent rom path for gdrom

This commit is contained in:
Flyinghead 2020-11-24 20:50:50 +01:00
parent 4dd05ca23f
commit 305ab38ac8
3 changed files with 16 additions and 12 deletions

View File

@ -495,9 +495,16 @@ void GDCartridge::device_start()
u8 buffer[2048]; u8 buffer[2048];
std::string gdrom_path = get_game_basename() + "/" + gdrom_name; std::string gdrom_path = get_game_basename() + "/" + gdrom_name;
Disc *gdrom = OpenDisc((gdrom_path + ".chd").c_str()); Disc *gdrom = OpenDisc((gdrom_path + ".chd").c_str());
if (gdrom == NULL) if (gdrom == nullptr)
gdrom = OpenDisc((gdrom_path + ".gdi").c_str()); gdrom = OpenDisc((gdrom_path + ".gdi").c_str());
if (gdrom == NULL) if (gdrom_parent_name != nullptr && gdrom == nullptr)
{
std::string gdrom_parent_path = get_game_basename() + "/" + gdrom_parent_name;
gdrom = OpenDisc((gdrom_parent_path + ".chd").c_str());
if (gdrom == nullptr)
gdrom = OpenDisc((gdrom_parent_path + ".gdi").c_str());
}
if (gdrom == nullptr)
throw NaomiCartException("Naomi GDROM: Cannot open " + gdrom_path + ".chd or " + gdrom_path + ".gdi"); throw NaomiCartException("Naomi GDROM: Cannot open " + gdrom_path + ".chd or " + gdrom_path + ".gdi");
// primary volume descriptor // primary volume descriptor

View File

@ -20,10 +20,6 @@ class GDCartridge: public NaomiCartridge {
public: public:
GDCartridge(u32 size) : NaomiCartridge(size) GDCartridge(u32 size) : NaomiCartridge(size)
{ {
gdrom_name = NULL;
dimm_data = NULL;
dimm_data_size = 0;
dimm_cur_address = 0;
} }
~GDCartridge() ~GDCartridge()
{ {
@ -39,17 +35,18 @@ public:
virtual bool Read(u32 offset, u32 size, void* dst) override; virtual bool Read(u32 offset, u32 size, void* dst) override;
virtual std::string GetGameId() override; virtual std::string GetGameId() override;
void SetGDRomName(const char *name) { this->gdrom_name = name; } void SetGDRomName(const char *name, const char *parentName) { this->gdrom_name = name; this->gdrom_parent_name = parentName; }
private: private:
enum { FILENAME_LENGTH=24 }; enum { FILENAME_LENGTH=24 };
const char *gdrom_name; const char *gdrom_name = nullptr;
const char *gdrom_parent_name = nullptr;
u32 dimm_cur_address; u32 dimm_cur_address = 0;
u8 *dimm_data; u8 *dimm_data = nullptr;
u32 dimm_data_size; u32 dimm_data_size = 0;
static const u32 DES_LEFTSWAP[]; static const u32 DES_LEFTSWAP[];
static const u32 DES_RIGHTSWAP[]; static const u32 DES_RIGHTSWAP[];

View File

@ -258,7 +258,7 @@ static void naomi_cart_LoadZip(const char *filename)
case GD: case GD:
{ {
GDCartridge *gdcart = new GDCartridge(game->size); GDCartridge *gdcart = new GDCartridge(game->size);
gdcart->SetGDRomName(game->gdrom_name); gdcart->SetGDRomName(game->gdrom_name, game->parent_name);
CurrentCartridge = gdcart; CurrentCartridge = gdcart;
} }
break; break;