Bare beginnings of bankswitching support for the debugger.

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
This commit is contained in:
urchlay 2005-06-27 04:45:52 +00:00
parent 865416aacd
commit 8ad0d445c3
10 changed files with 123 additions and 15 deletions

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: Debugger.cxx,v 1.35 2005-06-25 17:26:32 stephena Exp $
// $Id: Debugger.cxx,v 1.36 2005-06-27 04:45:35 urchlay Exp $
//============================================================================
#include "bspf.hxx"
@ -687,3 +687,27 @@ void Debugger::addLabel(string label, int address) {
void Debugger::reloadROM() {
myOSystem->createConsole( myOSystem->romFile() );
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool Debugger::setBank(int bank) {
if(myConsole->cartridge().bankCount() > 1) {
myConsole->cartridge().bank(bank);
return true;
}
return false;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int Debugger::getBank() {
return myConsole->cartridge().bank();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int Debugger::bankCount() {
return myConsole->cartridge().bankCount();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
const char *Debugger::getCartType() {
return myConsole->cartridge().name();
}

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: Debugger.hxx,v 1.32 2005-06-27 03:32:50 urchlay Exp $
// $Id: Debugger.hxx,v 1.33 2005-06-27 04:45:52 urchlay Exp $
//============================================================================
#ifndef DEBUGGER_HXX
@ -51,7 +51,7 @@ enum {
for all debugging operations in Stella (parser, 6502 debugger, etc).
@author Stephen Anthony
@version $Id: Debugger.hxx,v 1.32 2005-06-27 03:32:50 urchlay Exp $
@version $Id: Debugger.hxx,v 1.33 2005-06-27 04:45:52 urchlay Exp $
*/
class Debugger : public DialogContainer
{
@ -229,6 +229,12 @@ class Debugger : public DialogContainer
PackedBitArray *writetraps() { return writeTraps; }
DebuggerParser *parser() { return myParser; }
bool setBank(int bank);
int bankCount();
int getBank();
const char *getCartType();
protected:
Console* myConsole;
System* mySystem;

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: DebuggerParser.cxx,v 1.37 2005-06-27 03:32:51 urchlay Exp $
// $Id: DebuggerParser.cxx,v 1.38 2005-06-27 04:45:52 urchlay Exp $
//============================================================================
#include "bspf.hxx"
@ -33,6 +33,14 @@ Command DebuggerParser::commands[] = {
&DebuggerParser::executeA
},
{
"bank",
"Show # of banks (with no args), Switch to bank (with 1 arg)",
false,
{ kARG_BYTE, kARG_END_ARGS },
&DebuggerParser::executeBank
},
{
"base",
"Set default base (hex, dec, or bin)",
@ -886,6 +894,27 @@ void DebuggerParser::executeA() {
debugger->setA(args[0]);
}
// "bank"
void DebuggerParser::executeBank() {
if(argCount == 0) {
int banks = debugger->bankCount();
commandResult += debugger->getCartType();
commandResult += ": ";
if(banks < 2)
commandResult += "bankswitching not supported by this cartridge";
else {
commandResult += debugger->valueToString(debugger->getBank());
commandResult += "/";
commandResult += debugger->valueToString(banks);
}
} else {
if(debugger->setBank(args[0]))
commandResult += "switched bank OK";
else
commandResult += "invalid bank number for cartridge";
}
}
// "base"
void DebuggerParser::executeBase() {
if(args[0] == 2 || argStrings[0] == "bin")

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: DebuggerParser.hxx,v 1.19 2005-06-27 03:32:51 urchlay Exp $
// $Id: DebuggerParser.hxx,v 1.20 2005-06-27 04:45:52 urchlay Exp $
//============================================================================
#ifndef DEBUGGER_PARSER_HXX
@ -87,6 +87,7 @@ class DebuggerParser
string compPrefix;
void executeA();
void executeBank();
void executeBase();
void executeBreak();
void executeC();

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: Cart.cxx,v 1.9 2005-06-16 00:55:57 stephena Exp $
// $Id: Cart.cxx,v 1.10 2005-06-27 04:45:52 urchlay Exp $
//============================================================================
#include <assert.h>
@ -266,3 +266,28 @@ Cartridge& Cartridge::operator = (const Cartridge&)
return *this;
}
// default implementations of bankswitching-related methods.
// These are suitable to be inherited by a cart type that
// doesn't support bankswitching at all.
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int Cartridge::bank() {
return 0;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Cartridge::bank(uInt16 b) {
// do nothing.
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int Cartridge::bankCount() {
return 1;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool Cartridge::patch(int address, int value) {
return false;
}

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: Cart.hxx,v 1.3 2005-06-16 00:55:57 stephena Exp $
// $Id: Cart.hxx,v 1.4 2005-06-27 04:45:52 urchlay Exp $
//============================================================================
#ifndef CARTRIDGE_HXX
@ -31,7 +31,7 @@ class System;
game and handles any bankswitching performed by the cartridge.
@author Bradford W. Mott
@version $Id: Cart.hxx,v 1.3 2005-06-16 00:55:57 stephena Exp $
@version $Id: Cart.hxx,v 1.4 2005-06-27 04:45:52 urchlay Exp $
*/
class Cartridge : public Device
{
@ -59,6 +59,11 @@ class Cartridge : public Device
*/
virtual ~Cartridge();
virtual int bank(); // get current bank (-1 if no bankswitching supported)
virtual void bank(uInt16 b); // set bank
virtual int bankCount(); // count # of banks
virtual bool patch(int address, int value);
private:
/**
Try to auto-detect the bankswitching type of the cartridge

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: CartF8.cxx,v 1.4 2005-06-16 01:11:26 stephena Exp $
// $Id: CartF8.cxx,v 1.5 2005-06-27 04:45:52 urchlay Exp $
//============================================================================
#include <assert.h>
@ -146,6 +146,16 @@ void CartridgeF8::bank(uInt16 bank)
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int CartridgeF8::bank() {
return myCurrentBank;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int CartridgeF8::bankCount() {
return 2;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartridgeF8::save(Serializer& out)
{

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: CartF8.hxx,v 1.3 2005-06-16 01:11:26 stephena Exp $
// $Id: CartF8.hxx,v 1.4 2005-06-27 04:45:52 urchlay Exp $
//============================================================================
#ifndef CARTRIDGEF8_HXX
@ -31,7 +31,7 @@ class Deserializer;
are two 4K banks.
@author Bradford W. Mott
@version $Id: CartF8.hxx,v 1.3 2005-06-16 01:11:26 stephena Exp $
@version $Id: CartF8.hxx,v 1.4 2005-06-27 04:45:52 urchlay Exp $
*/
class CartridgeF8 : public Cartridge
{
@ -101,13 +101,14 @@ class CartridgeF8 : public Cartridge
*/
virtual void poke(uInt16 address, uInt8 value);
private:
/**
Install pages for the specified bank in the system
@param bank The bank that should be installed in the system
*/
void bank(uInt16 bank);
int bank();
int bankCount();
private:
// Indicates which bank is currently active

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: Console.cxx,v 1.60 2005-06-25 17:26:32 stephena Exp $
// $Id: Console.cxx,v 1.61 2005-06-27 04:45:52 urchlay Exp $
//============================================================================
#include <assert.h>
@ -153,6 +153,7 @@ Console::Console(const uInt8* image, uInt32 size, OSystem* osystem)
// Remember what my media source is
myMediaSource = tia;
myTIAdebugger = new TIADebug(tia);
myCart = cartridge;
// Reset, the system to its power-on state
mySystem->reset();

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: Console.hxx,v 1.33 2005-06-21 04:30:49 urchlay Exp $
// $Id: Console.hxx,v 1.34 2005-06-27 04:45:52 urchlay Exp $
//============================================================================
#ifndef CONSOLE_HXX
@ -31,12 +31,13 @@ class System;
#include "Props.hxx"
#include "TIA.hxx"
#include "TIADebug.hxx"
#include "Cart.hxx"
/**
This class represents the entire game console.
@author Bradford W. Mott
@version $Id: Console.hxx,v 1.33 2005-06-21 04:30:49 urchlay Exp $
@version $Id: Console.hxx,v 1.34 2005-06-27 04:45:52 urchlay Exp $
*/
class Console
{
@ -102,6 +103,8 @@ class Console
*/
System& system() const { return *mySystem; }
Cartridge& cartridge() const { return *myCart; }
public:
/**
Overloaded assignment operator
@ -228,6 +231,9 @@ class Console
// Pointer to TIADebug
TIADebug *myTIAdebugger;
// Pointer to the Cartridge (the debugger needs it)
Cartridge *myCart;
};
#endif