mirror of https://github.com/stella-emu/stella.git
Completely removed OSystem dependency for Cart classes.
This commit is contained in:
parent
61cf68cb98
commit
e7169ac010
|
@ -184,12 +184,13 @@ class Cartridge : public Device
|
||||||
virtual string name() const = 0;
|
virtual string name() const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Informs the cartridge about the name of the ROM file used when
|
Informs the cartridge about the name of the nvram file it will
|
||||||
creating this cart.
|
use; not all carts support this.
|
||||||
|
|
||||||
@param name The properties file name of the ROM
|
@param nvramdir The full path of the nvram directory
|
||||||
|
@param romfile The name of the cart from ROM properties
|
||||||
*/
|
*/
|
||||||
virtual void setRomName(const string& name) { }
|
virtual void setNVRamFile(const string& nvramdir, const string& romfile) { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Thumbulator only supports 16-bit ARM code. Some Harmony/Melody drivers,
|
Thumbulator only supports 16-bit ARM code. Some Harmony/Melody drivers,
|
||||||
|
@ -207,17 +208,6 @@ class Cartridge : public Device
|
||||||
virtual CartDebugWidget* debugWidget(GuiObject* boss, const GUI::Font& lfont,
|
virtual CartDebugWidget* debugWidget(GuiObject* boss, const GUI::Font& lfont,
|
||||||
const GUI::Font& nfont, int x, int y, int w, int h) { return nullptr; }
|
const GUI::Font& nfont, int x, int y, int w, int h) { return nullptr; }
|
||||||
|
|
||||||
/**
|
|
||||||
We don't want cartridges to depend on OSystem by default. Cartridges that require OSystem
|
|
||||||
should override this method to get the OSystem instance injected via setter.
|
|
||||||
*/
|
|
||||||
virtual bool requiresOSystem() { return false; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
Setter for injecting OSystem.
|
|
||||||
*/
|
|
||||||
virtual void setOSystem(OSystem* osystem) {}
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
Get a random value to use when a read from the write port happens.
|
Get a random value to use when a read from the write port happens.
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
CartridgeCTY::CartridgeCTY(const BytePtr& image, uInt32 size,
|
CartridgeCTY::CartridgeCTY(const BytePtr& image, uInt32 size,
|
||||||
const string& md5, const Settings& settings)
|
const string& md5, const Settings& settings)
|
||||||
: Cartridge(settings, md5),
|
: Cartridge(settings, md5),
|
||||||
myOSystem(nullptr),
|
|
||||||
myOperationType(0),
|
myOperationType(0),
|
||||||
myTunePosition(0),
|
myTunePosition(0),
|
||||||
myLDAimmediate(false),
|
myLDAimmediate(false),
|
||||||
|
@ -343,9 +342,9 @@ bool CartridgeCTY::load(Serializer& in)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void CartridgeCTY::setRomName(const string& name)
|
void CartridgeCTY::setNVRamFile(const string& nvramdir, const string& romfile)
|
||||||
{
|
{
|
||||||
myEEPROMFile = myOSystem->nvramDir() + name + "_eeprom.dat";
|
myEEPROMFile = nvramdir + romfile + "_eeprom.dat";
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
|
@ -194,12 +194,12 @@ class CartridgeCTY : public Cartridge
|
||||||
string name() const override { return "CartridgeCTY"; }
|
string name() const override { return "CartridgeCTY"; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Informs the cartridge about the name of the ROM file used when
|
Informs the cartridge about the name of the nvram file it will use.
|
||||||
creating this cart.
|
|
||||||
|
|
||||||
@param name The properties file name of the ROM
|
@param nvramdir The full path of the nvram directory
|
||||||
|
@param romfile The name of the cart from ROM properties
|
||||||
*/
|
*/
|
||||||
void setRomName(const string& name) override;
|
void setNVRamFile(const string& nvramdir, const string& romfile) override;
|
||||||
|
|
||||||
#ifdef DEBUGGER_SUPPORT
|
#ifdef DEBUGGER_SUPPORT
|
||||||
/**
|
/**
|
||||||
|
@ -256,14 +256,7 @@ class CartridgeCTY : public Cartridge
|
||||||
|
|
||||||
void updateTune();
|
void updateTune();
|
||||||
|
|
||||||
bool requiresOSystem() override { return true; }
|
|
||||||
|
|
||||||
void setOSystem(OSystem* osystem) override { myOSystem = osystem; }
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// OSsytem currently in use
|
|
||||||
const OSystem* myOSystem;
|
|
||||||
|
|
||||||
// The 32K ROM image of the cartridge
|
// The 32K ROM image of the cartridge
|
||||||
uInt8 myImage[32768];
|
uInt8 myImage[32768];
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
CartridgeFA2::CartridgeFA2(const BytePtr& image, uInt32 size,
|
CartridgeFA2::CartridgeFA2(const BytePtr& image, uInt32 size,
|
||||||
const string& md5, const Settings& settings)
|
const string& md5, const Settings& settings)
|
||||||
: Cartridge(settings, md5),
|
: Cartridge(settings, md5),
|
||||||
myOSystem(nullptr),
|
|
||||||
mySize(28 * 1024),
|
mySize(28 * 1024),
|
||||||
myRamAccessTimeout(0),
|
myRamAccessTimeout(0),
|
||||||
myBankOffset(0)
|
myBankOffset(0)
|
||||||
|
@ -304,9 +303,9 @@ bool CartridgeFA2::load(Serializer& in)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void CartridgeFA2::setRomName(const string& name)
|
void CartridgeFA2::setNVRamFile(const string& nvramdir, const string& romfile)
|
||||||
{
|
{
|
||||||
myFlashFile = myOSystem->nvramDir() + name + "_flash.dat";
|
myFlashFile = nvramdir + romfile + "_flash.dat";
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
|
@ -134,12 +134,12 @@ class CartridgeFA2 : public Cartridge
|
||||||
string name() const override { return "CartridgeFA2"; }
|
string name() const override { return "CartridgeFA2"; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Informs the cartridge about the name of the ROM file used when
|
Informs the cartridge about the name of the nvram file it will use.
|
||||||
creating this cart.
|
|
||||||
|
|
||||||
@param name The properties file name of the ROM
|
@param nvramdir The full path of the nvram directory
|
||||||
|
@param romfile The name of the cart from ROM properties
|
||||||
*/
|
*/
|
||||||
void setRomName(const string& name) override;
|
void setNVRamFile(const string& nvramdir, const string& romfile) override;
|
||||||
|
|
||||||
#ifdef DEBUGGER_SUPPORT
|
#ifdef DEBUGGER_SUPPORT
|
||||||
/**
|
/**
|
||||||
|
@ -189,14 +189,7 @@ class CartridgeFA2 : public Cartridge
|
||||||
*/
|
*/
|
||||||
void flash(uInt8 operation);
|
void flash(uInt8 operation);
|
||||||
|
|
||||||
bool requiresOSystem() override { return true; }
|
|
||||||
|
|
||||||
void setOSystem(OSystem* osystem) override { myOSystem = osystem; }
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// OSsytem currently in use
|
|
||||||
const OSystem* myOSystem;
|
|
||||||
|
|
||||||
// The 24K/28K ROM image of the cartridge
|
// The 24K/28K ROM image of the cartridge
|
||||||
uInt8 myImage[28 * 1024];
|
uInt8 myImage[28 * 1024];
|
||||||
|
|
||||||
|
|
|
@ -206,7 +206,8 @@ Console::Console(OSystem& osystem, unique_ptr<Cartridge>& cart,
|
||||||
myConsoleInfo.Control1 = myRightControl->about(swappedPorts);
|
myConsoleInfo.Control1 = myRightControl->about(swappedPorts);
|
||||||
myConsoleInfo.BankSwitch = myCart->about();
|
myConsoleInfo.BankSwitch = myCart->about();
|
||||||
|
|
||||||
myCart->setRomName(myConsoleInfo.CartName);
|
// Some carts have an associated nvram file
|
||||||
|
myCart->setNVRamFile(myOSystem.nvramDir(), myConsoleInfo.CartName);
|
||||||
|
|
||||||
// Let the other devices know about the new console
|
// Let the other devices know about the new console
|
||||||
mySystem->consoleChanged(myConsoleTiming);
|
mySystem->consoleChanged(myConsoleTiming);
|
||||||
|
|
|
@ -499,8 +499,6 @@ unique_ptr<Console> OSystem::openConsole(const FilesystemNode& romfile, string&
|
||||||
unique_ptr<Cartridge> cart =
|
unique_ptr<Cartridge> cart =
|
||||||
CartDetector::create(romfile, image, size, cartmd5, type, *mySettings);
|
CartDetector::create(romfile, image, size, cartmd5, type, *mySettings);
|
||||||
|
|
||||||
if (cart->requiresOSystem()) cart->setOSystem(this);
|
|
||||||
|
|
||||||
// It's possible that the cart created was from a piece of the image,
|
// It's possible that the cart created was from a piece of the image,
|
||||||
// and that the md5 (and hence the cart) has changed
|
// and that the md5 (and hence the cart) has changed
|
||||||
if(props.get(Cartridge_MD5) != cartmd5)
|
if(props.get(Cartridge_MD5) != cartmd5)
|
||||||
|
|
|
@ -83,10 +83,5 @@ bool ProfilingRunner::runOne(const ProfilingRun run)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cartridge->requiresOSystem()) {
|
|
||||||
cout << "ERROR: profiling not supported for " << cartridge->name() << " ROM images" << endl;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue