Move the GB ROM Info dialog to its own class
* Move the Game Maker information to a separate helper method. * Make the dialog strings more localizable.
This commit is contained in:
parent
d1f6500098
commit
bad388e0aa
File diff suppressed because it is too large
Load Diff
|
@ -771,6 +771,8 @@ set(
|
||||||
dialogs/directories-config.cpp
|
dialogs/directories-config.cpp
|
||||||
dialogs/display-config.cpp
|
dialogs/display-config.cpp
|
||||||
dialogs/game-boy-config.cpp
|
dialogs/game-boy-config.cpp
|
||||||
|
dialogs/game-maker.cpp
|
||||||
|
dialogs/gb-rom-info.cpp
|
||||||
widgets/group-check-box.cpp
|
widgets/group-check-box.cpp
|
||||||
widgets/keep-on-top-styler.cpp
|
widgets/keep-on-top-styler.cpp
|
||||||
widgets/option-validator.cpp
|
widgets/option-validator.cpp
|
||||||
|
@ -822,6 +824,8 @@ set(
|
||||||
dialogs/directories-config.h
|
dialogs/directories-config.h
|
||||||
dialogs/display-config.h
|
dialogs/display-config.h
|
||||||
dialogs/game-boy-config.h
|
dialogs/game-boy-config.h
|
||||||
|
dialogs/game-maker.h
|
||||||
|
dialogs/gb-rom-info.h
|
||||||
dialogs/validated-child.h
|
dialogs/validated-child.h
|
||||||
widgets/dpi-support.h
|
widgets/dpi-support.h
|
||||||
widgets/group-check-box.h
|
widgets/group-check-box.h
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "wxvbam.h"
|
#include "wxvbam.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include <wx/aboutdlg.h>
|
#include <wx/aboutdlg.h>
|
||||||
#include <wx/ffile.h>
|
#include <wx/ffile.h>
|
||||||
#include <wx/numdlg.h>
|
#include <wx/numdlg.h>
|
||||||
|
@ -16,14 +17,10 @@
|
||||||
#include "../gba/agbprint.h"
|
#include "../gba/agbprint.h"
|
||||||
#include "config/option-proxy.h"
|
#include "config/option-proxy.h"
|
||||||
#include "config/option.h"
|
#include "config/option.h"
|
||||||
|
#include "dialogs/game-maker.h"
|
||||||
|
|
||||||
#if (wxMAJOR_VERSION < 3)
|
|
||||||
#define GetXRCDialog(n) \
|
|
||||||
wxStaticCast(wxGetApp().frame->FindWindow(XRCID(n)), wxDialog)
|
|
||||||
#else
|
|
||||||
#define GetXRCDialog(n) \
|
#define GetXRCDialog(n) \
|
||||||
wxStaticCast(wxGetApp().frame->FindWindowByName(n), wxDialog)
|
wxStaticCast(wxGetApp().frame->FindWindowByName(n), wxDialog)
|
||||||
#endif
|
|
||||||
|
|
||||||
bool cmditem_lt(const struct cmditem& cmd1, const struct cmditem& cmd2)
|
bool cmditem_lt(const struct cmditem& cmd1, const struct cmditem& cmd2)
|
||||||
{
|
{
|
||||||
|
@ -280,236 +277,6 @@ EVT_HANDLER(wxID_FILE10, "Load recent ROM 10")
|
||||||
panel->LoadGame(gopts.recent->GetHistoryFile(9));
|
panel->LoadGame(gopts.recent->GetHistoryFile(9));
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct rom_maker {
|
|
||||||
const wxString code, name;
|
|
||||||
} makers[] = {
|
|
||||||
{ wxT("01"), wxT("Nintendo") },
|
|
||||||
{ wxT("02"), wxT("Rocket Games") },
|
|
||||||
{ wxT("08"), wxT("Capcom") },
|
|
||||||
{ wxT("09"), wxT("Hot B Co.") },
|
|
||||||
{ wxT("0A"), wxT("Jaleco") },
|
|
||||||
{ wxT("0B"), wxT("Coconuts Japan") },
|
|
||||||
{ wxT("0C"), wxT("Coconuts Japan/G.X.Media") },
|
|
||||||
{ wxT("0H"), wxT("Starfish") },
|
|
||||||
{ wxT("0L"), wxT("Warashi Inc.") },
|
|
||||||
{ wxT("0N"), wxT("Nowpro") },
|
|
||||||
{ wxT("0P"), wxT("Game Village") },
|
|
||||||
{ wxT("13"), wxT("Electronic Arts Japan") },
|
|
||||||
{ wxT("18"), wxT("Hudson Soft Japan") },
|
|
||||||
{ wxT("19"), wxT("S.C.P.") },
|
|
||||||
{ wxT("1A"), wxT("Yonoman") },
|
|
||||||
{ wxT("1G"), wxT("SMDE") },
|
|
||||||
{ wxT("1P"), wxT("Creatures Inc.") },
|
|
||||||
{ wxT("1Q"), wxT("TDK Deep Impresion") },
|
|
||||||
{ wxT("20"), wxT("Destination Software") },
|
|
||||||
{ wxT("22"), wxT("VR 1 Japan") },
|
|
||||||
{ wxT("25"), wxT("San-X") },
|
|
||||||
{ wxT("28"), wxT("Kemco Japan") },
|
|
||||||
{ wxT("29"), wxT("Seta") },
|
|
||||||
{ wxT("2H"), wxT("Ubisoft Japan") },
|
|
||||||
{ wxT("2K"), wxT("NEC InterChannel") },
|
|
||||||
{ wxT("2L"), wxT("Tam") },
|
|
||||||
{ wxT("2M"), wxT("Jordan") },
|
|
||||||
{ wxT("2N"), wxT("Smilesoft") },
|
|
||||||
{ wxT("2Q"), wxT("Mediakite") },
|
|
||||||
{ wxT("36"), wxT("Codemasters") },
|
|
||||||
{ wxT("37"), wxT("GAGA Communications") },
|
|
||||||
{ wxT("38"), wxT("Laguna") },
|
|
||||||
{ wxT("39"), wxT("Telstar Fun and Games") },
|
|
||||||
{ wxT("41"), wxT("Ubi Soft Entertainment") },
|
|
||||||
{ wxT("42"), wxT("Sunsoft") },
|
|
||||||
{ wxT("47"), wxT("Spectrum Holobyte") },
|
|
||||||
{ wxT("49"), wxT("IREM") },
|
|
||||||
{ wxT("4D"), wxT("Malibu Games") },
|
|
||||||
{ wxT("4F"), wxT("Eidos/U.S. Gold") },
|
|
||||||
{ wxT("4J"), wxT("Fox Interactive") },
|
|
||||||
{ wxT("4K"), wxT("Time Warner Interactive") },
|
|
||||||
{ wxT("4Q"), wxT("Disney") },
|
|
||||||
{ wxT("4S"), wxT("Black Pearl") },
|
|
||||||
{ wxT("4X"), wxT("GT Interactive") },
|
|
||||||
{ wxT("4Y"), wxT("RARE") },
|
|
||||||
{ wxT("4Z"), wxT("Crave Entertainment") },
|
|
||||||
{ wxT("50"), wxT("Absolute Entertainment") },
|
|
||||||
{ wxT("51"), wxT("Acclaim") },
|
|
||||||
{ wxT("52"), wxT("Activision") },
|
|
||||||
{ wxT("53"), wxT("American Sammy Corp.") },
|
|
||||||
{ wxT("54"), wxT("Take 2 Interactive") },
|
|
||||||
{ wxT("55"), wxT("Hi Tech") },
|
|
||||||
{ wxT("56"), wxT("LJN LTD.") },
|
|
||||||
{ wxT("58"), wxT("Mattel") },
|
|
||||||
{ wxT("5A"), wxT("Mindscape/Red Orb Ent.") },
|
|
||||||
{ wxT("5C"), wxT("Taxan") },
|
|
||||||
{ wxT("5D"), wxT("Midway") },
|
|
||||||
{ wxT("5F"), wxT("American Softworks") },
|
|
||||||
{ wxT("5G"), wxT("Majesco Sales Inc") },
|
|
||||||
{ wxT("5H"), wxT("3DO") },
|
|
||||||
{ wxT("5K"), wxT("Hasbro") },
|
|
||||||
{ wxT("5L"), wxT("NewKidCo") },
|
|
||||||
{ wxT("5M"), wxT("Telegames") },
|
|
||||||
{ wxT("5N"), wxT("Metro3D") },
|
|
||||||
{ wxT("5P"), wxT("Vatical Entertainment") },
|
|
||||||
{ wxT("5Q"), wxT("LEGO Media") },
|
|
||||||
{ wxT("5S"), wxT("Xicat Interactive") },
|
|
||||||
{ wxT("5T"), wxT("Cryo Interactive") },
|
|
||||||
{ wxT("5W"), wxT("Red Storm Ent./BKN Ent.") },
|
|
||||||
{ wxT("5X"), wxT("Microids") },
|
|
||||||
{ wxT("5Z"), wxT("Conspiracy Entertainment Corp.") },
|
|
||||||
{ wxT("60"), wxT("Titus Interactive Studios") },
|
|
||||||
{ wxT("61"), wxT("Virgin Interactive") },
|
|
||||||
{ wxT("62"), wxT("Maxis") },
|
|
||||||
{ wxT("64"), wxT("LucasArts Entertainment") },
|
|
||||||
{ wxT("67"), wxT("Ocean") },
|
|
||||||
{ wxT("69"), wxT("Electronic Arts") },
|
|
||||||
{ wxT("6E"), wxT("Elite Systems Ltd.") },
|
|
||||||
{ wxT("6F"), wxT("Electro Brain") },
|
|
||||||
{ wxT("6G"), wxT("The Learning Company") },
|
|
||||||
{ wxT("6H"), wxT("BBC") },
|
|
||||||
{ wxT("6J"), wxT("Software 2000") },
|
|
||||||
{ wxT("6L"), wxT("BAM! Entertainment") },
|
|
||||||
{ wxT("6M"), wxT("Studio 3") },
|
|
||||||
{ wxT("6Q"), wxT("Classified Games") },
|
|
||||||
{ wxT("6S"), wxT("TDK Mediactive") },
|
|
||||||
{ wxT("6U"), wxT("DreamCatcher") },
|
|
||||||
{ wxT("6V"), wxT("JoWood Productions") },
|
|
||||||
{ wxT("6W"), wxT("SEGA") },
|
|
||||||
{ wxT("6X"), wxT("Wannado Edition") },
|
|
||||||
{ wxT("6Y"), wxT("LSP") },
|
|
||||||
{ wxT("6Z"), wxT("ITE Media") },
|
|
||||||
{ wxT("70"), wxT("Infogrames") },
|
|
||||||
{ wxT("71"), wxT("Interplay") },
|
|
||||||
{ wxT("72"), wxT("JVC Musical Industries Inc") },
|
|
||||||
{ wxT("73"), wxT("Parker Brothers") },
|
|
||||||
{ wxT("75"), wxT("SCI") },
|
|
||||||
{ wxT("78"), wxT("THQ") },
|
|
||||||
{ wxT("79"), wxT("Accolade") },
|
|
||||||
{ wxT("7A"), wxT("Triffix Ent. Inc.") },
|
|
||||||
{ wxT("7C"), wxT("Microprose Software") },
|
|
||||||
{ wxT("7D"), wxT("Universal Interactive Studios") },
|
|
||||||
{ wxT("7F"), wxT("Kemco") },
|
|
||||||
{ wxT("7G"), wxT("Rage Software") },
|
|
||||||
{ wxT("7H"), wxT("Encore") },
|
|
||||||
{ wxT("7J"), wxT("Zoo") },
|
|
||||||
{ wxT("7K"), wxT("BVM") },
|
|
||||||
{ wxT("7L"), wxT("Simon & Schuster Interactive") },
|
|
||||||
{ wxT("7M"), wxT("Asmik Ace Entertainment Inc./AIA") },
|
|
||||||
{ wxT("7N"), wxT("Empire Interactive") },
|
|
||||||
{ wxT("7Q"), wxT("Jester Interactive") },
|
|
||||||
{ wxT("7T"), wxT("Scholastic") },
|
|
||||||
{ wxT("7U"), wxT("Ignition Entertainment") },
|
|
||||||
{ wxT("7W"), wxT("Stadlbauer") },
|
|
||||||
{ wxT("80"), wxT("Misawa") },
|
|
||||||
{ wxT("83"), wxT("LOZC") },
|
|
||||||
{ wxT("8B"), wxT("Bulletproof Software") },
|
|
||||||
{ wxT("8C"), wxT("Vic Tokai Inc.") },
|
|
||||||
{ wxT("8J"), wxT("General Entertainment") },
|
|
||||||
{ wxT("8N"), wxT("Success") },
|
|
||||||
{ wxT("8P"), wxT("SEGA Japan") },
|
|
||||||
{ wxT("91"), wxT("Chun Soft") },
|
|
||||||
{ wxT("92"), wxT("Video System") },
|
|
||||||
{ wxT("93"), wxT("BEC") },
|
|
||||||
{ wxT("96"), wxT("Yonezawa/S'pal") },
|
|
||||||
{ wxT("97"), wxT("Kaneko") },
|
|
||||||
{ wxT("99"), wxT("Victor Interactive Software") },
|
|
||||||
{ wxT("9A"), wxT("Nichibutsu/Nihon Bussan") },
|
|
||||||
{ wxT("9B"), wxT("Tecmo") },
|
|
||||||
{ wxT("9C"), wxT("Imagineer") },
|
|
||||||
{ wxT("9F"), wxT("Nova") },
|
|
||||||
{ wxT("9H"), wxT("Bottom Up") },
|
|
||||||
{ wxT("9L"), wxT("Hasbro Japan") },
|
|
||||||
{ wxT("9N"), wxT("Marvelous Entertainment") },
|
|
||||||
{ wxT("9P"), wxT("Keynet Inc.") },
|
|
||||||
{ wxT("9Q"), wxT("Hands-On Entertainment") },
|
|
||||||
{ wxT("A0"), wxT("Telenet") },
|
|
||||||
{ wxT("A1"), wxT("Hori") },
|
|
||||||
{ wxT("A4"), wxT("Konami") },
|
|
||||||
{ wxT("A6"), wxT("Kawada") },
|
|
||||||
{ wxT("A7"), wxT("Takara") },
|
|
||||||
{ wxT("A9"), wxT("Technos Japan Corp.") },
|
|
||||||
{ wxT("AA"), wxT("JVC") },
|
|
||||||
{ wxT("AC"), wxT("Toei Animation") },
|
|
||||||
{ wxT("AD"), wxT("Toho") },
|
|
||||||
{ wxT("AF"), wxT("Namco") },
|
|
||||||
{ wxT("AG"), wxT("Media Rings Corporation") },
|
|
||||||
{ wxT("AH"), wxT("J-Wing") },
|
|
||||||
{ wxT("AK"), wxT("KID") },
|
|
||||||
{ wxT("AL"), wxT("MediaFactory") },
|
|
||||||
{ wxT("AP"), wxT("Infogrames Hudson") },
|
|
||||||
{ wxT("AQ"), wxT("Kiratto. Ludic Inc") },
|
|
||||||
{ wxT("B0"), wxT("Acclaim Japan") },
|
|
||||||
{ wxT("B1"), wxT("ASCII") },
|
|
||||||
{ wxT("B2"), wxT("Bandai") },
|
|
||||||
{ wxT("B4"), wxT("Enix") },
|
|
||||||
{ wxT("B6"), wxT("HAL Laboratory") },
|
|
||||||
{ wxT("B7"), wxT("SNK") },
|
|
||||||
{ wxT("B9"), wxT("Pony Canyon Hanbai") },
|
|
||||||
{ wxT("BA"), wxT("Culture Brain") },
|
|
||||||
{ wxT("BB"), wxT("Sunsoft") },
|
|
||||||
{ wxT("BD"), wxT("Sony Imagesoft") },
|
|
||||||
{ wxT("BF"), wxT("Sammy") },
|
|
||||||
{ wxT("BG"), wxT("Magical") },
|
|
||||||
{ wxT("BJ"), wxT("Compile") },
|
|
||||||
{ wxT("BL"), wxT("MTO Inc.") },
|
|
||||||
{ wxT("BN"), wxT("Sunrise Interactive") },
|
|
||||||
{ wxT("BP"), wxT("Global A Entertainment") },
|
|
||||||
{ wxT("BQ"), wxT("Fuuki") },
|
|
||||||
{ wxT("C0"), wxT("Taito") },
|
|
||||||
{ wxT("C2"), wxT("Kemco") },
|
|
||||||
{ wxT("C3"), wxT("Square Soft") },
|
|
||||||
{ wxT("C5"), wxT("Data East") },
|
|
||||||
{ wxT("C6"), wxT("Tonkin House") },
|
|
||||||
{ wxT("C8"), wxT("Koei") },
|
|
||||||
{ wxT("CA"), wxT("Konami/Palcom/Ultra") },
|
|
||||||
{ wxT("CB"), wxT("Vapinc/NTVIC") },
|
|
||||||
{ wxT("CC"), wxT("Use Co.,Ltd.") },
|
|
||||||
{ wxT("CD"), wxT("Meldac") },
|
|
||||||
{ wxT("CE"), wxT("FCI/Pony Canyon") },
|
|
||||||
{ wxT("CF"), wxT("Angel") },
|
|
||||||
{ wxT("CM"), wxT("Konami Computer Entertainment Osaka") },
|
|
||||||
{ wxT("CP"), wxT("Enterbrain") },
|
|
||||||
{ wxT("D1"), wxT("Sofel") },
|
|
||||||
{ wxT("D2"), wxT("Quest") },
|
|
||||||
{ wxT("D3"), wxT("Sigma Enterprises") },
|
|
||||||
{ wxT("D4"), wxT("Ask Kodansa") },
|
|
||||||
{ wxT("D6"), wxT("Naxat") },
|
|
||||||
{ wxT("D7"), wxT("Copya System") },
|
|
||||||
{ wxT("D9"), wxT("Banpresto") },
|
|
||||||
{ wxT("DA"), wxT("TOMY") },
|
|
||||||
{ wxT("DB"), wxT("LJN Japan") },
|
|
||||||
{ wxT("DD"), wxT("NCS") },
|
|
||||||
{ wxT("DF"), wxT("Altron Corporation") },
|
|
||||||
{ wxT("DH"), wxT("Gaps Inc.") },
|
|
||||||
{ wxT("DN"), wxT("ELF") },
|
|
||||||
{ wxT("E2"), wxT("Yutaka") },
|
|
||||||
{ wxT("E3"), wxT("Varie") },
|
|
||||||
{ wxT("E5"), wxT("Epoch") },
|
|
||||||
{ wxT("E7"), wxT("Athena") },
|
|
||||||
{ wxT("E8"), wxT("Asmik Ace Entertainment Inc.") },
|
|
||||||
{ wxT("E9"), wxT("Natsume") },
|
|
||||||
{ wxT("EA"), wxT("King Records") },
|
|
||||||
{ wxT("EB"), wxT("Atlus") },
|
|
||||||
{ wxT("EC"), wxT("Epic/Sony Records") },
|
|
||||||
{ wxT("EE"), wxT("IGS") },
|
|
||||||
{ wxT("EL"), wxT("Spike") },
|
|
||||||
{ wxT("EM"), wxT("Konami Computer Entertainment Tokyo") },
|
|
||||||
{ wxT("EN"), wxT("Alphadream Corporation") },
|
|
||||||
{ wxT("F0"), wxT("A Wave") },
|
|
||||||
{ wxT("G1"), wxT("PCCW") },
|
|
||||||
{ wxT("G4"), wxT("KiKi Co Ltd") },
|
|
||||||
{ wxT("G5"), wxT("Open Sesame Inc.") },
|
|
||||||
{ wxT("G6"), wxT("Sims") },
|
|
||||||
{ wxT("G7"), wxT("Broccoli") },
|
|
||||||
{ wxT("G8"), wxT("Avex") },
|
|
||||||
{ wxT("G9"), wxT("D3 Publisher") },
|
|
||||||
{ wxT("GB"), wxT("Konami Computer Entertainment Japan") },
|
|
||||||
{ wxT("GD"), wxT("Square-Enix") },
|
|
||||||
{ wxT("HY"), wxT("Sachen") }
|
|
||||||
};
|
|
||||||
#define num_makers (sizeof(makers) / sizeof(makers[0]))
|
|
||||||
static bool maker_lt(const rom_maker& r1, const rom_maker& r2)
|
|
||||||
{
|
|
||||||
return wxStrcmp(r1.code, r2.code) < 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetDialogLabel(wxDialog* dlg, const wxString& id, wxString ts, size_t l)
|
void SetDialogLabel(wxDialog* dlg, const wxString& id, wxString ts, size_t l)
|
||||||
{
|
{
|
||||||
(void)l; // unused params
|
(void)l; // unused params
|
||||||
|
@ -532,11 +299,6 @@ EVT_HANDLER_MASK(RomInformation, "ROM information...", CMDEN_GB | CMDEN_GBA)
|
||||||
s.Printf(wxT("%02x"), (unsigned int)b); \
|
s.Printf(wxT("%02x"), (unsigned int)b); \
|
||||||
setlab(id); \
|
setlab(id); \
|
||||||
} while (0)
|
} while (0)
|
||||||
#define setblabs(id, b, ts) \
|
|
||||||
do { \
|
|
||||||
s.Printf(wxT("%02x (%s)"), (unsigned int)b, ts.c_str()); \
|
|
||||||
setlab(id); \
|
|
||||||
} while (0)
|
|
||||||
#define setlabs(id, ts, l) \
|
#define setlabs(id, ts, l) \
|
||||||
do { \
|
do { \
|
||||||
s = wxString((const char*)&(ts), wxConvLibc, l); \
|
s = wxString((const char*)&(ts), wxConvLibc, l); \
|
||||||
|
@ -544,221 +306,9 @@ EVT_HANDLER_MASK(RomInformation, "ROM information...", CMDEN_GB | CMDEN_GBA)
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
switch (panel->game_type()) {
|
switch (panel->game_type()) {
|
||||||
case IMAGE_GB: {
|
case IMAGE_GB:
|
||||||
wxDialog* dlg = GetXRCDialog("GBROMInfo");
|
ShowModal(GetXRCDialog("GBROMInfo"));
|
||||||
setlabs("Title", gbRom[0x134], 15);
|
break;
|
||||||
setblab("Color", gbRom[0x143]);
|
|
||||||
|
|
||||||
if (gbRom[0x14b] == 0x33)
|
|
||||||
s = wxString((const char*)&gbRom[0x144], wxConvUTF8, 2);
|
|
||||||
else
|
|
||||||
s.Printf(wxT("%02x"), gbRom[0x14b]);
|
|
||||||
|
|
||||||
setlab("MakerCode");
|
|
||||||
const rom_maker m = { s, wxString() }, *rm;
|
|
||||||
rm = std::lower_bound(&makers[0], &makers[num_makers], m, maker_lt);
|
|
||||||
|
|
||||||
if (rm < &makers[num_makers] && !wxStrcmp(m.code, rm->code))
|
|
||||||
s = rm->name;
|
|
||||||
else
|
|
||||||
s = _("Unknown");
|
|
||||||
|
|
||||||
setlab("MakerName");
|
|
||||||
setblab("UnitCode", gbRom[0x146]);
|
|
||||||
wxString type;
|
|
||||||
|
|
||||||
switch (gbRom[0x147]) {
|
|
||||||
case 0x00:
|
|
||||||
type = _("ROM");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x01:
|
|
||||||
type = _("ROM + MBC1");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x02:
|
|
||||||
type = _("ROM + MBC1 + RAM");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x03:
|
|
||||||
type = _("ROM + MBC1 + RAM + BATT");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x05:
|
|
||||||
type = _("ROM + MBC2");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x06:
|
|
||||||
type = _("ROM + MBC2 + BATT");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x0b:
|
|
||||||
type = _("ROM + MMM01");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x0c:
|
|
||||||
type = _("ROM + MMM01 + RAM");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x0d:
|
|
||||||
type = _("ROM + MMM01 + RAM + BATT");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x0f:
|
|
||||||
type = _("ROM + MBC3 + TIMER + BATT");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x10:
|
|
||||||
type = _("ROM + MBC3 + TIMER + RAM + BATT");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x11:
|
|
||||||
type = _("ROM + MBC3");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x12:
|
|
||||||
type = _("ROM + MBC3 + RAM");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x13:
|
|
||||||
type = _("ROM + MBC3 + RAM + BATT");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x19:
|
|
||||||
type = _("ROM + MBC5");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x1a:
|
|
||||||
type = _("ROM + MBC5 + RAM");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x1b:
|
|
||||||
type = _("ROM + MBC5 + RAM + BATT");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x1c:
|
|
||||||
type = _("ROM + MBC5 + RUMBLE");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x1d:
|
|
||||||
type = _("ROM + MBC5 + RUMBLE + RAM");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x1e:
|
|
||||||
type = _("ROM + MBC5 + RUMBLE + RAM + BATT");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x22:
|
|
||||||
type = _("ROM + MBC7 + BATT");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x55:
|
|
||||||
type = _("Game Genie");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x56:
|
|
||||||
type = _("Game Shark 3.0");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0xfc:
|
|
||||||
type = _("ROM + POCKET CAMERA");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0xfd:
|
|
||||||
type = _("ROM + BANDAI TAMA5");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0xfe:
|
|
||||||
type = _("ROM + HuC-3");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0xff:
|
|
||||||
type = _("ROM + HuC-1");
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
type = _("Unknown");
|
|
||||||
}
|
|
||||||
|
|
||||||
setblabs("DeviceType", gbRom[0x147], type);
|
|
||||||
|
|
||||||
switch (gbRom[0x148]) {
|
|
||||||
case 0:
|
|
||||||
type = wxT("32K");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
type = wxT("64K");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
type = wxT("128K");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
type = wxT("256K");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4:
|
|
||||||
type = wxT("512K");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 5:
|
|
||||||
type = wxT("1M");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 6:
|
|
||||||
type = wxT("2M");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 7:
|
|
||||||
type = wxT("4M");
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
type = _("Unknown");
|
|
||||||
}
|
|
||||||
|
|
||||||
setblabs("ROMSize", gbRom[0x148], type);
|
|
||||||
|
|
||||||
switch (gbRom[0x149]) {
|
|
||||||
case 0:
|
|
||||||
type = _("None");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
type = wxT("2K");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
type = wxT("8K");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
type = wxT("32K");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4:
|
|
||||||
type = wxT("128K");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 5:
|
|
||||||
type = wxT("64K");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
setblabs("RAMSize", gbRom[0x149], type);
|
|
||||||
setblab("DestCode", gbRom[0x14a]);
|
|
||||||
setblab("LicCode", gbRom[0x14b]);
|
|
||||||
setblab("Version", gbRom[0x14c]);
|
|
||||||
s.Printf(wxT("%02x (%02x)"), g_gbCartData.actual_header_checksum(), g_gbCartData.header_checksum());
|
|
||||||
setlab("CRC");
|
|
||||||
s.Printf(wxT("%04x (%04x)"), g_gbCartData.actual_global_checksum(), g_gbCartData.global_checksum());
|
|
||||||
setlab("Checksum");
|
|
||||||
dlg->Fit();
|
|
||||||
ShowModal(dlg);
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case IMAGE_GBA: {
|
case IMAGE_GBA: {
|
||||||
IdentifyRom();
|
IdentifyRom();
|
||||||
wxDialog* dlg = GetXRCDialog("GBAROMInfo");
|
wxDialog* dlg = GetXRCDialog("GBAROMInfo");
|
||||||
|
@ -771,14 +321,7 @@ EVT_HANDLER_MASK(RomInformation, "ROM information...", CMDEN_GB | CMDEN_GBA)
|
||||||
SetDialogLabel(dlg, wxT("CRC32"), rom_crc32, 8);
|
SetDialogLabel(dlg, wxT("CRC32"), rom_crc32, 8);
|
||||||
setlabs("GameCode", rom[0xac], 4);
|
setlabs("GameCode", rom[0xac], 4);
|
||||||
setlabs("MakerCode", rom[0xb0], 2);
|
setlabs("MakerCode", rom[0xb0], 2);
|
||||||
const rom_maker m = { s, wxString() }, *rm;
|
s = dialogs::GetGameMakerName(s.ToStdString());
|
||||||
rm = std::lower_bound(&makers[0], &makers[num_makers], m, maker_lt);
|
|
||||||
|
|
||||||
if (rm < &makers[num_makers] && !wxStrcmp(m.code, rm->code))
|
|
||||||
s = rm->name;
|
|
||||||
else
|
|
||||||
s = _("Unknown");
|
|
||||||
|
|
||||||
setlab("MakerName");
|
setlab("MakerName");
|
||||||
setblab("UnitCode", rom[0xb3]);
|
setblab("UnitCode", rom[0xb3]);
|
||||||
s.Printf(wxT("%02x"), (unsigned int)rom[0xb4]);
|
s.Printf(wxT("%02x"), (unsigned int)rom[0xb4]);
|
||||||
|
|
|
@ -0,0 +1,248 @@
|
||||||
|
#include "game-maker.h"
|
||||||
|
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
|
#include <wx/translation.h>
|
||||||
|
|
||||||
|
namespace dialogs {
|
||||||
|
|
||||||
|
const wxString& GetGameMakerName(const std::string& makerCode) {
|
||||||
|
static const std::unordered_map<std::string, wxString> kGameMakersMap = {
|
||||||
|
{"01", "Nintendo R&&D1"},
|
||||||
|
{"02", "Rocket Games"},
|
||||||
|
{"08", "Capcom"},
|
||||||
|
{"09", "Hot B Co."},
|
||||||
|
{"0A", "Jaleco"},
|
||||||
|
{"0B", "Coconuts Japan"},
|
||||||
|
{"0C", "Coconuts Japan/G.X.Media"},
|
||||||
|
{"0H", "Starfish"},
|
||||||
|
{"0L", "Warashi Inc."},
|
||||||
|
{"0N", "Nowpro"},
|
||||||
|
{"0P", "Game Village"},
|
||||||
|
{"13", "Electronic Arts Japan"},
|
||||||
|
{"18", "Hudson Soft Japan"},
|
||||||
|
{"19", "S.C.P."},
|
||||||
|
{"1A", "Yonoman"},
|
||||||
|
{"1G", "SMDE"},
|
||||||
|
{"1P", "Creatures Inc."},
|
||||||
|
{"1Q", "TDK Deep Impresion"},
|
||||||
|
{"20", "Destination Software"},
|
||||||
|
{"22", "VR 1 Japan"},
|
||||||
|
{"25", "San-X"},
|
||||||
|
{"28", "Kemco Japan"},
|
||||||
|
{"29", "Seta"},
|
||||||
|
{"2H", "Ubisoft Japan"},
|
||||||
|
{"2K", "NEC InterChannel"},
|
||||||
|
{"2L", "Tam"},
|
||||||
|
{"2M", "Jordan"},
|
||||||
|
{"2N", "Smilesoft"},
|
||||||
|
{"2Q", "Mediakite"},
|
||||||
|
{"31", "Nintendo"},
|
||||||
|
{"36", "Codemasters"},
|
||||||
|
{"37", "GAGA Communications"},
|
||||||
|
{"38", "Laguna"},
|
||||||
|
{"39", "Telstar Fun and Games"},
|
||||||
|
{"41", "Ubi Soft Entertainment"},
|
||||||
|
{"42", "Sunsoft"},
|
||||||
|
{"47", "Spectrum Holobyte"},
|
||||||
|
{"49", "IREM"},
|
||||||
|
{"4D", "Malibu Games"},
|
||||||
|
{"4F", "Eidos/U.S. Gold"},
|
||||||
|
{"4J", "Fox Interactive"},
|
||||||
|
{"4K", "Time Warner Interactive"},
|
||||||
|
{"4Q", "Disney"},
|
||||||
|
{"4S", "Black Pearl"},
|
||||||
|
{"4X", "GT Interactive"},
|
||||||
|
{"4Y", "RARE"},
|
||||||
|
{"4Z", "Crave Entertainment"},
|
||||||
|
{"50", "Absolute Entertainment"},
|
||||||
|
{"51", "Acclaim"},
|
||||||
|
{"52", "Activision"},
|
||||||
|
{"53", "American Sammy Corp."},
|
||||||
|
{"54", "Take 2 Interactive"},
|
||||||
|
{"55", "Hi Tech"},
|
||||||
|
{"56", "LJN LTD."},
|
||||||
|
{"58", "Mattel"},
|
||||||
|
{"5A", "Mindscape/Red Orb Ent."},
|
||||||
|
{"5C", "Taxan"},
|
||||||
|
{"5D", "Midway"},
|
||||||
|
{"5F", "American Softworks"},
|
||||||
|
{"5G", "Majesco Sales Inc"},
|
||||||
|
{"5H", "3DO"},
|
||||||
|
{"5K", "Hasbro"},
|
||||||
|
{"5L", "NewKidCo"},
|
||||||
|
{"5M", "Telegames"},
|
||||||
|
{"5N", "Metro3D"},
|
||||||
|
{"5P", "Vatical Entertainment"},
|
||||||
|
{"5Q", "LEGO Media"},
|
||||||
|
{"5S", "Xicat Interactive"},
|
||||||
|
{"5T", "Cryo Interactive"},
|
||||||
|
{"5W", "Red Storm Ent./BKN Ent."},
|
||||||
|
{"5X", "Microids"},
|
||||||
|
{"5Z", "Conspiracy Entertainment Corp."},
|
||||||
|
{"60", "Titus Interactive Studios"},
|
||||||
|
{"61", "Virgin Interactive"},
|
||||||
|
{"62", "Maxis"},
|
||||||
|
{"64", "LucasArts Entertainment"},
|
||||||
|
{"67", "Ocean"},
|
||||||
|
{"69", "Electronic Arts"},
|
||||||
|
{"6E", "Elite Systems Ltd."},
|
||||||
|
{"6F", "Electro Brain"},
|
||||||
|
{"6G", "The Learning Company"},
|
||||||
|
{"6H", "BBC"},
|
||||||
|
{"6J", "Software 2000"},
|
||||||
|
{"6L", "BAM! Entertainment"},
|
||||||
|
{"6M", "Studio 3"},
|
||||||
|
{"6Q", "Classified Games"},
|
||||||
|
{"6S", "TDK Mediactive"},
|
||||||
|
{"6U", "DreamCatcher"},
|
||||||
|
{"6V", "JoWood Productions"},
|
||||||
|
{"6W", "SEGA"},
|
||||||
|
{"6X", "Wannado Edition"},
|
||||||
|
{"6Y", "LSP"},
|
||||||
|
{"6Z", "ITE Media"},
|
||||||
|
{"70", "Infogrames"},
|
||||||
|
{"71", "Interplay"},
|
||||||
|
{"72", "JVC Musical Industries Inc"},
|
||||||
|
{"73", "Parker Brothers"},
|
||||||
|
{"75", "SCI"},
|
||||||
|
{"78", "THQ"},
|
||||||
|
{"79", "Accolade"},
|
||||||
|
{"7A", "Triffix Ent. Inc."},
|
||||||
|
{"7C", "Microprose Software"},
|
||||||
|
{"7D", "Universal Interactive Studios"},
|
||||||
|
{"7F", "Kemco"},
|
||||||
|
{"7G", "Rage Software"},
|
||||||
|
{"7H", "Encore"},
|
||||||
|
{"7J", "Zoo"},
|
||||||
|
{"7K", "BVM"},
|
||||||
|
{"7L", "Simon & Schuster Interactive"},
|
||||||
|
{"7M", "Asmik Ace Entertainment Inc./AIA"},
|
||||||
|
{"7N", "Empire Interactive"},
|
||||||
|
{"7Q", "Jester Interactive"},
|
||||||
|
{"7T", "Scholastic"},
|
||||||
|
{"7U", "Ignition Entertainment"},
|
||||||
|
{"7W", "Stadlbauer"},
|
||||||
|
{"80", "Misawa"},
|
||||||
|
{"83", "LOZC"},
|
||||||
|
{"8B", "Bulletproof Software"},
|
||||||
|
{"8C", "Vic Tokai Inc."},
|
||||||
|
{"8J", "General Entertainment"},
|
||||||
|
{"8N", "Success"},
|
||||||
|
{"8P", "SEGA Japan"},
|
||||||
|
{"91", "Chun Soft"},
|
||||||
|
{"92", "Video System"},
|
||||||
|
{"93", "BEC"},
|
||||||
|
{"96", "Yonezawa/S'pal"},
|
||||||
|
{"97", "Kaneko"},
|
||||||
|
{"99", "Victor Interactive Software"},
|
||||||
|
{"9A", "Nichibutsu/Nihon Bussan"},
|
||||||
|
{"9B", "Tecmo"},
|
||||||
|
{"9C", "Imagineer"},
|
||||||
|
{"9F", "Nova"},
|
||||||
|
{"9H", "Bottom Up"},
|
||||||
|
{"9L", "Hasbro Japan"},
|
||||||
|
{"9N", "Marvelous Entertainment"},
|
||||||
|
{"9P", "Keynet Inc."},
|
||||||
|
{"9Q", "Hands-On Entertainment"},
|
||||||
|
{"A0", "Telenet"},
|
||||||
|
{"A1", "Hori"},
|
||||||
|
{"A4", "Konami"},
|
||||||
|
{"A6", "Kawada"},
|
||||||
|
{"A7", "Takara"},
|
||||||
|
{"A9", "Technos Japan Corp."},
|
||||||
|
{"AA", "JVC"},
|
||||||
|
{"AC", "Toei Animation"},
|
||||||
|
{"AD", "Toho"},
|
||||||
|
{"AF", "Namco"},
|
||||||
|
{"AG", "Media Rings Corporation"},
|
||||||
|
{"AH", "J-Wing"},
|
||||||
|
{"AK", "KID"},
|
||||||
|
{"AL", "MediaFactory"},
|
||||||
|
{"AP", "Infogrames Hudson"},
|
||||||
|
{"AQ", "Kiratto. Ludic Inc"},
|
||||||
|
{"B0", "Acclaim Japan"},
|
||||||
|
{"B1", "ASCII"},
|
||||||
|
{"B2", "Bandai"},
|
||||||
|
{"B4", "Enix"},
|
||||||
|
{"B6", "HAL Laboratory"},
|
||||||
|
{"B7", "SNK"},
|
||||||
|
{"B9", "Pony Canyon Hanbai"},
|
||||||
|
{"BA", "Culture Brain"},
|
||||||
|
{"BB", "Sunsoft"},
|
||||||
|
{"BD", "Sony Imagesoft"},
|
||||||
|
{"BF", "Sammy"},
|
||||||
|
{"BG", "Magical"},
|
||||||
|
{"BJ", "Compile"},
|
||||||
|
{"BL", "MTO Inc."},
|
||||||
|
{"BN", "Sunrise Interactive"},
|
||||||
|
{"BP", "Global A Entertainment"},
|
||||||
|
{"BQ", "Fuuki"},
|
||||||
|
{"C0", "Taito"},
|
||||||
|
{"C2", "Kemco"},
|
||||||
|
{"C3", "Square Soft"},
|
||||||
|
{"C5", "Data East"},
|
||||||
|
{"C6", "Tonkin House"},
|
||||||
|
{"C8", "Koei"},
|
||||||
|
{"CA", "Konami/Palcom/Ultra"},
|
||||||
|
{"CB", "Vapinc/NTVIC"},
|
||||||
|
{"CC", "Use Co.,Ltd."},
|
||||||
|
{"CD", "Meldac"},
|
||||||
|
{"CE", "FCI/Pony Canyon"},
|
||||||
|
{"CF", "Angel"},
|
||||||
|
{"CM", "Konami Computer Entertainment Osaka"},
|
||||||
|
{"CP", "Enterbrain"},
|
||||||
|
{"D1", "Sofel"},
|
||||||
|
{"D2", "Quest"},
|
||||||
|
{"D3", "Sigma Enterprises"},
|
||||||
|
{"D4", "Ask Kodansa"},
|
||||||
|
{"D6", "Naxat"},
|
||||||
|
{"D7", "Copya System"},
|
||||||
|
{"D9", "Banpresto"},
|
||||||
|
{"DA", "TOMY"},
|
||||||
|
{"DB", "LJN Japan"},
|
||||||
|
{"DD", "NCS"},
|
||||||
|
{"DF", "Altron Corporation"},
|
||||||
|
{"DH", "Gaps Inc."},
|
||||||
|
{"DN", "ELF"},
|
||||||
|
{"E2", "Yutaka"},
|
||||||
|
{"E3", "Varie"},
|
||||||
|
{"E5", "Epoch"},
|
||||||
|
{"E7", "Athena"},
|
||||||
|
{"E8", "Asmik Ace Entertainment Inc."},
|
||||||
|
{"E9", "Natsume"},
|
||||||
|
{"EA", "King Records"},
|
||||||
|
{"EB", "Atlus"},
|
||||||
|
{"EC", "Epic/Sony Records"},
|
||||||
|
{"EE", "IGS"},
|
||||||
|
{"EL", "Spike"},
|
||||||
|
{"EM", "Konami Computer Entertainment Tokyo"},
|
||||||
|
{"EN", "Alphadream Corporation"},
|
||||||
|
{"F0", "A Wave"},
|
||||||
|
{"G1", "PCCW"},
|
||||||
|
{"G4", "KiKi Co Ltd"},
|
||||||
|
{"G5", "Open Sesame Inc."},
|
||||||
|
{"G6", "Sims"},
|
||||||
|
{"G7", "Broccoli"},
|
||||||
|
{"G8", "Avex"},
|
||||||
|
{"G9", "D3 Publisher"},
|
||||||
|
{"GB", "Konami Computer Entertainment Japan"},
|
||||||
|
{"GD", "Square-Enix"},
|
||||||
|
{"HY", "Sachen"}};
|
||||||
|
|
||||||
|
// Localized strings.
|
||||||
|
static const wxString kUnknownMakerCode = _("Unknown");
|
||||||
|
static const wxString kInvalidMakerCode = _("Invalid");
|
||||||
|
|
||||||
|
if (makerCode.size() != 2) {
|
||||||
|
return kInvalidMakerCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto iter = kGameMakersMap.find(makerCode);
|
||||||
|
if (iter == kGameMakersMap.end()) {
|
||||||
|
return kUnknownMakerCode;
|
||||||
|
}
|
||||||
|
return iter->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace dialogs
|
|
@ -0,0 +1,18 @@
|
||||||
|
#ifndef VBAM_WX_DIALOGS_GAME_MAKER_H_
|
||||||
|
#define VBAM_WX_DIALOGS_GAME_MAKER_H_
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <wx/string.h>
|
||||||
|
|
||||||
|
namespace dialogs {
|
||||||
|
|
||||||
|
// TODO: Move this file to an internal directory once GBARomInfo has been
|
||||||
|
// converted.
|
||||||
|
|
||||||
|
// Returns the Game Maker as a string.
|
||||||
|
const wxString& GetGameMakerName(const std::string& makerCode);
|
||||||
|
|
||||||
|
} // namespace dialogs
|
||||||
|
|
||||||
|
#endif // VBAM_WX_DIALOGS_GAME_MAKER_H_
|
|
@ -0,0 +1,218 @@
|
||||||
|
#include "dialogs/gb-rom-info.h"
|
||||||
|
|
||||||
|
#include <wx/control.h>
|
||||||
|
#include <wx/xrc/xmlres.h>
|
||||||
|
|
||||||
|
#include "../common/sizes.h"
|
||||||
|
#include "../gb/gb.h"
|
||||||
|
#include "dialogs/game-maker.h"
|
||||||
|
#include "dialogs/validated-child.h"
|
||||||
|
|
||||||
|
namespace dialogs {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
// Returns a localized string indicating the cartridge type (mapper) for the loaded GB/GBC
|
||||||
|
// cartridge.
|
||||||
|
wxString GetCartType() {
|
||||||
|
wxString mapper_type;
|
||||||
|
switch (g_gbCartData.mapper_type()) {
|
||||||
|
case gbCartData::MapperType::kNone:
|
||||||
|
mapper_type = _("No mapper");
|
||||||
|
break;
|
||||||
|
case gbCartData::MapperType::kMbc1:
|
||||||
|
mapper_type = _("MBC1");
|
||||||
|
break;
|
||||||
|
case gbCartData::MapperType::kMbc2:
|
||||||
|
mapper_type = _("MBC2");
|
||||||
|
break;
|
||||||
|
case gbCartData::MapperType::kMbc3:
|
||||||
|
mapper_type = _("MBC3");
|
||||||
|
break;
|
||||||
|
case gbCartData::MapperType::kMbc5:
|
||||||
|
mapper_type = _("MBC5");
|
||||||
|
break;
|
||||||
|
case gbCartData::MapperType::kMbc6:
|
||||||
|
mapper_type = _("MBC6");
|
||||||
|
break;
|
||||||
|
case gbCartData::MapperType::kMbc7:
|
||||||
|
mapper_type = _("MBC7");
|
||||||
|
break;
|
||||||
|
case gbCartData::MapperType::kPocketCamera:
|
||||||
|
mapper_type = _("Pocket Camera");
|
||||||
|
break;
|
||||||
|
case gbCartData::MapperType::kMmm01:
|
||||||
|
mapper_type = _("MMM01");
|
||||||
|
break;
|
||||||
|
case gbCartData::MapperType::kHuC1:
|
||||||
|
mapper_type = _("HuC-1");
|
||||||
|
break;
|
||||||
|
case gbCartData::MapperType::kHuC3:
|
||||||
|
mapper_type = _("HuC-3");
|
||||||
|
break;
|
||||||
|
case gbCartData::MapperType::kTama5:
|
||||||
|
mapper_type = _("Bandai TAMA5");
|
||||||
|
break;
|
||||||
|
case gbCartData::MapperType::kGameGenie:
|
||||||
|
mapper_type = _("Game Genie");
|
||||||
|
break;
|
||||||
|
case gbCartData::MapperType::kGameShark:
|
||||||
|
mapper_type = _("Game Shark");
|
||||||
|
break;
|
||||||
|
case gbCartData::MapperType::kUnknown:
|
||||||
|
mapper_type = _("Unknown");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
const wxString has_ram = g_gbCartData.HasRam() ? _(" + RAM") : "";
|
||||||
|
const wxString has_rtc = g_gbCartData.has_rtc() ? _(" + RTC") : "";
|
||||||
|
const wxString has_battery = g_gbCartData.has_battery() ? _(" + Battery") : "";
|
||||||
|
const wxString has_rumble = g_gbCartData.has_rumble() ? _(" + Rumble") : "";
|
||||||
|
const wxString has_motion = g_gbCartData.has_sensor() ? _(" + Motion Sensor") : "";
|
||||||
|
|
||||||
|
return wxString::Format(_("%02X (%s%s%s%s%s%s)"), g_gbCartData.mapper_flag(), mapper_type,
|
||||||
|
has_ram, has_rtc, has_battery, has_rumble, has_motion);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns a localized string indicating SGB support for the loaded GB/GBC cartridge.
|
||||||
|
wxString GetCartSGBFlag() {
|
||||||
|
if (g_gbCartData.sgb_support()) {
|
||||||
|
return wxString::Format(_("%02X (Supported)"), g_gbCartData.sgb_flag());
|
||||||
|
} else {
|
||||||
|
return wxString::Format(_("%02X (Not supported)"), g_gbCartData.sgb_flag());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns a localized string indicating CGB support for the loaded GB/GBC cartridge.
|
||||||
|
wxString GetCartCGBFlag() {
|
||||||
|
switch (g_gbCartData.cgb_support()) {
|
||||||
|
case gbCartData::CGBSupport::kNone:
|
||||||
|
return wxString::Format(_("%02X (Not supported)"), g_gbCartData.cgb_flag());
|
||||||
|
case gbCartData::CGBSupport::kSupported:
|
||||||
|
return wxString::Format(_("%02X (Supported)"), g_gbCartData.cgb_flag());
|
||||||
|
case gbCartData::CGBSupport::kRequired:
|
||||||
|
return wxString::Format(_("%02X (Required)"), g_gbCartData.cgb_flag());
|
||||||
|
default:
|
||||||
|
// Unreachable.
|
||||||
|
assert(false);
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns a localized string indicating the ROM size of the loaded GB/GBC cartridge.
|
||||||
|
wxString GetCartRomSize() {
|
||||||
|
switch (g_gbCartData.rom_size()) {
|
||||||
|
case k32KiB:
|
||||||
|
return wxString::Format(_("%02X (32 KiB)"), g_gbCartData.rom_flag());
|
||||||
|
case k64KiB:
|
||||||
|
return wxString::Format(_("%02X (64 KiB)"), g_gbCartData.rom_flag());
|
||||||
|
case k128KiB:
|
||||||
|
return wxString::Format(_("%02X (128 KiB)"), g_gbCartData.rom_flag());
|
||||||
|
case k256KiB:
|
||||||
|
return wxString::Format(_("%02X (256 KiB)"), g_gbCartData.rom_flag());
|
||||||
|
case k512KiB:
|
||||||
|
return wxString::Format(_("%02X (512 KiB)"), g_gbCartData.rom_flag());
|
||||||
|
case k1MiB:
|
||||||
|
return wxString::Format(_("%02X (1 MiB)"), g_gbCartData.rom_flag());
|
||||||
|
case k2MiB:
|
||||||
|
return wxString::Format(_("%02X (2 MiB)"), g_gbCartData.rom_flag());
|
||||||
|
case k4MiB:
|
||||||
|
return wxString::Format(_("%02X (4 MiB)"), g_gbCartData.rom_flag());
|
||||||
|
default:
|
||||||
|
return wxString::Format(_("%02X (Unknown)"), g_gbCartData.rom_flag());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns a localized string indicating the ROM size of the loaded GB/GBC cartridge.
|
||||||
|
wxString GetCartRamSize() {
|
||||||
|
switch (g_gbCartData.ram_size()) {
|
||||||
|
case 0:
|
||||||
|
return wxString::Format(_("%02X (None)"), g_gbCartData.ram_flag());
|
||||||
|
case k256B:
|
||||||
|
return wxString::Format(_("%02X (256 B)"), g_gbCartData.ram_flag());
|
||||||
|
case k512B:
|
||||||
|
return wxString::Format(_("%02X (512 B)"), g_gbCartData.ram_flag());
|
||||||
|
case k2KiB:
|
||||||
|
return wxString::Format(_("%02X (2 KiB)"), g_gbCartData.ram_flag());
|
||||||
|
case k8KiB:
|
||||||
|
return wxString::Format(_("%02X (8 KiB)"), g_gbCartData.ram_flag());
|
||||||
|
case k32KiB:
|
||||||
|
return wxString::Format(_("%02X (32 KiB)"), g_gbCartData.ram_flag());
|
||||||
|
case k128KiB:
|
||||||
|
return wxString::Format(_("%02X (128 KiB)"), g_gbCartData.ram_flag());
|
||||||
|
case k64KiB:
|
||||||
|
return wxString::Format(_("%02X (64 KiB)"), g_gbCartData.ram_flag());
|
||||||
|
default:
|
||||||
|
return wxString::Format(_("%02X (Unknown)"), g_gbCartData.ram_flag());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns a localized string indicating the destination code of the loaded GB/GBC cartridge.
|
||||||
|
wxString GetCartDestinationCode() {
|
||||||
|
switch (g_gbCartData.destination_code()) {
|
||||||
|
case gbCartData::DestinationCode::kJapanese:
|
||||||
|
return wxString::Format(_("%02X (Japan)"), g_gbCartData.destination_code_flag());
|
||||||
|
case gbCartData::DestinationCode::kWorldwide:
|
||||||
|
return wxString::Format(_("%02X (World)"), g_gbCartData.destination_code_flag());
|
||||||
|
case gbCartData::DestinationCode::kUnknown:
|
||||||
|
return wxString::Format(_("%02X (Unknown)"), g_gbCartData.destination_code_flag());
|
||||||
|
default:
|
||||||
|
// Unreachable.
|
||||||
|
assert(false);
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
// static
|
||||||
|
GbRomInfo* GbRomInfo::NewInstance(wxWindow* parent) {
|
||||||
|
assert(parent);
|
||||||
|
return new GbRomInfo(parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
GbRomInfo::GbRomInfo(wxWindow* parent) : wxDialog(), keep_on_top_styler_(this) {
|
||||||
|
#if !wxCHECK_VERSION(3, 1, 0)
|
||||||
|
// This needs to be set before loading any element on the window. This also
|
||||||
|
// has no effect since wx 3.1.0, where it became the default.
|
||||||
|
this->SetExtraStyle(wxWS_EX_VALIDATE_RECURSIVELY);
|
||||||
|
#endif
|
||||||
|
wxXmlResource::Get()->LoadDialog(this, parent, "GBROMInfo");
|
||||||
|
|
||||||
|
Bind(wxEVT_SHOW, &GbRomInfo::OnDialogShowEvent, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GbRomInfo::OnDialogShowEvent(wxShowEvent& event) {
|
||||||
|
// Let the event propagate.
|
||||||
|
event.Skip();
|
||||||
|
|
||||||
|
if (!event.IsShown()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Populate the dialog.
|
||||||
|
GetValidatedChild(this, "Title")->SetLabel(g_gbCartData.title());
|
||||||
|
GetValidatedChild(this, "MakerCode")->SetLabel(g_gbCartData.maker_code());
|
||||||
|
GetValidatedChild(this, "MakerName")->SetLabel(GetGameMakerName(g_gbCartData.maker_code()));
|
||||||
|
GetValidatedChild(this, "CartridgeType")->SetLabel(GetCartType());
|
||||||
|
GetValidatedChild(this, "SGBCode")->SetLabel(GetCartSGBFlag());
|
||||||
|
GetValidatedChild(this, "CGBCode")->SetLabel(GetCartCGBFlag());
|
||||||
|
GetValidatedChild(this, "ROMSize")->SetLabel(GetCartRomSize());
|
||||||
|
GetValidatedChild(this, "RAMSize")->SetLabel(GetCartRamSize());
|
||||||
|
GetValidatedChild(this, "DestCode")->SetLabel(GetCartDestinationCode());
|
||||||
|
GetValidatedChild(this, "LicCode")
|
||||||
|
->SetLabel(wxString::Format("%02X", g_gbCartData.old_licensee_code()));
|
||||||
|
GetValidatedChild(this, "Version")
|
||||||
|
->SetLabel(wxString::Format("%02X", g_gbCartData.version_flag()));
|
||||||
|
GetValidatedChild(this, "HeaderChecksum")
|
||||||
|
->SetLabel(wxString::Format(_("%02X (Actual: %02X)"), g_gbCartData.header_checksum(),
|
||||||
|
g_gbCartData.actual_header_checksum()));
|
||||||
|
GetValidatedChild(this, "CartridgeChecksum")
|
||||||
|
->SetLabel(wxString::Format(_("%04X (Actual: %04X)"), g_gbCartData.global_checksum(),
|
||||||
|
g_gbCartData.actual_global_checksum()));
|
||||||
|
|
||||||
|
// Re-fit everything.
|
||||||
|
Fit();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace dialogs
|
|
@ -0,0 +1,29 @@
|
||||||
|
#ifndef VBAM_WX_DIALOGS_GB_ROM_INFO_H_
|
||||||
|
#define VBAM_WX_DIALOGS_GB_ROM_INFO_H_
|
||||||
|
|
||||||
|
#include <wx/dialog.h>
|
||||||
|
|
||||||
|
#include "widgets/keep-on-top-styler.h"
|
||||||
|
|
||||||
|
namespace dialogs {
|
||||||
|
|
||||||
|
class GbRomInfo : public wxDialog {
|
||||||
|
public:
|
||||||
|
static GbRomInfo* NewInstance(wxWindow* parent);
|
||||||
|
~GbRomInfo() override = default;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// The constructor is private so initialization has to be done via the
|
||||||
|
// static method. This is because this class is destroyed when its
|
||||||
|
// owner, `parent` is destroyed. This prevents accidental deletion.
|
||||||
|
GbRomInfo(wxWindow* parent);
|
||||||
|
|
||||||
|
// Handler for the wxEVT_SHOW event.
|
||||||
|
void OnDialogShowEvent(wxShowEvent& event);
|
||||||
|
|
||||||
|
const widgets::KeepOnTopStyler keep_on_top_styler_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace dialogs
|
||||||
|
|
||||||
|
#endif // VBAM_WX_DIALOGS_GB_ROM_INFO_H_
|
|
@ -42,6 +42,7 @@
|
||||||
#include "dialogs/directories-config.h"
|
#include "dialogs/directories-config.h"
|
||||||
#include "dialogs/display-config.h"
|
#include "dialogs/display-config.h"
|
||||||
#include "dialogs/game-boy-config.h"
|
#include "dialogs/game-boy-config.h"
|
||||||
|
#include "dialogs/gb-rom-info.h"
|
||||||
#include "opts.h"
|
#include "opts.h"
|
||||||
#include "widgets/option-validator.h"
|
#include "widgets/option-validator.h"
|
||||||
#include "widgets/user-input-ctrl.h"
|
#include "widgets/user-input-ctrl.h"
|
||||||
|
@ -2267,22 +2268,7 @@ bool MainFrame::BindControls()
|
||||||
getlab("Version");
|
getlab("Version");
|
||||||
getlab("CRC");
|
getlab("CRC");
|
||||||
d->Fit();
|
d->Fit();
|
||||||
d = LoadXRCDialog("GBROMInfo");
|
dialogs::GbRomInfo::NewInstance(this);
|
||||||
// just verify fields present
|
|
||||||
getlab("Title");
|
|
||||||
getlab("MakerCode");
|
|
||||||
getlab("MakerName");
|
|
||||||
getlab("UnitCode");
|
|
||||||
getlab("DeviceType");
|
|
||||||
getlab("Version");
|
|
||||||
getlab("CRC");
|
|
||||||
getlab("Color");
|
|
||||||
getlab("ROMSize");
|
|
||||||
getlab("RAMSize");
|
|
||||||
getlab("DestCode");
|
|
||||||
getlab("LicCode");
|
|
||||||
getlab("Checksum");
|
|
||||||
d->Fit();
|
|
||||||
d = LoadXRCDialog("CodeSelect");
|
d = LoadXRCDialog("CodeSelect");
|
||||||
// just verify list present
|
// just verify list present
|
||||||
SafeXRCCTRL<wxControlWithItems>(d, "CodeList");
|
SafeXRCCTRL<wxControlWithItems>(d, "CodeList");
|
||||||
|
|
|
@ -43,18 +43,6 @@
|
||||||
<flag>wxALL</flag>
|
<flag>wxALL</flag>
|
||||||
<border>5</border>
|
<border>5</border>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem">
|
|
||||||
<object class="wxStaticText">
|
|
||||||
<label>Unit code:</label>
|
|
||||||
</object>
|
|
||||||
<flag>wxALL</flag>
|
|
||||||
<border>5</border>
|
|
||||||
</object>
|
|
||||||
<object class="sizeritem">
|
|
||||||
<object class="wxStaticText" name="UnitCode"/>
|
|
||||||
<flag>wxALL</flag>
|
|
||||||
<border>5</border>
|
|
||||||
</object>
|
|
||||||
<object class="sizeritem">
|
<object class="sizeritem">
|
||||||
<object class="wxStaticText">
|
<object class="wxStaticText">
|
||||||
<label>Cartridge type:</label>
|
<label>Cartridge type:</label>
|
||||||
|
@ -63,43 +51,31 @@
|
||||||
<border>5</border>
|
<border>5</border>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem">
|
<object class="sizeritem">
|
||||||
<object class="wxStaticText" name="DeviceType"/>
|
<object class="wxStaticText" name="CartridgeType"/>
|
||||||
<flag>wxALL</flag>
|
<flag>wxALL</flag>
|
||||||
<border>5</border>
|
<border>5</border>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem">
|
<object class="sizeritem">
|
||||||
<object class="wxStaticText">
|
<object class="wxStaticText">
|
||||||
<label>ROM version:</label>
|
<label>SGB code:</label>
|
||||||
</object>
|
</object>
|
||||||
<flag>wxALL</flag>
|
<flag>wxALL</flag>
|
||||||
<border>5</border>
|
<border>5</border>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem">
|
<object class="sizeritem">
|
||||||
<object class="wxStaticText" name="Version"/>
|
<object class="wxStaticText" name="SGBCode"/>
|
||||||
<flag>wxALL</flag>
|
<flag>wxALL</flag>
|
||||||
<border>5</border>
|
<border>5</border>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem">
|
<object class="sizeritem">
|
||||||
<object class="wxStaticText">
|
<object class="wxStaticText">
|
||||||
<label>CRC:</label>
|
<label>CGB code:</label>
|
||||||
</object>
|
</object>
|
||||||
<flag>wxALL</flag>
|
<flag>wxALL</flag>
|
||||||
<border>5</border>
|
<border>5</border>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem">
|
<object class="sizeritem">
|
||||||
<object class="wxStaticText" name="CRC"/>
|
<object class="wxStaticText" name="CGBCode"/>
|
||||||
<flag>wxALL</flag>
|
|
||||||
<border>5</border>
|
|
||||||
</object>
|
|
||||||
<object class="sizeritem">
|
|
||||||
<object class="wxStaticText">
|
|
||||||
<label>Color:</label>
|
|
||||||
</object>
|
|
||||||
<flag>wxALL</flag>
|
|
||||||
<border>5</border>
|
|
||||||
</object>
|
|
||||||
<object class="sizeritem">
|
|
||||||
<object class="wxStaticText" name="Color"/>
|
|
||||||
<flag>wxALL</flag>
|
<flag>wxALL</flag>
|
||||||
<border>5</border>
|
<border>5</border>
|
||||||
</object>
|
</object>
|
||||||
|
@ -153,13 +129,37 @@
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem">
|
<object class="sizeritem">
|
||||||
<object class="wxStaticText">
|
<object class="wxStaticText">
|
||||||
<label>Checksum:</label>
|
<label>ROM version:</label>
|
||||||
</object>
|
</object>
|
||||||
<flag>wxALL</flag>
|
<flag>wxALL</flag>
|
||||||
<border>5</border>
|
<border>5</border>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem">
|
<object class="sizeritem">
|
||||||
<object class="wxStaticText" name="Checksum"/>
|
<object class="wxStaticText" name="Version"/>
|
||||||
|
<flag>wxALL</flag>
|
||||||
|
<border>5</border>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem">
|
||||||
|
<object class="wxStaticText">
|
||||||
|
<label>Header checksum:</label>
|
||||||
|
</object>
|
||||||
|
<flag>wxALL</flag>
|
||||||
|
<border>5</border>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem">
|
||||||
|
<object class="wxStaticText" name="HeaderChecksum"/>
|
||||||
|
<flag>wxALL</flag>
|
||||||
|
<border>5</border>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem">
|
||||||
|
<object class="wxStaticText">
|
||||||
|
<label>Cartridge checksum:</label>
|
||||||
|
</object>
|
||||||
|
<flag>wxALL</flag>
|
||||||
|
<border>5</border>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem">
|
||||||
|
<object class="wxStaticText" name="CartridgeChecksum"/>
|
||||||
<flag>wxALL</flag>
|
<flag>wxALL</flag>
|
||||||
<border>5</border>
|
<border>5</border>
|
||||||
</object>
|
</object>
|
||||||
|
|
Loading…
Reference in New Issue