mirror of https://github.com/stella-emu/stella.git
loadconfig bug fixed
save commands explained in debugger doc load/saveconfig allowed for multi-bank ROMs (with warning)
This commit is contained in:
parent
039a054ad5
commit
78a3b197f4
|
@ -349,7 +349,7 @@ to change the meaning of an expression. The prefixes are:</p>
|
||||||
assumed to be in the default base. When you first start Stella,
|
assumed to be in the default base. When you first start Stella,
|
||||||
the default base is 16 (hexadecimal). You can change it with the
|
the default base is 16 (hexadecimal). You can change it with the
|
||||||
"base" command. If you want to change the default base to decimal permanently,
|
"base" command. If you want to change the default base to decimal permanently,
|
||||||
you can put a "base #10" command in your "autoexec.stella" file (see
|
you can put a "base #10" command in your "autoexec.script" file (see
|
||||||
the section on "Startup").</p>
|
the section on "Startup").</p>
|
||||||
|
|
||||||
<p>Remember, you can use arbitrarily complex expressions with any
|
<p>Remember, you can use arbitrarily complex expressions with any
|
||||||
|
@ -357,7 +357,7 @@ to change the meaning of an expression. The prefixes are:</p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
</br>
|
||||||
<h3>Breakpoints, watches and traps, oh my!</h3>
|
<h3>Breakpoints, watches and traps, oh my!</h3>
|
||||||
|
|
||||||
<h4>Breakpoints</h4>
|
<h4>Breakpoints</h4>
|
||||||
|
@ -463,41 +463,6 @@ presses both Select and Reset:</p>
|
||||||
and expression for each function. Functions can be removed with
|
and expression for each function. Functions can be removed with
|
||||||
"delfunction label", where the labels come from "listfunctions".</p>
|
"delfunction label", where the labels come from "listfunctions".</p>
|
||||||
|
|
||||||
<p>If you've defined a lot of complex functions, you probably will
|
|
||||||
want to re-use them in future runs of the debugger. You can save all
|
|
||||||
your functions, breakpoints, conditional breaks, and watches with the
|
|
||||||
"save" command. If you name your saved file the same as the ROM filename
|
|
||||||
and place it in the ROM directory, it'll be auto-loaded next time you
|
|
||||||
load the same ROM in Stella. The save file is just a plain text file
|
|
||||||
called "rom_filename.stella", so you can edit it and add new functions, etc.</p>
|
|
||||||
<p>You can also create a file called "autoexec.stella" which will be loaded
|
|
||||||
when the debugger starts, no matter what ROM you have loaded. The location
|
|
||||||
of this file will depend on the version of Stella, as follows:</p>
|
|
||||||
|
|
||||||
<p><table cellpadding="5" border="1">
|
|
||||||
<tr>
|
|
||||||
<td><b>Linux/Unix</b></td>
|
|
||||||
<td><i>~/.stella/autoexec.stella</i></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><b>Macintosh</b></td>
|
|
||||||
<td><i>~/Library/Application Support/Stella/autoexec.stella</i></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><b>Windows</b></td>
|
|
||||||
<td><i>%APPDATA%\Stella\autoexec.stella</i>
|
|
||||||
<b>OR</b><br>
|
|
||||||
<i>_BASEDIR_\autoexec.stella</i>
|
|
||||||
(if a file named 'basedir.txt' exists in the application
|
|
||||||
directory containing the full pathname for _BASEDIR_)
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<p>Note that these '.stella' script files are only accessed if you enter
|
|
||||||
the debugger at least once during a program run. This means you can create
|
|
||||||
these files, and not worry about slowing down emulation unless you're
|
|
||||||
actively using the debugger.</p>
|
|
||||||
|
|
||||||
<h4>Built-in Functions</h4>
|
<h4>Built-in Functions</h4>
|
||||||
|
|
||||||
<p>Stella has some pre-defined functions for use with the "breakif"
|
<p>Stella has some pre-defined functions for use with the "breakif"
|
||||||
|
@ -632,6 +597,81 @@ can remove a trap with "deltrap number", where the number comes from
|
||||||
"listtraps" or by entering the identical trap again. You can get rid of
|
"listtraps" or by entering the identical trap again. You can get rid of
|
||||||
all traps at once with the "cleartraps" command.</p></p>
|
all traps at once with the "cleartraps" command.</p></p>
|
||||||
|
|
||||||
|
</br>
|
||||||
|
<h3>Save your work!</h3>
|
||||||
|
Stella offers several commands to save your work inside the debugger for
|
||||||
|
later re-use.
|
||||||
|
|
||||||
|
<h4>save</h4>
|
||||||
|
<p>If you've defined a lot of complex functions, you probably will
|
||||||
|
want to re-use them in future runs of the debugger. You can save all
|
||||||
|
your functions, breakpoints, conditional breaks, traps and watches with the
|
||||||
|
"save" command. If you name your saved file the same as the ROM filename
|
||||||
|
and place it in the ROM directory, it'll be auto-loaded next time you
|
||||||
|
load the same ROM in Stella. The save file is just a plain text file
|
||||||
|
called "rom_filename.script", so you can edit it and add new functions, etc.</p>
|
||||||
|
<p>While "save" is ROM specific, you can also create a file called
|
||||||
|
"autoexec.script" which will be loaded when the debugger starts, no matter
|
||||||
|
what ROM you have loaded. The location of this file will depend on the
|
||||||
|
version of Stella, as follows:</p>
|
||||||
|
|
||||||
|
<p><table cellpadding="5" border="1">
|
||||||
|
<tr>
|
||||||
|
<td><b>Linux/Unix</b></td>
|
||||||
|
<td><i>~/.stella/autoexec.script</i></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><b>Macintosh</b></td>
|
||||||
|
<td><i>~/Library/Application Support/Stella/autoexec.script</i></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><b>Windows</b></td>
|
||||||
|
<td><i>%APPDATA%\Stella\autoexec.script</i>
|
||||||
|
<b>OR</b><br>
|
||||||
|
<i>_BASEDIR_\autoexec.script</i>
|
||||||
|
(if a file named 'basedir.txt' exists in the application
|
||||||
|
directory containing the full pathname for _BASEDIR_)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p>Note that these '.script' script files are only accessed if you enter
|
||||||
|
the debugger at least once during a program run. This means you can create
|
||||||
|
these files, and not worry about slowing down emulation unless you're
|
||||||
|
actively using the debugger.</p>
|
||||||
|
|
||||||
|
<h4>saveconfig</h4>
|
||||||
|
The "saveconfig" command creates a DiStella configuration file which is
|
||||||
|
based on Stella's runtime and static analsyis of the current ROM.
|
||||||
|
<p>This will be automatically loaded the next time your start the debugger.
|
||||||
|
From there on, you can continue analyzing the ROM and then use "saveconfig"
|
||||||
|
again to update the configuration. You can also use "loadconfig" to load it
|
||||||
|
manually.
|
||||||
|
<p>Note that this is not tested for multi-banked ROMs.</p>
|
||||||
|
|
||||||
|
<h4>savedis</h4>
|
||||||
|
While your are playing or debugging a game, Stella will gather runtime
|
||||||
|
information about the ROM. It can then use that information together with
|
||||||
|
a static analysis of the ROM and therefore create a better disassembly
|
||||||
|
than DiStella alone. "savedis" allows you to save that disassembly as the
|
||||||
|
result of this combined analysis.
|
||||||
|
<p>Note that this currently only works for single banked ROMs. For larger
|
||||||
|
ROMs, the created disassembly is incomplete.</p>
|
||||||
|
|
||||||
|
<h4>saverom</h4>
|
||||||
|
If you have manipulated a ROM, you can save it with "saverom". The file is
|
||||||
|
named '<rom_filename>.a26'.
|
||||||
|
|
||||||
|
<h4>saveses</h4>
|
||||||
|
The "saveses" command dumps the whole prompt session into a file named
|
||||||
|
"YYYY-MM-DD_HH-mm-ss.txt". So you can later lookup what you did exactly
|
||||||
|
when you were debugging at that time.
|
||||||
|
|
||||||
|
<h4>savestate</h4>
|
||||||
|
<p>This command work identical to the save state hotkey (F9) during emulation.
|
||||||
|
Any previously saved state can be loaded with "loadstate" plus the slot
|
||||||
|
number (0-9).</p>
|
||||||
|
</br>
|
||||||
|
|
||||||
<h3>Prompt commands:</h3>
|
<h3>Prompt commands:</h3>
|
||||||
|
|
||||||
<p>Type "help" to see this list in the debugger.<br/>
|
<p>Type "help" to see this list in the debugger.<br/>
|
||||||
|
@ -702,11 +742,11 @@ clearsavestateifs - Clear all savestate points
|
||||||
runto - Run until string xx in disassembly
|
runto - Run until string xx in disassembly
|
||||||
runtopc - Run until PC is set to value xx
|
runtopc - Run until PC is set to value xx
|
||||||
s - Set Stack Pointer to value xx
|
s - Set Stack Pointer to value xx
|
||||||
save - Save breaks, watches, traps to file xx
|
save - Save breaks, watches, traps and functions to file xx
|
||||||
saveconfig - Save Distella config file (with default name)
|
saveconfig - Save Distella config file (with default name)
|
||||||
savedis - Save Distella disassembly (with default name)
|
savedis - Save Distella disassembly (with default name)
|
||||||
saverom - Save (possibly patched) ROM (with default name)
|
saverom - Save (possibly patched) ROM (with default name)
|
||||||
saveses - Save console session to file xx
|
saveses - Save console session (with default name)
|
||||||
savesnap - Save current TIA image to PNG file
|
savesnap - Save current TIA image to PNG file
|
||||||
savestate - Save emulator state xx (valid args 0-9)
|
savestate - Save emulator state xx (valid args 0-9)
|
||||||
savestateif - Create savestate on <condition>
|
savestateif - Create savestate on <condition>
|
||||||
|
@ -732,7 +772,6 @@ clearsavestateifs - Clear all savestate points
|
||||||
z - Zero Flag: set (0 or 1), or toggle (no arg)
|
z - Zero Flag: set (0 or 1), or toggle (no arg)
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
|
||||||
<!-- ///////////////////////////////////////////////////////////////////////// -->
|
<!-- ///////////////////////////////////////////////////////////////////////// -->
|
||||||
<br>
|
<br>
|
||||||
<h2><u>(B)</u> TIA Tab</h2>
|
<h2><u>(B)</u> TIA Tab</h2>
|
||||||
|
|
|
@ -831,9 +831,6 @@ string CartDebug::loadSymbolFile()
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
string CartDebug::loadConfigFile()
|
string CartDebug::loadConfigFile()
|
||||||
{
|
{
|
||||||
if(myConsole.cartridge().bankCount() > 1)
|
|
||||||
return DebuggerParser::red("config file for multi-bank ROM not yet supported");
|
|
||||||
|
|
||||||
// There are two possible locations for loading config files
|
// There are two possible locations for loading config files
|
||||||
// (in order of decreasing relevance):
|
// (in order of decreasing relevance):
|
||||||
// 1) ROM dir based on properties entry name
|
// 1) ROM dir based on properties entry name
|
||||||
|
@ -934,15 +931,17 @@ string CartDebug::loadConfigFile()
|
||||||
}
|
}
|
||||||
myDebugger.rom().invalidate();
|
myDebugger.rom().invalidate();
|
||||||
|
|
||||||
return "loaded " + node.getShortPath() + " OK";
|
stringstream retVal;
|
||||||
|
if(myConsole.cartridge().bankCount() > 1)
|
||||||
|
retVal << DebuggerParser::red("config file for multi-bank ROM not fully supported\n");
|
||||||
|
retVal << "loaded " << node.getShortPath() << " OK";
|
||||||
|
return retVal.str();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
string CartDebug::saveConfigFile()
|
string CartDebug::saveConfigFile()
|
||||||
{
|
{
|
||||||
if(myConsole.cartridge().bankCount() > 1)
|
|
||||||
return DebuggerParser::red("config file for multi-bank ROM not yet supported");
|
|
||||||
|
|
||||||
// While there are two possible locations for loading config files,
|
// While there are two possible locations for loading config files,
|
||||||
// the main 'config' directory is used whenever possible when saving,
|
// the main 'config' directory is used whenever possible when saving,
|
||||||
// unless the rom-specific file already exists
|
// unless the rom-specific file already exists
|
||||||
|
@ -977,7 +976,11 @@ string CartDebug::saveConfigFile()
|
||||||
getBankDirectives(out, myBankInfo[b]);
|
getBankDirectives(out, myBankInfo[b]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return "saved " + node.getShortPath() + " OK";
|
stringstream retVal;
|
||||||
|
if(myConsole.cartridge().bankCount() > 1)
|
||||||
|
retVal << DebuggerParser::red("config file for multi-bank ROM not fully supported\n");
|
||||||
|
retVal << "saved " << node.getShortPath() << " OK";
|
||||||
|
return retVal.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -1363,7 +1366,7 @@ void CartDebug::getBankDirectives(ostream& buf, BankInfo& info) const
|
||||||
buf << "ORG " << Base::HEX4 << info.offset << endl;
|
buf << "ORG " << Base::HEX4 << info.offset << endl;
|
||||||
|
|
||||||
// Now consider each byte
|
// Now consider each byte
|
||||||
uInt16 prev = info.offset, addr = prev + 1;
|
uInt32 prev = info.offset, addr = prev + 1;
|
||||||
DisasmType prevType = disasmTypeAbsolute(mySystem.getAccessFlags(prev));
|
DisasmType prevType = disasmTypeAbsolute(mySystem.getAccessFlags(prev));
|
||||||
for( ; addr < info.offset + info.size; ++addr)
|
for( ; addr < info.offset + info.size; ++addr)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2878,8 +2878,8 @@ DebuggerParser::Command DebuggerParser::commands[kNumCommands] = {
|
||||||
|
|
||||||
{
|
{
|
||||||
"save",
|
"save",
|
||||||
"Save breaks, watches, traps to file xx",
|
"Save breaks, watches, traps and functions to file xx",
|
||||||
"Example: save commands.txt",
|
"Example: save commands.script",
|
||||||
true,
|
true,
|
||||||
false,
|
false,
|
||||||
{ kARG_FILE, kARG_END_ARGS },
|
{ kARG_FILE, kARG_END_ARGS },
|
||||||
|
@ -2920,7 +2920,7 @@ DebuggerParser::Command DebuggerParser::commands[kNumCommands] = {
|
||||||
|
|
||||||
{
|
{
|
||||||
"saveses",
|
"saveses",
|
||||||
"Save console session",
|
"Save console session (with default name)",
|
||||||
"Example: saveses\n"
|
"Example: saveses\n"
|
||||||
"NOTE: saves to default save location",
|
"NOTE: saves to default save location",
|
||||||
false,
|
false,
|
||||||
|
|
Loading…
Reference in New Issue