Improved ROM launcher so that going to a parent folder automatically

selects the item that was previously selected.

Fixed bug in Cheat dialog where editing a cheat didn't remove the old one.

Updated TODO, rearranging improved disassembly as the #1 priority for the
next release; I don't have time to finish it now.


git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1873 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2009-09-09 15:59:22 +00:00
parent 616ce6039a
commit 6144e4fd57
6 changed files with 39 additions and 34 deletions

View File

@ -9,13 +9,17 @@
SSSS ttt eeeee llll llll aaaaa SSSS ttt eeeee llll llll aaaaa
=============================================================================== ===============================================================================
To Do List - August 2009 To Do List - September 2009
=============================================================================== ===============================================================================
If you would like to contribute to Stella's development then find something If you would like to contribute to Stella's development then find something
on the list below and send email to Bradford Mott at bwmott@acm.org or on the list below and send email to Bradford Mott at bwmott@acm.org or
Stephen Anthony at stephena@users.sourceforge.net. Stephen Anthony at stephena@users.sourceforge.net.
* Step-debug through disassembled zero-page and SC code
* Either Support Distella as frontend or integrate a 6507 Disassembler
* TIA infrastructure: further improve 'illegal' HMOVE emulation to fix * TIA infrastructure: further improve 'illegal' HMOVE emulation to fix
problems in several homebrew ROMs. problems in several homebrew ROMs.
@ -26,10 +30,6 @@ Stephen Anthony at stephena@users.sourceforge.net.
* Look into adding Blargg NTSC filtering (perhaps as a GLSL program). * Look into adding Blargg NTSC filtering (perhaps as a GLSL program).
* Step-debug through disassembled zero-page code (get clarification on this)
* Either Support Distella as frontend or integrate a 6507 Disassembler
* Add better support for 'floating' TIA reads as described here: * Add better support for 'floating' TIA reads as described here:
http://www.atariage.com/forums/index.php?s=&showtopic=143363&view=findpost&p=1762433 http://www.atariage.com/forums/index.php?s=&showtopic=143363&view=findpost&p=1762433
@ -66,37 +66,31 @@ Stephen Anthony at stephena@users.sourceforge.net.
* More support for copy and paste. * More support for copy and paste.
* Add support for uncommon controllers (KidVid, Lightgun, etc) * Add support for uncommon controllers (KidVid, Lightgun, etc).
* Fix "Tron Man Picture Cart" (32K Tigervision bankswitching) issue * Fix "Tron Man Picture Cart" (32K Tigervision bankswitching) issue.
* Possible 'trace mode' in debugger (generate a file containing all * Possible 'trace mode' in debugger (generate a file containing all
internal state) internal state).
* Automatic statesave at beginning of each frame (including state of * Automatic statesave at beginning of each frame (including state of
controllers and console switches), with the ability to 'roll back' to controllers and console switches), with the ability to 'roll back' to
a previous state/frame a previous state/frame.
* RewindManager to set up how often to save a state, and for how long * RewindManager to set up how often to save a state, and for how long
(debugger would be once per frame, normal probably once per second) (debugger would be once per frame, normal probably once per second).
* Extra SECAM 'quirks' (see Stella 2.4.1 release thread on AtariAge) * Extra SECAM 'quirks' (see Stella 2.4.1 release thread on AtariAge).
* Improve speed of Pitfall2 emulation * Improve speed of Pitfall2 emulation.
* Add auto-detection for all remaining bankswitch types * Add auto-detection for all remaining bankswitch types.
* Either Support DASM as frontend or integrate a 6507 Assembler * Either Support DASM as frontend or integrate a 6507 Assembler.
* Add a Sprite/Animation Editor * AVI/MPEG export.
* AVI/MPEG export * Client/Server networked play for up to 4 Computers via LAN/Internet.
* Add a PF Editor
* Client/Server networked play for up to 4 Computers via LAN/Internet
* Tracking Hiscores
* Find people to handle new ports, and try to more actively recruit people * Find people to handle new ports, and try to more actively recruit people
into the Stella project into the Stella project.

View File

@ -55,7 +55,7 @@ const Cheat* CheatManager::add(const string& name, const string& code,
// Delete duplicate entries // Delete duplicate entries
for(unsigned int i = 0; i < myCheatList.size(); i++) for(unsigned int i = 0; i < myCheatList.size(); i++)
{ {
if(myCheatList[i]->code() == code) if(myCheatList[i]->name() == name || myCheatList[i]->code() == code)
{ {
myCheatList.remove_at(i); myCheatList.remove_at(i);
break; break;

View File

@ -52,8 +52,7 @@ class FixedStack
{ {
T tmp; T tmp;
assert(_size > 0); assert(_size > 0);
tmp = _stack[_size - 1]; tmp = _stack[--_size];
_stack[--_size] = 0;
return tmp; return tmp;
} }
int size() const { return _size; } int size() const { return _size; }

View File

@ -234,7 +234,7 @@ void RomWidget::initialUpdate()
BoolArray state; BoolArray state;
// Disassemble zero-page RAM and entire bank and reset breakpoints // Disassemble zero-page RAM and entire bank and reset breakpoints
dbg.disassemble(myAddrList, label, data, disasm, 0x80, 0xff); // dbg.disassemble(myAddrList, label, data, disasm, 0x80, 0xff);
dbg.disassemble(myAddrList, label, data, disasm, 0xf000, 0xffff); dbg.disassemble(myAddrList, label, data, disasm, 0xf000, 0xffff);
for(unsigned int i = 0; i < data.size(); ++i) for(unsigned int i = 0; i < data.size(); ++i)
{ {

View File

@ -253,7 +253,7 @@ void LauncherDialog::enableButtons(bool enable)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void LauncherDialog::updateListing() void LauncherDialog::updateListing(const string& nameToSelect)
{ {
// Start with empty list // Start with empty list
myGameList->clear(); myGameList->clear();
@ -284,8 +284,10 @@ void LauncherDialog::updateListing()
int selected = -1; int selected = -1;
if(!myList->getList().isEmpty()) if(!myList->getList().isEmpty())
{ {
string lastrom = instance().settings().getString("lastrom"); const string& find =
if(lastrom == "") nameToSelect == "" ? instance().settings().getString("lastrom") : nameToSelect;
if(find == "")
selected = 0; selected = 0;
else else
{ {
@ -294,7 +296,7 @@ void LauncherDialog::updateListing()
for(iter = myList->getList().begin(); iter != myList->getList().end(); for(iter = myList->getList().begin(); iter != myList->getList().end();
++iter, ++itemToSelect) ++iter, ++itemToSelect)
{ {
if(lastrom == *iter) if(find == *iter)
{ {
selected = itemToSelect; selected = itemToSelect;
break; break;
@ -490,11 +492,19 @@ void LauncherDialog::handleCommand(CommandSender* sender, int cmd,
// Directory's should be selected (ie, enter them and redisplay) // Directory's should be selected (ie, enter them and redisplay)
if(myGameList->isDir(item)) if(myGameList->isDir(item))
{ {
string dirname = "";
if(myGameList->name(item) == " [..]") if(myGameList->name(item) == " [..]")
{
myCurrentNode = myCurrentNode.getParent(); myCurrentNode = myCurrentNode.getParent();
if(!myNodeNames.empty())
dirname = myNodeNames.pop();
}
else else
{
myCurrentNode = FilesystemNode(rom); myCurrentNode = FilesystemNode(rom);
updateListing(); myNodeNames.push(myGameList->name(item));
}
updateListing(dirname);
} }
else else
{ {
@ -524,7 +534,7 @@ void LauncherDialog::handleCommand(CommandSender* sender, int cmd,
case kPrevDirCmd: case kPrevDirCmd:
case kListPrevDirCmd: case kListPrevDirCmd:
myCurrentNode = myCurrentNode.getParent(); myCurrentNode = myCurrentNode.getParent();
updateListing(); updateListing(myNodeNames.empty() ? "" : myNodeNames.pop());
break; break;
case kListSelectionChangedCmd: case kListSelectionChangedCmd:

View File

@ -42,6 +42,7 @@ class StringListWidget;
#include "Dialog.hxx" #include "Dialog.hxx"
#include "FSNode.hxx" #include "FSNode.hxx"
#include "StringList.hxx" #include "StringList.hxx"
#include "Stack.hxx"
// These must be accessible from dialogs created by this class // These must be accessible from dialogs created by this class
enum { enum {
@ -71,7 +72,7 @@ class LauncherDialog : public Dialog
virtual void handleCommand(CommandSender* sender, int cmd, int data, int id); virtual void handleCommand(CommandSender* sender, int cmd, int data, int id);
void loadConfig(); void loadConfig();
void updateListing(); void updateListing(const string& nameToSelect = "");
private: private:
void enableButtons(bool enable); void enableButtons(bool enable);
@ -104,6 +105,7 @@ class LauncherDialog : public Dialog
int mySelectedItem; int mySelectedItem;
int myRomInfoSize; int myRomInfoSize;
FilesystemNode myCurrentNode; FilesystemNode myCurrentNode;
FixedStack<string> myNodeNames;
bool myShowDirs; bool myShowDirs;
StringList myRomExts; StringList myRomExts;