From 6e06da11618bd4c7a02c7db25ed8fbe05fa10d5b Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sat, 4 Apr 2020 18:29:05 +0200 Subject: [PATCH] add get current segment from cart for debug widgets --- src/debugger/gui/Cart3FWidget.cxx | 7 ++++--- src/debugger/gui/CartE0Widget.cxx | 12 ++++++------ src/emucore/Cart3F.hxx | 2 +- src/emucore/CartEnhanced.cxx | 6 ++++++ src/emucore/CartEnhanced.hxx | 13 ++++++++++--- 5 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/debugger/gui/Cart3FWidget.cxx b/src/debugger/gui/Cart3FWidget.cxx index ab5a48761..86d43177b 100644 --- a/src/debugger/gui/Cart3FWidget.cxx +++ b/src/debugger/gui/Cart3FWidget.cxx @@ -26,9 +26,10 @@ Cartridge3FWidget::Cartridge3FWidget( : CartDebugWidget(boss, lfont, nfont, x, y, w, h), myCart(cart) { - size_t size = cart.mySize; - ostringstream info; + size_t size; + + cart.getImage(size); info << "Tigervision 3F cartridge, 2-256 2K banks\n" << "Startup bank = " << cart.startBank() << " or undetermined\n" << "First 2K bank selected by writing to $3F\n" @@ -88,7 +89,7 @@ string Cartridge3FWidget::bankState() { ostringstream& buf = buffer(); - buf << "Bank = #" << std::dec << (myCart.myCurrentSegOffset[0] >> myCart.myBankShift) << ", hotspot = $3F"; + buf << "Bank = #" << std::dec << myCart.getSegmentBank() << ", hotspot = $3F"; return buf.str(); } diff --git a/src/debugger/gui/CartE0Widget.cxx b/src/debugger/gui/CartE0Widget.cxx index bdce56fdb..861c99228 100644 --- a/src/debugger/gui/CartE0Widget.cxx +++ b/src/debugger/gui/CartE0Widget.cxx @@ -98,9 +98,9 @@ CartridgeE0Widget::CartridgeE0Widget( // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeE0Widget::loadConfig() { - mySlice0->setSelectedIndex(myCart.myCurrentSegOffset[0] >> myCart.myBankShift); - mySlice1->setSelectedIndex(myCart.myCurrentSegOffset[1] >> myCart.myBankShift); - mySlice2->setSelectedIndex(myCart.myCurrentSegOffset[2] >> myCart.myBankShift); + mySlice0->setSelectedIndex(myCart.getSegmentBank(0)); + mySlice1->setSelectedIndex(myCart.getSegmentBank(1)); + mySlice2->setSelectedIndex(myCart.getSegmentBank(2)); CartDebugWidget::loadConfig(); } @@ -136,9 +136,9 @@ string CartridgeE0Widget::bankState() ostringstream& buf = buffer(); buf << "Slices: " << std::dec - << seg0[myCart.myCurrentSegOffset[0] >> myCart.myBankShift] << " / " - << seg1[myCart.myCurrentSegOffset[1] >> myCart.myBankShift] << " / " - << seg2[myCart.myCurrentSegOffset[2] >> myCart.myBankShift]; + << seg0[myCart.getSegmentBank(0)] << " / " + << seg1[myCart.getSegmentBank(1)] << " / " + << seg2[myCart.getSegmentBank(2)]; return buf.str(); } diff --git a/src/emucore/Cart3F.hxx b/src/emucore/Cart3F.hxx index 53b71427a..d9f3e9fa6 100644 --- a/src/emucore/Cart3F.hxx +++ b/src/emucore/Cart3F.hxx @@ -36,7 +36,7 @@ class System; $00 to $3F will change banks. Although, the Tigervision games only used 8K this bankswitching scheme supports up to 512K. - @author Bradford W. Mott + @author Bradford W. Mott, Thomas Jentzsch */ class Cartridge3F : public CartridgeEnhanced { diff --git a/src/emucore/CartEnhanced.cxx b/src/emucore/CartEnhanced.cxx index 0ac9ffadd..adcd8bc0e 100644 --- a/src/emucore/CartEnhanced.cxx +++ b/src/emucore/CartEnhanced.cxx @@ -182,6 +182,12 @@ uInt16 CartridgeEnhanced::getBank(uInt16 address) const return myCurrentSegOffset[(address & 0xFFF) >> myBankShift] >> myBankShift; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +uInt16 CartridgeEnhanced::getSegmentBank(uInt16 segment) const +{ + return myCurrentSegOffset[segment % myBankSegs] >> myBankShift; +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uInt16 CartridgeEnhanced::bankCount() const { diff --git a/src/emucore/CartEnhanced.hxx b/src/emucore/CartEnhanced.hxx index 4bd45fadd..703cd320f 100644 --- a/src/emucore/CartEnhanced.hxx +++ b/src/emucore/CartEnhanced.hxx @@ -79,6 +79,13 @@ class CartridgeEnhanced : public Cartridge */ uInt16 getBank(uInt16 address = 0) const override; + /** + Get the current bank for a bank segment. + + @param segment The segment to get the bank for + */ + uInt16 getSegmentBank(uInt16 segment = 0) const; + /** Query the number of banks supported by the cartridge. */ @@ -165,9 +172,6 @@ class CartridgeEnhanced : public Cartridge // Pointer to a dynamically allocated RAM area of the cartridge ByteBuffer myRAM{nullptr}; - // The size of the ROM image - size_t mySize{0}; - private: // Calculated as: log(ROM bank segment size) / log(2) static constexpr uInt16 BANK_SHIFT = 12; // default = 4K @@ -175,6 +179,9 @@ class CartridgeEnhanced : public Cartridge // The size of extra RAM in ROM address space static constexpr uInt16 RAM_SIZE = 0; // default = none + // The size of the ROM image + size_t mySize{0}; + protected: /** Check hotspots and switch bank if triggered.