Commit 3f3f04c6 authored by Stephen Anthony's avatar Stephen Anthony
Browse files

Prepare for quick 6.0.1 release, which adds CDFJ support (mostly for upcoming Galaga demo).

parent e4a1ba50
......@@ -12,6 +12,17 @@
Release History
===========================================================================
6.0 to 6.0.1: (June xx, 2019)
* Added support for CDFJ bankswitching type (Galaga, Wizard of War, etc).
* Allow the DPC+ scheme to not enable playfield 'jitter' effect for
certain older DPC+ driver versions; this allows 'Epic Adventure' ROM
to finally work in Stella.
-Have fun!
5.1.3 to 6.0: (December 23, 2018)
* Note: because of major TIA sound changes, the state file format has
......@@ -146,8 +157,6 @@
* Updated included PNG library to latest stable version.
-Have fun!
5.1.2 to 5.1.3: (June 10, 2018)
......
......@@ -18,7 +18,7 @@
#ifndef VERSION_HXX
#define VERSION_HXX
#define STELLA_VERSION "6.0"
#define STELLA_VERSION "6.0.1"
#define STELLA_BUILD "4667"
#endif
//============================================================================
//
// SSSS tt lll lll
// SS SS tt ll ll
// SS tttttt eeee ll ll aaaa
// SSSS tt ee ee ll ll aa
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#include "CartCDFInfoWidget.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeCDFInfoWidget::CartridgeCDFInfoWidget(
GuiObject* boss, const GUI::Font& lfont, const GUI::Font& nfont,
int x, int y, int w, int h, CartridgeCDF& cart)
: CartDebugWidget(boss, lfont, nfont, x, y, w, h)
{
uInt16 size = 8 * 4096;
ostringstream info;
info << describeCDFVersion(cart.myCDFSubtype) << " cartridge\n"
<< "32K ROM, seven 4K banks are accessible to 2600\n"
<< "8K CDF RAM\n"
<< "CDF registers accessible @ $FFF0 - $FFF3\n"
<< "Banks accessible at hotspots $FFF5 to $FFFB\n"
<< "Startup bank = " << cart.startBank() << "\n";
#if 0
// Eventually, we should query this from the debugger/disassembler
for(uInt32 i = 0, offset = 0xFFC, spot = 0xFF5; i < 7; ++i, offset += 0x1000)
{
uInt16 start = (cart.myImage[offset+1] << 8) | cart.myImage[offset];
start -= start % 0x1000;
info << "Bank " << i << " @ $" << HEX4 << (start + 0x80) << " - "
<< "$" << (start + 0xFFF) << " (hotspot = $" << (spot+i) << ")\n";
}
#endif
addBaseInformation(size, "AtariAge", info.str());
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string CartridgeCDFInfoWidget::describeCDFVersion(CartridgeCDF::CDFSubtype subtype)
{
switch(subtype)
{
case CartridgeCDF::CDFSubtype::CDF0:
return "CDF (v0)";
case CartridgeCDF::CDFSubtype::CDF1:
return "CDF (v1)";
case CartridgeCDF::CDFSubtype::CDFJ:
return "CDFJ";
default:
throw runtime_error("unreachable");
}
}
//============================================================================
//
// SSSS tt lll lll
// SS SS tt ll ll
// SS tttttt eeee ll ll aaaa
// SSSS tt ee ee ll ll aa
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#ifndef CARTRIDGECDF_INFO_WIDGET_HXX
#define CARTRIDGECDF_INFO_WIDGET_HXX
#include "CartCDF.hxx"
#include "CartDebugWidget.hxx"
class CartridgeCDFInfoWidget : public CartDebugWidget
{
public:
CartridgeCDFInfoWidget(GuiObject* boss, const GUI::Font& lfont,
const GUI::Font& nfont,
int x, int y, int w, int h,
CartridgeCDF& cart);
virtual ~CartridgeCDFInfoWidget() = default;
private:
static string describeCDFVersion(CartridgeCDF::CDFSubtype subtype);
// Following constructors and assignment operators not supported
CartridgeCDFInfoWidget() = delete;
CartridgeCDFInfoWidget(const CartridgeCDFInfoWidget&) = delete;
CartridgeCDFInfoWidget(CartridgeCDFInfoWidget&&) = delete;
CartridgeCDFInfoWidget& operator=(const CartridgeCDFInfoWidget&) = delete;
CartridgeCDFInfoWidget& operator=(CartridgeCDFInfoWidget&&) = delete;
};
#endif
......@@ -8,14 +8,13 @@
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony
// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#include "CartCDF.hxx"
#include "DataGridWidget.hxx"
#include "PopUpWidget.hxx"
#include "CartCDFWidget.hxx"
......@@ -27,30 +26,12 @@ CartridgeCDFWidget::CartridgeCDFWidget(
: CartDebugWidget(boss, lfont, nfont, x, y, w, h),
myCart(cart)
{
uInt16 size = 8 * 4096;
ostringstream info;
info << "CDF cartridge (version " << cart.myVersion << ")\n"
<< "32K ROM, seven 4K banks are accessible to 2600\n"
<< "8K CDF RAM\n"
<< "CDF registers accessible @ $FFF0 - $FFF3\n"
<< "Banks accessible at hotspots $FFF5 to $FFFB\n"
<< "Startup bank = " << cart.startBank() << "\n";
#if 0
// Eventually, we should query this from the debugger/disassembler
for(uInt32 i = 0, offset = 0xFFC, spot = 0xFF5; i < 7; ++i, offset += 0x1000)
{
uInt16 start = (cart.myImage[offset+1] << 8) | cart.myImage[offset];
start -= start % 0x1000;
info << "Bank " << i << " @ $" << HEX4 << (start + 0x80) << " - "
<< "$" << (start + 0xFFF) << " (hotspot = $" << (spot+i) << ")\n";
}
#endif
const int VBORDER = 8;
const int HBORDER = 2;
const int INDENT = 20;
const int VGAP = 4;
int xpos = 10,
ypos = addBaseInformation(size, "AtariAge", info.str()) +
myLineHeight;
int xpos = HBORDER, ypos = VBORDER;
VariantList items;
VarList::push_back(items, "0 ($FFF5)");
......@@ -60,122 +41,153 @@ CartridgeCDFWidget::CartridgeCDFWidget(
VarList::push_back(items, "4 ($FFF9)");
VarList::push_back(items, "5 ($FFFA)");
VarList::push_back(items, "6 ($FFFB)");
myBank =
new PopUpWidget(boss, _font, xpos, ypos-2, _font.getStringWidth("0 ($FFFx) "),
myLineHeight, items, "Set bank ",
_font.getStringWidth("Set bank "), kBankChanged);
myBank = new PopUpWidget(boss, _font, xpos, ypos, _font.getStringWidth("0 ($FFFx) "),
myLineHeight, items,
"Set bank ", _font.getStringWidth("Set bank "), kBankChanged);
myBank->setTarget(this);
addFocusWidget(myBank);
//addFocusWidget(myBank);
int lwidth = _font.getStringWidth("Datastream Increments"); // get width of the widest label
// Fast Fetch flag
myFastFetch = new CheckboxWidget(boss, _font, myBank->getRight() + 24, ypos + 1,
"Fast Fetcher enabled");
myFastFetch->setTarget(this);
myFastFetch->setEditable(false);
int lwidth;
// Datastream Pointers
#define DS_X 30
#define DS_X (HBORDER + _font.getStringWidth("xx "))
xpos = DS_X;
ypos += myLineHeight + 4;
new StaticTextWidget(boss, _font, xpos, ypos, lwidth,
myFontHeight, "Datastream Pointers", TextAlign::Left);
xpos += lwidth;
ypos += myLineHeight + VGAP * 4;
new StaticTextWidget(boss, _font, xpos, ypos, "Datastream Pointers");
myDatastreamPointers = new DataGridWidget(boss, _nfont, DS_X, ypos+myLineHeight-2, 4, 8, 6, 32, Common::Base::F_16_3_2);
myDatastreamPointers = new DataGridWidget(boss, _nfont, DS_X,
ypos+myLineHeight, 4, 8, 6, 32,
Common::Base::F_16_3_2);
myDatastreamPointers->setTarget(this);
myDatastreamPointers->setEditable(false);
myDatastreamPointers2 = new DataGridWidget(boss, _nfont, DS_X + myDatastreamPointers->getWidth() * 3 / 4, ypos+myLineHeight-2 + 8*myLineHeight, 1, 2, 6, 32, Common::Base::F_16_3_2);
myDatastreamPointers2->setTarget(this);
myDatastreamPointers2->setEditable(false);
myCommandStreamPointer = new DataGridWidget(boss, _nfont, DS_X + myDatastreamPointers->getWidth() * 3 / 4,
ypos+myLineHeight + 8*myLineHeight, 1, 1, 6, 32,
Common::Base::F_16_3_2);
myCommandStreamPointer->setTarget(this);
myCommandStreamPointer->setEditable(false);
if (isCDFJ())
myJumpStreamPointers = new DataGridWidget(boss, _nfont, DS_X + myDatastreamPointers->getWidth() * 2 / 4,
ypos+myLineHeight + 9*myLineHeight, 2, 1, 6, 32,
Common::Base::F_16_3_2);
else
myJumpStreamPointers = new DataGridWidget(boss, _nfont, DS_X + myDatastreamPointers->getWidth() * 3 / 4,
ypos+myLineHeight + 9*myLineHeight, 1, 1, 6, 32,
Common::Base::F_16_3_2);
myJumpStreamPointers->setTarget(this);
myJumpStreamPointers->setEditable(false);
uInt32 row;
for(row = 0; row < 8; ++row)
{
myDatastreamLabels[row] =
new StaticTextWidget(_boss, _font, DS_X - _font.getStringWidth("xx "),
ypos+myLineHeight-2 + row*myLineHeight + 2,
myFontWidth*2, myFontHeight, "", TextAlign::Left);
myDatastreamLabels[row]->setLabel(Common::Base::toString(row * 4, Common::Base::F_16_2));
ypos+myLineHeight + row*myLineHeight + 2, " ");
myDatastreamLabels[row]->setLabel(Common::Base::toString(row * 4,
Common::Base::F_16_2));
}
lwidth = _font.getStringWidth("Write Data (stream 20)");
lwidth = _font.getStringWidth("Jump Data (21|22)");
myDatastreamLabels[8] =
new StaticTextWidget(_boss, _font, DS_X - _font.getStringWidth("xx "),
ypos+myLineHeight-2 + 8*myLineHeight + 2,
lwidth, myFontHeight, "Write Data (stream 20)", TextAlign::Left);
ypos+myLineHeight + 8*myLineHeight + 2,
lwidth, myFontHeight, "Write Data (20)");
myDatastreamLabels[9] =
new StaticTextWidget(_boss, _font, DS_X - _font.getStringWidth("xx "),
ypos+myLineHeight-2 + 9*myLineHeight + 2,
lwidth, myFontHeight, "Jump Data (stream 21)", TextAlign::Left);
ypos+myLineHeight + 9*myLineHeight + 2,
lwidth, myFontHeight,
isCDFJ() ? "Jump Data (21|22)" : "Jump Data (21)");
// Datastream Increments
xpos = DS_X + myDatastreamPointers->getWidth() + 20;
new StaticTextWidget(boss, _font, xpos, ypos, lwidth,
myFontHeight, "Datastream Increments", TextAlign::Left);
xpos = DS_X + myDatastreamPointers->getWidth() + 16;
new StaticTextWidget(boss, _font, xpos, ypos, "Datastream Increments");
myDatastreamIncrements = new DataGridWidget(boss, _nfont, xpos, ypos+myLineHeight-2, 4, 8, 5, 32, Common::Base::F_16_2_2);
myDatastreamIncrements = new DataGridWidget(boss, _nfont, xpos,
ypos+myLineHeight, 4, 8, 5, 32,
Common::Base::F_16_2_2);
myDatastreamIncrements->setTarget(this);
myDatastreamIncrements->setEditable(false);
myDatastreamIncrements2 = new DataGridWidget(boss, _nfont, xpos, ypos+myLineHeight-2 + 8*myLineHeight, 1, 2, 5, 32, Common::Base::F_16_2_2);
myDatastreamIncrements2->setTarget(this);
myDatastreamIncrements2->setEditable(false);
myCommandStreamIncrement = new DataGridWidget(boss, _nfont, xpos,
ypos+myLineHeight + 8*myLineHeight, 1, 1, 5, 32,
Common::Base::F_16_2_2);
myCommandStreamIncrement->setTarget(this);
myCommandStreamIncrement->setEditable(false);
myJumpStreamIncrements = new DataGridWidget(boss, _nfont, xpos,
ypos+myLineHeight + 9*myLineHeight, isCDFJ() ? 2 : 1, 1, 5, 32,
Common::Base::F_16_2_2);
myJumpStreamIncrements->setTarget(this);
myJumpStreamIncrements->setEditable(false);
xpos = HBORDER; ypos += myLineHeight * 11 + VGAP * 4;
lwidth = _font.getStringWidth("Waveform Sizes ");
// Music counters
xpos = 10; ypos += myLineHeight*12 + 4;
new StaticTextWidget(boss, _font, xpos, ypos, lwidth,
myFontHeight, "Music Counters", TextAlign::Left);
new StaticTextWidget(_boss, _font, xpos, ypos, "Music States:");
xpos += INDENT;
ypos += myLineHeight + VGAP;
new StaticTextWidget(boss, _font, xpos, ypos, "Counters");
xpos += lwidth;
myMusicCounters = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 8, 32, Common::Base::F_16_8);
myMusicCounters = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 8, 32,
Common::Base::F_16_8);
myMusicCounters->setTarget(this);
myMusicCounters->setEditable(false);
// Music frequencies
xpos = 10; ypos += myLineHeight + 4;
new StaticTextWidget(boss, _font, xpos, ypos, lwidth,
myFontHeight, "Music Frequencies", TextAlign::Left);
xpos = HBORDER + INDENT; ypos += myLineHeight + VGAP;
new StaticTextWidget(boss, _font, xpos, ypos, "Frequencies");
xpos += lwidth;
myMusicFrequencies = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 8, 32, Common::Base::F_16_8);
myMusicFrequencies = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 8, 32,
Common::Base::F_16_8);
myMusicFrequencies->setTarget(this);
myMusicFrequencies->setEditable(false);
// Music waveforms
xpos = 10; ypos += myLineHeight + 4;
new StaticTextWidget(boss, _font, xpos, ypos, lwidth,
myFontHeight, "Music Waveforms", TextAlign::Left);
xpos = HBORDER + INDENT; ypos += myLineHeight + VGAP;
new StaticTextWidget(boss, _font, xpos, ypos, "Waveforms");
xpos += lwidth;
myMusicWaveforms = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 4, 16, Common::Base::F_16_2);
myMusicWaveforms = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 8, 16,
Common::Base::F_16_2);
myMusicWaveforms->setTarget(this);
myMusicWaveforms->setEditable(false);
int xpossp = xpos + myMusicWaveforms->getWidth() + 20;
int lwidth2 = _font.getStringWidth("Sample Pointer ");
new StaticTextWidget(boss, _font, xpossp, ypos, lwidth2,
myFontHeight, "Sample Pointer ", TextAlign::Left);
mySamplePointer = new DataGridWidget(boss, _nfont, xpossp + lwidth2, ypos-2, 1, 1, 8, 32, Common::Base::F_16_8);
mySamplePointer->setTarget(this);
mySamplePointer->setEditable(false);
// Music waveform sizes
xpos = 10; ypos += myLineHeight + 4;
new StaticTextWidget(boss, _font, xpos, ypos, lwidth,
myFontHeight, "Music Waveform Sizes", TextAlign::Left);
xpos = HBORDER + INDENT; ypos += myLineHeight + VGAP;
new StaticTextWidget(boss, _font, xpos, ypos, "Waveform Sizes");
xpos += lwidth;
myMusicWaveformSizes = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 4, 16, Common::Base::F_16_2);
myMusicWaveformSizes = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 8, 16,
Common::Base::F_16_2);
myMusicWaveformSizes->setTarget(this);
myMusicWaveformSizes->setEditable(false);
// Fast Fetch and Digital Audio flags
xpos = 10; ypos += myLineHeight + 4;
myFastFetch = new CheckboxWidget(boss, _font, xpos, ypos, "Fast Fetcher enabled");
myFastFetch->setTarget(this);
myFastFetch->setEditable(false);
// Digital Audio flag
xpos = HBORDER; ypos += myLineHeight + VGAP;
myDigitalSample = new CheckboxWidget(boss, _font, xpossp, ypos, "Digital Sample mode");
myDigitalSample = new CheckboxWidget(boss, _font, xpos, ypos, "Digital Sample mode");
myDigitalSample->setTarget(this);
myDigitalSample->setEditable(false);
xpos = HBORDER + INDENT; ypos += myLineHeight + VGAP;
int lwidth2 = _font.getStringWidth("Sample Pointer ");
new StaticTextWidget(boss, _font, xpos, ypos, "Sample Pointer");
mySamplePointer = new DataGridWidget(boss, _nfont, xpos + lwidth2, ypos - 2, 1, 1, 8, 32,
Common::Base::F_16_8);
mySamplePointer->setTarget(this);
mySamplePointer->setEditable(false);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
......@@ -193,7 +205,7 @@ void CartridgeCDFWidget::saveOldState()
myOldState.internalram.clear();
myOldState.samplepointer.clear();
for(uInt32 i = 0; i < 34; ++i)
for(uInt32 i = 0; i < static_cast<uInt32>(isCDFJ() ? 35 : 34); ++i)
{
// Pointers are stored as:
// PPPFF---
......@@ -261,7 +273,21 @@ void CartridgeCDFWidget::loadConfig()
alist.push_back(0); vlist.push_back(pointervalue);
changed.push_back(pointervalue != myOldState.datastreampointers[i]);
}
myDatastreamPointers2->setList(alist, vlist, changed);
alist.clear(); vlist.clear(); changed.clear();
alist.push_back(0);
vlist.push_back(myCart.getDatastreamPointer(0x20) >> 12);
changed.push_back(static_cast<Int32>(myCart.getDatastreamPointer(0x20)) != myOldState.datastreampointers[0x20]);
myCommandStreamPointer->setList(alist, vlist, changed);
alist.clear(); vlist.clear(); changed.clear();
for(int i = 0; i < (isCDFJ() ? 2 : 1); ++i)
{
Int32 pointervalue = myCart.getDatastreamPointer(0x21 + i) >> 12;
alist.push_back(0); vlist.push_back(pointervalue);
changed.push_back(pointervalue != myOldState.datastreampointers[0x21 + i]);
}
myJumpStreamPointers->setList(alist, vlist, changed);
alist.clear(); vlist.clear(); changed.clear();
for(int i = 0; i < 32; ++i)
......@@ -273,13 +299,19 @@ void CartridgeCDFWidget::loadConfig()
myDatastreamIncrements->setList(alist, vlist, changed);
alist.clear(); vlist.clear(); changed.clear();
for(int i = 32; i < 34; ++i)
alist.push_back(0);
vlist.push_back(myCart.getDatastreamIncrement(0x20));
changed.push_back(static_cast<Int32>(myCart.getDatastreamIncrement(0x20)) != myOldState.datastreamincrements[0x20]);
myCommandStreamIncrement->setList(alist, vlist, changed);
alist.clear(); vlist.clear(); changed.clear();
for(int i = 0; i < (isCDFJ() ? 2 : 1); ++i)
{
Int32 incrementvalue = myCart.getDatastreamIncrement(i);
alist.push_back(0); vlist.push_back(incrementvalue);
changed.push_back(incrementvalue != myOldState.datastreamincrements[i]);
Int32 pointervalue = myCart.getDatastreamIncrement(0x21 + i) >> 12;
alist.push_back(0); vlist.push_back(pointervalue);
changed.push_back(pointervalue != myOldState.datastreamincrements[0x21 + i]);
}
myDatastreamIncrements2->setList(alist, vlist, changed);
myJumpStreamIncrements->setList(alist, vlist, changed);
alist.clear(); vlist.clear(); changed.clear();
for(int i = 0; i < 3; ++i)
......@@ -420,3 +452,28 @@ uInt8 CartridgeCDFWidget::internalRamGetValue(int addr)
{
return myCart.myCDFRAM[addr];
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
string CartridgeCDFWidget::describeCDFVersion(CartridgeCDF::CDFSubtype subtype)
{
switch(subtype)
{
case CartridgeCDF::CDFSubtype::CDF0:
return "CDF (v0)";
case CartridgeCDF::CDFSubtype::CDF1:
return "CDF (v1)";
case CartridgeCDF::CDFSubtype::CDFJ:
return "CDFJ";
default:
throw runtime_error("unreachable");
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartridgeCDFWidget::isCDFJ() const
{
return myCart.myCDFSubtype == CartridgeCDF::CDFSubtype::CDFJ;
}
......@@ -8,7 +8,7 @@
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony
// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
......@@ -18,12 +18,12 @@
#ifndef CARTRIDGECDF_WIDGET_HXX
#define CARTRIDGECDF_WIDGET_HXX
class CartridgeCDF;
class PopUpWidget;
class CheckboxWidget;
class DataGridWidget;
class StaticTextWidget;
#include "CartCDF.hxx"
#include "CartDebugWidget.hxx"
class CartridgeCDFWidget : public CartDebugWidget
......@@ -56,8 +56,10 @@ class CartridgeCDFWidget : public CartDebugWidget
DataGridWidget* myDatastreamPointers;
DataGridWidget* myDatastreamIncrements;
DataGridWidget* myDatastreamPointers2;
DataGridWidget* myDatastreamIncrements2;
DataGridWidget* myCommandStreamPointer;
DataGridWidget* myCommandStreamIncrement;
DataGridWidget* myJumpStreamPointers;
DataGridWidget* myJumpStreamIncrements;
DataGridWidget* myMusicCounters;
DataGridWidget* myMusicFrequencies;
DataGridWidget* myMusicWaveforms;
......@@ -72,6 +74,10 @@ class CartridgeCDFWidget : public CartDebugWidget
enum { kBankChanged = 'bkCH' };
private:
bool isCDFJ() const;
static string describeCDFVersion(CartridgeCDF::CDFSubtype subtype);
void saveOldState() override;
void loadConfig() override;
......
......@@ -93,5 +93,6 @@ void CartDebugWidget::invalidate()
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CartDebugWidget::loadConfig()
{
myDesc->setSelected(0);
if(myDesc)
myDesc->setSelected(0);
}
......@@ -638,8 +638,20 @@ void DebuggerDialog::addRomArea()
myRomTab->setParentWidget(tabID, myRom);
addToFocusList(myRom->getFocusList(), myRomTab, tabID);
// The 'cart-specific' information tab
tabID = myRomTab->addTab(instance().console().cartridge().name());
// The 'cart-specific' information tab (optional)
tabID = myRomTab->addTab(" " + instance().console().cartridge().name() + " ", TabWidget::AUTO_WIDTH);
myCartInfo = instance().console().cartridge().infoWidget(
myRomTab, *myLFont, *myNFont, 2, 2, tabWidth - 1,
tabHeight - myRomTab->getTabHeight() - 2);
if(myCartInfo != nullptr)
{
myRomTab->setParentWidget(tabID, myCartInfo);
addToFocusList(myCartInfo->getFocusList(), myRomTab, tabID);
tabID = myRomTab->addTab(" States ", TabWidget::AUTO_WIDTH);
}
// The 'cart-specific' state tab
myCartDebug = instance().console().cartridge().debugWidget(
myRomTab, *myLFont, *myNFont, 2, 2, tabWidth - 1,
tabHeight - myRomTab->getTabHeight() - 2);
......@@ -651,7 +663,7 @@ void DebuggerDialog::addRomArea()
// The cartridge RAM tab
if (myCartDebug->internalRamSize() > 0)
{
tabID = myRomTab->addTab(" Cartridge RAM ");
tabID = myRomTab->addTab(" Cartridge RAM ", TabWidget::AUTO_WIDTH);
myCartRam =
new CartRamWidget(myRomTab, *myLFont, *myNFont, 2, 2, tabWidth - 1,
tabHeight - myRomTab->getTabHeight() - 2, *myCartDebug);
......
......@@ -124,6 +124,7 @@ class DebuggerDialog : public Dialog
CpuWidget* myCpu;
RamWidget* myRam;
RomWidget* myRom;
CartDebugWidget* myCartInfo;
CartDebugWidget* myCartDebug;
CartRamWidget* myCartRam;
Ed