Merge pull request #437 from stella-emu/sqlite

Sqlite settings storage
This commit is contained in:
Christian Speckner 2019-04-30 22:54:05 +02:00 committed by GitHub
commit c9da79aa55
138 changed files with 787 additions and 728 deletions

51
configure vendored
View File

@ -21,6 +21,7 @@ _build_joystick=yes
_build_cheats=yes _build_cheats=yes
_build_png=yes _build_png=yes
_build_zip=yes _build_zip=yes
_build_sqlite=no
_build_static=no _build_static=no
_build_profile=no _build_profile=no
_build_debug=no _build_debug=no
@ -201,6 +202,8 @@ Optional Features:
--disable-png --disable-png
--enable-zip enable/disable ZIP file support [enabled] --enable-zip enable/disable ZIP file support [enabled]
--disable-zip --disable-zip
--enable-sqlite enable SQLite for storing settings and preferences [disabled]
--disable-sqlite
--enable-windowed enable/disable windowed rendering modes [enabled] --enable-windowed enable/disable windowed rendering modes [enabled]
--disable-windowed --disable-windowed
--enable-shared build shared binary [enabled] --enable-shared build shared binary [enabled]
@ -215,6 +218,7 @@ Optional Libraries:
--with-sdl-prefix=DIR Prefix where the sdl2-config script is installed (optional) --with-sdl-prefix=DIR Prefix where the sdl2-config script is installed (optional)
--with-libpng-prefix=DIR Prefix where libpng is installed (optional) --with-libpng-prefix=DIR Prefix where libpng is installed (optional)
--with-zlib-prefix=DIR Prefix where zlib is installed (optional) --with-zlib-prefix=DIR Prefix where zlib is installed (optional)
--with-sqlite-prefix=DIR PREFIX where sqlite is installed (optional)
Some influential environment variables: Some influential environment variables:
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
@ -243,6 +247,8 @@ for ac_option in $@; do
--disable-png) _build_png=no ;; --disable-png) _build_png=no ;;
--enable-zip) _build_zip=yes ;; --enable-zip) _build_zip=yes ;;
--disable-zip) _build_zip=no ;; --disable-zip) _build_zip=no ;;
--enable-sqlite) _build_sqlite=yes ;;
--disable-sqlite) _build_sqlite=no ;;
--enable-windowed) _build_windowed=yes ;; --enable-windowed) _build_windowed=yes ;;
--disable-windowed) _build_windowed=no ;; --disable-windowed) _build_windowed=no ;;
--enable-shared) _build_static=no ;; --enable-shared) _build_static=no ;;
@ -265,6 +271,11 @@ for ac_option in $@; do
_prefix=`echo $ac_option | cut -d '=' -f 2` _prefix=`echo $ac_option | cut -d '=' -f 2`
ZLIB_CFLAGS="-I$_prefix/include" ZLIB_CFLAGS="-I$_prefix/include"
ZLIB_LIBS="-L$_prefix/lib" ZLIB_LIBS="-L$_prefix/lib"
;;
--with-sqlite-prefix=*)
_prefix=`echo $ac_option | cut -d '=' -f 2`
SQLITE_CFLAGS="-I$_prefix/include"
SQLITE_LIBS="-L$_prefix/lib"
;; ;;
--host=*) --host=*)
_host=`echo $ac_option | cut -d '=' -f 2` _host=`echo $ac_option | cut -d '=' -f 2`
@ -640,6 +651,30 @@ else
_build_png=no _build_png=no
fi fi
#
# Check for SQLite
#
echocheck "SQLite"
if test "$_build_sqlite" = yes ; then
_sqlite=no
cat > $TMPC << EOF
#include <stdio.h>
#include <sqlite3.h>
int main(void) { printf("%s\n", SQLITE_VERSION); }
EOF
cc_check $LDFLAGS $CXXFLAGS $SQLITE_CFLAGS $SQLITE_LIBS -lsqlite3 && _sqlite=yes
if test "$_sqlite" = yes ; then
echo "$_sqlite"
else
echo "disabled"
_build_sqlite=no
fi
else
echo "disabled"
_build_sqlite=no
fi
# #
# figure out installation directories # figure out installation directories
# #
@ -699,6 +734,14 @@ else
echo echo
fi fi
if test "$_build_sqlite" = yes ; then
echo_n " SQLite enabled"
echo
else
echo_n " SQLite disabled"
echo
fi
if test "$_build_windowed" = "yes" ; then if test "$_build_windowed" = "yes" ; then
echo_n " Windowed rendering modes enabled" echo_n " Windowed rendering modes enabled"
echo echo
@ -752,6 +795,7 @@ YACC="$SRC/yacc"
CHEAT="$SRC/cheat" CHEAT="$SRC/cheat"
LIBPNG="$SRC/libpng" LIBPNG="$SRC/libpng"
ZLIB="$SRC/zlib" ZLIB="$SRC/zlib"
SQLITE="$SRC/common/repository/sqlite"
INCLUDES="-I$CORE -I$COMMON -I$TV -I$GUI -I$TIA -I$TIA_FRAME_MANAGER" INCLUDES="-I$CORE -I$COMMON -I$TV -I$GUI -I$TIA -I$TIA_FRAME_MANAGER"
@ -828,6 +872,13 @@ if test "$_build_png" = yes ; then
fi fi
fi fi
if test "$_build_sqlite" = yes; then
DEFINES="$DEFINES -DSQLITE_SUPPORT"
MODULES="$MODULES $SQLITE"
INCLUDES="$INCLUDES -I$SQLITE"
LIBS="$LIBS -lsqlite3"
fi
if test "$_build_zip" = yes ; then if test "$_build_zip" = yes ; then
DEFINES="$DEFINES -DZIP_SUPPORT" DEFINES="$DEFINES -DZIP_SUPPORT"
if test "$_zlib" = yes ; then if test "$_zlib" = yes ; then

View File

@ -184,7 +184,7 @@ bool FilesystemNodeZIP::getChildren(AbstractFSList& myList, ListMode mode,
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uInt32 FilesystemNodeZIP::read(BytePtr& image) const uInt32 FilesystemNodeZIP::read(ByteBuffer& image) const
{ {
switch(_error) switch(_error)
{ {

View File

@ -65,7 +65,7 @@ class FilesystemNodeZIP : public AbstractFSNode
bool getChildren(AbstractFSList& list, ListMode mode, bool hidden) const override; bool getChildren(AbstractFSList& list, ListMode mode, bool hidden) const override;
AbstractFSNodePtr getParent() const override; AbstractFSNodePtr getParent() const override;
uInt32 read(BytePtr& image) const override; uInt32 read(ByteBuffer& image) const override;
private: private:
FilesystemNodeZIP(const string& zipfile, const string& virtualpath, FilesystemNodeZIP(const string& zipfile, const string& virtualpath,

View File

@ -32,22 +32,18 @@
#include "SettingsR77.hxx" #include "SettingsR77.hxx"
#include "OSystemR77.hxx" #include "OSystemR77.hxx"
#else #else
#include "SettingsUNIX.hxx"
#include "OSystemUNIX.hxx" #include "OSystemUNIX.hxx"
#endif #endif
#elif defined(BSPF_WINDOWS) #elif defined(BSPF_WINDOWS)
#include "SerialPortWINDOWS.hxx" #include "SerialPortWINDOWS.hxx"
#include "SettingsWINDOWS.hxx"
#include "OSystemWINDOWS.hxx" #include "OSystemWINDOWS.hxx"
#elif defined(BSPF_MACOS) #elif defined(BSPF_MACOS)
#include "SerialPortMACOS.hxx" #include "SerialPortMACOS.hxx"
#include "SettingsMACOS.hxx"
#include "OSystemMACOS.hxx" #include "OSystemMACOS.hxx"
extern "C" { extern "C" {
int stellaMain(int argc, char* argv[]); int stellaMain(int argc, char* argv[]);
} }
#elif defined(__LIB_RETRO__) #elif defined(__LIB_RETRO__)
#include "SettingsLIBRETRO.hxx"
#include "OSystemLIBRETRO.hxx" #include "OSystemLIBRETRO.hxx"
#else #else
#error Unsupported platform! #error Unsupported platform!
@ -112,20 +108,10 @@ class MediaFactory
static unique_ptr<Settings> createSettings() static unique_ptr<Settings> createSettings()
{ {
#if defined(BSPF_UNIX) #ifdef RETRON77
#if defined(RETRON77) return make_unique<SettingsR77>();
return make_unique<SettingsR77>();
#else
return make_unique<SettingsUNIX>();
#endif
#elif defined(BSPF_WINDOWS)
return make_unique<SettingsWINDOWS>();
#elif defined(BSPF_MACOS)
return make_unique<SettingsMACOS>();
#elif defined(__LIB_RETRO__)
return make_unique<SettingsLIBRETRO>();
#else #else
#error Unsupported platform for Settings! return make_unique<Settings>();
#endif #endif
} }

View File

@ -137,7 +137,7 @@ class PNGLibrary
// The following data remains between invocations of allocateStorage, // The following data remains between invocations of allocateStorage,
// and is only changed when absolutely necessary. // and is only changed when absolutely necessary.
struct ReadInfoType { struct ReadInfoType {
BytePtr buffer; ByteBuffer buffer;
unique_ptr<png_bytep[]> row_pointers; unique_ptr<png_bytep[]> row_pointers;
png_uint_32 width, height, pitch; png_uint_32 width, height, pitch;
uInt32 buffer_size, row_size; uInt32 buffer_size, row_size;

View File

@ -105,7 +105,7 @@ const string& ZipHandler::next()
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uInt64 ZipHandler::decompress(BytePtr& image) uInt64 ZipHandler::decompress(ByteBuffer& image)
{ {
if(myZip && myZip->myHeader.uncompressedLength > 0) if(myZip && myZip->myHeader.uncompressedLength > 0)
{ {
@ -269,7 +269,7 @@ void ZipHandler::ZipFile::close()
void ZipHandler::ZipFile::readEcd() void ZipHandler::ZipFile::readEcd()
{ {
uInt64 buflen = 1024; uInt64 buflen = 1024;
BytePtr buffer; ByteBuffer buffer;
// We may need multiple tries // We may need multiple tries
while(buflen < 65536) while(buflen < 65536)
@ -323,7 +323,7 @@ void ZipHandler::ZipFile::readEcd()
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool ZipHandler::ZipFile::readStream(BytePtr& out, uInt64 offset, bool ZipHandler::ZipFile::readStream(ByteBuffer& out, uInt64 offset,
uInt64 length, uInt64& actual) uInt64 length, uInt64& actual)
{ {
try try
@ -367,7 +367,7 @@ const ZipHandler::ZipHeader* const ZipHandler::ZipFile::nextFile()
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void ZipHandler::ZipFile::decompress(BytePtr& out, uInt64 length) void ZipHandler::ZipFile::decompress(ByteBuffer& out, uInt64 length)
{ {
// If we don't have enough buffer, error // If we don't have enough buffer, error
if(length < myHeader.uncompressedLength) if(length < myHeader.uncompressedLength)
@ -434,7 +434,7 @@ uInt64 ZipHandler::ZipFile::getCompressedDataOffset()
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void ZipHandler::ZipFile::decompressDataType0( void ZipHandler::ZipFile::decompressDataType0(
uInt64 offset, BytePtr& out, uInt64 length) uInt64 offset, ByteBuffer& out, uInt64 length)
{ {
// The data is uncompressed; just read it // The data is uncompressed; just read it
uInt64 read_length = 0; uInt64 read_length = 0;
@ -447,7 +447,7 @@ void ZipHandler::ZipFile::decompressDataType0(
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void ZipHandler::ZipFile::decompressDataType8( void ZipHandler::ZipFile::decompressDataType8(
uInt64 offset, BytePtr& out, uInt64 length) uInt64 offset, ByteBuffer& out, uInt64 length)
{ {
uInt64 input_remaining = myHeader.compressedLength; uInt64 input_remaining = myHeader.compressedLength;

View File

@ -47,7 +47,7 @@ class ZipHandler
// Decompress the currently selected file and return its length // Decompress the currently selected file and return its length
// An exception will be thrown on any errors // An exception will be thrown on any errors
uInt64 decompress(BytePtr& image); uInt64 decompress(ByteBuffer& image);
// Answer the number of ROM files (with a valid extension) found // Answer the number of ROM files (with a valid extension) found
uInt16 romFiles() const { return myZip ? myZip->myRomfiles : 0; } uInt16 romFiles() const { return myZip ? myZip->myRomfiles : 0; }
@ -112,11 +112,11 @@ class ZipHandler
ZipEcd myEcd; // end of central directory ZipEcd myEcd; // end of central directory
BytePtr myCd; // central directory raw data ByteBuffer myCd; // central directory raw data
uInt64 myCdPos; // position in central directory uInt64 myCdPos; // position in central directory
ZipHeader myHeader; // current file header ZipHeader myHeader; // current file header
BytePtr myBuffer; // buffer for decompression ByteBuffer myBuffer; // buffer for decompression
/** Constructor */ /** Constructor */
explicit ZipFile(const string& filename); explicit ZipFile(const string& filename);
@ -134,22 +134,22 @@ class ZipHandler
void readEcd(); void readEcd();
/** Read data from stream */ /** Read data from stream */
bool readStream(BytePtr& out, uInt64 offset, uInt64 length, uInt64& actual); bool readStream(ByteBuffer& out, uInt64 offset, uInt64 length, uInt64& actual);
/** Return the next entry in the ZIP file */ /** Return the next entry in the ZIP file */
const ZipHeader* const nextFile(); const ZipHeader* const nextFile();
/** Decompress the most recently found file in the ZIP into target buffer */ /** Decompress the most recently found file in the ZIP into target buffer */
void decompress(BytePtr& out, uInt64 length); void decompress(ByteBuffer& out, uInt64 length);
/** Return the offset of the compressed data */ /** Return the offset of the compressed data */
uInt64 getCompressedDataOffset(); uInt64 getCompressedDataOffset();
/** Decompress type 0 data (which is uncompressed) */ /** Decompress type 0 data (which is uncompressed) */
void decompressDataType0(uInt64 offset, BytePtr& out, uInt64 length); void decompressDataType0(uInt64 offset, ByteBuffer& out, uInt64 length);
/** Decompress type 8 data (which is deflated) */ /** Decompress type 8 data (which is deflated) */
void decompressDataType8(uInt64 offset, BytePtr& out, uInt64 length); void decompressDataType8(uInt64 offset, ByteBuffer& out, uInt64 length);
}; };
using ZipFilePtr = unique_ptr<ZipFile>; using ZipFilePtr = unique_ptr<ZipFile>;

View File

@ -83,7 +83,7 @@ using BoolArray = std::vector<bool>;
using ByteArray = std::vector<uInt8>; using ByteArray = std::vector<uInt8>;
using ShortArray = std::vector<uInt16>; using ShortArray = std::vector<uInt16>;
using StringList = std::vector<std::string>; using StringList = std::vector<std::string>;
using BytePtr = std::unique_ptr<uInt8[]>; using ByteBuffer = std::unique_ptr<uInt8[]>;
static const string EmptyString(""); static const string EmptyString("");

View File

@ -21,7 +21,8 @@ MODULE_OBJS := \
src/common/AudioSettings.o \ src/common/AudioSettings.o \
src/common/FpsMeter.o \ src/common/FpsMeter.o \
src/common/ThreadDebugging.o \ src/common/ThreadDebugging.o \
src/common/StaggeredLogger.o src/common/StaggeredLogger.o \
src/common/repository/KeyValueRepositoryConfigfile.o
MODULE_DIRS += \ MODULE_DIRS += \
src/common src/common

View File

@ -15,10 +15,23 @@
// this file, and for a DISCLAIMER OF ALL WARRANTIES. // this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================ //============================================================================
#include "SettingsWINDOWS.hxx" #ifndef KEY_VALUE_REPOSITORY_HXX
#define KEY_VALUE_REPOSITORY_HXX
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #include <map>
SettingsWINDOWS::SettingsWINDOWS()
: Settings() #include "Variant.hxx"
#include "bspf.hxx"
class KeyValueRepository
{ {
} public:
virtual ~KeyValueRepository() = default;
virtual std::map<string, Variant> load() = 0;
virtual void save(const std::map<string, Variant>& values) = 0;
};
#endif // KEY_VALUE_REPOSITORY_HXX

View File

@ -0,0 +1,107 @@
//============================================================================
//
// 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 "KeyValueRepositoryConfigfile.hxx"
namespace {
string trim(const string& str)
{
string::size_type first = str.find_first_not_of(' ');
return (first == string::npos) ? EmptyString :
str.substr(first, str.find_last_not_of(' ')-first+1);
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyValueRepositoryConfigfile::KeyValueRepositoryConfigfile(const string& filename)
: myFilename(filename)
{}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
std::map<string, Variant> KeyValueRepositoryConfigfile::load()
{
std::map<string, Variant> values;
string line, key, value;
string::size_type equalPos, garbage;
ifstream in(myFilename);
if(!in || !in.is_open()) {
// FIXME - make logger available everywhere
cout << "ERROR: Couldn't load from settings file " << myFilename << endl;
return values;
}
while(getline(in, line))
{
// Strip all whitespace and tabs from the line
while((garbage = line.find("\t")) != string::npos)
line.erase(garbage, 1);
// Ignore commented and empty lines
if((line.length() == 0) || (line[0] == ';'))
continue;
// Search for the equal sign and discard the line if its not found
if((equalPos = line.find("=")) == string::npos)
continue;
// Split the line into key/value pairs and trim any whitespace
key = trim(line.substr(0, equalPos));
value = trim(line.substr(equalPos + 1, line.length() - key.length() - 1));
// Skip absent key
if(key.length() == 0)
continue;
values[key] = value;
}
return values;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void KeyValueRepositoryConfigfile::save(const std::map<string, Variant>& values)
{
ofstream out(myFilename);
if(!out || !out.is_open()) {
// FIXME - make logger available everywhere
cout << "ERROR: Couldn't save to settings file " << myFilename << endl;
return;
}
out << "; Stella configuration file" << endl
<< ";" << endl
<< "; Lines starting with ';' are comments and are ignored." << endl
<< "; Spaces and tabs are ignored." << endl
<< ";" << endl
<< "; Format MUST be as follows:" << endl
<< "; command = value" << endl
<< ";" << endl
<< "; Commands are the same as those specified on the commandline," << endl
<< "; without the '-' character." << endl
<< ";" << endl
<< "; Values are the same as those allowed on the commandline." << endl
<< "; Boolean values are specified as 1 (or true) and 0 (or false)" << endl
<< ";" << endl;
// Write out each of the key and value pairs
for(const auto& pair: values)
out << pair.first << " = " << pair.second << endl;
}

View File

@ -15,23 +15,24 @@
// this file, and for a DISCLAIMER OF ALL WARRANTIES. // this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================ //============================================================================
#import <Cocoa/Cocoa.h> #ifndef KEY_VALUE_REPOSITORY_CONFIGFILE_HXX
#define KEY_VALUE_REPOSITORY_CONFIGFILE_HXX
void prefsSetString(const char* key, const char* value); #include "KeyValueRepository.hxx"
void prefsGetString(const char* key, char* value, int size);
void prefsSave(void);
/** class KeyValueRepositoryConfigfile : public KeyValueRepository
Preferences class and support functions for the macOS {
SDL2 port of Stella. public:
@author Mark Grebe <atarimac@cox.net> KeyValueRepositoryConfigfile(const string& filename);
*/
@interface Preferences : NSObject
+ (Preferences *)sharedInstance; virtual std::map<string, Variant> load();
- (void)setString:(const char *)key : (const char *)value;
- (void)getString:(const char *)key : (char *)value : (int)size;
- (void)save;
@end virtual void save(const std::map<string, Variant>& values);
private:
const string& myFilename;
};
#endif // KEY_VALUE_REPOSITORY_CONFIGFILE_HXX

View File

@ -15,10 +15,20 @@
// this file, and for a DISCLAIMER OF ALL WARRANTIES. // this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================ //============================================================================
#include "SettingsUNIX.hxx" #ifndef KEY_VALUE_REPOSITORY_NOOP_HXX
#define KEY_VALUE_REPOSITORY_NOOP_HXX
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #include "KeyValueRepository.hxx"
SettingsUNIX::SettingsUNIX()
: Settings() class KeyValueRepositoryNoop : public KeyValueRepository
{ {
} public:
virtual std::map<string, Variant> load() {
return std::map<string, Variant>();
}
virtual void save(const std::map<string, Variant>& values) {}
};
#endif // KEY_VALUE_REPOSITORY_NOOP_HXX

View File

@ -0,0 +1,168 @@
//============================================================================
//
// 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 <sqlite3.h>
#include <cstdio>
#include "KeyValueRepositorySqlite.hxx"
#include "bspf.hxx"
#ifdef BSPF_WINDOWS
#define SEPARATOR "\"
#else
#define SEPARATOR "/"
#endif
namespace {
struct SqliteError {
SqliteError(const string _message) : message(_message) {}
const string message;
};
class Statement {
public:
Statement(sqlite3* handle, string sql) : myStmt(nullptr)
{
if (sqlite3_prepare_v2(handle, sql.c_str(), -1, &myStmt, nullptr) != SQLITE_OK)
throw SqliteError(sqlite3_errmsg(handle));
}
~Statement()
{
if (myStmt) sqlite3_finalize(myStmt);
}
operator sqlite3_stmt*() const { return myStmt; }
private:
sqlite3_stmt* myStmt;
private:
Statement() = delete;
Statement(const Statement&) = delete;
Statement(Statement&&) = delete;
Statement& operator=(const Statement&) = delete;
Statement& operator=(Statement&&) = delete;
};
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyValueRepositorySqlite::KeyValueRepositorySqlite(
const string& databaseDirectory,
const string& databaseName
) : myDatabaseFile(databaseDirectory + SEPARATOR + databaseName + ".sqlite3"),
myIsFailed(false),
myDbHandle(nullptr)
{}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyValueRepositorySqlite::~KeyValueRepositorySqlite()
{
if (myDbHandle) sqlite3_close(myDbHandle);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
std::map<string, Variant> KeyValueRepositorySqlite::load()
{
std::map<string, Variant> values;
if (myIsFailed) return values;
try {
initializeDb();
Statement stmt(myDbHandle, "SELECT `key`, `VALUE` FROM `values`");
while (sqlite3_step(stmt) == SQLITE_ROW)
values[reinterpret_cast<const char*>(sqlite3_column_text(stmt, 0))] =
reinterpret_cast<const char*>(sqlite3_column_text(stmt, 1));
}
catch (SqliteError err) {
cout << "failed to load from sqlite DB " << myDatabaseFile << ": " << err.message << endl;
}
return values;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void KeyValueRepositorySqlite::save(const std::map<string, Variant>& values)
{
if (myIsFailed) return;
try {
initializeDb();
Statement stmt(myDbHandle, "INSERT OR REPLACE INTO `values` VALUES (?, ?)");
if (sqlite3_exec(myDbHandle, "BEGIN TRANSACTION", nullptr, nullptr, nullptr) != SQLITE_OK)
throw SqliteError(sqlite3_errmsg(myDbHandle));
for (const auto& pair: values) {
sqlite3_bind_text(stmt, 1, pair.first.c_str(), -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 2, pair.second.toCString(), -1, SQLITE_STATIC);
sqlite3_step(stmt);
if (sqlite3_reset(stmt) != SQLITE_OK) throw SqliteError(sqlite3_errmsg(myDbHandle));
}
if (sqlite3_exec(myDbHandle, "COMMIT", nullptr, nullptr, nullptr) != SQLITE_OK)
throw SqliteError(sqlite3_errmsg(myDbHandle));
}
catch (SqliteError err) {
cout << "failed to write to sqlite DB " << myDatabaseFile << ": " << err.message << endl;
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void KeyValueRepositorySqlite::initializeDb()
{
if (myIsFailed || myDbHandle) return;
bool dbInitialized = false;
for (int tries = 1; tries < 3 && !dbInitialized; tries++) {
dbInitialized = (sqlite3_open(myDatabaseFile.c_str(), &myDbHandle) == SQLITE_OK);
dbInitialized = dbInitialized && (sqlite3_exec(
myDbHandle,
"CREATE TABLE IF NOT EXISTS `values` (`key` TEXT PRIMARY KEY, `value` TEXT) WITHOUT ROWID",
nullptr, nullptr, nullptr
) == SQLITE_OK);
if (!dbInitialized && tries == 1) {
cout << "sqlite DB " << myDatabaseFile << " seems to be corrupt, removing and retrying..." << endl;
remove(myDatabaseFile.c_str());
}
}
myIsFailed = !dbInitialized;
if (myIsFailed) {
if (myDbHandle) {
string emsg = sqlite3_errmsg(myDbHandle);
sqlite3_close(myDbHandle);
myDbHandle = nullptr;
throw SqliteError(emsg);
}
throw SqliteError("unable to initialize sqlite DB " + myDatabaseFile);
};
}

View File

@ -15,28 +15,37 @@
// this file, and for a DISCLAIMER OF ALL WARRANTIES. // this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================ //============================================================================
#ifndef SETTINGS_WINDOWS_HXX #ifndef KEY_VALUE_REPOSITORY_SQLITE_HXX
#define SETTINGS_WINDOWS_HXX #define KEY_VALUE_REPOSITORY_SQLITE_HXX
class OSystem; #include <sqlite3.h>
#include "Settings.hxx" #include "repository/KeyValueRepository.hxx"
class SettingsWINDOWS : public Settings class KeyValueRepositorySqlite : public KeyValueRepository
{ {
public: public:
/**
Create a new UNIX settings object KeyValueRepositorySqlite(const string& databaseDirectory, const string& databaseName);
*/
explicit SettingsWINDOWS(); ~KeyValueRepositorySqlite();
virtual ~SettingsWINDOWS() = default;
virtual std::map<string, Variant> load();
virtual void save(const std::map<string, Variant>& values);
private: private:
// Following constructors and assignment operators not supported
SettingsWINDOWS(const SettingsWINDOWS&) = delete; void initializeDb();
SettingsWINDOWS(SettingsWINDOWS&&) = delete;
SettingsWINDOWS& operator=(const SettingsWINDOWS&) = delete; private:
SettingsWINDOWS& operator=(SettingsWINDOWS&&) = delete;
string myDatabaseFile;
bool myIsFailed;
sqlite3* myDbHandle;
}; };
#endif #endif // KEY_VALUE_REPOSITORY_SQLITE_HXX

View File

@ -0,0 +1,10 @@
MODULE := src/common/repository/sqlite
MODULE_OBJS := \
src/common/repository/sqlite/KeyValueRepositorySqlite.o
MODULE_DIRS += \
src/common/repository/sqlite
# Include common rules
include $(srcdir)/common.rules

View File

@ -302,7 +302,7 @@ class Cartridge : public Device
// The array containing information about every byte of ROM indicating // The array containing information about every byte of ROM indicating
// whether it is used as code. // whether it is used as code.
BytePtr myCodeAccessBase; ByteBuffer myCodeAccessBase;
private: private:
// The startup bank to use (where to look for the reset vector address) // The startup bank to use (where to look for the reset vector address)

View File

@ -19,7 +19,7 @@
#include "Cart0840.hxx" #include "Cart0840.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cartridge0840::Cartridge0840(const BytePtr& image, uInt32 size, Cartridge0840::Cartridge0840(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myBankOffset(0) myBankOffset(0)

View File

@ -45,7 +45,7 @@ class Cartridge0840 : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
Cartridge0840(const BytePtr& image, uInt32 size, const string& md5, Cartridge0840(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~Cartridge0840() = default; virtual ~Cartridge0840() = default;

View File

@ -19,7 +19,7 @@
#include "Cart2K.hxx" #include "Cart2K.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cartridge2K::Cartridge2K(const BytePtr& image, uInt32 size, Cartridge2K::Cartridge2K(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5) : Cartridge(settings, md5)
{ {

View File

@ -48,7 +48,7 @@ class Cartridge2K : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
Cartridge2K(const BytePtr& image, uInt32 size, const string& md5, Cartridge2K(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~Cartridge2K() = default; virtual ~Cartridge2K() = default;
@ -127,7 +127,7 @@ class Cartridge2K : public Cartridge
private: private:
// Pointer to a dynamically allocated ROM image of the cartridge // Pointer to a dynamically allocated ROM image of the cartridge
BytePtr myImage; ByteBuffer myImage;
// Size of the ROM image // Size of the ROM image
uInt32 mySize; uInt32 mySize;

View File

@ -20,7 +20,7 @@
#include "Cart3E.hxx" #include "Cart3E.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cartridge3E::Cartridge3E(const BytePtr& image, uInt32 size, Cartridge3E::Cartridge3E(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
mySize(size), mySize(size),

View File

@ -74,7 +74,7 @@ class Cartridge3E : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
Cartridge3E(const BytePtr& image, uInt32 size, const string& md5, Cartridge3E(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~Cartridge3E() = default; virtual ~Cartridge3E() = default;
@ -180,7 +180,7 @@ class Cartridge3E : public Cartridge
private: private:
// Pointer to a dynamically allocated ROM image of the cartridge // Pointer to a dynamically allocated ROM image of the cartridge
BytePtr myImage; ByteBuffer myImage;
// RAM contents. For now every ROM gets all 32K of potential RAM // RAM contents. For now every ROM gets all 32K of potential RAM
uInt8 myRAM[32 * 1024]; uInt8 myRAM[32 * 1024];

View File

@ -20,7 +20,7 @@
#include "Cart3EPlus.hxx" #include "Cart3EPlus.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cartridge3EPlus::Cartridge3EPlus(const BytePtr& image, uInt32 size, Cartridge3EPlus::Cartridge3EPlus(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
mySize(size) mySize(size)

View File

@ -54,7 +54,7 @@ class Cartridge3EPlus: public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
Cartridge3EPlus(const BytePtr& image, uInt32 size, const string& md5, Cartridge3EPlus(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~Cartridge3EPlus() = default; virtual ~Cartridge3EPlus() = default;
@ -178,7 +178,7 @@ class Cartridge3EPlus: public Cartridge
static constexpr uInt16 RAM_WRITE_OFFSET = 0x200; static constexpr uInt16 RAM_WRITE_OFFSET = 0x200;
BytePtr myImage; // Pointer to a dynamically allocated ROM image of the cartridge ByteBuffer myImage; // Pointer to a dynamically allocated ROM image of the cartridge
uInt32 mySize; // Size of the ROM image uInt32 mySize; // Size of the ROM image
uInt8 myRAM[RAM_TOTAL_SIZE]; uInt8 myRAM[RAM_TOTAL_SIZE];

View File

@ -20,7 +20,7 @@
#include "Cart3F.hxx" #include "Cart3F.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cartridge3F::Cartridge3F(const BytePtr& image, uInt32 size, Cartridge3F::Cartridge3F(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
mySize(size), mySize(size),

View File

@ -51,7 +51,7 @@ class Cartridge3F : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
Cartridge3F(const BytePtr& image, uInt32 size, const string& md5, Cartridge3F(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~Cartridge3F() = default; virtual ~Cartridge3F() = default;
@ -157,7 +157,7 @@ class Cartridge3F : public Cartridge
private: private:
// Pointer to a dynamically allocated ROM image of the cartridge // Pointer to a dynamically allocated ROM image of the cartridge
BytePtr myImage; ByteBuffer myImage;
// Size of the ROM image // Size of the ROM image
uInt32 mySize; uInt32 mySize;

View File

@ -21,7 +21,7 @@
#include "Cart4A50.hxx" #include "Cart4A50.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cartridge4A50::Cartridge4A50(const BytePtr& image, uInt32 size, Cartridge4A50::Cartridge4A50(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
mySize(size), mySize(size),

View File

@ -65,7 +65,7 @@ class Cartridge4A50 : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
Cartridge4A50(const BytePtr& image, uInt32 size, const string& md5, Cartridge4A50(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~Cartridge4A50() = default; virtual ~Cartridge4A50() = default;

View File

@ -19,7 +19,7 @@
#include "Cart4K.hxx" #include "Cart4K.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cartridge4K::Cartridge4K(const BytePtr& image, uInt32 size, Cartridge4K::Cartridge4K(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5) : Cartridge(settings, md5)
{ {

View File

@ -45,7 +45,7 @@ class Cartridge4K : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
Cartridge4K(const BytePtr& image, uInt32 size, const string& md5, Cartridge4K(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~Cartridge4K() = default; virtual ~Cartridge4K() = default;

View File

@ -19,7 +19,7 @@
#include "Cart4KSC.hxx" #include "Cart4KSC.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cartridge4KSC::Cartridge4KSC(const BytePtr& image, uInt32 size, Cartridge4KSC::Cartridge4KSC(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5) : Cartridge(settings, md5)
{ {

View File

@ -44,7 +44,7 @@ class Cartridge4KSC : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
Cartridge4KSC(const BytePtr& image, uInt32 size, const string& md5, Cartridge4KSC(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~Cartridge4KSC() = default; virtual ~Cartridge4KSC() = default;

View File

@ -20,7 +20,7 @@
#include "CartAR.hxx" #include "CartAR.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeAR::CartridgeAR(const BytePtr& image, uInt32 size, CartridgeAR::CartridgeAR(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
mySize(std::max(size, 8448u)), mySize(std::max(size, 8448u)),

View File

@ -52,7 +52,7 @@ class CartridgeAR : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeAR(const BytePtr& image, uInt32 size, const string& md5, CartridgeAR(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeAR() = default; virtual ~CartridgeAR() = default;
@ -197,7 +197,7 @@ class CartridgeAR : public Cartridge
uInt32 mySize; uInt32 mySize;
// All of the 8448 byte loads associated with the game // All of the 8448 byte loads associated with the game
BytePtr myLoadImages; ByteBuffer myLoadImages;
// Indicates how many 8448 loads there are // Indicates how many 8448 loads there are
uInt8 myNumberOfLoadImages; uInt8 myNumberOfLoadImages;

View File

@ -19,7 +19,7 @@
#include "CartBF.hxx" #include "CartBF.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeBF::CartridgeBF(const BytePtr& image, uInt32 size, CartridgeBF::CartridgeBF(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myBankOffset(0) myBankOffset(0)

View File

@ -46,7 +46,7 @@ class CartridgeBF : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeBF(const BytePtr& image, uInt32 size, const string& md5, CartridgeBF(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeBF() = default; virtual ~CartridgeBF() = default;

View File

@ -19,7 +19,7 @@
#include "CartBFSC.hxx" #include "CartBFSC.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeBFSC::CartridgeBFSC(const BytePtr& image, uInt32 size, CartridgeBFSC::CartridgeBFSC(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myBankOffset(0) myBankOffset(0)

View File

@ -46,7 +46,7 @@ class CartridgeBFSC : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeBFSC(const BytePtr& image, uInt32 size, const string& md5, CartridgeBFSC(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeBFSC() = default; virtual ~CartridgeBFSC() = default;

View File

@ -41,7 +41,7 @@
#define DIGITAL_AUDIO_ON ((myMode & 0xF0) == 0) #define DIGITAL_AUDIO_ON ((myMode & 0xF0) == 0)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeBUS::CartridgeBUS(const BytePtr& image, uInt32 size, CartridgeBUS::CartridgeBUS(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myAudioCycles(0), myAudioCycles(0),

View File

@ -54,7 +54,7 @@ class CartridgeBUS : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeBUS(const BytePtr& image, uInt32 size, const string& md5, CartridgeBUS(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeBUS() = default; virtual ~CartridgeBUS() = default;

View File

@ -57,7 +57,7 @@ namespace {
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeCDF::CartridgeCDF(const BytePtr& image, uInt32 size, CartridgeCDF::CartridgeCDF(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myAudioCycles(0), myAudioCycles(0),

View File

@ -62,7 +62,7 @@ class CartridgeCDF : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeCDF(const BytePtr& image, uInt32 size, const string& md5, CartridgeCDF(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeCDF() = default; virtual ~CartridgeCDF() = default;

View File

@ -21,7 +21,7 @@
#include "CartCM.hxx" #include "CartCM.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeCM::CartridgeCM(const BytePtr& image, uInt32 size, CartridgeCM::CartridgeCM(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
mySWCHA(0xFF), // portA is all 1's mySWCHA(0xFF), // portA is all 1's

View File

@ -120,7 +120,7 @@ class CartridgeCM : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeCM(const BytePtr& image, uInt32 size, const string& md5, CartridgeCM(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeCM() = default; virtual ~CartridgeCM() = default;

View File

@ -22,7 +22,7 @@
#include "CartCTY.hxx" #include "CartCTY.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeCTY::CartridgeCTY(const BytePtr& image, uInt32 size, CartridgeCTY::CartridgeCTY(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myOperationType(0), myOperationType(0),

View File

@ -118,7 +118,7 @@ class CartridgeCTY : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the settings object @param settings A reference to the settings object
*/ */
CartridgeCTY(const BytePtr& image, uInt32 size, const string& md5, CartridgeCTY(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeCTY() = default; virtual ~CartridgeCTY() = default;

View File

@ -19,7 +19,7 @@
#include "CartCV.hxx" #include "CartCV.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeCV::CartridgeCV(const BytePtr& image, uInt32 size, CartridgeCV::CartridgeCV(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
mySize(size) mySize(size)

View File

@ -48,7 +48,7 @@ class CartridgeCV : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeCV(const BytePtr& image, uInt32 size, const string& md5, CartridgeCV(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeCV() = default; virtual ~CartridgeCV() = default;
@ -138,7 +138,7 @@ class CartridgeCV : public Cartridge
private: private:
// Pointer to the initial RAM data from the cart // Pointer to the initial RAM data from the cart
// This doesn't always exist, so we don't pre-allocate it // This doesn't always exist, so we don't pre-allocate it
BytePtr myInitialRAM; ByteBuffer myInitialRAM;
// Initial size of the cart data // Initial size of the cart data
uInt32 mySize; uInt32 mySize;

View File

@ -20,7 +20,7 @@
#include "CartCVPlus.hxx" #include "CartCVPlus.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeCVPlus::CartridgeCVPlus(const BytePtr& image, uInt32 size, CartridgeCVPlus::CartridgeCVPlus(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
mySize(size), mySize(size),

View File

@ -57,7 +57,7 @@ class CartridgeCVPlus : public Cartridge
@param size The size of the ROM image @param size The size of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeCVPlus(const BytePtr& image, uInt32 size, const string& md5, CartridgeCVPlus(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeCVPlus() = default; virtual ~CartridgeCVPlus() = default;
@ -163,7 +163,7 @@ class CartridgeCVPlus : public Cartridge
private: private:
// Pointer to a dynamically allocated ROM image of the cartridge // Pointer to a dynamically allocated ROM image of the cartridge
BytePtr myImage; ByteBuffer myImage;
// The 1024 bytes of RAM // The 1024 bytes of RAM
uInt8 myRAM[1024]; uInt8 myRAM[1024];

View File

@ -20,7 +20,7 @@
#include "CartDASH.hxx" #include "CartDASH.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeDASH::CartridgeDASH(const BytePtr& image, uInt32 size, CartridgeDASH::CartridgeDASH(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
mySize(size) mySize(size)

View File

@ -136,7 +136,7 @@ class CartridgeDASH: public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeDASH(const BytePtr& image, uInt32 size, const string& md5, CartridgeDASH(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeDASH() = default; virtual ~CartridgeDASH() = default;
@ -261,7 +261,7 @@ class CartridgeDASH: public Cartridge
static constexpr uInt16 RAM_WRITE_OFFSET = 0x800; static constexpr uInt16 RAM_WRITE_OFFSET = 0x800;
BytePtr myImage; // Pointer to a dynamically allocated ROM image of the cartridge ByteBuffer myImage; // Pointer to a dynamically allocated ROM image of the cartridge
uInt32 mySize; // Size of the ROM image uInt32 mySize; // Size of the ROM image
uInt8 myRAM[RAM_TOTAL_SIZE]; uInt8 myRAM[RAM_TOTAL_SIZE];

View File

@ -19,7 +19,7 @@
#include "CartDF.hxx" #include "CartDF.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeDF::CartridgeDF(const BytePtr& image, uInt32 size, CartridgeDF::CartridgeDF(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myBankOffset(0) myBankOffset(0)

View File

@ -46,7 +46,7 @@ class CartridgeDF : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeDF(const BytePtr& image, uInt32 size, const string& md5, CartridgeDF(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeDF() = default; virtual ~CartridgeDF() = default;

View File

@ -19,7 +19,7 @@
#include "CartDFSC.hxx" #include "CartDFSC.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeDFSC::CartridgeDFSC(const BytePtr& image, uInt32 size, CartridgeDFSC::CartridgeDFSC(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myBankOffset(0) myBankOffset(0)

View File

@ -46,7 +46,7 @@ class CartridgeDFSC : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeDFSC(const BytePtr& image, uInt32 size, const string& md5, CartridgeDFSC(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeDFSC() = default; virtual ~CartridgeDFSC() = default;

View File

@ -19,7 +19,7 @@
#include "CartDPC.hxx" #include "CartDPC.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeDPC::CartridgeDPC(const BytePtr& image, uInt32 size, CartridgeDPC::CartridgeDPC(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
mySize(size), mySize(size),

View File

@ -50,7 +50,7 @@ class CartridgeDPC : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeDPC(const BytePtr& image, uInt32 size, const string& md5, CartridgeDPC(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeDPC() = default; virtual ~CartridgeDPC() = default;

View File

@ -26,7 +26,7 @@
#include "exception/FatalEmulationError.hxx" #include "exception/FatalEmulationError.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeDPCPlus::CartridgeDPCPlus(const BytePtr& image, uInt32 size, CartridgeDPCPlus::CartridgeDPCPlus(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
mySize(std::min(size, 32768u)), mySize(std::min(size, 32768u)),

View File

@ -56,7 +56,7 @@ class CartridgeDPCPlus : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeDPCPlus(const BytePtr& image, uInt32 size, const string& md5, CartridgeDPCPlus(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeDPCPlus() = default; virtual ~CartridgeDPCPlus() = default;

View File

@ -66,7 +66,7 @@
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
unique_ptr<Cartridge> CartDetector::create(const FilesystemNode& file, unique_ptr<Cartridge> CartDetector::create(const FilesystemNode& file,
const BytePtr& image, uInt32 size, string& md5, const ByteBuffer& image, uInt32 size, string& md5,
const string& propertiesType, Settings& settings) const string& propertiesType, Settings& settings)
{ {
unique_ptr<Cartridge> cartridge; unique_ptr<Cartridge> cartridge;
@ -210,13 +210,13 @@ unique_ptr<Cartridge> CartDetector::create(const FilesystemNode& file,
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
unique_ptr<Cartridge> unique_ptr<Cartridge>
CartDetector::createFromMultiCart(const BytePtr& image, uInt32& size, CartDetector::createFromMultiCart(const ByteBuffer& image, uInt32& size,
uInt32 numroms, string& md5, Bankswitch::Type type, string& id, Settings& settings) uInt32 numroms, string& md5, Bankswitch::Type type, string& id, Settings& settings)
{ {
// Get a piece of the larger image // Get a piece of the larger image
uInt32 i = settings.getInt("romloadcount"); uInt32 i = settings.getInt("romloadcount");
size /= numroms; size /= numroms;
BytePtr slice = make_unique<uInt8[]>(size); ByteBuffer slice = make_unique<uInt8[]>(size);
memcpy(slice.get(), image.get()+i*size, size); memcpy(slice.get(), image.get()+i*size, size);
// We need a new md5 and name // We need a new md5 and name
@ -238,7 +238,7 @@ CartDetector::createFromMultiCart(const BytePtr& image, uInt32& size,
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
unique_ptr<Cartridge> unique_ptr<Cartridge>
CartDetector::createFromImage(const BytePtr& image, uInt32 size, Bankswitch::Type type, CartDetector::createFromImage(const ByteBuffer& image, uInt32 size, Bankswitch::Type type,
const string& md5, Settings& settings) const string& md5, Settings& settings)
{ {
// We should know the cart's type by now so let's create it // We should know the cart's type by now so let's create it
@ -334,7 +334,7 @@ CartDetector::createFromImage(const BytePtr& image, uInt32 size, Bankswitch::Typ
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Bankswitch::Type CartDetector::autodetectType(const BytePtr& image, uInt32 size) Bankswitch::Type CartDetector::autodetectType(const ByteBuffer& image, uInt32 size)
{ {
// Guess type based on size // Guess type based on size
Bankswitch::Type type = Bankswitch::Type::_AUTO; Bankswitch::Type type = Bankswitch::Type::_AUTO;
@ -551,7 +551,7 @@ bool CartDetector::searchForBytes(const uInt8* image, uInt32 imagesize,
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablySC(const BytePtr& image, uInt32 size) bool CartDetector::isProbablySC(const ByteBuffer& image, uInt32 size)
{ {
// We assume a Superchip cart repeats the first 128 bytes for the second // We assume a Superchip cart repeats the first 128 bytes for the second
// 128 bytes in the RAM area, which is the first 256 bytes of each 4K bank // 128 bytes in the RAM area, which is the first 256 bytes of each 4K bank
@ -568,7 +568,7 @@ bool CartDetector::isProbablySC(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablyARM(const BytePtr& image, uInt32 size) bool CartDetector::isProbablyARM(const ByteBuffer& image, uInt32 size)
{ {
// ARM code contains the following 'loader' patterns in the first 1K // ARM code contains the following 'loader' patterns in the first 1K
// Thanks to Thomas Jentzsch of AtariAge for this advice // Thanks to Thomas Jentzsch of AtariAge for this advice
@ -583,7 +583,7 @@ bool CartDetector::isProbablyARM(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbably0840(const BytePtr& image, uInt32 size) bool CartDetector::isProbably0840(const ByteBuffer& image, uInt32 size)
{ {
// 0840 cart bankswitching is triggered by accessing addresses 0x0800 // 0840 cart bankswitching is triggered by accessing addresses 0x0800
// or 0x0840 at least twice // or 0x0840 at least twice
@ -608,7 +608,7 @@ bool CartDetector::isProbably0840(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbably3E(const BytePtr& image, uInt32 size) bool CartDetector::isProbably3E(const ByteBuffer& image, uInt32 size)
{ {
// 3E cart bankswitching is triggered by storing the bank number // 3E cart bankswitching is triggered by storing the bank number
// in address 3E using 'STA $3E', commonly followed by an // in address 3E using 'STA $3E', commonly followed by an
@ -618,7 +618,7 @@ bool CartDetector::isProbably3E(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbably3EPlus(const BytePtr& image, uInt32 size) bool CartDetector::isProbably3EPlus(const ByteBuffer& image, uInt32 size)
{ {
// 3E+ cart is identified key 'TJ3E' in the ROM // 3E+ cart is identified key 'TJ3E' in the ROM
uInt8 tj3e[] = { 'T', 'J', '3', 'E' }; uInt8 tj3e[] = { 'T', 'J', '3', 'E' };
@ -626,7 +626,7 @@ bool CartDetector::isProbably3EPlus(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbably3F(const BytePtr& image, uInt32 size) bool CartDetector::isProbably3F(const ByteBuffer& image, uInt32 size)
{ {
// 3F cart bankswitching is triggered by storing the bank number // 3F cart bankswitching is triggered by storing the bank number
// in address 3F using 'STA $3F' // in address 3F using 'STA $3F'
@ -637,7 +637,7 @@ bool CartDetector::isProbably3F(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbably4A50(const BytePtr& image, uInt32 size) bool CartDetector::isProbably4A50(const ByteBuffer& image, uInt32 size)
{ {
// 4A50 carts store address $4A50 at the NMI vector, which // 4A50 carts store address $4A50 at the NMI vector, which
// in this scheme is always in the last page of ROM at // in this scheme is always in the last page of ROM at
@ -655,7 +655,7 @@ bool CartDetector::isProbably4A50(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbably4KSC(const BytePtr& image, uInt32 size) bool CartDetector::isProbably4KSC(const ByteBuffer& image, uInt32 size)
{ {
// We check if the first 256 bytes are identical *and* if there's // We check if the first 256 bytes are identical *and* if there's
// an "SC" signature for one of our larger SC types at 1FFA. // an "SC" signature for one of our larger SC types at 1FFA.
@ -672,7 +672,7 @@ bool CartDetector::isProbably4KSC(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablyBF(const BytePtr& image, uInt32 size, bool CartDetector::isProbablyBF(const ByteBuffer& image, uInt32 size,
Bankswitch::Type& type) Bankswitch::Type& type)
{ {
// BF carts store strings 'BFBF' and 'BFSC' starting at address $FFF8 // BF carts store strings 'BFBF' and 'BFSC' starting at address $FFF8
@ -694,7 +694,7 @@ bool CartDetector::isProbablyBF(const BytePtr& image, uInt32 size,
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablyBUS(const BytePtr& image, uInt32 size) bool CartDetector::isProbablyBUS(const ByteBuffer& image, uInt32 size)
{ {
// BUS ARM code has 2 occurrences of the string BUS // BUS ARM code has 2 occurrences of the string BUS
// Note: all Harmony/Melody custom drivers also contain the value // Note: all Harmony/Melody custom drivers also contain the value
@ -704,7 +704,7 @@ bool CartDetector::isProbablyBUS(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablyCDF(const BytePtr& image, uInt32 size) bool CartDetector::isProbablyCDF(const ByteBuffer& image, uInt32 size)
{ {
// CDF ARM code has 3 occurrences of the string CDF // CDF ARM code has 3 occurrences of the string CDF
// Note: all Harmony/Melody custom drivers also contain the value // Note: all Harmony/Melody custom drivers also contain the value
@ -714,14 +714,14 @@ bool CartDetector::isProbablyCDF(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablyCTY(const BytePtr& image, uInt32 size) bool CartDetector::isProbablyCTY(const ByteBuffer& image, uInt32 size)
{ {
uInt8 lenin[] = { 'L', 'E', 'N', 'I', 'N' }; uInt8 lenin[] = { 'L', 'E', 'N', 'I', 'N' };
return searchForBytes(image.get(), size, lenin, 5, 1); return searchForBytes(image.get(), size, lenin, 5, 1);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablyCV(const BytePtr& image, uInt32 size) bool CartDetector::isProbablyCV(const ByteBuffer& image, uInt32 size)
{ {
// CV RAM access occurs at addresses $f3ff and $f400 // CV RAM access occurs at addresses $f3ff and $f400
// These signatures are attributed to the MESS project // These signatures are attributed to the MESS project
@ -736,7 +736,7 @@ bool CartDetector::isProbablyCV(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablyCVPlus(const BytePtr& image, uInt32) bool CartDetector::isProbablyCVPlus(const ByteBuffer& image, uInt32)
{ {
// CV+ cart is identified key 'commavidplus' @ $04 in the ROM // CV+ cart is identified key 'commavidplus' @ $04 in the ROM
// We inspect only this area to speed up the search // We inspect only this area to speed up the search
@ -746,7 +746,7 @@ bool CartDetector::isProbablyCVPlus(const BytePtr& image, uInt32)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablyDASH(const BytePtr& image, uInt32 size) bool CartDetector::isProbablyDASH(const ByteBuffer& image, uInt32 size)
{ {
// DASH cart is identified key 'TJAD' in the ROM // DASH cart is identified key 'TJAD' in the ROM
uInt8 tjad[] = { 'T', 'J', 'A', 'D' }; uInt8 tjad[] = { 'T', 'J', 'A', 'D' };
@ -754,7 +754,7 @@ bool CartDetector::isProbablyDASH(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablyDF(const BytePtr& image, uInt32 size, bool CartDetector::isProbablyDF(const ByteBuffer& image, uInt32 size,
Bankswitch::Type& type) Bankswitch::Type& type)
{ {
@ -777,7 +777,7 @@ bool CartDetector::isProbablyDF(const BytePtr& image, uInt32 size,
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablyDPCplus(const BytePtr& image, uInt32 size) bool CartDetector::isProbablyDPCplus(const ByteBuffer& image, uInt32 size)
{ {
// DPC+ ARM code has 2 occurrences of the string DPC+ // DPC+ ARM code has 2 occurrences of the string DPC+
// Note: all Harmony/Melody custom drivers also contain the value // Note: all Harmony/Melody custom drivers also contain the value
@ -787,7 +787,7 @@ bool CartDetector::isProbablyDPCplus(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablyE0(const BytePtr& image, uInt32 size) bool CartDetector::isProbablyE0(const ByteBuffer& image, uInt32 size)
{ {
// E0 cart bankswitching is triggered by accessing addresses // E0 cart bankswitching is triggered by accessing addresses
// $FE0 to $FF9 using absolute non-indexed addressing // $FE0 to $FF9 using absolute non-indexed addressing
@ -813,7 +813,7 @@ bool CartDetector::isProbablyE0(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablyE7(const BytePtr& image, uInt32 size) bool CartDetector::isProbablyE7(const ByteBuffer& image, uInt32 size)
{ {
// E7 cart bankswitching is triggered by accessing addresses // E7 cart bankswitching is triggered by accessing addresses
// $FE0 to $FE6 using absolute non-indexed addressing // $FE0 to $FE6 using absolute non-indexed addressing
@ -838,7 +838,7 @@ bool CartDetector::isProbablyE7(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablyE78K(const BytePtr& image, uInt32 size) bool CartDetector::isProbablyE78K(const ByteBuffer& image, uInt32 size)
{ {
// E78K cart bankswitching is triggered by accessing addresses // E78K cart bankswitching is triggered by accessing addresses
// $FE4 to $FE6 using absolute non-indexed addressing // $FE4 to $FE6 using absolute non-indexed addressing
@ -857,7 +857,7 @@ bool CartDetector::isProbablyE78K(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablyEF(const BytePtr& image, uInt32 size, bool CartDetector::isProbablyEF(const ByteBuffer& image, uInt32 size,
Bankswitch::Type& type) Bankswitch::Type& type)
{ {
// Newer EF carts store strings 'EFEF' and 'EFSC' starting at address $FFF8 // Newer EF carts store strings 'EFEF' and 'EFSC' starting at address $FFF8
@ -906,7 +906,7 @@ bool CartDetector::isProbablyEF(const BytePtr& image, uInt32 size,
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablyFA2(const BytePtr& image, uInt32) bool CartDetector::isProbablyFA2(const ByteBuffer& image, uInt32)
{ {
// This currently tests only the 32K version of FA2; the 24 and 28K // This currently tests only the 32K version of FA2; the 24 and 28K
// versions are easy, in that they're the only possibility with those // versions are easy, in that they're the only possibility with those
@ -921,7 +921,7 @@ bool CartDetector::isProbablyFA2(const BytePtr& image, uInt32)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablyFE(const BytePtr& image, uInt32 size) bool CartDetector::isProbablyFE(const ByteBuffer& image, uInt32 size)
{ {
// FE bankswitching is very weird, but always seems to include a // FE bankswitching is very weird, but always seems to include a
// 'JSR $xxxx' // 'JSR $xxxx'
@ -940,7 +940,7 @@ bool CartDetector::isProbablyFE(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablyMDM(const BytePtr& image, uInt32 size) bool CartDetector::isProbablyMDM(const ByteBuffer& image, uInt32 size)
{ {
// MDM cart is identified key 'MDMC' in the first 8K of ROM // MDM cart is identified key 'MDMC' in the first 8K of ROM
uInt8 mdmc[] = { 'M', 'D', 'M', 'C' }; uInt8 mdmc[] = { 'M', 'D', 'M', 'C' };
@ -948,7 +948,7 @@ bool CartDetector::isProbablyMDM(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablySB(const BytePtr& image, uInt32 size) bool CartDetector::isProbablySB(const ByteBuffer& image, uInt32 size)
{ {
// SB cart bankswitching switches banks by accessing address 0x0800 // SB cart bankswitching switches banks by accessing address 0x0800
uInt8 signature[2][3] = { uInt8 signature[2][3] = {
@ -962,7 +962,7 @@ bool CartDetector::isProbablySB(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablyUA(const BytePtr& image, uInt32 size) bool CartDetector::isProbablyUA(const ByteBuffer& image, uInt32 size)
{ {
// UA cart bankswitching switches to bank 1 by accessing address 0x240 // UA cart bankswitching switches to bank 1 by accessing address 0x240
// using 'STA $240' or 'LDA $240' // using 'STA $240' or 'LDA $240'
@ -979,7 +979,7 @@ bool CartDetector::isProbablyUA(const BytePtr& image, uInt32 size)
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool CartDetector::isProbablyX07(const BytePtr& image, uInt32 size) bool CartDetector::isProbablyX07(const ByteBuffer& image, uInt32 size)
{ {
// X07 bankswitching switches to bank 0, 1, 2, etc by accessing address 0x08xd // X07 bankswitching switches to bank 0, 1, 2, etc by accessing address 0x08xd
uInt8 signature[6][3] = { uInt8 signature[6][3] = {

View File

@ -46,7 +46,7 @@ class CartDetector
@return Pointer to the new cartridge object allocated on the heap @return Pointer to the new cartridge object allocated on the heap
*/ */
static unique_ptr<Cartridge> create(const FilesystemNode& file, static unique_ptr<Cartridge> create(const FilesystemNode& file,
const BytePtr& image, uInt32 size, string& md5, const ByteBuffer& image, uInt32 size, string& md5,
const string& dtype, Settings& settings); const string& dtype, Settings& settings);
private: private:
@ -65,7 +65,7 @@ class CartDetector
@return Pointer to the new cartridge object allocated on the heap @return Pointer to the new cartridge object allocated on the heap
*/ */
static unique_ptr<Cartridge> static unique_ptr<Cartridge>
createFromMultiCart(const BytePtr& image, uInt32& size, createFromMultiCart(const ByteBuffer& image, uInt32& size,
uInt32 numroms, string& md5, Bankswitch::Type type, string& id, uInt32 numroms, string& md5, Bankswitch::Type type, string& id,
Settings& settings); Settings& settings);
@ -81,7 +81,7 @@ class CartDetector
@return Pointer to the new cartridge object allocated on the heap @return Pointer to the new cartridge object allocated on the heap
*/ */
static unique_ptr<Cartridge> static unique_ptr<Cartridge>
createFromImage(const BytePtr& image, uInt32 size, Bankswitch::Type type, createFromImage(const ByteBuffer& image, uInt32 size, Bankswitch::Type type,
const string& md5, Settings& settings); const string& md5, Settings& settings);
/** /**
@ -92,7 +92,7 @@ class CartDetector
@return The "best guess" for the cartridge type @return The "best guess" for the cartridge type
*/ */
static Bankswitch::Type autodetectType(const BytePtr& image, uInt32 size); static Bankswitch::Type autodetectType(const ByteBuffer& image, uInt32 size);
/** /**
Search the image for the specified byte signature Search the image for the specified byte signature
@ -113,142 +113,142 @@ class CartDetector
Returns true if the image is probably a SuperChip (128 bytes RAM) Returns true if the image is probably a SuperChip (128 bytes RAM)
Note: should be called only on ROMs with size multiple of 4K Note: should be called only on ROMs with size multiple of 4K
*/ */
static bool isProbablySC(const BytePtr& image, uInt32 size); static bool isProbablySC(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image probably contains ARM code in the first 1K Returns true if the image probably contains ARM code in the first 1K
*/ */
static bool isProbablyARM(const BytePtr& image, uInt32 size); static bool isProbablyARM(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably a 0840 bankswitching cartridge Returns true if the image is probably a 0840 bankswitching cartridge
*/ */
static bool isProbably0840(const BytePtr& image, uInt32 size); static bool isProbably0840(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably a 3E bankswitching cartridge Returns true if the image is probably a 3E bankswitching cartridge
*/ */
static bool isProbably3E(const BytePtr& image, uInt32 size); static bool isProbably3E(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably a 3E+ bankswitching cartridge Returns true if the image is probably a 3E+ bankswitching cartridge
*/ */
static bool isProbably3EPlus(const BytePtr& image, uInt32 size); static bool isProbably3EPlus(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably a 3F bankswitching cartridge Returns true if the image is probably a 3F bankswitching cartridge
*/ */
static bool isProbably3F(const BytePtr& image, uInt32 size); static bool isProbably3F(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably a 4A50 bankswitching cartridge Returns true if the image is probably a 4A50 bankswitching cartridge
*/ */
static bool isProbably4A50(const BytePtr& image, uInt32 size); static bool isProbably4A50(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably a 4K SuperChip (128 bytes RAM) Returns true if the image is probably a 4K SuperChip (128 bytes RAM)
*/ */
static bool isProbably4KSC(const BytePtr& image, uInt32 size); static bool isProbably4KSC(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably a BF/BFSC bankswitching cartridge Returns true if the image is probably a BF/BFSC bankswitching cartridge
*/ */
static bool isProbablyBF(const BytePtr& image, uInt32 size, Bankswitch::Type& type); static bool isProbablyBF(const ByteBuffer& image, uInt32 size, Bankswitch::Type& type);
/** /**
Returns true if the image is probably a BUS bankswitching cartridge Returns true if the image is probably a BUS bankswitching cartridge
*/ */
static bool isProbablyBUS(const BytePtr& image, uInt32 size); static bool isProbablyBUS(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably a CDF bankswitching cartridge Returns true if the image is probably a CDF bankswitching cartridge
*/ */
static bool isProbablyCDF(const BytePtr& image, uInt32 size); static bool isProbablyCDF(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably a CTY bankswitching cartridge Returns true if the image is probably a CTY bankswitching cartridge
*/ */
static bool isProbablyCTY(const BytePtr& image, uInt32 size); static bool isProbablyCTY(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably a CV bankswitching cartridge Returns true if the image is probably a CV bankswitching cartridge
*/ */
static bool isProbablyCV(const BytePtr& image, uInt32 size); static bool isProbablyCV(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably a CV+ bankswitching cartridge Returns true if the image is probably a CV+ bankswitching cartridge
*/ */
static bool isProbablyCVPlus(const BytePtr& image, uInt32 size); static bool isProbablyCVPlus(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably a DASH bankswitching cartridge Returns true if the image is probably a DASH bankswitching cartridge
*/ */
static bool isProbablyDASH(const BytePtr& image, uInt32 size); static bool isProbablyDASH(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably a DF/DFSC bankswitching cartridge Returns true if the image is probably a DF/DFSC bankswitching cartridge
*/ */
static bool isProbablyDF(const BytePtr& image, uInt32 size, Bankswitch::Type& type); static bool isProbablyDF(const ByteBuffer& image, uInt32 size, Bankswitch::Type& type);
/** /**
Returns true if the image is probably a DPC+ bankswitching cartridge Returns true if the image is probably a DPC+ bankswitching cartridge
*/ */
static bool isProbablyDPCplus(const BytePtr& image, uInt32 size); static bool isProbablyDPCplus(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably a E0 bankswitching cartridge Returns true if the image is probably a E0 bankswitching cartridge
*/ */
static bool isProbablyE0(const BytePtr& image, uInt32 size); static bool isProbablyE0(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably a E7 bankswitching cartridge Returns true if the image is probably a E7 bankswitching cartridge
*/ */
static bool isProbablyE7(const BytePtr& image, uInt32 size); static bool isProbablyE7(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably a E78K bankswitching cartridge Returns true if the image is probably a E78K bankswitching cartridge
*/ */
static bool isProbablyE78K(const BytePtr& image, uInt32 size); static bool isProbablyE78K(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably an EF/EFSC bankswitching cartridge Returns true if the image is probably an EF/EFSC bankswitching cartridge
*/ */
static bool isProbablyEF(const BytePtr& image, uInt32 size, Bankswitch::Type& type); static bool isProbablyEF(const ByteBuffer& image, uInt32 size, Bankswitch::Type& type);
/** /**
Returns true if the image is probably an F6 bankswitching cartridge Returns true if the image is probably an F6 bankswitching cartridge
*/ */
//static bool isProbablyF6(const BytePtr& image, uInt32 size); //static bool isProbablyF6(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably an FA2 bankswitching cartridge Returns true if the image is probably an FA2 bankswitching cartridge
*/ */
static bool isProbablyFA2(const BytePtr& image, uInt32 size); static bool isProbablyFA2(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably an FE bankswitching cartridge Returns true if the image is probably an FE bankswitching cartridge
*/ */
static bool isProbablyFE(const BytePtr& image, uInt32 size); static bool isProbablyFE(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably a MDM bankswitching cartridge Returns true if the image is probably a MDM bankswitching cartridge
*/ */
static bool isProbablyMDM(const BytePtr& image, uInt32 size); static bool isProbablyMDM(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably a SB bankswitching cartridge Returns true if the image is probably a SB bankswitching cartridge
*/ */
static bool isProbablySB(const BytePtr& image, uInt32 size); static bool isProbablySB(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably a UA bankswitching cartridge Returns true if the image is probably a UA bankswitching cartridge
*/ */
static bool isProbablyUA(const BytePtr& image, uInt32 size); static bool isProbablyUA(const ByteBuffer& image, uInt32 size);
/** /**
Returns true if the image is probably an X07 bankswitching cartridge Returns true if the image is probably an X07 bankswitching cartridge
*/ */
static bool isProbablyX07(const BytePtr& image, uInt32 size); static bool isProbablyX07(const ByteBuffer& image, uInt32 size);
private: private:
// Following constructors and assignment operators not supported // Following constructors and assignment operators not supported

View File

@ -19,7 +19,7 @@
#include "CartE0.hxx" #include "CartE0.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeE0::CartridgeE0(const BytePtr& image, uInt32 size, CartridgeE0::CartridgeE0(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5) : Cartridge(settings, md5)
{ {

View File

@ -54,7 +54,7 @@ class CartridgeE0 : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeE0(const BytePtr& image, uInt32 size, const string& md5, CartridgeE0(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeE0() = default; virtual ~CartridgeE0() = default;

View File

@ -19,7 +19,7 @@
#include "CartE7.hxx" #include "CartE7.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeE7::CartridgeE7(const BytePtr& image, uInt32 size, CartridgeE7::CartridgeE7(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: CartridgeMNetwork(image, size, md5, settings) : CartridgeMNetwork(image, size, md5, settings)
{ {

View File

@ -43,7 +43,7 @@ class CartridgeE7 : public CartridgeMNetwork
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeE7(const BytePtr& image, uInt32 size, const string& md5, CartridgeE7(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeE7() = default; virtual ~CartridgeE7() = default;

View File

@ -19,7 +19,7 @@
#include "CartE78K.hxx" #include "CartE78K.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeE78K::CartridgeE78K(const BytePtr& image, uInt32 size, CartridgeE78K::CartridgeE78K(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: CartridgeMNetwork(image, size, md5, settings) : CartridgeMNetwork(image, size, md5, settings)
{ {

View File

@ -41,7 +41,7 @@ class CartridgeE78K : public CartridgeMNetwork
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeE78K(const BytePtr& image, uInt32 size, const string& md5, CartridgeE78K(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeE78K() = default; virtual ~CartridgeE78K() = default;

View File

@ -19,7 +19,7 @@
#include "CartEF.hxx" #include "CartEF.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeEF::CartridgeEF(const BytePtr& image, uInt32 size, CartridgeEF::CartridgeEF(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myBankOffset(0) myBankOffset(0)

View File

@ -46,7 +46,7 @@ class CartridgeEF : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeEF(const BytePtr& image, uInt32 size, const string& md5, CartridgeEF(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeEF() = default; virtual ~CartridgeEF() = default;

View File

@ -19,7 +19,7 @@
#include "CartEFSC.hxx" #include "CartEFSC.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeEFSC::CartridgeEFSC(const BytePtr& image, uInt32 size, CartridgeEFSC::CartridgeEFSC(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myBankOffset(0) myBankOffset(0)

View File

@ -47,7 +47,7 @@ class CartridgeEFSC : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeEFSC(const BytePtr& image, uInt32 size, const string& md5, CartridgeEFSC(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeEFSC() = default; virtual ~CartridgeEFSC() = default;

View File

@ -19,7 +19,7 @@
#include "CartF0.hxx" #include "CartF0.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeF0::CartridgeF0(const BytePtr& image, uInt32 size, CartridgeF0::CartridgeF0(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myBankOffset(0) myBankOffset(0)

View File

@ -46,7 +46,7 @@ class CartridgeF0 : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeF0(const BytePtr& image, uInt32 size, const string& md5, CartridgeF0(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeF0() = default; virtual ~CartridgeF0() = default;

View File

@ -20,7 +20,7 @@
#include "CartF4.hxx" #include "CartF4.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeF4::CartridgeF4(const BytePtr& image, uInt32 size, CartridgeF4::CartridgeF4(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myBankOffset(0) myBankOffset(0)

View File

@ -45,7 +45,7 @@ class CartridgeF4 : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeF4(const BytePtr& image, uInt32 size, const string& md5, CartridgeF4(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeF4() = default; virtual ~CartridgeF4() = default;

View File

@ -19,7 +19,7 @@
#include "CartF4SC.hxx" #include "CartF4SC.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeF4SC::CartridgeF4SC(const BytePtr& image, uInt32 size, CartridgeF4SC::CartridgeF4SC(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myBankOffset(0) myBankOffset(0)

View File

@ -46,7 +46,7 @@ class CartridgeF4SC : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeF4SC(const BytePtr& image, uInt32 size, const string& md5, CartridgeF4SC(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeF4SC() = default; virtual ~CartridgeF4SC() = default;

View File

@ -19,7 +19,7 @@
#include "CartF6.hxx" #include "CartF6.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeF6::CartridgeF6(const BytePtr& image, uInt32 size, CartridgeF6::CartridgeF6(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myBankOffset(0) myBankOffset(0)

View File

@ -45,7 +45,7 @@ class CartridgeF6 : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeF6(const BytePtr& image, uInt32 size, const string& md5, CartridgeF6(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeF6() = default; virtual ~CartridgeF6() = default;

View File

@ -19,7 +19,7 @@
#include "CartF6SC.hxx" #include "CartF6SC.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeF6SC::CartridgeF6SC(const BytePtr& image, uInt32 size, CartridgeF6SC::CartridgeF6SC(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myBankOffset(0) myBankOffset(0)

View File

@ -46,7 +46,7 @@ class CartridgeF6SC : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeF6SC(const BytePtr& image, uInt32 size, const string& md5, CartridgeF6SC(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeF6SC() = default; virtual ~CartridgeF6SC() = default;

View File

@ -19,7 +19,7 @@
#include "CartF8.hxx" #include "CartF8.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeF8::CartridgeF8(const BytePtr& image, uInt32 size, CartridgeF8::CartridgeF8(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myBankOffset(0) myBankOffset(0)

View File

@ -45,7 +45,7 @@ class CartridgeF8 : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeF8(const BytePtr& image, uInt32 size, const string& md5, CartridgeF8(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeF8() = default; virtual ~CartridgeF8() = default;

View File

@ -19,7 +19,7 @@
#include "CartF8SC.hxx" #include "CartF8SC.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeF8SC::CartridgeF8SC(const BytePtr& image, uInt32 size, CartridgeF8SC::CartridgeF8SC(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myBankOffset(0) myBankOffset(0)

View File

@ -46,7 +46,7 @@ class CartridgeF8SC : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeF8SC(const BytePtr& image, uInt32 size, const string& md5, CartridgeF8SC(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeF8SC() = default; virtual ~CartridgeF8SC() = default;

View File

@ -19,7 +19,7 @@
#include "CartFA.hxx" #include "CartFA.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeFA::CartridgeFA(const BytePtr& image, uInt32 size, CartridgeFA::CartridgeFA(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myBankOffset(0) myBankOffset(0)

View File

@ -46,7 +46,7 @@ class CartridgeFA : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeFA(const BytePtr& image, uInt32 size, const string& md5, CartridgeFA(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeFA() = default; virtual ~CartridgeFA() = default;

View File

@ -22,7 +22,7 @@
#include "CartFA2.hxx" #include "CartFA2.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeFA2::CartridgeFA2(const BytePtr& image, uInt32 size, CartridgeFA2::CartridgeFA2(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
mySize(28 * 1024), mySize(28 * 1024),

View File

@ -58,7 +58,7 @@ class CartridgeFA2 : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the settings object @param settings A reference to the settings object
*/ */
CartridgeFA2(const BytePtr& image, uInt32 size, const string& md5, CartridgeFA2(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeFA2() = default; virtual ~CartridgeFA2() = default;

View File

@ -20,7 +20,7 @@
#include "CartFE.hxx" #include "CartFE.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeFE::CartridgeFE(const BytePtr& image, uInt32 size, CartridgeFE::CartridgeFE(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myBankOffset(0), myBankOffset(0),

View File

@ -88,7 +88,7 @@ class CartridgeFE : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeFE(const BytePtr& image, uInt32 size, const string& md5, CartridgeFE(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeFE() = default; virtual ~CartridgeFE() = default;

View File

@ -19,7 +19,7 @@
#include "CartMDM.hxx" #include "CartMDM.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeMDM::CartridgeMDM(const BytePtr& image, uInt32 size, CartridgeMDM::CartridgeMDM(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
mySize(size), mySize(size),

View File

@ -57,7 +57,7 @@ class CartridgeMDM : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeMDM(const BytePtr& image, uInt32 size, const string& md5, CartridgeMDM(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeMDM() = default; virtual ~CartridgeMDM() = default;
@ -163,7 +163,7 @@ class CartridgeMDM : public Cartridge
private: private:
// Pointer to a dynamically allocated ROM image of the cartridge // Pointer to a dynamically allocated ROM image of the cartridge
BytePtr myImage; ByteBuffer myImage;
// Size of the ROM image // Size of the ROM image
uInt32 mySize; uInt32 mySize;

View File

@ -19,7 +19,7 @@
#include "CartMNetwork.hxx" #include "CartMNetwork.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeMNetwork::CartridgeMNetwork(const BytePtr& image, uInt32 size, CartridgeMNetwork::CartridgeMNetwork(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
mySize(size), mySize(size),
@ -29,7 +29,7 @@ CartridgeMNetwork::CartridgeMNetwork(const BytePtr& image, uInt32 size,
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CartridgeMNetwork::initialize(const BytePtr& image, uInt32 size) void CartridgeMNetwork::initialize(const ByteBuffer& image, uInt32 size)
{ {
// Allocate array for the ROM image // Allocate array for the ROM image
myImage = make_unique<uInt8[]>(size); myImage = make_unique<uInt8[]>(size);

View File

@ -73,7 +73,7 @@ class CartridgeMNetwork : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeMNetwork(const BytePtr& image, uInt32 size, const string& md5, CartridgeMNetwork(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeMNetwork() = default; virtual ~CartridgeMNetwork() = default;
@ -162,7 +162,7 @@ class CartridgeMNetwork : public Cartridge
/** /**
Class initialization Class initialization
*/ */
void initialize(const BytePtr& image, uInt32 size); void initialize(const ByteBuffer& image, uInt32 size);
/** /**
Install pages for the specified 256 byte bank of RAM Install pages for the specified 256 byte bank of RAM
@ -195,7 +195,7 @@ class CartridgeMNetwork : public Cartridge
private: private:
// Pointer to a dynamically allocated ROM image of the cartridge // Pointer to a dynamically allocated ROM image of the cartridge
BytePtr myImage; ByteBuffer myImage;
// The 16K ROM image of the cartridge (works for E78K too) // The 16K ROM image of the cartridge (works for E78K too)
//uInt8 myImage[BANK_SIZE * 8]; //uInt8 myImage[BANK_SIZE * 8];

View File

@ -19,7 +19,7 @@
#include "CartSB.hxx" #include "CartSB.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeSB::CartridgeSB(const BytePtr& image, uInt32 size, CartridgeSB::CartridgeSB(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
mySize(size), mySize(size),

View File

@ -46,7 +46,7 @@ class CartridgeSB : public Cartridge
@param md5 The md5sum of the ROM image @param md5 The md5sum of the ROM image
@param settings A reference to the various settings (read-only) @param settings A reference to the various settings (read-only)
*/ */
CartridgeSB(const BytePtr& image, uInt32 size, const string& md5, CartridgeSB(const ByteBuffer& image, uInt32 size, const string& md5,
const Settings& settings); const Settings& settings);
virtual ~CartridgeSB() = default; virtual ~CartridgeSB() = default;
@ -152,7 +152,7 @@ class CartridgeSB : public Cartridge
private: private:
// The 128-256K ROM image and size of the cartridge // The 128-256K ROM image and size of the cartridge
BytePtr myImage; ByteBuffer myImage;
uInt32 mySize; uInt32 mySize;
// Indicates the offset into the ROM image (aligns to current bank) // Indicates the offset into the ROM image (aligns to current bank)

View File

@ -19,7 +19,7 @@
#include "CartUA.hxx" #include "CartUA.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeUA::CartridgeUA(const BytePtr& image, uInt32 size, CartridgeUA::CartridgeUA(const ByteBuffer& image, uInt32 size,
const string& md5, const Settings& settings) const string& md5, const Settings& settings)
: Cartridge(settings, md5), : Cartridge(settings, md5),
myBankOffset(0) myBankOffset(0)

Some files were not shown because too many files have changed in this diff Show More