mirror of https://github.com/stella-emu/stella.git
Debugger pseudo-registers are now available in prompt tab completion.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@2005 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
af8c5a5133
commit
132b947ee2
|
@ -58,7 +58,7 @@
|
||||||
Debugger* Debugger::myStaticDebugger;
|
Debugger* Debugger::myStaticDebugger;
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
static const string builtin_functions[][3] = {
|
static const char* builtin_functions[][3] = {
|
||||||
// { "name", "definition", "help text" }
|
// { "name", "definition", "help text" }
|
||||||
|
|
||||||
// left joystick:
|
// left joystick:
|
||||||
|
@ -86,9 +86,25 @@ static const string builtin_functions[][3] = {
|
||||||
{ "_diff1a", "*SWCHB & $80", "Right difficulty set to A (hard)" },
|
{ "_diff1a", "*SWCHB & $80", "Right difficulty set to A (hard)" },
|
||||||
|
|
||||||
// empty string marks end of list, do not remove
|
// empty string marks end of list, do not remove
|
||||||
{ "", "", "" }
|
{ 0, 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
// Names are defined here, but processed in YaccParser
|
||||||
|
static const char* pseudo_registers[][2] = {
|
||||||
|
// { "name", "help text" }
|
||||||
|
|
||||||
|
{ "_bank", "Currently selected bank" },
|
||||||
|
{ "_rwport", "Address at which a read from a write port occurred" },
|
||||||
|
{ "_scan", "Current scanline count" },
|
||||||
|
{ "_fcount", "Number of frames since emulation started" },
|
||||||
|
{ "_cclocks", "Color clocks on current scanline" },
|
||||||
|
{ "_vsync", "Whether vertical sync is enabled (1 or 0)" },
|
||||||
|
{ "_vblank", "Whether vertical blank is enabled (1 or 0)" },
|
||||||
|
|
||||||
|
// empty string marks end of list, do not remove
|
||||||
|
{ 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
Debugger::Debugger(OSystem* osystem)
|
Debugger::Debugger(OSystem* osystem)
|
||||||
|
@ -255,10 +271,10 @@ string Debugger::autoExec()
|
||||||
buf << myParser->exec(romname) << endl;
|
buf << myParser->exec(romname) << endl;
|
||||||
|
|
||||||
// Init builtins
|
// Init builtins
|
||||||
for(int i = 0; builtin_functions[i][0] != ""; i++)
|
for(int i = 0; builtin_functions[i][0] != 0; i++)
|
||||||
{
|
{
|
||||||
// TODO - check this for memory leaks
|
// TODO - check this for memory leaks
|
||||||
int res = YaccParser::parse(builtin_functions[i][1].c_str());
|
int res = YaccParser::parse(builtin_functions[i][1]);
|
||||||
if(res != 0) cerr << "ERROR in builtin function!" << endl;
|
if(res != 0) cerr << "ERROR in builtin function!" << endl;
|
||||||
Expression* exp = YaccParser::getResult();
|
Expression* exp = YaccParser::getResult();
|
||||||
addFunction(builtin_functions[i][0], builtin_functions[i][1], exp, true);
|
addFunction(builtin_functions[i][0], builtin_functions[i][1], exp, true);
|
||||||
|
@ -674,7 +690,6 @@ GUI::Rect Debugger::getTabBounds() const
|
||||||
bool Debugger::addFunction(const string& name, const string& definition,
|
bool Debugger::addFunction(const string& name, const string& definition,
|
||||||
Expression* exp, bool builtin)
|
Expression* exp, bool builtin)
|
||||||
{
|
{
|
||||||
cerr << "adding function: " << name << endl;
|
|
||||||
functions.insert(make_pair(name, exp));
|
functions.insert(make_pair(name, exp));
|
||||||
if(!builtin)
|
if(!builtin)
|
||||||
functionDefs.insert(make_pair(name, definition));
|
functionDefs.insert(make_pair(name, definition));
|
||||||
|
@ -732,16 +747,17 @@ string Debugger::builtinHelp() const
|
||||||
ostringstream buf;
|
ostringstream buf;
|
||||||
uInt16 len, c_maxlen = 0, i_maxlen = 0;
|
uInt16 len, c_maxlen = 0, i_maxlen = 0;
|
||||||
|
|
||||||
// Get column widths for aligned output
|
// Get column widths for aligned output (functions)
|
||||||
for(int i = 0; builtin_functions[i][0] != ""; ++i)
|
for(int i = 0; builtin_functions[i][0] != 0; ++i)
|
||||||
{
|
{
|
||||||
len = builtin_functions[i][0].length();
|
len = strlen(builtin_functions[i][0]);
|
||||||
if(len > c_maxlen) c_maxlen = len;
|
if(len > c_maxlen) c_maxlen = len;
|
||||||
len = builtin_functions[i][1].length();
|
len = strlen(builtin_functions[i][1]);
|
||||||
if(len > i_maxlen) i_maxlen = len;
|
if(len > i_maxlen) i_maxlen = len;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i = 0; builtin_functions[i][0] != ""; ++i)
|
buf << endl << "Built-in functions:" << endl;
|
||||||
|
for(int i = 0; builtin_functions[i][0] != 0; ++i)
|
||||||
{
|
{
|
||||||
buf << setw(c_maxlen) << left << builtin_functions[i][0]
|
buf << setw(c_maxlen) << left << builtin_functions[i][0]
|
||||||
<< setw(2) << right << "{"
|
<< setw(2) << right << "{"
|
||||||
|
@ -750,6 +766,24 @@ string Debugger::builtinHelp() const
|
||||||
<< builtin_functions[i][2]
|
<< builtin_functions[i][2]
|
||||||
<< endl;
|
<< endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get column widths for aligned output (pseudo-registers)
|
||||||
|
c_maxlen = 0;
|
||||||
|
for(int i = 0; pseudo_registers[i][0] != 0; ++i)
|
||||||
|
{
|
||||||
|
len = strlen(pseudo_registers[i][0]);
|
||||||
|
if(len > c_maxlen) c_maxlen = len;
|
||||||
|
}
|
||||||
|
|
||||||
|
buf << endl << "Pseudo-registers:" << endl;
|
||||||
|
for(int i = 0; pseudo_registers[i][0] != 0; ++i)
|
||||||
|
{
|
||||||
|
buf << setw(c_maxlen) << left << pseudo_registers[i][0]
|
||||||
|
<< setw(2) << " "
|
||||||
|
<< setw(i_maxlen) << left << pseudo_registers[i][1]
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
|
||||||
return buf.str();
|
return buf.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -764,9 +798,9 @@ void Debugger::getCompletions(const char* in, StringList& list) const
|
||||||
list.push_back(l);
|
list.push_back(l);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(int i = 0; pseudo_registers[i][0] != 0; ++i)
|
||||||
for(uInt32 i = 0; i < list.size(); ++i)
|
if(BSPF_strncasecmp(pseudo_registers[i][0], in, strlen(in)) == 0)
|
||||||
cerr << list[i] << endl;
|
list.push_back(pseudo_registers[i][0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
|
@ -881,18 +881,7 @@ void DebuggerParser::executeHelp()
|
||||||
commandResult << setw(clen) << right << commands[i].cmdString
|
commandResult << setw(clen) << right << commands[i].cmdString
|
||||||
<< " - " << commands[i].description << endl;
|
<< " - " << commands[i].description << endl;
|
||||||
|
|
||||||
commandResult
|
commandResult << debugger->builtinHelp();
|
||||||
<< "\nPseudo-registers:" << endl
|
|
||||||
<< "_bank Currently selected bank" << endl
|
|
||||||
<< "_rwport Address at which a read from a write port occurred" << endl
|
|
||||||
<< "_scan Current scanline count" << endl
|
|
||||||
<< "_fcount Number of frames since emulation started" << endl
|
|
||||||
<< "_cclocks Color clocks on current scanline" << endl
|
|
||||||
<< "_vsync Whether vertical sync is enabled (1 or 0)" << endl
|
|
||||||
<< "_vblank Whether vertical blank is enabled (1 or 0)" << endl
|
|
||||||
<< endl
|
|
||||||
<< "Built-in functions:" << endl
|
|
||||||
<< debugger->builtinHelp();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
Loading…
Reference in New Issue