mirror of https://github.com/stella-emu/stella.git
Updated FE debugger support to allow changing banks dynamically.
This commit is contained in:
parent
1358be402f
commit
2930e74333
|
@ -16,6 +16,7 @@
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include "CartFE.hxx"
|
#include "CartFE.hxx"
|
||||||
|
#include "PopUpWidget.hxx"
|
||||||
#include "CartFEWidget.hxx"
|
#include "CartFEWidget.hxx"
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -27,15 +28,45 @@ CartridgeFEWidget::CartridgeFEWidget(
|
||||||
{
|
{
|
||||||
string info =
|
string info =
|
||||||
"FE cartridge, two 4K banks\n"
|
"FE cartridge, two 4K banks\n"
|
||||||
"Doesn't support bankswitching with hotspots, "
|
"Monitors access to hotspot $01FE, and uses "
|
||||||
"but instead watches A13 of called addresses:\n"
|
"upper 3 bits of databus for bank number:\n"
|
||||||
"Bank 0 @ $F000 - $FFFF (A13 = 1)\n"
|
"Bank 0 @ $F000 - $FFFF (DATA = 111, D5 = 1)\n"
|
||||||
"Bank 1 @ $D000 - $DFFF (A13 = 0)\n"
|
"Bank 1 @ $D000 - $DFFF (DATA = 110, D5 = 0)\n";
|
||||||
"\n"
|
|
||||||
"Changing banks is not currently supported, since it "
|
|
||||||
"would immediately switch on the next address change\n";
|
|
||||||
|
|
||||||
addBaseInformation(2 * 4096, "Activision", info);
|
int xpos = 10,
|
||||||
|
ypos = addBaseInformation(2 * 4096, "Activision", info) + myLineHeight;
|
||||||
|
|
||||||
|
VariantList items;
|
||||||
|
VarList::push_back(items, "0 ($01FE, D5=1)");
|
||||||
|
VarList::push_back(items, "1 ($01FE, D5=0)");
|
||||||
|
myBank =
|
||||||
|
new PopUpWidget(boss, _font, xpos, ypos-2,
|
||||||
|
_font.getStringWidth("0 ($01FE, D5=1)"),
|
||||||
|
myLineHeight, items, "Set bank ",
|
||||||
|
_font.getStringWidth("Set bank "), kBankChanged);
|
||||||
|
myBank->setTarget(this);
|
||||||
|
addFocusWidget(myBank);
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void CartridgeFEWidget::loadConfig()
|
||||||
|
{
|
||||||
|
myBank->setSelectedIndex(myCart.getBank());
|
||||||
|
|
||||||
|
CartDebugWidget::loadConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void CartridgeFEWidget::handleCommand(CommandSender* sender,
|
||||||
|
int cmd, int data, int id)
|
||||||
|
{
|
||||||
|
if(cmd == kBankChanged)
|
||||||
|
{
|
||||||
|
myCart.unlockBank();
|
||||||
|
myCart.bank(myBank->getSelected());
|
||||||
|
myCart.lockBank();
|
||||||
|
invalidate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
#define CARTRIDGEFE_WIDGET_HXX
|
#define CARTRIDGEFE_WIDGET_HXX
|
||||||
|
|
||||||
class CartridgeFE;
|
class CartridgeFE;
|
||||||
|
class PopUpWidget;
|
||||||
|
|
||||||
#include "CartDebugWidget.hxx"
|
#include "CartDebugWidget.hxx"
|
||||||
|
|
||||||
class CartridgeFEWidget : public CartDebugWidget
|
class CartridgeFEWidget : public CartDebugWidget
|
||||||
|
@ -32,11 +34,14 @@ class CartridgeFEWidget : public CartDebugWidget
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CartridgeFE& myCart;
|
CartridgeFE& myCart;
|
||||||
|
PopUpWidget* myBank;
|
||||||
|
|
||||||
|
enum { kBankChanged = 'bkCH' };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// No implementation for non-bankswitched ROMs
|
// No implementation for non-bankswitched ROMs
|
||||||
void loadConfig() override { }
|
void loadConfig() override;
|
||||||
void handleCommand(CommandSender* sender, int cmd, int data, int id) override { }
|
void handleCommand(CommandSender* sender, int cmd, int data, int id) override;
|
||||||
|
|
||||||
string bankState() override;
|
string bankState() override;
|
||||||
|
|
||||||
|
|
|
@ -90,16 +90,23 @@ void CartridgeFE::checkBankSwitch(uInt16 address, uInt8 value)
|
||||||
// If so, we bankswitch according to the upper 3 bits of the data bus
|
// If so, we bankswitch according to the upper 3 bits of the data bus
|
||||||
// NOTE: see the header file for the significance of 'value & 0x20'
|
// NOTE: see the header file for the significance of 'value & 0x20'
|
||||||
if(myLastAccessWasFE)
|
if(myLastAccessWasFE)
|
||||||
{
|
bank((value & 0x20) ? 0 : 1);
|
||||||
myBankOffset = ((value & 0x20) ? 0 : 1) << 12;
|
|
||||||
myBankChanged = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// On the next cycle, we use the (then) current data bus value to decode
|
// On the next cycle, we use the (then) current data bus value to decode
|
||||||
// the bank to use
|
// the bank to use
|
||||||
myLastAccessWasFE = address == 0x01FE;
|
myLastAccessWasFE = address == 0x01FE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
bool CartridgeFE::bank(uInt16 bank)
|
||||||
|
{
|
||||||
|
if(bankLocked())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
myBankOffset = bank << 12;
|
||||||
|
return myBankChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
uInt16 CartridgeFE::getBank() const
|
uInt16 CartridgeFE::getBank() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -104,6 +104,13 @@ class CartridgeFE : public Cartridge
|
||||||
*/
|
*/
|
||||||
void install(System& system) override;
|
void install(System& system) override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Install pages for the specified bank in the system.
|
||||||
|
|
||||||
|
@param bank The bank that should be installed in the system
|
||||||
|
*/
|
||||||
|
bool bank(uInt16 bank) override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Get the current bank.
|
Get the current bank.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue