Added GBA ROM information parsed from No-Intro dat files. The No-Intro dats (Standard and Scene) are to be unzipped into the directory where the vbam.ini file is.
This commit is contained in:
parent
f2274347ae
commit
516b819143
|
@ -462,6 +462,12 @@ static bool maker_lt(const rom_maker &r1, const rom_maker &r2)
|
||||||
return wxStrcmp(r1.code, r2.code) < 0;
|
return wxStrcmp(r1.code, r2.code) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetDialogLabel(wxDialog* dlg, wxChar* id, wxString ts, size_t l)
|
||||||
|
{
|
||||||
|
ts.Replace(wxT("&"), wxT("&&"), true);
|
||||||
|
(dynamic_cast<wxControl*>((*dlg).FindWindow(wxXmlResource::GetXRCID(id))))->SetLabel(ts);
|
||||||
|
}
|
||||||
|
|
||||||
EVT_HANDLER_MASK(RomInformation, "ROM information...", CMDEN_GB | CMDEN_GBA)
|
EVT_HANDLER_MASK(RomInformation, "ROM information...", CMDEN_GB | CMDEN_GBA)
|
||||||
{
|
{
|
||||||
wxString s;
|
wxString s;
|
||||||
|
@ -719,8 +725,15 @@ EVT_HANDLER_MASK(RomInformation, "ROM information...", CMDEN_GB | CMDEN_GBA)
|
||||||
|
|
||||||
case IMAGE_GBA:
|
case IMAGE_GBA:
|
||||||
{
|
{
|
||||||
|
IdentifyRom();
|
||||||
wxDialog* dlg = GetXRCDialog("GBAROMInfo");
|
wxDialog* dlg = GetXRCDialog("GBAROMInfo");
|
||||||
setlabs("Title", rom[0xa0], 12);
|
wxString rom_crc32;
|
||||||
|
rom_crc32.Printf(wxT("%08X"), panel->rom_crc32);
|
||||||
|
SetDialogLabel(dlg, wxT("Title"), panel->rom_name, 30);
|
||||||
|
setlabs("IntTitle", rom[0xa0], 12);
|
||||||
|
SetDialogLabel(dlg, wxT("Scene"), panel->rom_scene_rls_name, 30);
|
||||||
|
SetDialogLabel(dlg, wxT("Release"), panel->rom_scene_rls, 4);
|
||||||
|
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.c_str() }, *rm;
|
const rom_maker m = { s.c_str() }, *rm;
|
||||||
|
|
|
@ -31,6 +31,9 @@ GameArea::GameArea()
|
||||||
|
|
||||||
void GameArea::LoadGame(const wxString &name)
|
void GameArea::LoadGame(const wxString &name)
|
||||||
{
|
{
|
||||||
|
rom_scene_rls = wxT("-");
|
||||||
|
rom_scene_rls_name = wxT("-");
|
||||||
|
rom_name = wxT("");
|
||||||
// fex just crashes if file does not exist and it's compressed,
|
// fex just crashes if file does not exist and it's compressed,
|
||||||
// so check first
|
// so check first
|
||||||
wxFileName fnfn(name);
|
wxFileName fnfn(name);
|
||||||
|
@ -221,6 +224,8 @@ void GameArea::LoadGame(const wxString &name)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rom_crc32 = crc32(0L, rom, rom_size);
|
||||||
|
|
||||||
if (loadpatch)
|
if (loadpatch)
|
||||||
{
|
{
|
||||||
// don't use real rom size or it might try to resize rom[]
|
// don't use real rom size or it might try to resize rom[]
|
||||||
|
@ -233,13 +238,6 @@ void GameArea::LoadGame(const wxString &name)
|
||||||
// that means we no longer really know rom_size either <sigh>
|
// that means we no longer really know rom_size either <sigh>
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0 // disabled in win32 version for undocumented "problems"
|
|
||||||
|
|
||||||
// FIXME: store original value
|
|
||||||
if (gopts.skip_intro)
|
|
||||||
*((u32*)rom) = 0xea00002e;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
wxFileConfig* cfg = wxGetApp().overrides;
|
wxFileConfig* cfg = wxGetApp().overrides;
|
||||||
wxString id = wxString((const char*)&rom[0xac], wxConvLibc, 4);
|
wxString id = wxString((const char*)&rom[0xac], wxConvLibc, 4);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
cd ..\..\src\wx
|
cd ..\..\src\wx
|
||||||
..\..\..\dependencies\AStyle\bin\astyle --recursive --style=allman --indent=tab=4 --align-pointer=type --align-reference=name --break-blocks --pad-oper --pad-header --unpad-paren --delete-empty-lines --break-closing-brackets --keep-one-line-blocks --keep-one-line-statements --convert-tabs --remove-comment-prefix --mode=c *.cpp *.h
|
..\..\..\dependencies\AStyle\bin\astyle --recursive -n --style=allman --indent=tab=4 --align-pointer=type --align-reference=name --break-blocks --pad-oper --pad-header --unpad-paren --delete-empty-lines --break-closing-brackets --keep-one-line-blocks --keep-one-line-statements --convert-tabs --remove-comment-prefix --mode=c *.cpp *.h
|
||||||
cmake -P copy-events.cmake
|
cmake -P copy-events.cmake
|
||||||
..\..\..\dependencies\wxrc xrc\*.xrc -o wxvbam.xrs
|
..\..\..\dependencies\wxrc xrc\*.xrc -o wxvbam.xrs
|
||||||
..\..\..\dependencies\bin2c wxvbam.xrs builtin-xrc.h builtin_xrs
|
..\..\..\dependencies\bin2c wxvbam.xrs builtin-xrc.h builtin_xrs
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <wx/wfstream.h>
|
#include <wx/wfstream.h>
|
||||||
#include <wx/mstream.h>
|
#include <wx/mstream.h>
|
||||||
#include <wx/sstream.h>
|
#include <wx/sstream.h>
|
||||||
|
#include <wx/txtstrm.h>
|
||||||
#include <wx/cmdline.h>
|
#include <wx/cmdline.h>
|
||||||
#include <wx/regex.h>
|
#include <wx/regex.h>
|
||||||
|
|
||||||
|
@ -195,6 +196,27 @@ bool wxvbamApp::OnInit()
|
||||||
for (int i = config_path.size() - 1; i >= 0 ; i--)
|
for (int i = config_path.size() - 1; i >= 0 ; i--)
|
||||||
{
|
{
|
||||||
wxFileName fn(config_path[i], wxT("vba-over.ini"));
|
wxFileName fn(config_path[i], wxT("vba-over.ini"));
|
||||||
|
wxFileName rdb(config_path[i], wxT("Nintendo - Game Boy Advance*.dat"));
|
||||||
|
wxFileName scene_rdb(config_path[i], wxT("Nintendo - Game Boy Advance (Scene)*.dat"));
|
||||||
|
wxString f = wxFindFirstFile(scene_rdb.GetFullPath(), wxFILE);
|
||||||
|
|
||||||
|
if (!f.empty() && wxFileName(f).IsFileReadable())
|
||||||
|
rom_database_scene = f;
|
||||||
|
|
||||||
|
f = wxFindFirstFile(rdb.GetFullPath(), wxFILE);
|
||||||
|
|
||||||
|
while (!f.empty())
|
||||||
|
{
|
||||||
|
if (f == rom_database_scene.GetFullPath())
|
||||||
|
{
|
||||||
|
f = wxFindNextFile();
|
||||||
|
}
|
||||||
|
else if (wxFileName(f).IsFileReadable())
|
||||||
|
{
|
||||||
|
rom_database = f;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!fn.IsFileReadable())
|
if (!fn.IsFileReadable())
|
||||||
continue;
|
continue;
|
||||||
|
@ -844,6 +866,66 @@ LinkMode MainFrame::GetConfiguredLinkMode()
|
||||||
return LINK_DISCONNECTED;
|
return LINK_DISCONNECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainFrame::IdentifyRom()
|
||||||
|
{
|
||||||
|
if (!panel->rom_name.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
panel->rom_name = panel->loaded_game.GetFullName();
|
||||||
|
wxString name;
|
||||||
|
wxString scene_rls;
|
||||||
|
wxString scene_name;
|
||||||
|
wxString rom_crc32_str;
|
||||||
|
rom_crc32_str.Printf(_("crc %08X"), panel->rom_crc32);
|
||||||
|
|
||||||
|
if (wxGetApp().rom_database_scene.FileExists())
|
||||||
|
{
|
||||||
|
wxFileInputStream input(wxGetApp().rom_database_scene.GetFullPath());
|
||||||
|
wxTextInputStream text(input, wxT("\x09"), wxConvUTF8);
|
||||||
|
|
||||||
|
while (input.IsOk() && !input.Eof())
|
||||||
|
{
|
||||||
|
wxString line = text.ReadLine();
|
||||||
|
|
||||||
|
if (line.StartsWith(wxT("\tname")))
|
||||||
|
{
|
||||||
|
scene_rls = line.AfterFirst('[').BeforeFirst(']');
|
||||||
|
scene_name = line.AfterLast(' ').BeforeLast('"');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (line.StartsWith(wxT("\trom")) && line.Contains(rom_crc32_str))
|
||||||
|
{
|
||||||
|
panel->rom_scene_rls = scene_rls;
|
||||||
|
panel->rom_scene_rls_name = scene_name;
|
||||||
|
panel->rom_name = scene_name;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wxGetApp().rom_database.FileExists())
|
||||||
|
{
|
||||||
|
wxFileInputStream input(wxGetApp().rom_database.GetFullPath());
|
||||||
|
wxTextInputStream text(input, wxT("\x09"), wxConvUTF8);
|
||||||
|
|
||||||
|
while (input.IsOk() && !input.Eof())
|
||||||
|
{
|
||||||
|
wxString line = text.ReadLine();
|
||||||
|
|
||||||
|
if (line.StartsWith(wxT("\tname")))
|
||||||
|
{
|
||||||
|
name = line.AfterFirst('"').BeforeLast('"');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (line.StartsWith(wxT("\trom")) && line.Contains(rom_crc32_str))
|
||||||
|
{
|
||||||
|
panel->rom_name = name;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// global event filter
|
// global event filter
|
||||||
// apparently required for win32; just setting accel table still misses
|
// apparently required for win32; just setting accel table still misses
|
||||||
// a few keys (e.g. only ctrl-x works for exit, but not esc & ctrl-q;
|
// a few keys (e.g. only ctrl-x works for exit, but not esc & ctrl-q;
|
||||||
|
|
|
@ -78,6 +78,10 @@ public:
|
||||||
wxFileConfig* cfg;
|
wxFileConfig* cfg;
|
||||||
// vba-over.ini
|
// vba-over.ini
|
||||||
wxFileConfig* overrides;
|
wxFileConfig* overrides;
|
||||||
|
|
||||||
|
wxFileName rom_database;
|
||||||
|
wxFileName rom_database_scene;
|
||||||
|
|
||||||
MainFrame* frame;
|
MainFrame* frame;
|
||||||
// use this to get ms since program lauch
|
// use this to get ms since program lauch
|
||||||
wxStopWatch timer;
|
wxStopWatch timer;
|
||||||
|
@ -228,6 +232,8 @@ public:
|
||||||
// Returns the link mode to set according to the options
|
// Returns the link mode to set according to the options
|
||||||
LinkMode GetConfiguredLinkMode();
|
LinkMode GetConfiguredLinkMode();
|
||||||
|
|
||||||
|
void IdentifyRom();
|
||||||
|
|
||||||
// Start GDB listener
|
// Start GDB listener
|
||||||
void GDBBreak();
|
void GDBBreak();
|
||||||
|
|
||||||
|
@ -429,6 +435,16 @@ public:
|
||||||
char* rewind_mem; // should be u8, really
|
char* rewind_mem; // should be u8, really
|
||||||
int num_rewind_states;
|
int num_rewind_states;
|
||||||
int next_rewind_state;
|
int next_rewind_state;
|
||||||
|
|
||||||
|
// Loaded rom information
|
||||||
|
IMAGE_TYPE loaded;
|
||||||
|
wxFileName loaded_game;
|
||||||
|
u32 rom_crc32;
|
||||||
|
wxString rom_name;
|
||||||
|
wxString rom_scene_rls;
|
||||||
|
wxString rom_scene_rls_name;
|
||||||
|
u32 rom_size;
|
||||||
|
|
||||||
// FIXME: size this properly
|
// FIXME: size this properly
|
||||||
#define REWIND_SIZE 400000
|
#define REWIND_SIZE 400000
|
||||||
// FIXME: make this a config option
|
// FIXME: make this a config option
|
||||||
|
@ -458,9 +474,6 @@ protected:
|
||||||
// set minsize of frame & panel to scaled screen size
|
// set minsize of frame & panel to scaled screen size
|
||||||
void AdjustMinSize();
|
void AdjustMinSize();
|
||||||
|
|
||||||
IMAGE_TYPE loaded;
|
|
||||||
u32 rom_size;
|
|
||||||
wxFileName loaded_game;
|
|
||||||
wxString batdir, statedir;
|
wxString batdir, statedir;
|
||||||
|
|
||||||
int basic_width, basic_height;
|
int basic_width, basic_height;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||||
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
|
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
|
||||||
<object class="wxDialog" name="GBAROMInfo">
|
<object class="wxDialog" name="GBAROMInfo">
|
||||||
|
<title>Rom Information</title>
|
||||||
<object class="wxBoxSizer">
|
<object class="wxBoxSizer">
|
||||||
<orient>wxVERTICAL</orient>
|
<orient>wxVERTICAL</orient>
|
||||||
<object class="sizeritem">
|
<object class="sizeritem">
|
||||||
|
@ -17,6 +18,54 @@
|
||||||
<flag>wxALL</flag>
|
<flag>wxALL</flag>
|
||||||
<border>5</border>
|
<border>5</border>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="sizeritem">
|
||||||
|
<object class="wxStaticText">
|
||||||
|
<label>Internal title:</label>
|
||||||
|
</object>
|
||||||
|
<flag>wxALL</flag>
|
||||||
|
<border>5</border>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem">
|
||||||
|
<object class="wxStaticText" name="IntTitle"/>
|
||||||
|
<flag>wxALL</flag>
|
||||||
|
<border>5</border>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem">
|
||||||
|
<object class="wxStaticText">
|
||||||
|
<label>Scene Release:</label>
|
||||||
|
</object>
|
||||||
|
<flag>wxALL</flag>
|
||||||
|
<border>5</border>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem">
|
||||||
|
<object class="wxStaticText" name="Scene"/>
|
||||||
|
<flag>wxALL</flag>
|
||||||
|
<border>5</border>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem">
|
||||||
|
<object class="wxStaticText">
|
||||||
|
<label>Release Number:</label>
|
||||||
|
</object>
|
||||||
|
<flag>wxALL</flag>
|
||||||
|
<border>5</border>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem">
|
||||||
|
<object class="wxStaticText" name="Release"/>
|
||||||
|
<flag>wxALL</flag>
|
||||||
|
<border>5</border>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem">
|
||||||
|
<object class="wxStaticText">
|
||||||
|
<label>CRC32:</label>
|
||||||
|
</object>
|
||||||
|
<flag>wxALL</flag>
|
||||||
|
<border>5</border>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem">
|
||||||
|
<object class="wxStaticText" name="CRC32"/>
|
||||||
|
<flag>wxALL</flag>
|
||||||
|
<border>5</border>
|
||||||
|
</object>
|
||||||
<object class="sizeritem">
|
<object class="sizeritem">
|
||||||
<object class="wxStaticText">
|
<object class="wxStaticText">
|
||||||
<label>Game code:</label>
|
<label>Game code:</label>
|
||||||
|
|
Loading…
Reference in New Issue