Finally updated the Changelog, which should have been done way before

this.  That's the main problem with long delays between releases; I
forget exactly what's changed.

Fixed bug in Distella in handling relative addressing.  Wraparound
was potentially occuring on a 32-bit integer, which caused a crash
when accessing a 4K array.


git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1990 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2010-04-06 21:47:46 +00:00
parent e536a9ee00
commit 56b6e74f04
2 changed files with 106 additions and 12 deletions

View File

@ -12,12 +12,108 @@
Release History
===========================================================================
3.0 to 3.0.1: (February 13, 2010)
3.0 to 3.1: (April xx, 2010)
* Fixed a major bug with text drawing in software rendering mode.
Switching between windowed and fullscreen mode while text was being
shown could result in garbled text or even a program crash.
* Integrated Distella disassembler, completely replacing the previous
disassembler. The entire infrastructure has not been completely
ported yet. As a result, labels defined by the user or from a
DASM symbol file aren't actually used in the disassembly. This will
be addressed in a future release.
* Completely reworked the debugger cartridge interface, so that
the disassembly is dynamic (ie, the debugger tracks when address
space has changed, and automatically performs a re-disassembly).
* All carts with extended RAM that differentiate between read and write
ports now behave correctly when a read from the write port occurs.
* Added more complete support for the more esoteric bankswitch
schemes in the debugger. These schemes now support accurate
disassembly and ROM patch functionality. Related to this, fixed a
bug in disassembler view when a failure to patch a ROM still showed
the (incorrect) patched results.
* Added debugger pseudo-register '_rwport', which traps on a read from
the write port. This differentiates between reads that are normally
part of a write cycle (ie, it traps only on inadvertent reads).
* Added ability to disable TIA object collisions, independent of
enabling/disabling the objects. Previously, one had to completely
disable an object to avoid collisions, but now an object can be
enabled (and seen) but still have its collisions disabled. These
actions are tied to the same keys as the enable ones, except the
'Shift' key is also used.
* Added support for bankswitching scheme DPC+, thanks to Darrell Spice
Jr and Fred Quimby.
* Reverted some of the TIA improvements with respect to 'starfield
effect' as seen in "Cosmic Ark" and "Stay Frosty". The emulation is
now more accurate as compared to the majority of consoles in use.
* Added 'autocode' commandline argument and associated UI item, used
to set the "automatic code determination" config option in Distella.
* Removed the 'loadlst' command and the ability to use a DASM .lst file.
With the recent disassembler improvements, this is no longer needed.
* Modified debugger 'disasm' command to accept a second argument
indicating the number of lines to disassemble.
* Added emulation of the "Sega Genesis" controller, with two buttons
that are directly supported on a real system.
* The ZLib library is now included in the core code, so Windows users
no longer have to track down the ZLIBWAPI archive.
* Many changes to the MacOS X port. The application is now known as
'Stella' (instead of StellaOSX), and the keyboard handling is changed
to match other systems in terms of where the keys actually are on the
keyboard (ie, the OSX Command key corresponds to Alt, and the OSX
Control key corresponds to Control). As a result, all your settings
will have to be entered again.
* Added 'ctrlcombo' commandline argument, which toggles the use of the
control key as a modifier key. This is useful if you want to press
'Control' and 'R' in a two player game, and not have the combination
treated as 'Control-R' (which will issue a ROM reload).
* Added 'usemouse' commandline argument and associated UI item. This
toggles the use of the mouse as a controller of any type.
* Added 'uimessages' commandline argument and associated UI item.
This toggles showing of UI messages overlaid on the screen.
* Many changes to the FrameBuffer and UI code for 'smaller' systems.
Stella will now scale correctly to small screens, down to 320x240
(which is the absolute lower limit supported). Related to this,
added 'maxres' commandline argument, which is useful for developers
testing on such systems.
* The About dialog now shows the version of SDL in use, and the type
of CPU the application is running on (i386, x86_64, etc).
* Improved 'listrominfo' commandline argument to list all information
from Stella's internal ROM database, including a heading. This
output can be imported into a spreadsheet or database program.
* Renamed 'tiafloat' commandline argument to 'tiadriven'. The
emulation of the behaviour of floating TIA pins is also much more
accurate.
* Added 'md5instate' commandline argument, which toggles saving the
MD5sum of the ROM with a save state. When disabled, a state file
is no longer tied to the exact instance of the ROM which created
it (useful during development when a small change in program code
would render a state file useless).
* Fixed bug in certain editable text fields, where pressing Return/Enter
would disable any further input.
-Have fun!

View File

@ -93,7 +93,7 @@ void DiStella::disasm(uInt32 distart, int pass)
#define HEX2 uppercase << hex << setw(2) << setfill('0')
uInt8 op, d1, opsrc;
uInt32 ad;
uInt16 ad;
short amode;
int bytes=0, labfound=0, addbranch=0;
stringstream nextline, nextlinebytes;
@ -485,21 +485,19 @@ void DiStella::disasm(uInt32 distart, int pass)
case RELATIVE:
{
// SA - 04-06-2010: there seemed to be a bug in distella,
// where wraparound occurred on a 32-bit int, and subsequent
// indexing into the labels array caused a crash
d1 = Debugger::debugger().peek(myPC+myOffset); myPC++;
ad = d1;
if (d1 >= 128)
ad = d1 - 256;
ad = (myPC + (Int8)d1) & 0xfff;
// uInt16 address = PC + (Int8)operand;
labfound = mark(myPC+ad+myOffset, REFERENCED);
labfound = mark(ad+myOffset, REFERENCED);
if (pass == 1)
{
if ((addbranch) && !check_bit(labels[myPC+ad], REACHABLE))
if ((addbranch) && !check_bit(labels[ad], REACHABLE))
{
myAddressQueue.push(myPC+ad+myOffset);
mark(myPC+ad+myOffset, REACHABLE);
myAddressQueue.push(ad+myOffset);
mark(ad+myOffset, REACHABLE);
/* addressq=addq(addressq,myPC+myOffset); */
}
}