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
This commit is contained in:
stephena 2009-01-13 14:45:34 +00:00
parent bd278bc5bb
commit 8019e877ca
31 changed files with 453 additions and 297 deletions

View File

@ -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.<
&amp; 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 "&gt;" 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, ++, --, &lt;&lt;, and &gt;&gt; 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 &amp;
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 &amp; 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
&lt;&lt; [&lt; ,] - Shift the current location/register left.
&gt;&gt; [&gt; .] - Shift the current location/register right.
Any bits shifted out of the location/register with &lt;&lt; or &gt;&gt;
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
&lt;&lt; - Shift the current location/register left.
&gt;&gt; - Shift the current location/register right.
Any bits shifted out of the location/register with &lt;&lt; or &gt;&gt;
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 &amp;
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>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 702 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 889 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -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 =&gt; 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>&nbsp;&nbsp;&nbsp;&nbsp;</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 &lt;0|1&gt;</pre></td>
<td><pre>-gl_fsmax &lt;1|0&gt;</pre></td>
<td>OpenGL mode only. Stretch TIA image while in fullscreen mode.</td>
</tr>
<tr>
<td><pre>-gl_vsync &lt;0|1&gt;</pre></td>
<td><pre>-gl_vsync &lt;1|0&gt;</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 &lt;0|1&gt;</pre></td>
<td><pre>-gl_texrect &lt;1|0&gt;</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 &lt;scaler&gt;</pre></td>
<td>Use the specified zoom level while in TIA/emulation mode.</td>
<td><pre>-tia_filter &lt;filter&gt;</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 &lt;scaler&gt;</pre></td>
<td>Use the specified scaler while in non-emulation mode (currently, the ROM
launcher and debugger).</td>
</tr>
<tr>
<td><pre>-fullscreen &lt;0|1&gt;</pre></td>
<td><pre>-fullscreen &lt;1|0&gt;</pre></td>
<td>Play the game in fullscreen mode.</td>
</tr>
<tr>
<td><pre>-fullres &lt;WxH&gt;</pre></td>
<td>Use this resolution in fullscreen mode.</td>
<td><pre>-fullres &lt;auto|WxH&gt;</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 &lt;0|1&gt;</pre></td>
<td><pre>-center &lt;1|0&gt;</pre></td>
<td>Centers game window (if possible).</td>
</tr>
<tr>
<td><pre>-grabmouse &lt;0|1&gt;</pre></td>
<td><pre>-grabmouse &lt;1|0&gt;</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 &lt;number&gt;</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 &lt;number&gt;</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 &lt;1|0&gt;</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 &lt;0|1&gt;</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 &lt;number&gt;</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 &lt;0|1|2&gt;</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 &lt;1|0&gt;</pre></td>
<td>Automatically switch to the next available save state slot after
@ -820,13 +814,7 @@
<tr>
<td><pre>-ss1x &lt;0|1&gt;</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 &lt;WxH&gt;</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 &lt;0|1|2&gt;</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 &lt;delay&gt;</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 &lt;dir&gt;</pre></td>
<td>Set the directory where the ROM launcher will start.</td>
</tr>
<tr>
<td><pre>-statedir &lt;dir&gt;</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>&nbsp;&nbsp;&nbsp;&nbsp;</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>&nbsp;&nbsp;&nbsp;&nbsp;</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>&nbsp;&nbsp;&nbsp;&nbsp;</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>&nbsp;&nbsp;&nbsp;&nbsp;</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>&nbsp;&nbsp;&nbsp;&nbsp;</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>&nbsp;&nbsp;&nbsp;&nbsp;</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>&nbsp;&nbsp;&nbsp;&nbsp;</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>&nbsp;&nbsp;&nbsp;&nbsp;</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 =&gt; 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>&nbsp;&nbsp;&nbsp;&nbsp;</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 =&gt; 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>

View File

@ -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"

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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,