refactored Cart3EPlus widget

This commit is contained in:
thrust26 2020-04-23 12:34:27 +02:00
parent 2ae4631748
commit 42c7f45c42
10 changed files with 106 additions and 195 deletions

View File

@ -18,116 +18,124 @@
#include "Cart3EPlus.hxx" #include "Cart3EPlus.hxx"
#include "EditTextWidget.hxx" #include "EditTextWidget.hxx"
#include "PopUpWidget.hxx" #include "PopUpWidget.hxx"
#include "Cart3EPlusWidget.hxx" #include "CartEnhancedWidget.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cartridge3EPlusWidget::Cartridge3EPlusWidget( Cartridge3EPlusWidget::Cartridge3EPlusWidget(
GuiObject* boss, const GUI::Font& lfont, const GUI::Font& nfont, GuiObject* boss, const GUI::Font& lfont, const GUI::Font& nfont,
int x, int y, int w, int h, Cartridge3EPlus& cart) int x, int y, int w, int h, Cartridge3EPlus& cart)
: CartDebugWidget(boss, lfont, nfont, x, y, w, h), : CartridgeEnhancedWidget(boss, lfont, nfont, x, y, w, h, cart),
myCart(cart) myCart3EP(cart)
{ {
size_t size = cart.mySize; initialize();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string Cartridge3EPlusWidget::description()
{
ostringstream info; ostringstream info;
info << "3EPlus cartridge - (4..64K ROM + RAM)\n" size_t size;
<< " 4..64K ROM (1K banks), ..32K RAM (512b banks)\n" const uInt8* image = myCart.getImage(size);
<< "Each 1K ROM selected by writing to $3F\n" uInt16 numRomBanks = myCart.romBankCount();
"Each 512b RAM selected by writing to $3E\n" uInt16 numRamBanks = myCart.ramBankCount();
" Lower 512b of bank x (R)\n"
" Upper 512b of bank x (+$200) (W)\n" info << "3E+ cartridge - (4..64K ROM + RAM)\n"
<< "Startup bank = 0/-1/-1/0 (ROM)\n"; << " " << numRomBanks << " 1K ROM banks + " << numRamBanks << " 512b RAM banks\n"
<< " mapped into four segments\n"
"ROM bank & segment selected by writing to $3F\n"
"RAM bank & segment selected by writing to $3E\n"
" Lower 512b of segment for read access\n"
" Upper 512b of segment for write access\n"
"Startup bank = 0/-1/-1/0 (ROM)\n";
// Eventually, we should query this from the debugger/disassembler // Eventually, we should query this from the debugger/disassembler
// Currently the cart starts at bank 0. If we change that, we have to change this too. uInt16 start = (image[0x400 - 3] << 8) | image[0x400 - 4];
uInt16 start = (cart.myImage[0x400-3] << 8) | cart.myImage[0x400 - 4]; start -= start % 0x1000;
start &= 0xF000; info << "Bank RORG" << " = $" << Common::Base::HEX4 << start << "\n";
info << "Bank RORG = $" << Common::Base::HEX4 << start << "\n";
int xpos = 2, return info.str();
ypos = addBaseInformation(size, "Thomas Jentzsch", info.str()) + 8; }
VariantList bankno;
for(uInt32 i = 0; i < myCart.romBankCount(); ++i)
VarList::push_back(bankno, i, i);
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Cartridge3EPlusWidget::bankSelect(int& ypos)
{
size_t size;
const uInt8* image = myCart.getImage(size);
VariantList banktype; VariantList banktype;
VarList::push_back(banktype, "ROM", "ROM"); VarList::push_back(banktype, "ROM", "ROM");
VarList::push_back(banktype, "RAM", "RAM"); VarList::push_back(banktype, "RAM", "RAM");
for(uInt32 seg = 0; seg < myCart.myBankSegs; ++seg) myBankWidgets = make_unique<PopUpWidget* []>(bankSegs());
{
int xpos_s, ypos_s = ypos + 1;
for(uInt32 seg = 0; seg < bankSegs(); ++seg)
{
int xpos = 2, xpos_s, ypos_s = ypos + 1, width;
ostringstream label; ostringstream label;
VariantList items;
label << "Set segment " << seg << " as "; label << "Set segment " << seg << " as ";
new StaticTextWidget(boss, _font, xpos, ypos, label.str()); new StaticTextWidget(_boss, _font, xpos, ypos, label.str());
ypos += myLineHeight + 8; ypos += myLineHeight + 8;
xpos += _font.getMaxCharWidth() * 2; xpos += _font.getMaxCharWidth() * 2;
myBankNumber[seg] =
new PopUpWidget(boss, _font, xpos, ypos-2, 2 *_font.getMaxCharWidth(),
myLineHeight, bankno, "Bank ");
addFocusWidget(myBankNumber[seg]);
xpos += myBankNumber[seg]->getWidth(); CartridgeEnhancedWidget::bankList(myCart.romBankCount(), seg, items, width);
myBankWidgets[seg] =
new PopUpWidget(_boss, _font, xpos, ypos - 2, width,
myLineHeight, items, "Bank ");
addFocusWidget(myBankWidgets[seg]);
xpos += myBankWidgets[seg]->getWidth();
myBankType[seg] = myBankType[seg] =
new PopUpWidget(boss, _font, xpos, ypos-2, 3 *_font.getMaxCharWidth(), new PopUpWidget(_boss, _font, xpos, ypos - 2, 3 * _font.getMaxCharWidth(),
myLineHeight, banktype, " of "); myLineHeight, banktype, " of ");
addFocusWidget(myBankType[seg]); addFocusWidget(myBankType[seg]);
xpos = myBankType[seg]->getRight() + _font.getMaxCharWidth(); xpos = myBankType[seg]->getRight() + _font.getMaxCharWidth();
// add "Commit" button (why required?) // add "Commit" button (why required?)
myBankCommit[seg] = new ButtonWidget(boss, _font, xpos, ypos-4, myBankCommit[seg] = new ButtonWidget(_boss, _font, xpos, ypos - 4,
_font.getStringWidth(" Commit "), myButtonHeight, _font.getStringWidth(" Commit "), myButtonHeight,
"Commit", bankEnum[seg]); "Commit", bankEnum[seg]);
myBankCommit[seg]->setTarget(this); myBankCommit[seg]->setTarget(this);
addFocusWidget(myBankCommit[seg]); addFocusWidget(myBankCommit[seg]);
xpos_s = myBankCommit[seg]->getRight() + _font.getMaxCharWidth() * 2; xpos_s = myBankCommit[seg]->getRight() + _font.getMaxCharWidth() * 2;
StaticTextWidget* t; StaticTextWidget* t;
uInt16 start = (image[0x400 - 3] << 8) | image[0x400 - 4];
start -= start % 0x1000;
int addr1 = start + (seg * 0x400), addr2 = addr1 + 0x200; int addr1 = start + (seg * 0x400), addr2 = addr1 + 0x200;
label.str(""); label.str("");
label << "$" << Common::Base::HEX4 << addr1 << "-$" << Common::Base::HEX4 << (addr1 + 0x1FF); label << "$" << Common::Base::HEX4 << addr1 << "-$" << Common::Base::HEX4 << (addr1 + 0x1FF);
t = new StaticTextWidget(boss, _font, xpos_s, ypos_s+2, label.str()); t = new StaticTextWidget(_boss, _font, xpos_s, ypos_s + 2, label.str());
int xoffset = t->getRight() + _font.getMaxCharWidth(); int xoffset = t->getRight() + _font.getMaxCharWidth();
myBankState[2*seg] = new EditTextWidget(boss, _font, xoffset, ypos_s, myBankState[2 * seg] = new EditTextWidget(_boss, _font, xoffset, ypos_s,
w - xoffset - 10, myLineHeight, ""); _w - xoffset - 10, myLineHeight, "");
myBankState[2*seg]->setEditable(false, true); myBankState[2 * seg]->setEditable(false, true);
ypos_s += myLineHeight + 4; ypos_s += myLineHeight + 4;
label.str(""); label.str("");
label << "$" << Common::Base::HEX4 << addr2 << "-$" << Common::Base::HEX4 << (addr2 + 0x1FF); label << "$" << Common::Base::HEX4 << addr2 << "-$" << Common::Base::HEX4 << (addr2 + 0x1FF);
new StaticTextWidget(boss, _font, xpos_s, ypos_s+2, label.str()); new StaticTextWidget(_boss, _font, xpos_s, ypos_s + 2, label.str());
myBankState[2*seg+1] = new EditTextWidget(boss, _font, xoffset, ypos_s, myBankState[2 * seg + 1] = new EditTextWidget(_boss, _font, xoffset, ypos_s,
w - xoffset - 10, myLineHeight, ""); _w - xoffset - 10, myLineHeight, "");
myBankState[2*seg+1]->setEditable(false, true); myBankState[2 * seg + 1]->setEditable(false, true);
xpos = 2;
ypos += 2 * myLineHeight; ypos += 2 * myLineHeight;
} }
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Cartridge3EPlusWidget::saveOldState()
{
myOldState.internalram.clear();
for(uInt32 i = 0; i < internalRamSize(); ++i)
myOldState.internalram.push_back(myCart.myRAM[i]);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Cartridge3EPlusWidget::loadConfig() void Cartridge3EPlusWidget::loadConfig()
{ {
CartridgeEnhancedWidget::loadConfig();
updateUIState(); updateUIState();
CartDebugWidget::loadConfig();
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -154,11 +162,11 @@ void Cartridge3EPlusWidget::handleCommand(CommandSender* sender,
} }
// Ignore bank if either number or type hasn't been selected // Ignore bank if either number or type hasn't been selected
if(myBankNumber[segment]->getSelected() < 0 || if(myBankWidgets[segment]->getSelected() < 0 ||
myBankType[segment]->getSelected() < 0) myBankType[segment]->getSelected() < 0)
return; return;
uInt8 bank = myBankNumber[segment]->getSelected(); uInt8 bank = myBankWidgets[segment]->getSelected();
myCart.unlockBank(); myCart.unlockBank();
@ -172,123 +180,61 @@ void Cartridge3EPlusWidget::handleCommand(CommandSender* sender,
updateUIState(); updateUIState();
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string Cartridge3EPlusWidget::bankState()
{
ostringstream& buf = buffer();
for(int seg = 0; seg < myCart.myBankSegs; ++seg)
{
int bank = myCart.getSegmentBank(seg);
if(bank >= myCart.romBankCount()) // was RAM mapped here?
buf << " RAM " << bank - myCart.romBankCount();
else
buf << " ROM " << bank;
if(seg < myCart.myBankSegs - 1)
buf << " /";
}
return buf.str();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Cartridge3EPlusWidget::updateUIState() void Cartridge3EPlusWidget::updateUIState()
{ {
// Set description for each 1K bank state (@ each index) // Set description for each 1K segment state (@ each index)
// Set contents for actual banks number and type (@ each even index) // Set contents for actual banks number and type (@ each even index)
for(int seg = 0; seg < myCart.myBankSegs; ++seg) for(int seg = 0; seg < myCart3EP.myBankSegs; ++seg)
{ {
uInt16 bank = myCart.getSegmentBank(seg); uInt16 bank = myCart.getSegmentBank(seg);
ostringstream buf; ostringstream buf;
if(bank >= myCart.romBankCount()) // was RAM mapped here? if(bank >= myCart.romBankCount()) // was RAM mapped here?
{ {
uInt16 ramBank = bank - myCart.romBankCount(); uInt16 ramBank = bank - myCart.romBankCount();
buf << "RAM " << std::dec << ramBank << " @ $" << Common::Base::HEX4 buf << "RAM @ $" << Common::Base::HEX4
<< (ramBank << myCart.myBankShift) << "(R)"; << (ramBank << myCart3EP.myBankShift) << " (R)";
myBankState[seg * 2]->setText(buf.str()); myBankState[seg * 2]->setText(buf.str());
buf.str(""); buf.str("");
buf << "RAM " << std::dec << ramBank << " @ $" << Common::Base::HEX4 buf << "RAM @ $" << Common::Base::HEX4
<< ((ramBank << myCart.myBankShift) + myCart.myBankSize) << "(W)"; << ((ramBank << myCart3EP.myBankShift) + myCart3EP.myBankSize) << " (W)";
myBankState[seg * 2 + 1]->setText(buf.str()); myBankState[seg * 2 + 1]->setText(buf.str());
myBankNumber[seg]->setSelected(ramBank); myBankWidgets[seg]->setSelectedIndex(ramBank);
myBankType[seg]->setSelected("RAM"); myBankType[seg]->setSelected("RAM");
} }
else else
{ {
buf << "ROM " << std::dec << bank << " @ $" << Common::Base::HEX4 buf << "ROM @ $" << Common::Base::HEX4
<< ((bank << myCart.myBankShift)); << ((bank << myCart3EP.myBankShift));
myBankState[seg * 2]->setText(buf.str()); myBankState[seg * 2]->setText(buf.str());
buf.str(""); buf.str("");
buf << "ROM " << std::dec << bank << " @ $" << Common::Base::HEX4 buf << "ROM @ $" << Common::Base::HEX4
<< ((bank << myCart.myBankShift) + myCart.myBankSize); << ((bank << myCart3EP.myBankShift) + myCart3EP.myBankSize);
myBankState[seg * 2 + 1]->setText(buf.str()); myBankState[seg * 2 + 1]->setText(buf.str());
myBankNumber[seg]->setSelected(bank); myBankWidgets[seg]->setSelectedIndex(bank);
myBankType[seg]->setSelected("ROM"); myBankType[seg]->setSelected("ROM");
} }
} }
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uInt32 Cartridge3EPlusWidget::internalRamSize()
{
return 32*1024;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uInt32 Cartridge3EPlusWidget::internalRamRPort(int start)
{
return 0x0000 + start;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string Cartridge3EPlusWidget::internalRamDescription() string Cartridge3EPlusWidget::internalRamDescription()
{ {
ostringstream desc; ostringstream desc;
desc << "Accessible 512b at a time via:\n" desc << "Accessible 512b at a time via:\n"
<< " $f000/$f400/$f800/$fc00 for Read Access\n" << " $f000/$f400/$f800/$fc00 for read access\n"
<< " $f200/$f600/$fa00/$fe00 for Write Access"; << " $f200/$f600/$fa00/$fe00 for write access";
return desc.str(); return desc.str();
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
const ByteArray& Cartridge3EPlusWidget::internalRamOld(int start, int count)
{
myRamOld.clear();
for(int i = 0; i < count; i++)
myRamOld.push_back(myOldState.internalram[start + i]);
return myRamOld;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
const ByteArray& Cartridge3EPlusWidget::internalRamCurrent(int start, int count)
{
myRamCurrent.clear();
for(int i = 0; i < count; i++)
myRamCurrent.push_back(myCart.myRAM[start + i]);
return myRamCurrent;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Cartridge3EPlusWidget::internalRamSetValue(int addr, uInt8 value)
{
myCart.myRAM[addr] = value;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uInt8 Cartridge3EPlusWidget::internalRamGetValue(int addr)
{
return myCart.myRAM[addr];
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
const std::array<Cartridge3EPlusWidget::BankID, 4> Cartridge3EPlusWidget::bankEnum = { const std::array<Cartridge3EPlusWidget::BankID, 4> Cartridge3EPlusWidget::bankEnum = {
kBank0Changed, kBank1Changed, kBank2Changed, kBank3Changed kBank0Changed, kBank1Changed, kBank2Changed, kBank3Changed

View File

@ -23,9 +23,9 @@ class ButtonWidget;
class EditTextWidget; class EditTextWidget;
class PopUpWidget; class PopUpWidget;
#include "CartDebugWidget.hxx" #include "CartEnhancedWidget.hxx"
class Cartridge3EPlusWidget : public CartDebugWidget class Cartridge3EPlusWidget : public CartridgeEnhancedWidget
{ {
public: public:
Cartridge3EPlusWidget(GuiObject* boss, const GUI::Font& lfont, Cartridge3EPlusWidget(GuiObject* boss, const GUI::Font& lfont,
@ -35,21 +35,27 @@ class Cartridge3EPlusWidget : public CartDebugWidget
virtual ~Cartridge3EPlusWidget() = default; virtual ~Cartridge3EPlusWidget() = default;
private: private:
string manufacturer() override { return "Thomas Jentzsch"; }
string description() override;
void bankSelect(int& ypos) override;
void handleCommand(CommandSender* sender, int cmd, int data, int id) override;
void updateUIState(); void updateUIState();
private: void loadConfig() override;
Cartridge3EPlus& myCart;
string internalRamDescription() override;
private:
Cartridge3EPlus& myCart3EP;
std::array<PopUpWidget*, 4> myBankNumber{nullptr};
std::array<PopUpWidget*, 4> myBankType{nullptr}; std::array<PopUpWidget*, 4> myBankType{nullptr};
std::array<ButtonWidget*, 4> myBankCommit{nullptr}; std::array<ButtonWidget*, 4> myBankCommit{nullptr};
std::array<EditTextWidget*, 8> myBankState{nullptr}; std::array<EditTextWidget*, 8> myBankState{nullptr};
struct CartState {
ByteArray internalram;
};
CartState myOldState;
enum BankID { enum BankID {
kBank0Changed = 'b0CH', kBank0Changed = 'b0CH',
kBank1Changed = 'b1CH', kBank1Changed = 'b1CH',
@ -59,22 +65,6 @@ class Cartridge3EPlusWidget : public CartDebugWidget
static const std::array<BankID, 4> bankEnum; static const std::array<BankID, 4> bankEnum;
private: private:
void saveOldState() override;
void loadConfig() override;
void handleCommand(CommandSender* sender, int cmd, int data, int id) override;
string bankState() override;
// start of functions for Cartridge RAM tab
uInt32 internalRamSize() override;
uInt32 internalRamRPort(int start) override;
string internalRamDescription() override;
const ByteArray& internalRamOld(int start, int count) override;
const ByteArray& internalRamCurrent(int start, int count) override;
void internalRamSetValue(int addr, uInt8 value) override;
uInt8 internalRamGetValue(int addr) override;
// end of functions for Cartridge RAM tab
// Following constructors and assignment operators not supported // Following constructors and assignment operators not supported
Cartridge3EPlusWidget() = delete; Cartridge3EPlusWidget() = delete;
Cartridge3EPlusWidget(const Cartridge3EPlusWidget&) = delete; Cartridge3EPlusWidget(const Cartridge3EPlusWidget&) = delete;

View File

@ -47,7 +47,7 @@ class Cartridge3EWidget : public CartridgeEnhancedWidget
void bankSelect(int& ypos) override; void bankSelect(int& ypos) override;
int bankSegs() override { return 1; } uInt16 bankSegs() override { return 1; }
void loadConfig() override; void loadConfig() override;

View File

@ -36,7 +36,7 @@ class Cartridge3FWidget : public CartridgeEnhancedWidget
string description() override; string description() override;
int bankSegs() override { return 1; } uInt16 bankSegs() override { return 1; }
private: private:
// Following constructors and assignment operators not supported // Following constructors and assignment operators not supported

View File

@ -40,7 +40,7 @@ class CartridgeE0Widget : public CartridgeEnhancedWidget
string hotspotStr(int bank, int segment, bool noBrackets = false) override; string hotspotStr(int bank, int segment, bool noBrackets = false) override;
int bankSegs() override { return 3; } uInt16 bankSegs() override { return 3; }
private: private:
// Following constructors and assignment operators not supported // Following constructors and assignment operators not supported

View File

@ -253,7 +253,7 @@ string CartridgeEnhancedWidget::hotspotStr(int bank, int segment, bool prefix)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int CartridgeEnhancedWidget::bankSegs() uInt16 CartridgeEnhancedWidget::bankSegs()
{ {
return myCart.myBankSegs; return myCart.myBankSegs;
} }
@ -339,18 +339,18 @@ string CartridgeEnhancedWidget::internalRamDescription()
{ {
desc << indent << "$" << Common::Base::HEX4 << (ADDR_BASE | myCart.myReadOffset) desc << indent << "$" << Common::Base::HEX4 << (ADDR_BASE | myCart.myReadOffset)
<< " - $" << (ADDR_BASE | (myCart.myReadOffset + myCart.myRamMask)) << " - $" << (ADDR_BASE | (myCart.myReadOffset + myCart.myRamMask))
<< " used for Read Access\n"; << " used for read Access\n";
} }
desc << indent << "$" << Common::Base::HEX4 << (ADDR_BASE | myCart.myWriteOffset) desc << indent << "$" << Common::Base::HEX4 << (ADDR_BASE | myCart.myWriteOffset)
<< " - $" << (ADDR_BASE | (myCart.myWriteOffset + myCart.myRamMask)) << " - $" << (ADDR_BASE | (myCart.myWriteOffset + myCart.myRamMask))
<< " used for Write Access"; << " used for write Access";
if(myCart.myReadOffset > myCart.myWriteOffset) if(myCart.myReadOffset > myCart.myWriteOffset)
{ {
desc << indent << "\n$" << Common::Base::HEX4 << (ADDR_BASE | myCart.myReadOffset) desc << indent << "\n$" << Common::Base::HEX4 << (ADDR_BASE | myCart.myReadOffset)
<< " - $" << (ADDR_BASE | (myCart.myReadOffset + myCart.myRamMask)) << " - $" << (ADDR_BASE | (myCart.myReadOffset + myCart.myRamMask))
<< " used for Read Access"; << " used for read Access";
} }
return desc.str(); return desc.str();

View File

@ -57,7 +57,7 @@ class CartridgeEnhancedWidget : public CartDebugWidget
virtual string hotspotStr(int bank = 0, int segment = 0, bool prefix = false); virtual string hotspotStr(int bank = 0, int segment = 0, bool prefix = false);
virtual int bankSegs(); // { return myCart.myBankSegs; } virtual uInt16 bankSegs(); // { return myCart.myBankSegs; }
void saveOldState() override; void saveOldState() override;
void loadConfig() override; void loadConfig() override;

View File

@ -41,7 +41,7 @@ private:
string hotspotStr(int bank, int seg = 0, bool prefix = false) override; string hotspotStr(int bank, int seg = 0, bool prefix = false) override;
int bankSegs() override { return 1; } uInt16 bankSegs() override { return 1; }
private: private:
// Following constructors and assignment operators not supported // Following constructors and assignment operators not supported

View File

@ -22,13 +22,11 @@
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cartridge3EPlus::Cartridge3EPlus(const ByteBuffer& image, size_t size, Cartridge3EPlus::Cartridge3EPlus(const ByteBuffer& image, size_t size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: CartridgeEnhanced(image, size, md5, settings) : Cartridge3E(image, size, md5, settings)
{ {
myBankShift = BANK_SHIFT; myBankShift = BANK_SHIFT;
myRamSize = RAM_SIZE; myRamSize = RAM_SIZE;
myRamBankCount = RAM_BANKS; myRamBankCount = RAM_BANKS;
myRamWpHigh = RAM_HIGH_WP;
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -42,18 +40,6 @@ void Cartridge3EPlus::reset()
bank(startBank(), 3); bank(startBank(), 3);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Cartridge3EPlus::install(System& system)
{
CartridgeEnhanced::install(system);
System::PageAccess access(this, System::PageAccessType::WRITE);
// The hotspots are in TIA address space, so we claim it here
for(uInt16 addr = 0x00; addr < 0x40; addr += System::PAGE_SIZE)
mySystem->setPageAccess(addr, access);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool Cartridge3EPlus::checkSwitchBank(uInt16 address, uInt8 value) bool Cartridge3EPlus::checkSwitchBank(uInt16 address, uInt8 value)
{ {

View File

@ -21,7 +21,7 @@
class System; class System;
#include "bspf.hxx" #include "bspf.hxx"
#include "CartEnhanced.hxx" #include "Cart3E.hxx"
#ifdef DEBUGGER_SUPPORT #ifdef DEBUGGER_SUPPORT
class Cartridge3EPlusWidget; class Cartridge3EPlusWidget;
@ -89,7 +89,7 @@ class Cartridge3EPlusWidget;
@author Thomas Jentzsch and Stephen Anthony @author Thomas Jentzsch and Stephen Anthony
*/ */
class Cartridge3EPlus: public CartridgeEnhanced class Cartridge3EPlus: public Cartridge3E
{ {
friend class Cartridge3EPlusWidget; friend class Cartridge3EPlusWidget;
@ -110,14 +110,6 @@ class Cartridge3EPlus: public CartridgeEnhanced
/** Reset device to its power-on state */ /** Reset device to its power-on state */
void reset() override; void reset() override;
/**
Install cartridge in the specified system. Invoked by the system
when the cartridge is attached to it.
@param system The system the device should install itself in
*/
void install(System& system) override;
/** /**
Get a descriptor for the device name (used in error checking). Get a descriptor for the device name (used in error checking).
@ -167,9 +159,6 @@ class Cartridge3EPlus: public CartridgeEnhanced
// RAM size // RAM size
static constexpr size_t RAM_SIZE = RAM_BANKS << (BANK_SHIFT - 1); // = 32K = 0x4000; static constexpr size_t RAM_SIZE = RAM_BANKS << (BANK_SHIFT - 1); // = 32K = 0x4000;
// Write port for extra RAM is at high address
static constexpr bool RAM_HIGH_WP = true;
private: private:
// Following constructors and assignment operators not supported // Following constructors and assignment operators not supported
Cartridge3EPlus() = delete; Cartridge3EPlus() = delete;