From 8f8c85250c48062ae5a474a10a64c28c5fdb2e2c Mon Sep 17 00:00:00 2001
From: stephena
Date: Wed, 26 Jun 2013 16:03:08 +0000
Subject: [PATCH] Preparation for 3.9 release, updated documentation.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@2756 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
---
Announce.txt | 26 ++--
Changes.txt | 8 +-
debian/changelog | 7 +
docs/debugger.html | 130 +++++++++----------
docs/graphics/debugger_bankcomplex.png | Bin 0 -> 9087 bytes
docs/graphics/debugger_banksimple.png | Bin 0 -> 3374 bytes
docs/graphics/debugger_iotab.png | Bin 8473 -> 8553 bytes
docs/graphics/debugger_main.png | Bin 33300 -> 31786 bytes
docs/graphics/debugger_ram.png | Bin 5767 -> 6052 bytes
docs/graphics/debugger_ramsearch.png | Bin 5191 -> 5698 bytes
docs/graphics/debugger_rom.png | Bin 9965 -> 9381 bytes
docs/graphics/debugger_romcmenu.png | Bin 6874 -> 10176 bytes
docs/graphics/debugger_tiainfo.png | Bin 1635 -> 1741 bytes
docs/graphics/debugger_tiatab.png | Bin 9937 -> 9414 bytes
docs/graphics/eventmapping_devsports.png | Bin 7450 -> 6615 bytes
docs/graphics/launcher_options_files.png | Bin 8512 -> 5270 bytes
docs/graphics/launcher_options_snapshots.png | Bin 0 -> 5814 bytes
docs/graphics/logs.png | Bin 9624 -> 9318 bytes
docs/graphics/options.png | Bin 3652 -> 4267 bytes
docs/graphics/options_audio.png | Bin 3189 -> 3170 bytes
docs/graphics/options_video.png | Bin 9260 -> 8497 bytes
docs/graphics/options_video_tv.png | Bin 8533 -> 8015 bytes
docs/graphics/rom_browser.png | Bin 3644 -> 4953 bytes
docs/index.html | 53 +++++---
src/debugger/CartDebug.cxx | 8 +-
src/emucore/CompuMate.hxx | 2 +-
src/emucore/Settings.cxx | 1 -
src/gui/OptionsDialog.cxx | 4 +-
src/gui/OptionsDialog.hxx | 2 +-
src/macosx/Info-Stella.plist | 2 +-
src/unix/stella.spec | 5 +-
src/win32/stella.rc | 8 +-
32 files changed, 143 insertions(+), 113 deletions(-)
create mode 100644 docs/graphics/debugger_bankcomplex.png
create mode 100644 docs/graphics/debugger_banksimple.png
create mode 100644 docs/graphics/launcher_options_snapshots.png
diff --git a/Announce.txt b/Announce.txt
index c17b6a108..ed60325e9 100644
--- a/Announce.txt
+++ b/Announce.txt
@@ -9,7 +9,7 @@
SSSS ttt eeeee llll llll aaaaa
===========================================================================
- Release 3.8.1 for Linux, MacOSX and Windows
+ Release 3.9 for Linux, MacOSX and Windows
===========================================================================
The Atari 2600 Video Computer System (VCS), introduced in 1977, was the
@@ -21,28 +21,28 @@ all of your favourite Atari 2600 games again! Stella was originally
developed for Linux by Bradford W. Mott, however, it has been ported to a
number of other platforms and is currently maintained by Stephen Anthony.
-This is the 3.8.1 release of Stella for Linux, Mac OSX and Windows. The
+This is the 3.9 release of Stella for Linux, Mac OSX and Windows. The
distributions currently available are:
- * Binaries for Windows XP/Vista/7 :
- Stella-3.8.1-win32.exe (32-bit EXE installer)
- Stella-3.8.1-x64.exe (64-bit EXE installer)
- Stella-3.8.1-windows.zip (32/64 bit versions)
+ * Binaries for Windows XP/Vista/7/8 :
+ Stella-3.9-win32.exe (32-bit EXE installer)
+ Stella-3.9-x64.exe (64-bit EXE installer)
+ Stella-3.9-windows.zip (32/64 bit versions)
* Binary distribution for MacOS X 32-bit & 64-bit :
- Stella-3.8.1-macosx.dmg (32-bit Universal Binary)
- Stella-3.8.1_intel-macosx.dmg (32/64-bit Intel/OSX 10.6+)
+ Stella-3.9-macosx.dmg (32-bit Universal Binary)
+ Stella-3.9_intel-macosx.dmg (32/64-bit Intel/OSX 10.6+)
* Binary distribution in 32-bit & 64-bit Ubuntu DEB format :
- stella_3.8.1-1_i386.deb
- stella_3.8.1-1_amd64.deb
+ stella_3.9-1_i386.deb
+ stella_3.9-1_amd64.deb
* Binary distribution in 32-bit & 64-bit RPM format :
- stella-3.8.1-2.i386.rpm
- stella-3.8.1-2.x86_64.rpm
+ stella-3.9-2.i386.rpm
+ stella-3.9-2.x86_64.rpm
* Source code distribution for all platforms :
- stella-3.8.1-src.tar.gz
+ stella-3.9-src.tar.gz
Distribution Site
diff --git a/Changes.txt b/Changes.txt
index fdbe71dc9..57304fe79 100644
--- a/Changes.txt
+++ b/Changes.txt
@@ -12,7 +12,7 @@
Release History
===========================================================================
-3.8.1 to 3.9: (June xx, 2013)
+3.8.1 to 3.9: (June 27, 2013)
* Greatly extended functionality of the debugger disassembly:
- There is now a new tab which lists information specific to the
@@ -59,7 +59,8 @@
specifying whether snapshots should be saved using either the internal
ROM database name or the actual ROM filename. This feature was
present in older releases of Stella, and due to popular demand it's
- now back again.
+ now back again. Related to this, added a new dialog specifically for
+ the numerous snapshot-related items.
* Fixed bug in Linux/OSX versions when starting Stella for the first
time; it was previously creating mislabeled directories to store
@@ -76,6 +77,9 @@
RAM containing all zeroes. This seems to fix issues with Dragonstomper
always starting in exactly the same state.
+ * Fixed issue when debugging CompuMate ROMs; keystrokes entering while
+ debugging would be interpreted as typing on the CompuMate keyboard.
+
* Changed colour of the 'current PC indicator' in the debugger to
match the one used for line selection. This makes it easier to
see for those with problems seeing lighter colours.
diff --git a/debian/changelog b/debian/changelog
index 719ab4086..c8e42c959 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+stella (3.9-1) stable; urgency=high
+
+ * Version 3.9 release
+
+ -- Stephen Anthony Thu, 27 Jun 2013 17:20:07 -0330
+
+
stella (3.8.1-1) stable; urgency=high
* Version 3.8.1 release
diff --git a/docs/debugger.html b/docs/debugger.html
index b53eeeb8d..53dfb0aa3 100644
--- a/docs/debugger.html
+++ b/docs/debugger.html
@@ -67,6 +67,10 @@ feature that no other 2600 debugger has; it's completely cross-platform.<
Symbolic names in disassembly.
Symbolic names accepted as input.
+
+ Ability to generate DASM-compatible disassembly files (currently single-bank
+ only) with all the features mentioned above.
+
Tab completion for commands, symbol names and functions.
Graphical editor for RIOT and extended RAM. Acts a lot like a spreadsheet.
Input in hex, with displays for label/decimal/binary for
@@ -647,9 +651,9 @@ can also get rid of all traps at once with the "cleartraps" command.
listconfig - List Distella config directives [bank xx]
listfunctions - List user-defined functions
listtraps - List traps
- loadconfig - Load Distella config file [from file xx]
+ loadconfig - Load Distella config file
loadstate - Load emulator state xx (0-9)
- loadsym - Load symbol file named xx
+ loadsym - Load symbol file
n - Negative Flag: set (0 or 1), or toggle (no arg)
pc - Set Program Counter to address xx
pgfx - Mark 'PGFX' range in disassembly
@@ -665,8 +669,9 @@ listfunctions - List user-defined functions
runtopc - Run until PC is set to value xx
s - Set Stack Pointer to value xx
save - Save breaks, watches, traps to file xx
- saveconfig - Save Distella config file [to file xx]
- saverom - Save (possibly patched) ROM to file xx
+ saveconfig - Save Distella config file
+ savedis - Save Distella disassembly
+ saverom - Save (possibly patched) ROM
saveses - Save console session to file xx
savestate - Save emulator state xx (valid args 0-9)
scanline - Advance emulation by xx scanlines (default=1)
@@ -915,7 +920,7 @@ these cases, the values shown may not always be for RAM, and may point
to ROM instead. In the latter case, the data cannot be modified.
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
+undo the most previous operation to one cell only. The 'Revert' button is
more comprehensive. It will undo all operations on all cells
since you first made a change.
The UI objects at the bottom refer to the currently selected RAM cell.
@@ -931,38 +936,37 @@ The remaining buttons to the right are further explained in section (L).
energy, but it's also very useful when debugging to determine which
memory location holds which quantity.
-To search RAM, click 'Srch' and enter a byte value into the search editbox (0-255).
+
To search RAM, click 'Search' 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
and the input is empty, all RAM locations are highlighted.
-The 'Cmp' button is used to compare the given value using all
+
The 'Compare' 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'.
-The 'Rset' button resets the entire operation; it clears the highlighted
+
The 'Reset' button resets the entire operation; it clears the highlighted
addresses and allows another search.
The following is an example of inspecting all addresses that have
decreased by 1:
- - Click 'Srch' with empty input. All address/values are highlighted
+ - Click 'Search' with empty input. All address/values are highlighted
- Exit debugger mode and lose a life, let your energy decrease, or
do whatever it is you're trying to debug
- - Enter debugger mode again, click 'Cmp' and and enter a '-1' for input.
+
- Enter debugger mode again, click 'Compare' and and enter a '-1' for input.
This finds all values that have decreased by 1 (as compared to their current
values)
- 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
- - Click 'Rset' when you're finished
+ - Click 'Reset' when you're finished
-(M) ROM Listing
-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.
+(M) ROM Disassembly
+This area contains 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.
The disassembly is often quite extensive, and whenever possible tries to automatically
differentiate between code, graphics, data and unused bytes. There are actually two
levels of disassembly in Stella. First, the emulation core tracks accesses as a game
@@ -981,26 +985,10 @@ a relative jump are in fact code, or simply data.
-The top area contains two items:
-
-- Current bank (x total): Shows the current bank in use (number in textbox),
-and the total number of banks (x). Note that bank numbers start at 0 (as in most
-programming languages). If the cartridge contains multiple banks, the bank can
-be changed in the bank textbox, and the ROM will be re-disassembled.
-Note that certain ROMs are quite complex, and may only show has having one
-'virtual' bank when their address space can be swapped in and out in many
-different ways.
-- Resolve data: Informs Distella about the 'resolvedata'
-commandline argument, which says how code and data sections are disassembled.
-If set to 'Never', the entire address space is treated as code. If set to
-'Always', an attempt is always made to resolve data sections.
-The 'Automatic' setting is a combination of the previous two. First, an
-attempt is made to resolve data sections. If this results in the current program
-counter not being present in the disassembly, then a second disassembly is
-done, without resolving data sections. Note that this option applies only to
-addresses determined by Distella; addresses marked as code or graphics by the
-emulation core will stay as such, no matter what this setting says.
-
+The "Bank state" is self-explanatory, and shows a summary of the current
+bank information. For normal bankswitched ROMs, this will be the current bank number,
+however more advanced schemes will show other types of information here. More detailed
+information is available in Detailed Bankswitch Information (N).
Each line of disassembly has four fields:
@@ -1045,8 +1033,8 @@ to 8 per line, and cannot be edited.
For code sections, the 6502 mnemonic will be UPPERCASE for all standard instructions,
-or lowercase for "illegal" 6502 instructions (like "dcp"). If resolving
-of data sections has been disabled for any reason, you'll likely see a lot
+or lowercase for "illegal" 6502 instructions (like "dcp"). If automatic resolving
+of code sections has been disabled for any reason, you'll likely see a lot
of illegal opcodes if you scroll to a data table in ROM. This can also
occur if the disassembler hasn't yet encountered addresses in the PC.
If you step/trace/scanline/frame advance into such an area, the disassembler
@@ -1073,41 +1061,38 @@ them. When you're done, press Enter to accept the changes (in which case
the cart will be re-disasembled) or Escape to cancel them.
Note that only instructions that have been fully disassembled
can be edited. In particular, blank lines or 'ROW' directives
-cannot be edited. If you wish to edit the latter, then the 'Resolve data'
-item should be set to 'Never' first. Also note that certain ROMs can have
+cannot be edited. Also note that certain ROMs can have
sections of address space swapped in and out dynamically. As such, changing
the contents of a certain address will change the area pointed to at
that time. In particular, modifying an address that points to internal
RAM will change the RAM, not the underlying ROM. A future release may
graphically differentiate between RAM and ROM areas.
-The ROM listing also contains a context menu, accessible by right-clicking
+
The ROM Disassembly also contains a Settings dialog, accessible by right-clicking
anywhere in the listing:
The following options are available:
-- Save ROM: 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 current directory, not the ROM or base directory.
-You can enter a full path, though, in which case it doesn't matter.
+- Set PC @ current line: Set the Program Counter to the address of the
+disassembly line where the mouse was clicked (highlighted in green).
-- Set PC: Set the Program Counter to the address of the
-disassembly line where the mouse was clicked.
-
-- RunTo PC: Single-step through code until the Program Counter
-matches the address of the disassembly line where the mouse was clicked.
-
-- Toggle PC addresses: Show or hide blank labels as Program Counter
-addresses.
-
-- Toggle GFX binary/hex: Switch between editing GFX and PGFX sections
-in either hexidecimal or binary.
-
-- Toggle address relocation: Corresponds to the Distella '-r' option
-(Relocate calls out of address range).
+- RunTo PC @ current line: Single-step through code until the Program Counter
+matches the address of the disassembly line where the mouse was clicked (highlighted in green)
- Re-disassemble: Self-explanatory; force the current bank to be
disassembled, regardless of whether anything has changed.
+
+- Show tentative code: Allow Distella to do a static analysis/disassembly.
+
+- Show PC addresses: Show Program Counter addresses as labels (where there
+isn't already a defined label).
+
+- Show GFX as binary: Switch between displaying/editing GFX and PGFX sections
+in either binary or hexidecimal.
+
+- Use address relocation: Corresponds to the Distella '-r' option
+(Relocate calls out of address range).
+
Limitations
@@ -1138,6 +1123,22 @@ the same address.
These limitations will be addressed in a future release of Stella.
+
+
+(N) Detailed Bankswitch Information
+
+This area shows a detailed breakdown of the bankswitching scheme. Since
+the bankswitch schemes can greatly vary in operation, this tab will be
+different for each scheme, but its specific functionality should be self-explanatory.
+An example of both 4K (non-bankswitched) and DPC (Pitfall II) is as follows:
+
+
+
+
+In many cases, quite a bit of the scheme functionality can be modified.
+Go ahead and try to change something!
+
+
Global Buttons
@@ -1160,7 +1161,7 @@ anywhere in the GUI via the keyboard, with Alt-S, Alt-T, Alt-L, Alt-F and Alt-R.
Distella Configuration Files
-As mentioned in ROM Listing (M), Stella supports the following directives:
+
As mentioned in ROM Disassembly (M), Stella supports the following directives:
CODE/GFX/PGFX/DATA/ROW. While the debugger will try to automatically mark address
space with the appropriate directive, there are times when it will fail. There are
several options in this case:
@@ -1231,7 +1232,7 @@ but it helps to know at least a little about 6502 programming.
- Enter the debugger by pressing the ` (backquote) key. Don't get
killed before you do this, though. You should still have all 5 lives.
- - In the RAM display, click the "Search" button (labelled 'Srch') and enter "5" for input.
+
- In the RAM display, click the "Search" button 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
@@ -1247,7 +1248,7 @@ but it helps to know at least a little about 6502 programming.
- Get killed! Ram an enemy tank, or let him shoot you. Wait for
the explosion to finish. You will now have 4 lives.
- - Enter the debugger again. Click the "Compare" button (labelled 'Cmp') in RAM widget and enter
+
- Enter the debugger again. Click the "Compare" button 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,
@@ -1319,12 +1320,11 @@ but it helps to know at least a little about 6502 programming.
will *still* see 3 lives: Success! We've hacked Battlezone to give us
infinite lives.
- - Save your work. In the prompt: "saverom bzhack.bin". You now
+
- Save your work. In the prompt: "saverom". You now
have your very own infinite-lives version of Battlezone. The file will
- be saved in the current directory (NOT your ROM directory), so you might
+ be saved in your HOME directory (NOT your ROM directory), so you might
want to move it to your ROM directory if it isn't the current directory.
- This can also be accomplished by right-clicking on the ROM widget and
- selecting 'Save ROM'.
+
- Test the new ROM: exit Stella, and re-run it. Open your ROM
(or give its name on the command line) and play the game. You can play
diff --git a/docs/graphics/debugger_bankcomplex.png b/docs/graphics/debugger_bankcomplex.png
new file mode 100644
index 0000000000000000000000000000000000000000..e061e1de32cf330346e679183f54ca422282ff65
GIT binary patch
literal 9087
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
literal 0
HcmV?d00001
diff --git a/docs/graphics/debugger_banksimple.png b/docs/graphics/debugger_banksimple.png
new file mode 100644
index 0000000000000000000000000000000000000000..90d0d5150827c330a4cda28f69a26a3f3a28cb81
GIT binary patch
literal 3374
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
Dtm1?3
literal 0
HcmV?d00001
diff --git a/docs/graphics/debugger_iotab.png b/docs/graphics/debugger_iotab.png
index 8b915fd5e61d38efb7fd8049dd08c6153d870268..0d2349b7239fb0d44de4f0a2cc1f36344289792b 100644
GIT binary patch
literal 8553
zcma)ic|6o@+xMU-LeXZgtFkX;&mN^HONi{DP#Cf^mLw!0vdb_jqq0kkWkw;4Wh{kZ
z7~5Eyu?=R-jG1}Ibzk@Wd7sbwyzle=HJ>?u=WjWWA-Fu~Xry-%ax&x5T6gCA@c(
z(cT;yQHNiNT)x~3;JIOnx)D4y(UY&C>G0|=`>xOKwR>cp<1eZs{%me)hrlB(=ruEE
zTx03Gxy7*~YzA^nj}0EcY-p!Az(EiM@Lto91by3Hrzf>3oxjz_p*^yJMrLqWgzfcl
zRIO=r#75C1m~G=B^3=ZKSS&Lt2Tw?wY&&}xEZA1uuC_n2aW#u^iwKt=}{<}-(Vi#IZctBb$VXw_3d#u=j+FK!Gf5xy24LjiMaI9
zLGezRnKwg!y;L0Xd!picSk!hT3RR%&s1s)0E#!p{^~*}ZCK;vPWADz=Sh5{F%kho)EvvLecx3*LoXP8g+%pjpbuo&2
z=h(t#87x0eNs;yjc>=tY7@JA@glOLJofa&;N;{M
CqPI$l&tG9>p)i#xPD*aL{^+4T3^+Ss<&43k&%
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
literal 8473
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