adapted from the ScummVM build process, and isn't as big and nasty as
full autoconf support.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@578 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
justHitTrap flag wasn't getting reset after a trap was hit.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@577 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
should also be selectable from the GUI. They might also need to include
more controls, but these seems to be the ones that cause interesting
effects: -holdreset gives you double shots in space invaders,
-holdbutton0 gives you "the dot" in carnival.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@576 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
as the regular emulator F9 and F11 save/load state. Will add the debugger
state to the statefile in future.
"Frying" support, using Fred Quimby's code from [stella]. Press Backspace
during emulation (or slam it repeatedly like you would the power button
on a real 2600). So far I've been able to duplicate the classic frying
effects from Space Invaders (double shots) and H.E.R.O. (infinite lives).
Also added a "fry" command to the debugger, but it's not very useful
(you need visual feedback when trying to duplicate a known effect,
so the emulator should be running).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@575 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
Support patching ROM in almost all cart types.
The ones that aren't supported are going to take a bit more thought.
Still TODO is to support the extra RAM in carts that have it.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@572 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
but we can now change ROM from the debugger on a good chunk of the games
out there.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@571 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
like the "ram" command. Each Cart type needs its own patch() method to
allow changing ROM. So far, only Cart4K has a working patch() method:
all other cart types inherit Cartridge::patch(), which does nothing and
returns false.
TODO: saverom command?
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@570 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
Unfortunately every single Cart class will have to be touched to make
this work, and there are 20 of them. Currently only CartF8 has the
necessary methods.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@568 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
a lot better now. There shouldn't be any more crashes due to missing
error checking, as the error checking is done by the parser now, instead
of by each command (so I can't forget it now). Also, now that the commands
are stored in an array, I can start on tab-completion for commands.
TODO: validate multi-byte arguments (e.g. the data for the "ram" command).
Currently the command works, but will accept values that don't fit into
a byte. Also validate multi-word arguments, though we don't have any
commands that use them yet.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@566 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
compiling to fail. Since ZIP support was added, we always need to link
to the zlib library, not just when we want snapshot support.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@565 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
that had WIDGET_TAB_NAVIGATE set (which is exactly the opposite of
what we want).
Added a dashed line to FrameBuffer::frameRect(). This is currently
used to indicate which widget is selected in debugger mode. IMO, it
looks much better than using a solid line.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@563 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
One more tab completion fix: made it work when the character before the
label wasn't a space (e.g. "pr *w" now completes to "pr *WSYNC")
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@562 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
name, description, argument count & types, and a method pointer to
actually execute the command. Instance method pointers in C++ are even
more annoying that function pointers in C...
The actual parser (the run() and getArgs()) methods don't use the new
stuff, so the actual operation of the debugger is unchanged.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@561 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
Also, minimum length command line to attempt label completion is now 2.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@560 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
have labels "food" and "foobar", and no others starting with "f", and you
type "pr f<TAB>", it will show you both of them, then leave your prompt
looking like "pr foo" with the cursor after the 2nd "o".
Differences from bash:
- In case of multiple completions, bash's default behaviour requires you
to press Tab twice to see them. We only need one Tab. bash can actually
be configured to only need one Tab, too.
- We don't beep. Ever.
- We're case-insensitive. bash is case-sensitive by default, though it
can be configured to be insensitive.
There's one remaining bug in the completion: when we get to the bottom of
the scroll buffer, and the buffer is full (e.g. when the scroll bar handle
is at its minimum size), *and* there's only one possible completion, the
console prints a new blank line after the new (completed) prompt.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@559 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
DebuggerParser flag-setting commands now take one optional argument, to
support the above.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@557 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
want to navigate with the TAB key will actually receive the key (ie, it
won't be swallowed).
Updated PromptWidget to use the TAB key for command completion (Escape
is still used as well).
Added 'Alt t' and 'Alt s' for 'Trace' and 'Step' (respectively) to the
debugger area. These keys are accessible while in any tab, since the
buttons (and associated actions) don't belong to any particular tab.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@554 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
between widgets, I used Escape as the completion key. It's almost working
correctly, but the implementation should be cleaned up.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@552 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
instead of editing values, you toggle values.
Implemented the processor status register as a ToggleBitWidget, since most
people are more familiar with the separate bits (vs. the actual value of the
byte).
Currently, the toggle signal is sent to the CpuWidget, but the register
itself isn't changed. Brian, I only see toggleX() methods for 5 of the
bits, but there are 7 used. Is that intentional, because if the other two
aren't meant to be used, I need to remove the visual cue that they're
being toggled.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@551 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
updates are actually two separate things (and often done independently).
Previously, the only overlay was the menu, and since this was always drawn
over the TIA, updating one or the other was the same thing.
Now, the debugger area can be updated without affecting the TIA, since
technically it isn't really an overlay (it doesn't sit on top of the TIA).
There are still some TODO's wrt using dirty rectangles instead of full
updates, but at least the full updates are now restricted to just the
overlay area.
Fixed multiple frame step in the PromptWidget by changing
FrameBuffer::advance() to advance a given number of frames.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@550 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
PromptWidget gets reset, but not the Debugger itself, so any breaks,
traps, or watches are still there (though watches might depend on
symbols that aren't defined in the newly-loaded file).
When reloading, we do NOT check to see whether the ROM has changed.
This is deliberate: the user might leave the debugger open while he
assembles a new version of his game (I probably would).
TODO: reload symbol file if it doesn't get autoloaded the first time
TODO: don't reset the prompt history on reload
TODO: after the symbol file's loaded, clear any watches that are no
longer valid (e.g. symbol not defined any more)
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@549 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
least 6 months now. This shouldn't affect anyone running Stella on a
CPU faster than a pentium-166 or -200 anyway.
Implemented a few new debugger commands: "listtraps", "saveses", "savesym",
"undef", and renamed "label" to "define"... See the console help for
details.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@546 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
than 24 characters. Thanks to Rich Boniface for pointing out the bug.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@544 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
Added decimal, binary, and label fields to the RamWidget, which contain
values for the currently selected cell.
Added label, current instruction, cycle count, and status (breakpoint or
trap set) fields to the CpuWidget.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@543 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
occur in libraries, so there's not much I can do about those.
Eliminated memory leaks in DebuggerParser by using the GUI::Array class.
This is basically a dynamically sized array implementation. As a result,
there's no longer a hardcoded limit on the # of arguments or watches.
Brian, this new array class is a bit different than raw arrays in the
following ways:
1) You add to it with push_back(). You *can* add to it with index
notation, but it will assert and exit if you attempt to walk past the
end of it.
2) Because it's dynamically sized, you can't assume it has 100
elements (or even 1 element). That's why push_back() should be used
for assignment, unless you check the bound of the index first.
2) It has a size() method, so you always know how far to walk it.
3) You can erase all items with clear().
4) It makes use of templates, so is quite fast.
5) The syntax is close to STL containers. so when we eventually
move to a faster container (hashmap, etc), minimal syntax changes
will be required.
6) And finally, it frees you from having to deal with memory issues
(new/delete or malloc/free).
Have a look at gui/Array.hxx (which probably should be moved to
common/Array.hxx at some point).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@541 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
Fixed some memory leaks in EquateList, and moved to using a dynamic array.
This greatly simplifies the code and abstracts away all new/delete
operations. More cleanup can still be done, since the symfile no longer has
to be scanned for # of lines. Still TODO is similar code for the watchlist
stuff, so all memleaks can be eliminated.
Changed launcher so that if Stella is started with no romdir specified
(maybe first time it's been used), the launcher options are shown so
you can select the romdir. Thanks to Brad for the advice.
Updated LauncherOptionsDialog to send a signal when a romdir has been
set. When that happens, the launcher automatically reloads the rom listing.
Again, thanks to Brad for the advice.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@539 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
Unfortunately, there's no way to trap a memory access before it happens.
Unlike breakpoints, traps can occur in mid-instruction. We can't stop
the 6502 in mid-instruction, and wouldn't want to if we could (for one
thing there's no way to continue from that point). This means that, when
you hit a trap, the current instruction is the one *after* the one that
triggered the trap. (This is different from a breakpoint: when you hit
a breakpoint, the current instruction will be the one at the breakpoint,
which hasn't executed yet).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@538 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
trap, the PC keeps getting reset to the start of the frame. FYI,
traps are like breakpoints, only they trigger on any access of the
trap location (e.g. loading data from it, rather than executing it
as a breakpoint).
Fixed two nasty bugs:
1. Debugger::disassemble() was printing hex bytes from the wrong address.
This is because I used readRAM(), which wants a parameter of 0-127, and
reads only from RAM. I *should* have been using peek(), which takes a
16-bit address. In fact, readRAM() is only for the GUI.
2. D6502::disassemble() was printing wrong operands in zero,x and
zero,y addressing modes, due to me passing a wrong number of places
(and thus creating a wrong format string).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@537 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
evaluated and printed before each prompt. Since they're evaluated at
print-time, you can say e.g. "watch a" or "watch *myCounter" and it'll
do what you want.
Added "dump" command. This dumps any address you give it, not just RAM,
and it respects the current base setting (bin, dec, hex). Actually I may
rename the "ram" command to "mem" and allow it to work on non-RAM, and
merge the "dump" command with that.
The debugger state() now respects the default base (the registers are
printed in whatever base the user has selected with the "base" command).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@535 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
Added PC, SP, A, X, Y registers to the CpuWidget. These registers
can now be changed and viewed while stepping/tracing.
Still TODO is add a ToggleBitWidget to enable toggling of the
individual bits in the Processor Flag register.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@534 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
Renamed ByteGridWidget to DataGridWidget, because it can be used to accept data
other than bytes (also words).
Further work on making the GUI use whichever base you set as default. This
one seems to be a hard nut to crack.
Changed behaviour of '-debugheight' to specify the number of lines to use
for the debugging area, vs the absolute pixels to use. So '-debugheight 20'
would make the debugger be 20 lines tall (in the PromptWidget). The minimum
height is now 15 lines, and all GUI elements will be drawn according to this.
Still TODO is get the 'height' command to work in the debugger.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@533 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
which defaults to kBASE_DEFAULT (which means to use the DebuggerParser's
current input base, set with the "base" command).
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@532 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
Added -debugheight command line option. The height may not be set to
anything below 383 (which is the default).
Attempted to implement a "height" command in the prompt, but either I'm
doing something wrong (most likely), or the debugger can't be resized
after it's started.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@531 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
another class. Also added decimal support, plus default base support. As
a side benefit, there's much better syntax checking.
Also you can now do a word-pointer dereference with "@address". This
works just like "*address" except that it returns a 16-bit value.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@529 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba