Huge updates to the documentation, particularly to the debugger portion.
Many changes have been made to Stella since that document was first written, and quite a few things are now documented for the first time. This means the next release will (feature-wise) look a lot bigger than it really is :) git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1616 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
|
@ -83,7 +83,6 @@ feature that no other 2600 debugger has; it's <b>completely</b> cross-platform.<
|
|||
<li>Bankswitch support in the debugger for the few remaining cart types
|
||||
that aren't supported.</li>
|
||||
<li>Patch ROM support for a few cart types doesn't work. Must fix.</li>
|
||||
<li>Some way to control joystick/etc. input from within the debugger.</li>
|
||||
<li>Source-level debugging: if a DASM .lst file is available, we'll show
|
||||
the listing in the ROM tab instead of a disassembly. This is already
|
||||
available in a very crude form ("loadlist" and "list" commands).</li>
|
||||
|
@ -104,12 +103,18 @@ feature that no other 2600 debugger has; it's <b>completely</b> cross-platform.<
|
|||
& off. When you exit the debugger, the emulation resumes at the current
|
||||
program counter, and continues until either a breakpoint/trap is hit,
|
||||
or the ` key is pressed again.</p>
|
||||
<p>For space reasons, the Prompt, TIA, and Audio displays are split into
|
||||
3 tabs, only one of which is visible at a time. You can use the mouse or
|
||||
keyboard to select which tab you want to view.</p>
|
||||
<p>Pressing Ctrl-Tab cycles between tabs
|
||||
from left to right, and Shift-Ctrl-Tab cycles from right to left.
|
||||
Pressing Tab cycles between widgets in the current tab.</p>
|
||||
|
||||
<p>The main debugger window will look similar to the following (note that the
|
||||
letters here are for reference in the document below; they aren't actually
|
||||
present in the debugger):</p>
|
||||
<p><img src="graphics/debugger_main.png"></p>
|
||||
|
||||
<p>For space reasons, the Prompt, TIA, I/O and Audio displays are split into
|
||||
4 tabs, only one of which is visible at a time. You can use the mouse or
|
||||
keyboard to select which tab you want to view. Pressing Shift with the left
|
||||
or right arrow keys cycles between tabs from right-to-left and left-to-right,
|
||||
respectively. Pressing Tab cycles between widgets in the current tab (except
|
||||
for in the Prompt area, where 'tab' used for something else).</p>
|
||||
|
||||
<p>You can also enter the debugger at emulator startup by giving a breakpoint on the command line:
|
||||
<pre>
|
||||
|
@ -144,7 +149,9 @@ already contained the same value, that's not considered a change (old
|
|||
value was $whatever, new value is the same, so nothing got tracked). This
|
||||
may change in a future version of Stella.</p>
|
||||
|
||||
<h2>Prompt tab</h2>
|
||||
|
||||
<!-- ///////////////////////////////////////////////////////////////////////// -->
|
||||
<h2><u>(A)</u> Prompt tab</h2>
|
||||
|
||||
<p>This is a command-line interface, similar to the DOS DEBUG command
|
||||
or Supermon for the C=64.</p>
|
||||
|
@ -158,61 +165,17 @@ scroll with the mouse. Copy and paste is not (yet?) supported.</p>
|
|||
be abbreviated: instead of "clearbreaks", you can type "clear" or
|
||||
even just "cl". However, "c" by itself is the Toggle Carry command.</p>
|
||||
|
||||
<p>Bash-style tab completion is supported for commands and labels (see below)</p>
|
||||
<p>Bash-style tab completion is supported for commands and labels (see below).
|
||||
Other Bash-style commands are also supported, as follows:</p>
|
||||
<ul>
|
||||
<li>
|
||||
</ul>
|
||||
|
||||
<p>For now, there are some functions that only exist in the prompt. We
|
||||
intend to add GUI equivalents for all (or almost all?) of the prompt
|
||||
commands by the time we release Stella 2.0. People who like command
|
||||
prompts will be able to use the prompt, but people who hate them will
|
||||
have a fully functional debugger without typing (or without typing
|
||||
much, anyway).</p>
|
||||
|
||||
<!--
|
||||
<h4>Status</h4>
|
||||
|
||||
<p>Before each prompt, you'll see a dump of the current processor
|
||||
status, plus any watches you've set (see section on watches
|
||||
below), plus a disassembly of the instruction at the current
|
||||
Program Counter. This is the next instruction that will execute;
|
||||
it hasn't been executed yet.</p>
|
||||
|
||||
<pre>
|
||||
PC=f000 A=01 X=02 Y=03 S=ff P=21/nv-bdizC Cycle 12345
|
||||
$f000 a2 ff LDX #ff ; 2
|
||||
>
|
||||
</pre>
|
||||
|
||||
<p>This is telling us a lot of information:
|
||||
<pre>
|
||||
- PC=f000 A=01 X=02 Y=03 S=ff
|
||||
The Program Counter, Accumulator, X, Y, and Stack Pointer registers.
|
||||
|
||||
- P=21/nv-bdizC
|
||||
The Processor Status register. The "21" is the hex value of the
|
||||
register, and the "nv-bdizC" shows us the individual flags. Flags
|
||||
with capital letters are set, and lowercase means clear. In this
|
||||
example, only the Carry bit is set.
|
||||
|
||||
- Cycle 12345
|
||||
This counter gets reset at the beginning of each frame, when
|
||||
VSYNC is strobed. In this example, we're 12345 (decimal) cycles
|
||||
past the beginning of the frame.
|
||||
|
||||
- $f000 a2 ff LDX #ff ; 2
|
||||
Disassembly of the instruction the PC points to. This is the next
|
||||
instruction that will execute (when we exit the debugger, or via the
|
||||
"step" or "trace" commands). The "a2 ff" is the raw machine code
|
||||
for this instruction. The "; 2" is a cycle count: this instruction
|
||||
will take 2 cycles to execute.
|
||||
|
||||
WARNING: the cycle count in the disassembly does NOT include extra
|
||||
cycles caused by crossing page boundaries. Also, Branch instructions
|
||||
are shown as 2 cycles, as though they're not going to be taken. A
|
||||
branch that's taken adds a cycle, of course.
|
||||
|
||||
The ">" is where your commands will appear as you type them.
|
||||
</pre>
|
||||
-->
|
||||
commands in future releases. People who like command prompts will be able to
|
||||
use the prompt, but people who hate them will have a fully functional
|
||||
debugger without typing (or without typing much, anyway).</p>
|
||||
|
||||
<h4>Tab completion</h4>
|
||||
|
||||
|
@ -641,15 +604,14 @@ can also get rid of all traps at once with the "cleartraps" command.</p>
|
|||
<!-- <p>Commands marked with a * are unimplemented.</p> -->
|
||||
<p>Commands marked with a + are partially implemented.</p>
|
||||
|
||||
<p>Most commands can be abbreviated just by typing a partial command:
|
||||
"st" for "step", or "f" for "frame". Where there are conflicts, generally
|
||||
the shortest name is chosen (so "tra" is "trap", not "trapread"). When
|
||||
in doubt, press TAB.</p>
|
||||
|
||||
<h2>TIA Tab</h2>
|
||||
<!-- ///////////////////////////////////////////////////////////////////////// -->
|
||||
<br>
|
||||
<h2><u>(B)</u> TIA Tab</h2>
|
||||
|
||||
<p>When selected, this tab shows detailed status of all the TIA registers
|
||||
(except for audio; use the Audio tab for those).</p>
|
||||
<p><img src="graphics/debugger_tiatab.png"></p>
|
||||
|
||||
<p>Most of the values on the TIA tab will be self-explanatory to a 2600
|
||||
programmer. The top line (with all the hex values) displays the raw
|
||||
|
@ -677,141 +639,232 @@ Strobe button.</p>
|
|||
drawn in the current color. Changing a color register will change the
|
||||
color of this rectangle.</p>
|
||||
|
||||
<h2>Audio Tab</h2>
|
||||
|
||||
<!-- ///////////////////////////////////////////////////////////////////////// -->
|
||||
<br>
|
||||
<h2><u>(C)</u> I/O Tab</h2>
|
||||
|
||||
<p>When selected, this tab shows detailed status of the Input, Output,
|
||||
and Timer portion of the RIOT/M6532 chip (the RAM portion is accessed
|
||||
in another part of the debugger).</p>
|
||||
<p><img src="graphics/debugger_iotab.png"></p>
|
||||
|
||||
<p>As with the TIA tab, most of the values here will be self-explanatory to a 2600
|
||||
programmer, and almost all can be modified.<p>
|
||||
|
||||
|
||||
<!-- ///////////////////////////////////////////////////////////////////////// -->
|
||||
<br>
|
||||
<h2><u>(D)</u> Audio Tab</h2>
|
||||
|
||||
<p>This tab lets you view the contents of the TIA audio registers. In
|
||||
the current release of Stella, these are read-only displays. This tab
|
||||
will grow some features in a future release.</p>
|
||||
|
||||
<h2>CPU Widget</h2>
|
||||
|
||||
<p>This shows the current CPU state. All the registers and flags are
|
||||
displayed, and can be changed by double-clicking on them. Flags are
|
||||
toggled on double-click.</p>
|
||||
<!-- ///////////////////////////////////////////////////////////////////////// -->
|
||||
<br>
|
||||
<h2><u>(E)</u> TIA Display</h2>
|
||||
|
||||
<p>The 0, Inv, Neg, ++, --, <<, and >> buttons affect the
|
||||
currently-selected register (see <b>RAM Widget</b> below).</p>
|
||||
<p>In the upper left of the debugger, you'll see the current frame of
|
||||
video as generated by the TIA. If a complete frame hasn't been drawn,
|
||||
the partial contents of the current frame will be displayed up to the
|
||||
current scanline, with the contents of the old frame (in black &
|
||||
white) filling the rest of the display. Note that if 'phosphor mode'
|
||||
has been enabled for a ROM, you will see the effect here as well. That
|
||||
is, no flicker will be shown for 30Hz display, even though a real
|
||||
system would alternate between drawing frames (and hence produce
|
||||
flicker).</p>
|
||||
|
||||
<p>You can use the "Scan+1" button or the prompt "scan" command to watch
|
||||
the TIA draw the frame one scanline at a time.</p>
|
||||
|
||||
<p>You can also right-click anywhere in this window to show a context menu,
|
||||
as illustrated:</p>
|
||||
<p><img src="graphics/debugger_tiaoutcmenu.png"></p>
|
||||
<p>The options are as follows:</p>
|
||||
<ul>
|
||||
<li><b>Fill to scanline</b>: If you've already started a partial frame
|
||||
draw (ie, the frame is already partially 'greyed' out), selecting this
|
||||
option will draw all scanlines up to the vertical position where the
|
||||
mouse was clicked. Note that if you weren't in partial-frame mode,
|
||||
this option will have no effect.</li>
|
||||
<li><b>Set breakpoint</b>: Will set a conditional breakpoint at the
|
||||
scanline where the mouse was clicked. Currently, you'll need to use
|
||||
the Prompt Tab to turn the breakpoint off again.</li>
|
||||
<li><b>Set zoom position</b>: Influences what is shown in the TIA
|
||||
zoom area (further described in part (G). The zoom area will
|
||||
contain the area centered at the position where the mouse was
|
||||
clicked.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<!-- ///////////////////////////////////////////////////////////////////////// -->
|
||||
<br>
|
||||
<h2><u>(F)</u> TIA Info</h2>
|
||||
<p>To the right of the TIA display (E) there is TIA information, as shown:</p>
|
||||
<p><img src="graphics/debugger_tiainfo.png"></p>
|
||||
<p>The indicators are as follows:</p>
|
||||
<ul>
|
||||
<li><b>Frame</b>: The current frame number, since this ROM was loaded or reset.</li>
|
||||
<li><b>F. Cyc</b>: The number of CPU cycles that have been executed this frame, since
|
||||
VSYNC was cleared at scanline 0.</li>
|
||||
<li><b>Scanline</b>: The scanline that's currently being drawn. Scanline 0 is the one
|
||||
on which VSYNC is cleared (after being set for 3 scanlines, as per the Stella
|
||||
Programmer's Guide)</li>
|
||||
<li><b>S. Cyc</b>: The number of CPU cycles that have been executed since the beginning
|
||||
of the current scanline.</li>
|
||||
<li><b>VSYNC & VBLANK</b>: Self explanatory.</li>
|
||||
<li><b>Pixel Pos</b>: The current number of visible color clocks that have been displayed on
|
||||
the current scanline, starting from the beginning of the Horizontal Blank period.
|
||||
During HBLANK, this value will be negative (representing the number of clocks
|
||||
until the first visible one). Since there are 68 color clocks per HBLANK and
|
||||
160 visible clocks per scanline, the Pixel Position will range from -68 to 159.</li>
|
||||
<li><b>Color Clk</b>: The current number of total color clocks since the beginning of this
|
||||
scanline's HBLANK. This counter starts at zero, but otherwise displays the same
|
||||
information as the Pixel Position (so Color Clock will always be 68 more than Pixel
|
||||
Position, and will range from 0 to 228).</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<!-- ///////////////////////////////////////////////////////////////////////// -->
|
||||
<br>
|
||||
<h2><u>(G)</u> TIA Zoom</h2>
|
||||
<p>Below the TIA Info (F) is the TIA Zoom area. This allows you to enlarge
|
||||
part of the TIA display, so you can see fine details. Note that unlike
|
||||
the TIA display area, this one <b>does</b> generate frames as the real
|
||||
system would. So, if you've enabled 'phosphor mode' for a ROM, it
|
||||
won't be honoured here (ie, you'll see alternating frames at 30Hz display,
|
||||
just like on a real system).</p>
|
||||
<p>You can also right-click anywhere in this window to show a context menu,
|
||||
as illustrated:</p>
|
||||
<p><img src="graphics/debugger_tiazoomcmenu.png"></p>
|
||||
<p>These options allow you to zoom in on the image for even greater detail.
|
||||
If you click on the output window, you can scroll around using the cursor,
|
||||
PageUp/Dn and Home/End keys. You can also select the zoom position from
|
||||
a context menu in the TIA Display.</p>
|
||||
|
||||
|
||||
<!-- ///////////////////////////////////////////////////////////////////////// -->
|
||||
<br>
|
||||
<h2><u>(H)</u> Breakpoint/Trap Status</h2>
|
||||
<p>Below the TIA Zoom (G), there is a status line that shows the reason the
|
||||
debugger was entered (if a breakpoint/trap was hit), as shown:</p>
|
||||
<p><img src="graphics/debugger_bpstatus.png"></p>
|
||||
<p>The output here will generally be self-explanatory. Due to space concerns,
|
||||
conditional breakpoints will be shown as "CBP: ...", normal breakpoints
|
||||
as "BP: ...", read traps as "RTrap: ..." and write traps as "WTrap: ...".
|
||||
See the "Breakpoints" section for details.</p>
|
||||
|
||||
|
||||
<!-- ///////////////////////////////////////////////////////////////////////// -->
|
||||
<br>
|
||||
<h2><u>(I)</u> CPU Registers</h2>
|
||||
<p>This displays the current CPU state, as shown:</p>
|
||||
<p><img src="graphics/debugger_cpuregs.png"></p>
|
||||
<p>All the registers and flags are displayed, and can be changed by
|
||||
double-clicking on them. Flags are toggled on double-click. Selected registers
|
||||
here can also be changed by using the "Data Operations" buttons, further
|
||||
described in (J).</p>
|
||||
<p>There's not much else to say about the CPU widget: if you know 6502
|
||||
assembly, it's pretty self-explanatory. If you don't, well, you should
|
||||
learn :)</p>
|
||||
|
||||
<h2>RAM Widget</h2>
|
||||
|
||||
<!-- ///////////////////////////////////////////////////////////////////////// -->
|
||||
<br>
|
||||
<h2><u>(J)</u> Data Operations buttons</h2>
|
||||
<p>These buttons can be used to change values in either CPU Registers (I), or
|
||||
the RIOT RAM (K), depending on which of these widgets is currently active.
|
||||
<p><img src="graphics/debugger_dataops.png"></p>
|
||||
<p>Each of these buttons also have a keyboard shortcut (indicated in square
|
||||
brackets). In fact, many of the inputboxes in various parts of the debugger
|
||||
respond to these same keyboard shortcuts. If in doubt, give them a try.</p>
|
||||
<pre>
|
||||
0 [z] - Set the current location/register to zero.
|
||||
Inv [i !] - Invert the current location/register [toggle all its bits].
|
||||
Neg [n] - Negate the current location/register [twos' complement negative].
|
||||
++ [+ =] - Increment the current location/register
|
||||
-- [-] - Decrement the current location/register
|
||||
<< [< ,] - Shift the current location/register left.
|
||||
>> [> .] - Shift the current location/register right.
|
||||
|
||||
Any bits shifted out of the location/register with << or >>
|
||||
are lost (they will NOT end up in the Carry flag).
|
||||
</pre>
|
||||
|
||||
|
||||
<!-- ///////////////////////////////////////////////////////////////////////// -->
|
||||
<br>
|
||||
<h2><u>(K)</u> M6532/RIOT RAM</h2>
|
||||
<p>This is a spreadsheet-like GUI for inspecting and changing the contents
|
||||
of the 2600's RAM. All 128 bytes of RAM are visible on the screen at
|
||||
once. You can navigate with either the mouse or the keyboard arrow keys.
|
||||
To change a RAM location, either double-click on it or press Enter while
|
||||
it's highlighted. Enter the new value (hex only for now, sorry), then
|
||||
press Enter to make the change. If you change your mind, press Escape
|
||||
and the original value will be restored.</p>
|
||||
and the original value will be restored. The currently selected RAM cell
|
||||
can also be changed by using the Data operations buttons/associated
|
||||
shortcut keys (J).</p>
|
||||
<p><img src="graphics/debugger_ram.png"></p>
|
||||
<p>The 'Undo' button in the upper right should be self-explanatory; it will
|
||||
undo the most previous operation to one cell only. The 'Rev' button is
|
||||
more comprehensive. It will undo <i>all</i> operations on <i>all</i> cells
|
||||
since you first made a change.</p>
|
||||
<p>The UI objects at the bottom refer to the currently selected RAM cell.
|
||||
The 'label' textbox shows the label attached to this RAM location (if any),
|
||||
and the other textboxes show the decimal and binary equivalent value.
|
||||
The remaining buttons to the right are further explained in section (L).</p>
|
||||
|
||||
<p>Nearby there are also some buttons to do various things to the
|
||||
currently-selected memory location from the RAM widget or
|
||||
CPU register from the CPU widget (whichever was most recently
|
||||
selected). The buttons are:</p>
|
||||
|
||||
<pre>
|
||||
0 - Set the current location/register to zero.
|
||||
Inv - Invert the current location/register (toggle all its bits).
|
||||
Neg - Negate the current location/register (twos' complement negative).
|
||||
++ - Increment the current location/register
|
||||
-- - Decrement the current location/register
|
||||
<< - Shift the current location/register left.
|
||||
>> - Shift the current location/register right.
|
||||
|
||||
Any bits shifted out of the location/register with << or >>
|
||||
are lost (they will NOT end up in the Carry flag).
|
||||
</pre>
|
||||
|
||||
<p>This widget also lets you search memory for values such as lives or remaining
|
||||
<!-- ///////////////////////////////////////////////////////////////////////// -->
|
||||
<br>
|
||||
<h2><u>(L)</u> M6532/RIOT RAM (search/compare mode)</h2>
|
||||
<p>The RIOT RAM widget also lets you search memory for values such as lives or remaining
|
||||
energy, but it's also very useful when debugging to determine which
|
||||
memory location holds which quantity.</p>
|
||||
|
||||
<p>To search RAM, click 'Search' and enter a byte value into the search editbox (0-255).
|
||||
<p><img src="graphics/debugger_ramsearch.png"></p>
|
||||
<p>To search RAM, click 'Srch' and enter a byte value into the search editbox (0-255).
|
||||
All matching values will be highlighted in the RAM widget. If 'Search' is clicked
|
||||
when the input is empty, all RAM locations are searched.</p>
|
||||
and the input is empty, all RAM locations are highlighted.</p>
|
||||
|
||||
<p>The 'Compare' button is used to compare the given value using all
|
||||
<p>The 'Cmp' button is used to compare the given value using all
|
||||
addresses currently highlighted. This may be an absolute number (such as 2),
|
||||
or a comparitive number (such as -1). Using a '+' or '-' operator
|
||||
means 'search addresses for values that have changed by that amount'.</p>
|
||||
|
||||
<p>The 'Rset' button resets the entire operation; it clears the highlighted
|
||||
addresses and allows another search.</p>
|
||||
<p>The following is an example of inspecting all addresses that have
|
||||
decreased by 1:
|
||||
|
||||
decreased by 1:</p>
|
||||
<ul>
|
||||
<li>Click 'Search' with empty input. All 128 address/values are highlighted</li>
|
||||
<li>Click 'Srch' with empty input. All 128 address/values are highlighted</li>
|
||||
<li>Exit debugger mode and lose a life, let your energy decrease, or
|
||||
do whatever it is you're trying to debug</li>
|
||||
<li>Enter debugger mode again, click 'Compare' and and enter a '-1' for input.
|
||||
<li>Enter debugger mode again, click 'Cmp' and and enter a '-1' for input.
|
||||
This finds all values that have decreased by 1 (as compared to their current
|
||||
values)</li>
|
||||
<li>Repeatedly following these steps may help to narrow number of
|
||||
addresses under consideration, and eventually you'll find the
|
||||
memory address you're looking for</li>
|
||||
<li>The 'Reset' button restarts the whole procedure (ie, clear the highlighted
|
||||
addresses and allow another search</li>
|
||||
<li>Click 'Rset' when you're finished</li>
|
||||
</ul>
|
||||
|
||||
<h2>TIA Display</h2>
|
||||
|
||||
<p>In the upper left of the debugger, you'll see the current frame of
|
||||
video as generated by the TIA. If a complete frame hasn't been drawn,
|
||||
the partial contents of the current frame will be displayed up to the
|
||||
current scanline, with the contents of the old frame (in black &
|
||||
white) filling the rest of the display.</p>
|
||||
|
||||
<p>You can use the "Scan+1" button or the prompt "scan" command to watch
|
||||
the TIA draw the frame one scanline at a time.</p>
|
||||
|
||||
<p>To the right of the video display, there are indicators for:</p>
|
||||
<ul>
|
||||
<li>Frame - The current frame number, since this ROM was loaded or reset.</li>
|
||||
<li>Scanline - The scanline that's currently being drawn. Scanline 0 is the one
|
||||
on which VSYNC is cleared (after being set for 3 scanlines, as per the Stella
|
||||
Programmer's Guide)</li>
|
||||
<li>F. Cycle - The number of CPU cycles that have been executed this frame, since
|
||||
VSYNC was cleared at scanline 0.</li>
|
||||
<li>S. Cycle - The number of CPU cycles that have been executed since the beginning
|
||||
of the current scanline.</li>
|
||||
<li>VSYNC and VBLANK indicators</li>
|
||||
<li>Pixel Pos. - The current number of visible color clocks that have been displayed on
|
||||
the current scanline, starting from the beginning of the Horizontal Blank period.
|
||||
During HBLANK, this value will be negative (representing the number of clocks
|
||||
until the first visible one). Since there are 68 color clocks per HBLANK and
|
||||
160 visible clocks per scanline, the Pixel Position will range from -68 to 159.</li>
|
||||
<li>Color Clk. - The current number of total color clocks since the beginning of this
|
||||
scanline's HBLANK. This counter starts at zero, but otherwise displays the same
|
||||
information as the Pixel Position (so Color Clock will always be 68 more than Pixel
|
||||
Position, and will range from 0 to 228).</li>
|
||||
</ul>
|
||||
|
||||
<p>Below the indicators is the TIA Zoom area. This allows you to enlarge
|
||||
part of the TIA display, so you can see fine details. To set the zoom
|
||||
region, right-click on the TIA display and choose "Set Zoom Position". To
|
||||
set the magnification level, right-click on the TIA Zoom area and choose
|
||||
2x, 4x, or 8x from the pop-up menu.</p>
|
||||
|
||||
<p>Below the TIA Zoom, there is a status line that shows the reason the
|
||||
debugger was entered (if a breakpoint/trap was hit). This isn't really
|
||||
part of the TIA display; see "Breakpoints" below for details.</p>
|
||||
|
||||
<p></p>
|
||||
|
||||
<h2>ROM Widget</h2>
|
||||
|
||||
<!-- ///////////////////////////////////////////////////////////////////////// -->
|
||||
<br>
|
||||
<h2><u>(M)</u> ROM Listing</h2>
|
||||
<p>The ROM Widget is a disassembly of the current bank of ROM. If a symbol
|
||||
file is loaded, the disassembly will have labels. Even without a symbol
|
||||
file, the standard TIA/RIOT labels will still be present.</p>
|
||||
<p><img src="graphics/debugger_rom.png"></p>
|
||||
|
||||
<p>Each line of disassembly has four fields:</p>
|
||||
<ul>
|
||||
<li>Breakpoint - This is the area at the far left, to the left of the
|
||||
address. Normally there will be nothing there: this indicates that there's
|
||||
no breakpoint set at that address. You can set and clear breakpoints by
|
||||
double-clicking in this area. When a breakpoint is set, there will be a
|
||||
red square in this area. These are the same breakpoints as used
|
||||
clicking in this area. When a breakpoint is set, there will be a
|
||||
red circle in this area. These are the same breakpoints as used
|
||||
by the "break" command, <b>not</b> the conditional "breakif" breakpoints
|
||||
(which makes sense: cond-breaks can break on any condition, the Program
|
||||
Counter isn't necessarily involved).</li>
|
||||
|
@ -844,24 +897,27 @@ scroll to the current PC location.</p>
|
|||
emulator: you can change ROM all you want within the debugger. The hex
|
||||
bytes in the ROM Widget are editable. Double-click on them to edit
|
||||
them. When you're done, press Enter to accept the changes or Escape to
|
||||
cancel them. Any time you edit ROM, there will be a short pause while
|
||||
cancel them. Any time you edit ROM, there may be a short pause while
|
||||
the ROM Widget disassembles the current bank again.</p>
|
||||
|
||||
<p>Speaking of banks: Above the disassembly there's an indicator for the
|
||||
current bank and total number of banks. If there's more than one bank,
|
||||
you can manually switch banks by double-clicking the bank number and enter
|
||||
a new number. This won't work if the ROM only has one bank, of course.</p>
|
||||
a new number (or using the shortcuts keys for inputboxes as described
|
||||
in section (J). This won't work if the ROM only has one bank, of course.</p>
|
||||
|
||||
<p>If you patch your ROM, you'll want a way to save it. To do this,
|
||||
right-click on any line of the disassembly and choose "Save ROM" from the
|
||||
pop-up menu. You'll be asked for a filename, and then the ROM will be
|
||||
saved. Note that the filename is considered relative to the <b>current</b>
|
||||
directory, not the ROM or base directory. You can enter a full path,
|
||||
though, in which case it doesn't matter.<p>
|
||||
|
||||
<p>There's one more thing you can do from the ROM Widget: you can set
|
||||
the Program Counter to the address of any disassembly line. Right-click
|
||||
on the line you want and choose "Set PC" from the pop-up menu.</p>
|
||||
<p>The ROM listing also contains a context menu, accessible by right-clicking
|
||||
anywhere in the listing:</p>
|
||||
<p><img src="graphics/debugger_romcmenu.png"></p>
|
||||
<p>Currently, there are two options:</p>
|
||||
<ul>
|
||||
<li><b>Save ROM</b>: A textbox will appear for you to enter filename,
|
||||
and then the ROM will be saved. Note that the filename is considered
|
||||
relative to the <b>current</b> directory, not the ROM or base directory.
|
||||
You can enter a full path, though, in which case it doesn't matter.</li>
|
||||
<li><b>Set PC</b>: Set the Program Counter to the address of the
|
||||
disassembly line where the mouse was clicked.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Limitations</h3>
|
||||
|
||||
|
@ -896,20 +952,26 @@ if the PC hits $D010, even though it shouldn't)</li>
|
|||
|
||||
<p>These limitations will be addressed in a future release of Stella.</p>
|
||||
|
||||
|
||||
<!-- ///////////////////////////////////////////////////////////////////////// -->
|
||||
<br>
|
||||
<h2>Global Buttons</h2>
|
||||
|
||||
<p>There are also buttons on the right that always show up no matter which
|
||||
tab you're looking at. These are always active. They are: Step, Trace,
|
||||
Frame+1, Scan+1 and Exit.</p>
|
||||
Scan+1, Frame+1 and Exit.</p>
|
||||
<p><img src="graphics/debugger_globalbuttons.png"></p>
|
||||
|
||||
<p>When you use these buttons, the prompt doesn't change. This means the
|
||||
status lines with the registers and disassembly will be "stale". You
|
||||
can update them just by pressing Enter in the prompt.</p>
|
||||
|
||||
<p>You can also use the Step, Trace, Frame+1 and Scan+1 buttons from anywhere in
|
||||
the GUI via the keyboard, with Alt-S, Alt-T, Alt-F and Alt-L.</p>
|
||||
<p>You can also use the Step, Trace, Scan+1 and Frame+1 buttons from anywhere in
|
||||
the GUI via the keyboard, with Alt-S, Alt-T, Alt-L and Alt-F.</p>
|
||||
|
||||
|
||||
<!-- ///////////////////////////////////////////////////////////////////////// -->
|
||||
<br>
|
||||
<h2>Tutorial: How to hack a ROM</h2>
|
||||
|
||||
<p>Here is a step-by-step guide that shows you how to use the debugger to
|
||||
|
@ -920,7 +982,7 @@ but it helps to know at least a little about 6502 programming.</p>
|
|||
<li>Get the Atari Battlezone ROM image. Make sure you've got the
|
||||
regular NTSC version. Load it up in Stella and press TAB to get to
|
||||
the main menu. From there, click on "Game Information". For "Name", it
|
||||
should say "Battlezone (1983) (Atari) [!]" and for MD5Sum it should say
|
||||
should say "Battlezone (1983) (Atari)" and for MD5Sum it should say
|
||||
"41f252a66c6301f1e8ab3612c19bc5d4". The rest of this tutorial assumes
|
||||
you're using this version of the ROM; it may or may not work with the
|
||||
PAL version, or with any of the various "hacked" versions floating around
|
||||
|
@ -932,7 +994,7 @@ but it helps to know at least a little about 6502 programming.</p>
|
|||
<li>Enter the debugger by pressing the ` (backquote) key. Don't get
|
||||
killed before you do this, though. You should still have all 5 lives.</li>
|
||||
|
||||
<li>In the RAM display, click the "Search" button and enter "5" for input.
|
||||
<li>In the RAM display, click the "Search" button (labelled 'Srch') and enter "5" for input.
|
||||
This searches RAM for your value and highlights all addresses that match
|
||||
the input. You should see two addresses highlighted: "00a5" and "00ba".
|
||||
These are the only two addresses that currently have the value 5, so they're
|
||||
|
@ -948,7 +1010,7 @@ but it helps to know at least a little about 6502 programming.</p>
|
|||
<li>Get killed! Ram an enemy tank, or let him shoot you. Wait for
|
||||
the explosion to finish. You will now have 4 lives.</li>
|
||||
|
||||
<li>Enter the debugger again. Click the "Compare" button in RAM widget and enter
|
||||
<li>Enter the debugger again. Click the "Compare" button (labelled 'Cmp') in RAM widget and enter
|
||||
a value of 4. Now the RAM widget should only show one highlighted address:
|
||||
"00ba". What we did was search within our previous results (the ones that
|
||||
were 5 before) for the new value 4. Address $00ba used to have the value 5,
|
||||
|
@ -957,7 +1019,7 @@ but it helps to know at least a little about 6502 programming.</p>
|
|||
|
||||
<li>Test your theory. Go to the RAM display and change address $ba to
|
||||
some high number like $ff (you could use the Prompt instead: enter "ram
|
||||
$ba $ff"). Exit the debugger again. You should now see lots of lives
|
||||
$ba $ff"). Exit the debugger again (or advance the frame). You should now see lots of lives
|
||||
at the bottom of the screen (of course, there isn't room to display $ff
|
||||
(255) of them!)... play the game, get killed a few times, notice that
|
||||
you have lots of lives.</li>
|
||||
|
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 378 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 702 B |
After Width: | Height: | Size: 889 B |
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 7.3 KiB |
After Width: | Height: | Size: 5.0 KiB |
After Width: | Height: | Size: 9.2 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
@ -475,10 +475,10 @@
|
|||
gzipped tar files</li>
|
||||
<li>If compiling the Stella executable using MinGW, use the same commands
|
||||
as specified under <i>Linux/UNIX - Compressed tarball</i></li>
|
||||
<li>If compiling using Visual C++ 7:</li>
|
||||
<li>If compiling using Visual C++ 2008:</li>
|
||||
<ul>
|
||||
<li>Open the <b>stella-<i>release</i>/src/win32/Stella.sln</b>
|
||||
file using Visual C++ 7</li>
|
||||
file using Visual C++ 2008</li>
|
||||
<li>Build the 'Stella' solution</li>
|
||||
<li>Copy the <b>Stella.exe</b> file somewhere on your system</li>
|
||||
</ul>
|
||||
|
@ -577,13 +577,14 @@
|
|||
for ROM files, snapshots, and other external paths. These items are accessible by clicking
|
||||
the <b>Options => Config Files</b> buttons. Many other options can be set here,
|
||||
but for now we'll concentrate on <i>Config Files</i> only:</p>
|
||||
<table>
|
||||
<p><b>Config Files</b> dialog:</p>
|
||||
<table border="5" cellpadding="2" frame="box" rules="none">
|
||||
<tr>
|
||||
<td><p><b>Config Files</b> dialog:</p><p><img src="graphics/launcher_options_files.png"></p></td>
|
||||
<td><img src="graphics/launcher_options_files.png"></td>
|
||||
<td> </td>
|
||||
<td valign="top">
|
||||
<table border="1" cellpadding="4">
|
||||
<tr><th>Item</th><th>Description</th><th>Commandline</th></tr>
|
||||
<tr><th>Item</th><th>Brief description</th><th>For more information,<br>see Commandline</th></tr>
|
||||
<tr><td>Rom path</td><td>specifies location of ROM files</td><td>-romdir</td></tr>
|
||||
<tr><td>State path</td><td>specifies location of state files</td><td>-statedir</td></tr>
|
||||
<tr><td>Cheat file</td><td>specifies location of cheatfile database</td><td>-cheatfile</td></tr>
|
||||
|
@ -647,54 +648,50 @@
|
|||
<td>OpenGL mode only. Specify the amount (as a percentage) to scale the
|
||||
image width. Since many video modes do not use square pixels, you can
|
||||
reduce width until the pixels appear square. Allowable values are
|
||||
50 - 100; I find 85 - 90 gives the most authentic look.</td>
|
||||
80 - 100; I find 85 - 90 gives the most authentic look.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-gl_fsmax <0|1></pre></td>
|
||||
<td><pre>-gl_fsmax <1|0></pre></td>
|
||||
<td>OpenGL mode only. Stretch TIA image while in fullscreen mode.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-gl_vsync <0|1></pre></td>
|
||||
<td><pre>-gl_vsync <1|0></pre></td>
|
||||
<td>OpenGL mode only. Synchronize screen updates to the vertical blank
|
||||
period. This can result in smoother updates, and eliminate tearing.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-gl_texrect <0|1></pre></td>
|
||||
<td><pre>-gl_texrect <1|0></pre></td>
|
||||
<td>OpenGL mode only. Enable GL_TEXTURE_RECTANGLE extension. This causes
|
||||
problems for some people using ATI video cards.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-zoom_tia <scaler></pre></td>
|
||||
<td>Use the specified zoom level while in TIA/emulation mode.</td>
|
||||
<td><pre>-tia_filter <filter></pre></td>
|
||||
<td>Use the specified filter while in TIA/emulation mode. Currently,
|
||||
this can be zoomZx, where Z={2..10}.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-zoom_ui <scaler></pre></td>
|
||||
<td>Use the specified scaler while in non-emulation mode (currently, the ROM
|
||||
launcher and debugger).</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-fullscreen <0|1></pre></td>
|
||||
<td><pre>-fullscreen <1|0></pre></td>
|
||||
<td>Play the game in fullscreen mode.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-fullres <WxH></pre></td>
|
||||
<td>Use this resolution in fullscreen mode.</td>
|
||||
<td><pre>-fullres <auto|WxH></pre></td>
|
||||
<td>Use the given resolution in fullscreen mode. If 'auto', let Stella decide
|
||||
which resolution to use.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-center <0|1></pre></td>
|
||||
<td><pre>-center <1|0></pre></td>
|
||||
<td>Centers game window (if possible).</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-grabmouse <0|1></pre></td>
|
||||
<td><pre>-grabmouse <1|0></pre></td>
|
||||
<td>Keeps the mouse in the game window.</td>
|
||||
</tr>
|
||||
|
||||
|
@ -716,7 +713,7 @@
|
|||
preferred method on laptops (and other low-powered devices)
|
||||
and when using GL VSync. Busy will emulate z26 busy-wait
|
||||
behaviour, and use all possible CPU time, but may eliminate
|
||||
graphical 'tearing'.</td>
|
||||
graphical 'tearing' in software mode.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
@ -742,13 +739,15 @@
|
|||
<tr>
|
||||
<td><pre>-freq <number></pre></td>
|
||||
<td>Set sound sample output frequency (0 - 48000).
|
||||
Default is 31400.</td>
|
||||
Default is 31400. Do not change unless you experience sound
|
||||
issues.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-tiafreq <number></pre></td>
|
||||
<td>Set sound sample generation frequency (0 - 48000).
|
||||
Default is 31400.</td>
|
||||
Default is 31400. Do not change unless you experience sound
|
||||
issues.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
@ -758,7 +757,8 @@
|
|||
|
||||
<tr>
|
||||
<td><pre>-clipvol <1|0></pre></td>
|
||||
<td>Enable volume clipping (eliminates popping).</td>
|
||||
<td>Enable volume clipping (eliminates popping). Do not change
|
||||
unless you experience sound issues.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
@ -768,7 +768,7 @@
|
|||
|
||||
<tr>
|
||||
<td><pre>-showinfo <0|1></pre></td>
|
||||
<td>Shows some game info while Stella is running.</td>
|
||||
<td>Shows some game info on the commandline while Stella is running.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
@ -781,7 +781,7 @@
|
|||
|
||||
<tr>
|
||||
<td><pre>-pspeed <number></pre></td>
|
||||
<td>Speed of digital emulation for paddles (1-15).</td>
|
||||
<td>Speed for digital emulation of paddles (1-15).</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
@ -794,12 +794,6 @@
|
|||
<td>Stelladaptor 2 emulates specified joystick port.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-romviewer <0|1|2></pre></td>
|
||||
<td>Hide ROM info viewer in ROM launcher mode (0), or use the
|
||||
given zoom level (1 or 2).</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-autoslot <1|0></pre></td>
|
||||
<td>Automatically switch to the next available save state slot after
|
||||
|
@ -820,13 +814,7 @@
|
|||
<tr>
|
||||
<td><pre>-ss1x <0|1></pre></td>
|
||||
<td>Ignore any scaling applied to the TIA image, and save
|
||||
snapshot in unscaled mode.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-listrominfo</pre></td>
|
||||
<td>Prints relevant contents of the Stella ROM database, one ROM per line,
|
||||
and then exit Stella. This can be used for external frontends.</td>
|
||||
snapshot in unscaled (1x) mode.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
@ -835,6 +823,12 @@
|
|||
Stella.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-listrominfo</pre></td>
|
||||
<td>Prints relevant contents of the Stella ROM database, one ROM per line,
|
||||
and then exit Stella. This can be used for external frontends.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-launcherres <WxH></pre></td>
|
||||
<td>Set the size of the ROM launcher.</td>
|
||||
|
@ -850,7 +844,13 @@
|
|||
<td>Specifies which files to show in the ROM launcher
|
||||
('allfiles' is self-explanatory, 'allroms' is all files
|
||||
with valid rom extensions (currently: a26, bin, rom,
|
||||
gz, zip), 'LIST' is a ':' separated list of valid extensions.</td>
|
||||
gz, zip), 'LIST' is a ':' separated list of valid rom extensions.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-romviewer <0|1|2></pre></td>
|
||||
<td>Hide ROM info viewer in ROM launcher mode (0), or use the
|
||||
given zoom level (1 or 2).</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
@ -861,8 +861,9 @@
|
|||
|
||||
<tr>
|
||||
<td><pre>-listdelay <delay></pre></td>
|
||||
<td>Set the amount of time to wait between successive keypresses in
|
||||
list widgets (value can range from 300-1000).</td>
|
||||
<td>Set the amount of time to wait between treating successive
|
||||
keypresses as a single word in list widgets (value can range
|
||||
from 300-1000).</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
@ -870,6 +871,11 @@
|
|||
<td>Set the number of lines a mousewheel will scroll in the UI.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-romdir <dir></pre></td>
|
||||
<td>Set the directory where the ROM launcher will start.</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><pre>-statedir <dir></pre></td>
|
||||
<td>Set the directory in which to save state files.</td>
|
||||
|
@ -1059,61 +1065,129 @@
|
|||
<p><b>Options Menu</b> dialog:<br><br>
|
||||
<img src="graphics/options.png">
|
||||
<br><br>
|
||||
|
||||
<p><b>Video Settings</b> dialog:<br><br>
|
||||
<img src="graphics/options_video.png">
|
||||
<br><br><br>
|
||||
|
||||
<p><b>Audio Settings</b> dialog:<br><br>
|
||||
<img src="graphics/options_audio.png">
|
||||
<br><br><br>
|
||||
|
||||
<p><b>Input Settings</b> dialog:<br><br>
|
||||
<img src="graphics/options_input.png">
|
||||
<p>This dialog is described in further detail in <b>Section 8 -
|
||||
<a href="#Remapping">Event Remapping</a></b>.
|
||||
<br><br><br>
|
||||
|
||||
<p><b>UI Settings</b> dialog:<br><br>
|
||||
<img src="graphics/options_ui.png">
|
||||
<p>All UI related items can be changed here. Such items include the width and
|
||||
height of the ROM launcher and debugger windows, etc. Note that most of the items
|
||||
here require Stella to be restarted to take effect. Specific information about
|
||||
the ROM Info functionality is described in further detail in <b>Section 9 -
|
||||
<a href="#ROMInfo">ROM Launcher</a></b>.
|
||||
|
||||
<br><br><br>
|
||||
|
||||
<p><b>Audit ROMs</b> dialog:<br><br>
|
||||
<img src="graphics/options_romaudit.png">
|
||||
<p>This dialog is described in further detail in <b>Section 10 -
|
||||
<a href="#ROMAudit">ROM Audit Mode</a></b>.
|
||||
<br><br><br>
|
||||
|
||||
<p><b>Game Information</b> dialog:<br><br>
|
||||
<img src="graphics/options_gameinfo.png">
|
||||
<p>This dialog allows you to change all ROM properties as described in
|
||||
<b>Section 16 - <a href="#Properties">Game Properties</a></b>.
|
||||
<br><br><br>
|
||||
|
||||
<p><b>Help</b> dialog:<br><br>
|
||||
<img src="graphics/options_help.png">
|
||||
<br><br><br>
|
||||
|
||||
<p><b>About</b> dialog:<br><br>
|
||||
<img src="graphics/options_about.png">
|
||||
<p><b>Video Settings</b> dialog:</p>
|
||||
<table border="5" cellpadding="2" frame="box" rules="none">
|
||||
<tr>
|
||||
<td><img src="graphics/options_video.png"></td>
|
||||
<td> </td>
|
||||
<td valign="top">
|
||||
<table border="1" cellpadding="4">
|
||||
<tr><th>Item</th><th>Brief description</th><th>For more information,<br>see Commandline</th></tr>
|
||||
<tr><td>Renderer (*)</td><td>use specified rendering mode (requires restart)</td><td>-video</td></tr>
|
||||
<tr><td>TIA Filter</td><td>filter for emulation mode </td><td>-tia_filter</td></tr>
|
||||
<tr><td>TIA Palette</td><td>palette for emulation mode</td><td>-palette</td></tr>
|
||||
<tr><td>FS Res</td><td>resolution for fullscreen mode</td><td>-fullres</td></tr>
|
||||
<tr><td>Timing (*)</td><td>how to wait between frames (requires restart)</td><td>-timing</td></tr>
|
||||
<tr><td>GL Filter</td><td>OpenGL filter mode</td><td>-gl_filter</td></tr>
|
||||
<tr><td>GL Aspect</td><td>OpenGL width of window</td><td>-gl_aspect</td></tr>
|
||||
<tr><td>Framerate</td><td>frames per second in emulation mode</td><td>-framerate</td></tr>
|
||||
<tr><td>Fullscreen mode</td><td>self-explanatory</td><td>-fullscreen</td></tr>
|
||||
<tr><td>PAL color-loss</td><td>use PAL color-loss effect</td><td>-colorloss</td></tr>
|
||||
<tr><td>GL FS Stretch</td><td>stretch fullscreen OpenGL in emulation mode</td><td>-gl_fsmax</td></tr>
|
||||
<tr><td>GL VSync</td><td>enable OpenGL vertical synchronization</td><td>-gl_vsync</td></tr>
|
||||
<tr><td>Center window (*)</td><td>attempt to center SDL window (requires restart)</td><td>-center</td></tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<p><b>Audio Settings</b> dialog:</p>
|
||||
<table border="5" cellpadding="2" frame="box" rules="none">
|
||||
<tr>
|
||||
<td><img src="graphics/options_audio.png"></td>
|
||||
<td> </td>
|
||||
<td valign="top">
|
||||
<table border="1" cellpadding="4">
|
||||
<tr><th>Item</th><th>Brief description</th><th>For more information,<br>see Commandline</th></tr>
|
||||
<tr><td>Volume</td><td>self-explanatory</td><td>-volume</td></tr>
|
||||
<tr><td>Fragment size</td><td>set size of audio buffers</td><td>-fragsize</td></tr>
|
||||
<tr><td>Output freq</td><td>change sound output frequency (advanced)</td><td>-freq</td></tr>
|
||||
<tr><td>TIA freq</td><td>change TIA output frequency (advanced)</td><td>-tiafreq</td></tr>
|
||||
<tr><td>Clip volume</td><td>Eliminate popping in sound generation (advanced)</td><td>-clipvol</td></tr>
|
||||
<tr><td>Enable sound</td><td>self-explanatory</td><td>-sound</td></tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<p><b>Input Settings</b> dialog:</p>
|
||||
<table border="5" cellpadding="2" frame="box" rules="none">
|
||||
<tr>
|
||||
<td><img src="graphics/options_input.png"></td>
|
||||
<td> </td>
|
||||
<td valign="top"><br>This dialog is described in further detail in <b>Section 8 -
|
||||
<a href="#Remapping">Event Remapping</a></b>.</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<p><b>UI Settings</b> dialog (3 tabs):</p>
|
||||
<table border="5" cellpadding="2" frame="box" rules="none">
|
||||
<tr>
|
||||
<td><img src="graphics/options_ui.png"></td>
|
||||
<td> </td>
|
||||
<td valign="top"><br>This dialog is described in further detail in
|
||||
<b>Section 9 - <a href="#ROMInfo">ROM Launcher</a></b>.</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<table border="5" cellpadding="2" frame="box" rules="none">
|
||||
<tr>
|
||||
<td><img src="graphics/options_debugger.png"></td>
|
||||
<td> </td>
|
||||
<td valign="top">
|
||||
<table border="1" cellpadding="4">
|
||||
<tr><th>Item</th><th>Brief description</th><th>For more information,<br>see Commandline</th></tr>
|
||||
<tr><td>Debugger Width/Height</td><td>self-explanatory (requires restart)</td><td>-debuggerres</td></tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<table border="5" cellpadding="2" frame="box" rules="none">
|
||||
<tr>
|
||||
<td><img src="graphics/options_misc.png"></td>
|
||||
<td> </td>
|
||||
<td valign="top">
|
||||
<table border="1" cellpadding="4">
|
||||
<tr><th>Item</th><th>Brief description</th><th>For more information,<br>see Commandline</th></tr>
|
||||
<tr><td>Interface Palette</td><td>palette to use for UI elements</td><td>-uipalette</td></tr>
|
||||
<tr><td>List quick delay</td><td>time to wait between keypresses in listwidget</td><td>-listdelay</td></tr>
|
||||
<tr><td>Mouse wheel scroll</td><td>number of lines mouse scroll will move in listwidget</td><td>-mscroll</td></tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<p><b>Audit ROMs</b> dialog:</p>
|
||||
<table border="5" cellpadding="2" frame="box" rules="none">
|
||||
<tr>
|
||||
<td><img src="graphics/romaudit.png"></td>
|
||||
<td> </td>
|
||||
<td valign="top"><br>This dialog is described in further detail in
|
||||
<b>Section 10 - <a href="#ROMAudit">ROM Audit Mode</a></b>.</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<p><b>Game Properties</b> dialog:</p>
|
||||
<table border="5" cellpadding="2" frame="box" rules="none">
|
||||
<tr>
|
||||
<td><img src="graphics/options_gameinfo.png"></td>
|
||||
<td> </td>
|
||||
<td valign="top"><br>This dialog allows you to change all ROM properties
|
||||
as described in <b>Section 16 - <a href="#Properties">Game Properties</a></b>.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- ///////////////////////////////////////////////////////////////////////// -->
|
||||
<br><br>
|
||||
<br><br><br>
|
||||
<p><h1>
|
||||
<a name="Keyboard">7. Keyboard Layout</a></h1>
|
||||
<hr>
|
||||
|
||||
<p>The Atari 2600 console controls and controllers are mapped to the computer's
|
||||
keyboard as shown in the following tables.</p>
|
||||
|
||||
<p>As of Stella 1.4, most of these events can be remapped to other keys on your keyboard
|
||||
or buttons on your joystick (see <b>Section 8 -
|
||||
keyboard as shown in the following tables. However, most of these events can be
|
||||
remapped to other keys on your keyboard or buttons on your joystick (see <b>Section 8 -
|
||||
<a href="#Remapping">Event Remapping</a></b>). The tables below show the default
|
||||
settings.</p>
|
||||
|
||||
|
@ -1632,7 +1706,7 @@
|
|||
</tr>
|
||||
</table>
|
||||
|
||||
<p><b>Developer Keys (cannot be remapped)</b></p>
|
||||
<p><b>Developer Keys in TIA mode (cannot be remapped)</b></p>
|
||||
|
||||
<table BORDER=2 cellpadding=5>
|
||||
<tr>
|
||||
|
@ -1844,10 +1918,10 @@
|
|||
<a name="Remapping">8. Event Remapping / Input Devices</a></h1>
|
||||
<hr>
|
||||
|
||||
<p>This version of Stella has event remapping. Almost every event in the emulator
|
||||
can be remapped to another key on the keyboard or to buttons on up to eight
|
||||
joysticks/gamepads (see <b>Section 7 - <a href="#Keyboard">Keyboard Layout</a></b>
|
||||
for those events which can/cannot be remapped).</p>
|
||||
<p>Almost every event in Stella can be remapped to another key on the keyboard or
|
||||
to buttons on up to eight joysticks/gamepads (see <b>Section 7 -
|
||||
<a href="#Keyboard">Keyboard Layout</a></b> for those events which can/cannot be
|
||||
remapped).</p>
|
||||
|
||||
<p>Note that there are currently two separate event modes in Stella; emulation
|
||||
mode and user-interface (UI) mode. Each mode has separate mappings, so (for example)
|
||||
|
@ -1859,7 +1933,7 @@
|
|||
|
||||
<p>To remap an event:
|
||||
<ol>
|
||||
<li>Enter options menu and click the 'Input Settings' button.</li>
|
||||
<li>Enter <b>Options menu</b> and click the <b>Input Settings</b> button.</li>
|
||||
<li>If you wish to remap emulation events, click the 'Emul. Events' tab.
|
||||
Otherwise, click the 'UI Events' tab for user interface events.</li>
|
||||
<li>Select event you want to remap and click the 'Map' button.</li>
|
||||
|
@ -1913,7 +1987,7 @@
|
|||
|
||||
<p>Several options are configurable in the ROM launcher. The size of the
|
||||
launcher and fonts, as well as the 'ROM info viewer' can be changed in
|
||||
<b>UI Settings/Launcher</b> dialog, as shown below:</p>
|
||||
<b>UI Settings => Launcher</b> dialog, as shown below:</p>
|
||||
<img src="graphics/launcher_options.png">
|
||||
<p>Most of the options are self-explanatory, except for the 'ROM Info
|
||||
viewer', which is described below.</p>
|
||||
|
@ -1959,10 +2033,28 @@
|
|||
dialog will cause all ROMs launched after that to use those properties
|
||||
you specify. Clicking <b>Default</b> will disable its functionality,
|
||||
and use ROM properties as defined by the ROM itself. The dialog is as
|
||||
follows:</p>
|
||||
<p><img src="graphics/launcher_override.png"></p>
|
||||
<p>See <b>Section 16 - <a href="#Properties">Game Properties</a></b>
|
||||
for more information concerning ROM properties.</p></li>
|
||||
follows (See <b>Section 16 - <a href="#Properties">Game Properties</a></b>
|
||||
for more information concerning ROM properties):</p>
|
||||
<table border="5" cellpadding="2" frame="box" rules="none">
|
||||
<tr>
|
||||
<td><img src="graphics/launcher_override.png"></td>
|
||||
<td> </td>
|
||||
<td valign="top">
|
||||
<table border="1" cellpadding="4">
|
||||
<tr><th>Item</th><th>For more information,<br>see Commandline</th></tr>
|
||||
<tr><td>Bankswitch type</td><td>-bs</td></tr>
|
||||
<tr><td>Left Difficulty</td><td>-ld</td></tr>
|
||||
<tr><td>Right Difficulty</td><td>-rd</td></tr>
|
||||
<tr><td>TV Type</td><td>-tv</td></tr>
|
||||
<tr><td>Hold Select down</td><td>-holdselect</td></tr>
|
||||
<tr><td>Hold Reset down</td><td>-holdreset</td></tr>
|
||||
<tr><td>Hold Button 0 down</td><td>-holdbutton0</td></tr>
|
||||
</table>
|
||||
<p></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</li>
|
||||
|
||||
<li><p><b>Filter listing</b>: Selecting this option shows a dialog whereby
|
||||
one can filter the types of files shown in the listing. The dialog is as
|
||||
|
@ -1996,7 +2088,7 @@
|
|||
ROMs in DOS 8.3 naming format, and wish the filenames to be more descriptive,
|
||||
or the current filenames are too large to see in the launcher.</p>
|
||||
|
||||
<p>This feature is accessible from Options -> Audit ROMs, and is only
|
||||
<p>This feature is accessible from <b>Options => Audit ROMs</b>, and is only
|
||||
available while in ROM launcher mode. The dialog box for this feature
|
||||
is as follows:</p>
|
||||
<img src="graphics/romaudit.png">
|
||||
|
@ -2032,8 +2124,8 @@
|
|||
|
||||
<p>Stella can use up to <b>two</b> Stelladaptors; any extra ones are ignored.
|
||||
Stelladaptor devices will be automatically detected and configured. Devices
|
||||
can be plugged/unplugged while the emulation is running; Stella will detect the
|
||||
change and act accordingly.</p>
|
||||
can be plugged/unplugged while the emulator is running, although you will need
|
||||
to restart the game currently being emulated.</p>
|
||||
|
||||
<p>The detection and configuration is as follows:
|
||||
|
||||
|
@ -2061,7 +2153,7 @@
|
|||
|
||||
<p>Stella supports a real AtariVox device for the speech/SpeakJet portion
|
||||
of the controller. You will need a real AtariVox device, located
|
||||
<a href="http://www.atariage.com/store/product_info.php?products_id=295">here</a>,
|
||||
<a href=" ">here</a>,
|
||||
as well as some means of connecting it to your computer (some sort of
|
||||
serial port/USB adaptor). There should be drivers for your serial convertor,
|
||||
which allow your particular operating system to 'see' the device. Configuring
|
||||
|
@ -2125,7 +2217,8 @@
|
|||
|
||||
<p><ul>
|
||||
<li>Developer key-combo shortcuts, used to change TIA state dynamically
|
||||
(ie, while the emulation is still running). See <b>Section 7 -
|
||||
(ie, while the emulation is still running). See the <b>Developer Keys
|
||||
in TIA mode</b> options under <b>Section 7 -
|
||||
<a href="#Keyboard">Keyboard Layout</a></b> for more information.</li>
|
||||
|
||||
<li>Commandline options influencing emulation state. See the <b>Command
|
||||
|
@ -2224,12 +2317,12 @@
|
|||
|
||||
|
||||
<!-- ///////////////////////////////////////////////////////////////////////// -->
|
||||
<br><br>
|
||||
<br><br><br>
|
||||
<p><h1>
|
||||
<a name="Cheats">15. Cheatcode Manager</a></h1>
|
||||
<hr>
|
||||
|
||||
<p>Stella 2.0 contains support for Bob Colbert's Cheetah cheat codes, as
|
||||
<p>Stella contains support for Bob Colbert's Cheetah cheat codes, as
|
||||
well as an extended Stella-specific type of cheat code that works on
|
||||
bankswitched ROMs.</p>
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: Settings.cxx,v 1.156 2009-01-05 22:05:35 stephena Exp $
|
||||
// $Id: Settings.cxx,v 1.157 2009-01-13 14:45:34 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <cassert>
|
||||
|
@ -227,7 +227,7 @@ void Settings::validate()
|
|||
setInternal("gl_filter", "nearest");
|
||||
|
||||
i = getInt("gl_aspect");
|
||||
if(i < 50 || i > 100)
|
||||
if(i < 80 || i > 100)
|
||||
setInternal("gl_aspect", "100");
|
||||
#endif
|
||||
|
||||
|
@ -279,6 +279,7 @@ void Settings::usage()
|
|||
<< endl
|
||||
<< "Usage: stella [options ...] romfile" << endl
|
||||
<< " Run without any options or romfile to use the ROM launcher" << endl
|
||||
<< " Consult the manual for more in-depth information" << endl
|
||||
<< endl
|
||||
<< "Valid options are:" << endl
|
||||
<< endl
|
||||
|
@ -319,26 +320,25 @@ void Settings::usage()
|
|||
<< endl
|
||||
#endif
|
||||
<< " -cheat <code> Use the specified cheatcode (see manual for description)\n"
|
||||
<< " -showinfo <1|0> Shows some game info\n"
|
||||
<< " -showinfo <1|0> Shows some game info on commandline\n"
|
||||
<< " -joydeadzone <number> Sets 'deadzone' area for analog joysticks (0-29)\n"
|
||||
<< " -pspeed <number> Speed of digital emulated paddle movement (1-15)\n"
|
||||
<< " -sa1 <left|right> Stelladaptor 1 emulates specified joystick port\n"
|
||||
<< " -sa2 <left|right> Stelladaptor 2 emulates specified joystick port\n"
|
||||
<< " -romviewer <0|1|2> Show ROM info viewer at given zoom level in ROM launcher (0 for off)\n"
|
||||
<< " -autoslot <1|0> Automatically switch to next save slot when state saving\n"
|
||||
<< " -ssdir <path> The directory to save snapshot files to\n"
|
||||
<< " -sssingle <1|0> Generate single snapshot instead of many\n"
|
||||
<< " -ss1x <1|0> Generate TIA snapshot in 1x mode (ignore scaling)\n"
|
||||
<< " -stats <1|0> Overlay console info during emulation\n"
|
||||
<< endl
|
||||
<< " -listrominfo Display contents of stella.pro, one line per ROM entry\n"
|
||||
<< " -rominfo <rom> Display detailed information for the given ROM\n"
|
||||
<< " -listrominfo Display contents of stella.pro, one line per ROM entry\n"
|
||||
<< " -launcherres <WxH> The resolution to use in ROM launcher mode\n"
|
||||
<< " -launcherfont <small|medium| Use the specified font in the ROM launcher\n"
|
||||
<< " large>\n"
|
||||
<< " -launcherexts <allfiles| Show files with the given extensions in ROM launcher\n"
|
||||
<< " allroms| (exts is a ':' separated list of extensions\n"
|
||||
<< " exts\n"
|
||||
<< " -romviewer <0|1|2> Show ROM info viewer at given zoom level in ROM launcher (0 for off)\n"
|
||||
<< " -uipalette <1|2> Used the specified palette for UI elements\n"
|
||||
<< " -listdelay <delay> Time to wait between keypresses in list widgets (300-1000)\n"
|
||||
<< " -mwheel <lines> Number of lines the mouse wheel will scroll in UI\n"
|
||||
|
@ -346,7 +346,6 @@ void Settings::usage()
|
|||
<< " -cheatfile <file> Full pathname of cheatfile database\n"
|
||||
<< " -palettefile <file> Full pathname of user-defined palette file\n"
|
||||
<< " -propsfile <file> Full pathname of ROM properties file\n"
|
||||
<< " -tiafloat <1|0> Set unused TIA pins floating on a read/peek\n"
|
||||
<< " -avoxport <name> The name of the serial port where an AtariVox is connected\n"
|
||||
<< " -help Show the text you're now reading\n"
|
||||
#ifdef DEBUGGER_SUPPORT
|
||||
|
@ -360,6 +359,8 @@ void Settings::usage()
|
|||
<< " -holdreset Start the emulator with the Game Reset switch held down\n"
|
||||
<< " -holdselect Start the emulator with the Game Select switch held down\n"
|
||||
<< " -holdbutton0 Start the emulator with the left joystick button held down\n"
|
||||
<< " -stats <1|0> Overlay console info during emulation\n"
|
||||
<< " -tiafloat <1|0> Set unused TIA pins floating on a read/peek\n"
|
||||
<< endl
|
||||
<< " -bs <arg> Sets the 'Cartridge.Type' (bankswitch) property\n"
|
||||
<< " -type <arg> Same as using -bs\n"
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: M6502Hi.cxx,v 1.23 2009-01-01 18:13:38 stephena Exp $
|
||||
// $Id: M6502Hi.cxx,v 1.24 2009-01-13 14:45:34 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include "M6502Hi.hxx"
|
||||
|
@ -57,7 +57,7 @@ inline uInt8 M6502High::peek(uInt16 address)
|
|||
if(myReadTraps != NULL && myReadTraps->isSet(address))
|
||||
{
|
||||
myJustHitTrapFlag = true;
|
||||
myHitTrapInfo.message = "Read trap: ";
|
||||
myHitTrapInfo.message = "RTrap: ";
|
||||
myHitTrapInfo.address = address;
|
||||
}
|
||||
#endif
|
||||
|
@ -81,7 +81,7 @@ inline void M6502High::poke(uInt16 address, uInt8 value)
|
|||
if(myWriteTraps != NULL && myWriteTraps->isSet(address))
|
||||
{
|
||||
myJustHitTrapFlag = true;
|
||||
myHitTrapInfo.message = "Write trap: ";
|
||||
myHitTrapInfo.message = "WTrap: ";
|
||||
myHitTrapInfo.address = address;
|
||||
}
|
||||
#endif
|
||||
|
@ -118,7 +118,7 @@ bool M6502High::execute(uInt32 number)
|
|||
{
|
||||
if(myBreakPoints->isSet(PC))
|
||||
{
|
||||
if(myDebugger->start("Breakpoint hit: ", PC))
|
||||
if(myDebugger->start("BP: ", PC))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: M6502Low.cxx,v 1.16 2009-01-01 18:13:38 stephena Exp $
|
||||
// $Id: M6502Low.cxx,v 1.17 2009-01-13 14:45:34 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include "M6502Low.hxx"
|
||||
|
@ -47,7 +47,7 @@ inline uInt8 M6502Low::peek(uInt16 address)
|
|||
if(myReadTraps != NULL && myReadTraps->isSet(address))
|
||||
{
|
||||
myJustHitTrapFlag = true;
|
||||
myHitTrapInfo.message = "Read trap: ";
|
||||
myHitTrapInfo.message = "RTrap: ";
|
||||
myHitTrapInfo.address = address;
|
||||
}
|
||||
#endif
|
||||
|
@ -64,7 +64,7 @@ inline void M6502Low::poke(uInt16 address, uInt8 value)
|
|||
if(myWriteTraps != NULL && myWriteTraps->isSet(address))
|
||||
{
|
||||
myJustHitTrapFlag = true;
|
||||
myHitTrapInfo.message = "Write trap: ";
|
||||
myHitTrapInfo.message = "WTrap: ";
|
||||
myHitTrapInfo.address = address;
|
||||
}
|
||||
#endif
|
||||
|
@ -101,7 +101,7 @@ bool M6502Low::execute(uInt32 number)
|
|||
{
|
||||
if(myBreakPoints->isSet(PC))
|
||||
{
|
||||
if(myDebugger->start("Breakpoint hit: ", PC))
|
||||
if(myDebugger->start("BP: ", PC))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: VideoDialog.cxx,v 1.61 2009-01-06 23:02:18 stephena Exp $
|
||||
// $Id: VideoDialog.cxx,v 1.62 2009-01-13 14:45:34 stephena Exp $
|
||||
//
|
||||
// Based on code from ScummVM - Scumm Interpreter
|
||||
// Copyright (C) 2002-2004 The ScummVM project
|
||||
|
@ -126,7 +126,7 @@ VideoDialog::VideoDialog(OSystem* osystem, DialogContainer* parent,
|
|||
myAspectRatioSlider =
|
||||
new SliderWidget(this, font, xpos, ypos, pwidth, lineHeight,
|
||||
"GL Aspect: ", lwidth, kAspectRatioChanged);
|
||||
myAspectRatioSlider->setMinValue(50); myAspectRatioSlider->setMaxValue(100);
|
||||
myAspectRatioSlider->setMinValue(80); myAspectRatioSlider->setMaxValue(100);
|
||||
wid.push_back(myAspectRatioSlider);
|
||||
myAspectRatioLabel =
|
||||
new StaticTextWidget(this, font, xpos + myAspectRatioSlider->getWidth() + 4,
|
||||
|
|