mirror of https://github.com/stella-emu/stella.git
Merge branch 'feature/lodefmode-moviecart'
This commit is contained in:
commit
c2951b3b4d
|
@ -14,6 +14,9 @@
|
|||
|
||||
6.5.3 to 6.6 (??? ??, 202?)
|
||||
|
||||
* Added preliminary support for 'MVC' bankswitching scheme by
|
||||
Rob Bairos.
|
||||
|
||||
* Added web links for many games
|
||||
|
||||
* Debugger: added optional logging of breaks and traps
|
||||
|
|
|
@ -180,7 +180,7 @@ bool FilesystemNodeZIP::getChildren(AbstractFSList& myList, ListMode mode) const
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
size_t FilesystemNodeZIP::read(ByteBuffer& image) const
|
||||
size_t FilesystemNodeZIP::read(ByteBuffer& image, size_t) const
|
||||
{
|
||||
switch(_error)
|
||||
{
|
||||
|
@ -205,7 +205,7 @@ size_t FilesystemNodeZIP::read(stringstream& image) const
|
|||
// For now, we just read into a buffer and store in the stream
|
||||
// TODO: maybe there's a more efficient way to do this?
|
||||
ByteBuffer buffer;
|
||||
size_t size = read(buffer);
|
||||
size_t size = read(buffer, 0);
|
||||
if(size > 0)
|
||||
image.write(reinterpret_cast<char*>(buffer.get()), size);
|
||||
|
||||
|
|
|
@ -62,8 +62,8 @@ class FilesystemNodeZIP : public AbstractFSNode
|
|||
bool getChildren(AbstractFSList& list, ListMode mode) const override;
|
||||
AbstractFSNodePtr getParent() const override;
|
||||
|
||||
size_t read(ByteBuffer& image) const override;
|
||||
size_t read(stringstream& image) const override;
|
||||
size_t read(ByteBuffer& buffer, size_t size) const override;
|
||||
size_t read(stringstream& buffer) const override;
|
||||
size_t write(const ByteBuffer& buffer, size_t size) const override;
|
||||
size_t write(const stringstream& buffer) const override;
|
||||
|
||||
|
|
|
@ -140,6 +140,7 @@ Bankswitch::BSList = {{
|
|||
{ "FC" , "FC (32K Amiga)" },
|
||||
{ "FE" , "FE (8K Decathlon)" },
|
||||
{ "MDM" , "MDM (Menu Driven Megacart)" },
|
||||
{ "MVC" , "MVC (Movie Cart)" },
|
||||
{ "SB" , "SB (128-256K SUPERbank)" },
|
||||
{ "TVBOY" , "TV Boy (512K)" },
|
||||
{ "UA" , "UA (8K UA Ltd.)" },
|
||||
|
@ -226,6 +227,7 @@ Bankswitch::ExtensionMap Bankswitch::ourExtensions = {
|
|||
{ "FC" , Bankswitch::Type::_FC },
|
||||
{ "FE" , Bankswitch::Type::_FE },
|
||||
{ "MDM" , Bankswitch::Type::_MDM },
|
||||
{ "MVC" , Bankswitch::Type::_MVC },
|
||||
{ "SB" , Bankswitch::Type::_SB },
|
||||
{ "TVB" , Bankswitch::Type::_TVBOY },
|
||||
{ "TVBOY" , Bankswitch::Type::_TVBOY },
|
||||
|
@ -284,6 +286,7 @@ Bankswitch::NameToTypeMap Bankswitch::ourNameToTypes = {
|
|||
{ "FC" , Bankswitch::Type::_FC },
|
||||
{ "FE" , Bankswitch::Type::_FE },
|
||||
{ "MDM" , Bankswitch::Type::_MDM },
|
||||
{ "MVC" , Bankswitch::Type::_MVC },
|
||||
{ "SB" , Bankswitch::Type::_SB },
|
||||
{ "TVBOY" , Bankswitch::Type::_TVBOY },
|
||||
{ "UA" , Bankswitch::Type::_UA },
|
||||
|
|
|
@ -44,8 +44,8 @@ class Bankswitch
|
|||
_CDF, _CM, _CTY, _CV, _DF, _DFSC, _DPC,
|
||||
_DPCP, _E0, _E7, _E78K, _EF, _EFSC, _F0,
|
||||
_F4, _F4SC, _F6, _F6SC, _F8, _F8SC, _FA,
|
||||
_FA2, _FC, _FE, _MDM, _SB, _TVBOY, _UA,
|
||||
_UASW, _WD, _WDSW, _X07,
|
||||
_FA2, _FC, _FE, _MDM, _MVC, _SB, _TVBOY,
|
||||
_UA, _UASW, _WD, _WDSW, _X07,
|
||||
#ifdef CUSTOM_ARM
|
||||
_CUSTOM,
|
||||
#endif
|
||||
|
|
|
@ -55,6 +55,7 @@
|
|||
#include "CartFC.hxx"
|
||||
#include "CartFE.hxx"
|
||||
#include "CartMDM.hxx"
|
||||
#include "CartMVC.hxx"
|
||||
#include "CartSB.hxx"
|
||||
#include "CartTVBoy.hxx"
|
||||
#include "CartUA.hxx"
|
||||
|
@ -197,6 +198,10 @@ unique_ptr<Cartridge> CartCreator::create(const FilesystemNode& file,
|
|||
Bankswitch::typeToName(type) + "'");
|
||||
break;
|
||||
|
||||
case Bankswitch::Type::_MVC:
|
||||
cartridge = make_unique<CartridgeMVC>(file.getPath(), size, md5, settings);
|
||||
break;
|
||||
|
||||
default:
|
||||
cartridge = createFromImage(image, size, detectedType, md5, settings);
|
||||
break;
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "Logger.hxx"
|
||||
|
||||
#include "CartDetector.hxx"
|
||||
#include "CartMVC.hxx"
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
Bankswitch::Type CartDetector::autodetectType(const ByteBuffer& image, size_t size)
|
||||
|
@ -242,6 +243,8 @@ Bankswitch::Type CartDetector::autodetectType(const ByteBuffer& image, size_t si
|
|||
type = Bankswitch::Type::_3EP;
|
||||
else if(isProbablyMDM(image, size))
|
||||
type = Bankswitch::Type::_MDM;
|
||||
else if(isProbablyMVC(image, size))
|
||||
type = Bankswitch::Type::_MVC;
|
||||
|
||||
// If we get here and autodetection failed, then we force '4K'
|
||||
if(type == Bankswitch::Type::_AUTO)
|
||||
|
@ -455,7 +458,7 @@ bool CartDetector::isProbablyCDF(const ByteBuffer& image, size_t size)
|
|||
// 0x10adab1e (LOADABLE) if needed for future improvement
|
||||
uInt8 cdf[] = { 'C', 'D', 'F' };
|
||||
uInt8 cdfjplus[] = { 'P', 'L', 'U', 'S', 'C', 'D', 'F', 'J' };
|
||||
return (searchForBytes(image, size, cdf, 3, 3) ||
|
||||
return (searchForBytes(image, size, cdf, 3, 3) ||
|
||||
searchForBytes(image, size, cdfjplus, 8, 1));
|
||||
}
|
||||
|
||||
|
@ -691,6 +694,38 @@ bool CartDetector::isProbablyMDM(const ByteBuffer& image, size_t size)
|
|||
return searchForBytes(image, std::min<size_t>(size, 8_KB), mdmc, 4);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
bool CartDetector::isProbablyMVC(const ByteBuffer& image, size_t size)
|
||||
{
|
||||
// MVC version 0
|
||||
uInt8 sig[] = { 'M', 'V', 'C', 0 };
|
||||
int sigSize = sizeof(sig);
|
||||
return searchForBytes(image, std::min<size_t>(size, sigSize+1), sig, sigSize);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
size_t CartDetector::isProbablyMVC(const FilesystemNode& rom)
|
||||
{
|
||||
constexpr size_t frameSize = 2 * CartridgeMVC::MVC_FIELD_PAD_SIZE;
|
||||
|
||||
if(Bankswitch::typeFromExtension(rom) == Bankswitch::Type::_MVC)
|
||||
return frameSize;
|
||||
|
||||
Serializer s(rom.getPath(), Serializer::Mode::ReadOnly);
|
||||
if(s)
|
||||
{
|
||||
if(s.size() < frameSize)
|
||||
return 0;
|
||||
|
||||
uInt8 image[frameSize];
|
||||
s.getByteArray(image, frameSize);
|
||||
|
||||
uInt8 sig[] = { 'M', 'V', 'C', 0 }; // MVC version 0
|
||||
return searchForBytes(image, frameSize, sig, 4) ? frameSize : 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
bool CartDetector::isProbablySB(const ByteBuffer& image, size_t size)
|
||||
{
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#define CARTRIDGE_DETECTOR_HXX
|
||||
|
||||
#include "Bankswitch.hxx"
|
||||
#include "FSNode.hxx"
|
||||
#include "bspf.hxx"
|
||||
|
||||
/**
|
||||
|
@ -40,6 +41,12 @@ class CartDetector
|
|||
*/
|
||||
static Bankswitch::Type autodetectType(const ByteBuffer& image, size_t size);
|
||||
|
||||
/**
|
||||
MVC cartridges are of arbitary large length
|
||||
Returns size of frame if stream is probably an MVC movie cartridge
|
||||
*/
|
||||
static size_t isProbablyMVC(const FilesystemNode& rom);
|
||||
|
||||
private:
|
||||
/**
|
||||
Search the image for the specified byte signature
|
||||
|
@ -189,6 +196,11 @@ class CartDetector
|
|||
*/
|
||||
static bool isProbablyMDM(const ByteBuffer& image, size_t size);
|
||||
|
||||
/**
|
||||
Returns true if the image is probably an MVC movie cartridge
|
||||
*/
|
||||
static bool isProbablyMVC(const ByteBuffer& image, size_t size);
|
||||
|
||||
/**
|
||||
Returns true if the image is probably a SB bankswitching cartridge
|
||||
*/
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,144 @@
|
|||
//============================================================================
|
||||
//
|
||||
// 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-2021 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 CARTRIDGEMVC_HXX
|
||||
#define CARTRIDGEMVC_HXX
|
||||
|
||||
class System;
|
||||
class MovieCart;
|
||||
|
||||
#include "bspf.hxx"
|
||||
#include "Cart.hxx"
|
||||
|
||||
/**
|
||||
Implementation of MovieCart.
|
||||
1K of memory is presented on the bus, but is repeated to fill the 4K image space.
|
||||
Contents are dynamically altered with streaming image and audio content as specific
|
||||
128-byte regions are entered.
|
||||
Original implementation: github.com/lodefmode/moviecart
|
||||
|
||||
@author Rob Bairos
|
||||
*/
|
||||
class CartridgeMVC : public Cartridge
|
||||
{
|
||||
public:
|
||||
static constexpr uInt32
|
||||
MVC_FIELD_SIZE = 2560, // round field to nearest 512 byte boundary
|
||||
MVC_FIELD_PAD_SIZE = 4096; // round to nearest 4K
|
||||
|
||||
public:
|
||||
/**
|
||||
Create a new cartridge using the specified image
|
||||
|
||||
@param path Path to the ROM image file
|
||||
@param size The size of the ROM image (<= 2048 bytes)
|
||||
@param md5 The md5sum of the ROM image
|
||||
@param settings A reference to the various settings (read-only)
|
||||
@param bsSize The size specified by the bankswitching scheme
|
||||
*/
|
||||
CartridgeMVC(const string& path, size_t size, const string& md5,
|
||||
const Settings& settings, size_t bsSize = 8_KB);
|
||||
~CartridgeMVC() override;
|
||||
|
||||
/**
|
||||
Reset device to its power-on state
|
||||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
Access the internal ROM image for this cartridge.
|
||||
|
||||
@param size Set to the size of the internal ROM image data
|
||||
@return A reference to the internal ROM image data
|
||||
*/
|
||||
const ByteBuffer& getImage(size_t& size) const override;
|
||||
|
||||
/**
|
||||
Patch the cartridge ROM.
|
||||
|
||||
@param address The ROM address to patch
|
||||
@param value The value to place into the address
|
||||
@return Success or failure of the patch operation
|
||||
*/
|
||||
bool patch(uInt16 address, uInt8 value) override;
|
||||
|
||||
/**
|
||||
Get the byte at the specified address.
|
||||
|
||||
@return The byte at the specified address
|
||||
*/
|
||||
uInt8 peek(uInt16 address) override;
|
||||
|
||||
/**
|
||||
Change the byte at the specified address to the given value
|
||||
|
||||
@param address The address where the value should be stored
|
||||
@param value The value to be stored at the address
|
||||
@return True if the poke changed the device address space, else false
|
||||
*/
|
||||
bool poke(uInt16 address, uInt8 value) override;
|
||||
|
||||
/**
|
||||
Get a descriptor for the device name (used in error checking).
|
||||
|
||||
@return The name of the object
|
||||
*/
|
||||
string name() const override { return "CartridgeMVC"; }
|
||||
|
||||
/**
|
||||
Save the current state of this cart to the given Serializer.
|
||||
|
||||
@param out The Serializer object to use
|
||||
@return False on any errors, else true
|
||||
*/
|
||||
bool save(Serializer& out) const override;
|
||||
|
||||
/**
|
||||
Load the current state of this cart from the given Serializer.
|
||||
|
||||
@param in The Serializer object to use
|
||||
@return False on any errors, else true
|
||||
*/
|
||||
bool load(Serializer& in) override;
|
||||
|
||||
private:
|
||||
// Currently not used:
|
||||
// Pointer to a dynamically allocated ROM image of the cartridge
|
||||
ByteBuffer myImage{nullptr};
|
||||
size_t mySize{0};
|
||||
|
||||
unique_ptr<MovieCart> myMovie;
|
||||
string myPath;
|
||||
|
||||
private:
|
||||
// Following constructors and assignment operators not supported
|
||||
CartridgeMVC() = delete;
|
||||
CartridgeMVC(const CartridgeMVC&) = delete;
|
||||
CartridgeMVC(CartridgeMVC&&) = delete;
|
||||
CartridgeMVC& operator=(const CartridgeMVC&) = delete;
|
||||
CartridgeMVC& operator=(CartridgeMVC&&) = delete;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
#include "FSNodeFactory.hxx"
|
||||
#include "FSNode.hxx"
|
||||
#include "CartDetector.hxx"
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
FilesystemNode::FilesystemNode(const AbstractFSNodePtr& realNode)
|
||||
|
@ -332,7 +333,7 @@ bool FilesystemNode::rename(const string& newfile)
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
size_t FilesystemNode::read(ByteBuffer& buffer) const
|
||||
size_t FilesystemNode::read(ByteBuffer& buffer, size_t size) const
|
||||
{
|
||||
size_t sizeRead = 0;
|
||||
|
||||
|
@ -341,7 +342,7 @@ size_t FilesystemNode::read(ByteBuffer& buffer) const
|
|||
throw runtime_error("File not found/readable");
|
||||
|
||||
// First let the private subclass attempt to open the file
|
||||
if (_realNode && (sizeRead = _realNode->read(buffer)) > 0)
|
||||
if (_realNode && (sizeRead = _realNode->read(buffer, size)) > 0)
|
||||
return sizeRead;
|
||||
|
||||
// Otherwise, the default behaviour is to read from a normal C++ ifstream
|
||||
|
@ -354,6 +355,8 @@ size_t FilesystemNode::read(ByteBuffer& buffer) const
|
|||
|
||||
if (sizeRead == 0)
|
||||
throw runtime_error("Zero-byte file");
|
||||
else if (size != 0)
|
||||
sizeRead = size;
|
||||
|
||||
buffer = make_unique<uInt8[]>(sizeRead);
|
||||
in.read(reinterpret_cast<char*>(buffer.get()), sizeRead);
|
||||
|
|
|
@ -244,12 +244,13 @@ class FilesystemNode
|
|||
* Read data (binary format) into the given buffer.
|
||||
*
|
||||
* @param buffer The buffer to contain the data (allocated in this method).
|
||||
* @param size The amount of data to read (0 means read all data).
|
||||
*
|
||||
* @return The number of bytes read (0 in the case of failure)
|
||||
* This method can throw exceptions, and should be used inside
|
||||
* a try-catch block.
|
||||
*/
|
||||
size_t read(ByteBuffer& buffer) const;
|
||||
size_t read(ByteBuffer& buffer, size_t size = 0) const;
|
||||
|
||||
/**
|
||||
* Read data (text format) into the given stream.
|
||||
|
@ -438,12 +439,13 @@ class AbstractFSNode
|
|||
* Read data (binary format) into the given buffer.
|
||||
*
|
||||
* @param buffer The buffer to contain the data (allocated in this method).
|
||||
* @param size The amount of data to read (0 means read all data).
|
||||
*
|
||||
* @return The number of bytes read (0 in the case of failure)
|
||||
* This method can throw exceptions, and should be used inside
|
||||
* a try-catch block.
|
||||
*/
|
||||
virtual size_t read(ByteBuffer& buffer) const { return 0; }
|
||||
virtual size_t read(ByteBuffer& buffer, size_t size) const { return 0; }
|
||||
|
||||
/**
|
||||
* Read data (text format) into the given stream.
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
#include "MD5.hxx"
|
||||
#include "Cart.hxx"
|
||||
#include "CartCreator.hxx"
|
||||
#include "CartDetector.hxx"
|
||||
#include "FrameBuffer.hxx"
|
||||
#include "TIASurface.hxx"
|
||||
#include "TIAConstants.hxx"
|
||||
|
@ -689,8 +690,16 @@ ByteBuffer OSystem::openROM(const FilesystemNode& rom, string& md5, size_t& size
|
|||
// but also adds a properties entry if the one for the ROM doesn't
|
||||
// contain a valid name
|
||||
|
||||
// First check if this is a 'streaming' ROM (one where we only read
|
||||
// a portion of the file)
|
||||
size_t sizeToRead = CartDetector::isProbablyMVC(rom);
|
||||
|
||||
// Next check if rom is a valid size
|
||||
// TODO: We should check if ROM is < Cart::maxSize(), but only
|
||||
// if it's not a ZIP file (that size should be higher; still TBD)
|
||||
|
||||
ByteBuffer image;
|
||||
if((size = rom.read(image)) == 0)
|
||||
if((size = rom.read(image, sizeToRead)) == 0)
|
||||
return nullptr;
|
||||
|
||||
// If we get to this point, we know we have a valid file to open
|
||||
|
|
|
@ -77,6 +77,14 @@ Serializer::Serializer()
|
|||
}
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Serializer::setPosition(size_t pos)
|
||||
{
|
||||
myStream->clear();
|
||||
myStream->seekg(pos);
|
||||
myStream->seekp(pos);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Serializer::rewind()
|
||||
{
|
||||
|
@ -86,11 +94,15 @@ void Serializer::rewind()
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
size_t Serializer::size() const
|
||||
size_t Serializer::size()
|
||||
{
|
||||
myStream->seekp(0, std::ios::end);
|
||||
std::streampos oldPos = myStream->tellp();
|
||||
|
||||
return myStream->tellp();
|
||||
myStream->seekp(0, std::ios::end);
|
||||
size_t s = myStream->tellp();
|
||||
setPosition(oldPos);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
|
|
@ -59,15 +59,20 @@ class Serializer
|
|||
*/
|
||||
explicit operator bool() const { return myStream != nullptr; }
|
||||
|
||||
/**
|
||||
Sets the read/write location to the given offset in the stream.
|
||||
*/
|
||||
void setPosition(size_t pos);
|
||||
|
||||
/**
|
||||
Resets the read/write location to the beginning of the stream.
|
||||
*/
|
||||
void rewind();
|
||||
|
||||
/**
|
||||
Returns the current write pointer location.
|
||||
Returns the current total size of the stream.
|
||||
*/
|
||||
size_t size() const;
|
||||
size_t size();
|
||||
|
||||
/**
|
||||
Reads a byte value (unsigned 8-bit) from the current input stream.
|
||||
|
@ -220,13 +225,6 @@ class Serializer
|
|||
unique_ptr<iostream> myStream;
|
||||
|
||||
static constexpr uInt8 TruePattern = 0xfe, FalsePattern = 0x01;
|
||||
|
||||
private:
|
||||
// Following constructors and assignment operators not supported
|
||||
Serializer(const Serializer&) = delete;
|
||||
Serializer(Serializer&&) = delete;
|
||||
Serializer& operator=(const Serializer&) = delete;
|
||||
Serializer& operator=(Serializer&&) = delete;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -48,6 +48,7 @@ MODULE_OBJS := \
|
|||
src/emucore/CartFC.o \
|
||||
src/emucore/CartFE.o \
|
||||
src/emucore/CartMDM.o \
|
||||
src/emucore/CartMVC.o \
|
||||
src/emucore/CartSB.o \
|
||||
src/emucore/CartTVBoy.o \
|
||||
src/emucore/CartUA.o \
|
||||
|
|
|
@ -92,7 +92,7 @@ AbstractFSNodePtr FilesystemNodeLIBRETRO::getParent() const
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
size_t FilesystemNodeLIBRETRO::read(ByteBuffer& image) const
|
||||
size_t FilesystemNodeLIBRETRO::read(ByteBuffer& image, size_t) const
|
||||
{
|
||||
image = make_unique<uInt8[]>(Cartridge::maxSize());
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ class FilesystemNodeLIBRETRO : public AbstractFSNode
|
|||
bool getChildren(AbstractFSList& list, ListMode mode) const override;
|
||||
AbstractFSNodePtr getParent() const override;
|
||||
|
||||
size_t read(ByteBuffer& image) const override;
|
||||
size_t read(ByteBuffer& image, size_t) const override;
|
||||
|
||||
protected:
|
||||
string _name;
|
||||
|
|
|
@ -86,6 +86,7 @@ SOURCES_CXX := \
|
|||
$(CORE_DIR)/emucore/CartFC.cxx \
|
||||
$(CORE_DIR)/emucore/CartFE.cxx \
|
||||
$(CORE_DIR)/emucore/CartMDM.cxx \
|
||||
$(CORE_DIR)/emucore/CartMVC.cxx \
|
||||
$(CORE_DIR)/emucore/CartMNetwork.cxx \
|
||||
$(CORE_DIR)/emucore/CartSB.cxx \
|
||||
$(CORE_DIR)/emucore/CartTVBoy.cxx \
|
||||
|
|
|
@ -455,6 +455,8 @@
|
|||
DC8C1BB114B25DE7006440EE /* MindLink.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC8C1BAB14B25DE7006440EE /* MindLink.cxx */; };
|
||||
DC8C1BB214B25DE7006440EE /* MindLink.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC8C1BAC14B25DE7006440EE /* MindLink.hxx */; };
|
||||
DC8CF9BD17C15A27004B533D /* ConsoleMediumFont.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC8CF9BC17C15A27004B533D /* ConsoleMediumFont.hxx */; };
|
||||
DC911C7526333B9200666AC0 /* CartMVC.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC911C7326333B9100666AC0 /* CartMVC.cxx */; };
|
||||
DC911C7626333B9200666AC0 /* CartMVC.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC911C7426333B9100666AC0 /* CartMVC.hxx */; };
|
||||
DC932D440F278A5200FEFEFC /* DefProps.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC932D3F0F278A5200FEFEFC /* DefProps.hxx */; };
|
||||
DC932D450F278A5200FEFEFC /* Serializable.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC932D400F278A5200FEFEFC /* Serializable.hxx */; };
|
||||
DC932D460F278A5200FEFEFC /* SerialPort.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC932D410F278A5200FEFEFC /* SerialPort.hxx */; };
|
||||
|
@ -1266,6 +1268,8 @@
|
|||
DC8C1BAB14B25DE7006440EE /* MindLink.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MindLink.cxx; sourceTree = "<group>"; };
|
||||
DC8C1BAC14B25DE7006440EE /* MindLink.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = MindLink.hxx; sourceTree = "<group>"; };
|
||||
DC8CF9BC17C15A27004B533D /* ConsoleMediumFont.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ConsoleMediumFont.hxx; sourceTree = "<group>"; };
|
||||
DC911C7326333B9100666AC0 /* CartMVC.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CartMVC.cxx; sourceTree = "<group>"; };
|
||||
DC911C7426333B9100666AC0 /* CartMVC.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CartMVC.hxx; sourceTree = "<group>"; };
|
||||
DC932D3F0F278A5200FEFEFC /* DefProps.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = DefProps.hxx; sourceTree = "<group>"; };
|
||||
DC932D400F278A5200FEFEFC /* Serializable.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Serializable.hxx; sourceTree = "<group>"; };
|
||||
DC932D410F278A5200FEFEFC /* SerialPort.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = SerialPort.hxx; sourceTree = "<group>"; };
|
||||
|
@ -2056,6 +2060,8 @@
|
|||
DC6A18FB19B3E67A00DEB242 /* CartMDM.hxx */,
|
||||
DC71EA9B1FDA06D2008827CB /* CartMNetwork.cxx */,
|
||||
DC71EA9C1FDA06D2008827CB /* CartMNetwork.hxx */,
|
||||
DC911C7326333B9100666AC0 /* CartMVC.cxx */,
|
||||
DC911C7426333B9100666AC0 /* CartMVC.hxx */,
|
||||
DC0984830D3985160073C852 /* CartSB.cxx */,
|
||||
DC0984840D3985160073C852 /* CartSB.hxx */,
|
||||
DC84397A247B294D00C6A4FC /* CartTVBoy.cxx */,
|
||||
|
@ -2936,6 +2942,7 @@
|
|||
DC3EE8631E2C0E6D00905161 /* inffast.h in Headers */,
|
||||
DC676A501729A0B000E4E73D /* CartE0Widget.hxx in Headers */,
|
||||
DC676A521729A0B000E4E73D /* CartE7Widget.hxx in Headers */,
|
||||
DC911C7626333B9200666AC0 /* CartMVC.hxx in Headers */,
|
||||
DC676A541729A0B000E4E73D /* CartFA2Widget.hxx in Headers */,
|
||||
DC676A561729A0B000E4E73D /* CartFEWidget.hxx in Headers */,
|
||||
DC676A5A1729A0B000E4E73D /* CartSBWidget.hxx in Headers */,
|
||||
|
@ -3410,6 +3417,7 @@
|
|||
DCAACAFE188D631500A4D282 /* CartDFSC.cxx in Sources */,
|
||||
DCAACB0E188D636F00A4D282 /* Cart4KSCWidget.cxx in Sources */,
|
||||
DCB60AD02543100900A5C1D2 /* FBBackendSDL2.cxx in Sources */,
|
||||
DC911C7526333B9200666AC0 /* CartMVC.cxx in Sources */,
|
||||
DCAACB10188D636F00A4D282 /* CartBFSCWidget.cxx in Sources */,
|
||||
DCC2FDF6255EB82500FA5E81 /* ToolTip.cxx in Sources */,
|
||||
DCAACB12188D636F00A4D282 /* CartBFWidget.cxx in Sources */,
|
||||
|
|
|
@ -759,6 +759,7 @@
|
|||
<ClCompile Include="..\emucore\CartMDM.cxx" />
|
||||
<ClCompile Include="..\emucore\CartMNetwork.cxx" />
|
||||
<ClCompile Include="..\emucore\CartE78K.cxx" />
|
||||
<ClCompile Include="..\emucore\CartMVC.cxx" />
|
||||
<ClCompile Include="..\emucore\CartTVBoy.cxx" />
|
||||
<ClCompile Include="..\emucore\CartWD.cxx" />
|
||||
<ClCompile Include="..\emucore\CompuMate.cxx" />
|
||||
|
@ -1829,6 +1830,7 @@
|
|||
<ClInclude Include="..\emucore\CartMDM.hxx" />
|
||||
<ClInclude Include="..\emucore\CartMNetwork.hxx" />
|
||||
<ClInclude Include="..\emucore\CartE78K.hxx" />
|
||||
<ClInclude Include="..\emucore\CartMVC.hxx" />
|
||||
<ClInclude Include="..\emucore\CartTVBoy.hxx" />
|
||||
<ClInclude Include="..\emucore\CartWD.hxx" />
|
||||
<ClInclude Include="..\emucore\CompuMate.hxx" />
|
||||
|
|
|
@ -1110,6 +1110,9 @@
|
|||
<ClCompile Include="..\common\repository\CompositeKeyValueRepository.cxx">
|
||||
<Filter>Source Files\repository</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\emucore\CartMVC.cxx">
|
||||
<Filter>Source Files\emucore</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\emucore\CartARM.cxx">
|
||||
<Filter>Source Files\emucore</Filter>
|
||||
</ClCompile>
|
||||
|
@ -2288,6 +2291,9 @@
|
|||
<ClInclude Include="..\emucore\OSystemStandalone.hxx">
|
||||
<Filter>Header Files\emucore</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\emucore\CartMVC.hxx">
|
||||
<Filter>Header Files\emucore</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\emucore\CartARM.hxx">
|
||||
<Filter>Header Files\emucore</Filter>
|
||||
</ClInclude>
|
||||
|
@ -2306,4 +2312,4 @@
|
|||
<Filter>Resource Files</Filter>
|
||||
</ResourceCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue