summaryrefslogtreecommitdiff
path: root/sidplay-libs-2.1.0/libsidplay/include/sidplay/SidTune.h
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2009-08-16 20:56:21 +0200
committerGravatar waker <wakeroid@gmail.com>2009-08-16 21:14:59 +0200
commit1cdc11fdf2b5f01c3dd9370f5adc3b05159fe55c (patch)
tree4637a616e1efbb19eadcbe8f7546e324e6f1bd7b /sidplay-libs-2.1.0/libsidplay/include/sidplay/SidTune.h
parent1e7c5ae1fa743a73fbc0c1831201271691c6ae95 (diff)
moved libsidplay2
Diffstat (limited to 'sidplay-libs-2.1.0/libsidplay/include/sidplay/SidTune.h')
-rw-r--r--sidplay-libs-2.1.0/libsidplay/include/sidplay/SidTune.h356
1 files changed, 0 insertions, 356 deletions
diff --git a/sidplay-libs-2.1.0/libsidplay/include/sidplay/SidTune.h b/sidplay-libs-2.1.0/libsidplay/include/sidplay/SidTune.h
deleted file mode 100644
index f544afb6..00000000
--- a/sidplay-libs-2.1.0/libsidplay/include/sidplay/SidTune.h
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * /home/ms/files/source/libsidtune/RCS/SidTune.h,v
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef SIDTUNE_H
-#define SIDTUNE_H
-
-
-#include "sidtypes.h"
-#include "Buffer.h"
-#include "SmartPtr.h"
-
-#include <fstream>
-
-
-const uint_least16_t SIDTUNE_MAX_SONGS = 256;
-// Also PSID file format limit.
-
-const uint_least16_t SIDTUNE_MAX_CREDIT_STRINGS = 10;
-const uint_least16_t SIDTUNE_MAX_CREDIT_STRLEN = 80+1;
-// 80 characters plus terminating zero.
-
-const uint_least32_t SIDTUNE_MAX_MEMORY = 65536;
-const uint_least32_t SIDTUNE_MAX_FILELEN = 65536+2+0x7C;
-// C64KB+LOAD+PSID
-
-const int SIDTUNE_SPEED_VBI = 0; // Vertical-Blanking-Interrupt
-const int SIDTUNE_SPEED_CIA_1A = 60; // CIA 1 Timer A
-
-const int SIDTUNE_CLOCK_UNKNOWN = 0x00;
-const int SIDTUNE_CLOCK_PAL = 0x01; // These are also used in the
-const int SIDTUNE_CLOCK_NTSC = 0x02; // emulator engine!
-const int SIDTUNE_CLOCK_ANY = (SIDTUNE_CLOCK_PAL | SIDTUNE_CLOCK_NTSC);
-
-const int SIDTUNE_SIDMODEL_UNKNOWN = 0x00;
-const int SIDTUNE_SIDMODEL_6581 = 0x01; // These are also used in the
-const int SIDTUNE_SIDMODEL_8580 = 0x02; // emulator engine!
-const int SIDTUNE_SIDMODEL_ANY = (SIDTUNE_SIDMODEL_6581 | SIDTUNE_SIDMODEL_8580);
-
-const int SIDTUNE_COMPATIBILITY_C64 = 0x00; // File is C64 compatible
-const int SIDTUNE_COMPATIBILITY_PSID = 0x01; // File is PSID specific
-const int SIDTUNE_COMPATIBILITY_R64 = 0x02; // File is Real C64 only
-
-
-// Required to export template
-#ifndef _SidTune_cpp_
-extern
-#endif
-template class SID_EXTERN Buffer_sidtt<const uint_least8_t>;
-
-struct SidTuneInfo
-{
- // An instance of this structure is used to transport values to
- // and from SidTune objects.
-
- // You must read (i.e. activate) sub-song specific information
- // via:
- // const SidTuneInfo& tuneInfo = SidTune[songNumber];
- // const SidTuneInfo& tuneInfo = SidTune.getInfo();
- // void SidTune.getInfo(tuneInfo&);
-
- // Consider the following fields as read-only, because the SidTune class
- // does not provide an implementation of: bool setInfo(const SidTuneInfo&).
- // Currently, the only way to get the class to accept values which
- // are written to these fields is by creating a derived class.
-
- const char* formatString; // the name of the identified file format
- const char* statusString; // error/status message of last operation
-
- const char* speedString; // describing the speed a song is running at
-
- uint_least16_t loadAddr;
- uint_least16_t initAddr;
- uint_least16_t playAddr;
-
- uint_least16_t songs;
- uint_least16_t startSong;
-
- // The SID chip base address(es) used by the sidtune.
- uint_least16_t sidChipBase1; // 0xD400 (normal, 1st SID)
- uint_least16_t sidChipBase2; // 0xD?00 (2nd SID) or 0 (no 2nd SID)
-
- // Available after song initialization.
- //
- uint_least16_t irqAddr; // if (playAddr == 0), interrupt handler has been
- // installed and starts calling the C64 player
- // at this address
- uint_least16_t currentSong; // the one that has been initialized
- uint_least8_t songSpeed; // intended speed, see top
- uint_least8_t clockSpeed; // -"-
- uint_least8_t relocStartPage; // First available page for relocation
- uint_least8_t relocPages; // Number of pages available for relocation
- bool musPlayer; // whether Sidplayer routine has been installed
- int sidModel; // Sid Model required for this sid
- int compatibility; // compatibility requirements
- bool fixLoad; // whether load address might be duplicate
- uint_least16_t songLength; // --- not yet supported ---
- //
- // Song title, credits, ...
- // 0 = Title, 1 = Author, 2 = Copyright/Publisher
- //
- uint_least8_t numberOfInfoStrings; // the number of available text info lines
- char* infoString[SIDTUNE_MAX_CREDIT_STRINGS];
- //
- uint_least16_t numberOfCommentStrings; // --- not yet supported ---
- char ** commentString; // --- not yet supported ---
- //
- uint_least32_t dataFileLen; // length of single-file sidtune file
- uint_least32_t c64dataLen; // length of raw C64 data without load address
- char* path; // path to sidtune files; "", if cwd
- char* dataFileName; // a first file: e.g. "foo.c64"; "", if none
- char* infoFileName; // a second file: e.g. "foo.sid"; "", if none
- //
-};
-
-
-class SID_EXTERN SidTune
-{
-
- public: // ----------------------------------------------------------------
-
- // If your opendir() and readdir()->d_name return path names
- // that contain the forward slash (/) as file separator, but
- // your operating system uses a different character, there are
- // extra functions that can deal with this special case. Set
- // separatorIsSlash to true if you like path names to be split
- // correctly.
- // You do not need these extra functions if your systems file
- // separator is the forward slash.
- //
- // Load a sidtune from a file.
- //
- // To retrieve data from standard input pass in filename "-".
- // If you want to override the default filename extensions use this
- // contructor. Please note, that if the specified ``sidTuneFileName''
- // does exist and the loader is able to determine its file format,
- // this function does not try to append any file name extension.
- // See ``sidtune.cpp'' for the default list of file name extensions.
- // You can specific ``sidTuneFileName = 0'', if you do not want to
- // load a sidtune. You can later load one with open().
- SidTune(const char* fileName, const char **fileNameExt = 0,
- const bool separatorIsSlash = false);
-
- // Load a single-file sidtune from a memory buffer.
- // Currently supported: PSID format
- SidTune(const uint_least8_t* oneFileFormatSidtune, const uint_least32_t sidtuneLength);
-
- virtual ~SidTune();
-
- // The sidTune class does not copy the list of file name extensions,
- // so make sure you keep it. If the provided pointer is 0, the
- // default list will be activated. This is a static list which
- // is used by all SidTune objects.
- void setFileNameExtensions(const char **fileNameExt);
-
- // Load a sidtune into an existing object.
- // From a file.
- bool load(const char* fileName, const bool separatorIsSlash = false);
-
- // From a buffer.
- bool read(const uint_least8_t* sourceBuffer, const uint_least32_t bufferLen);
-
- // Select sub-song (0 = default starting song)
- // and retrieve active song information.
- const SidTuneInfo& operator[](const uint_least16_t songNum);
-
- // Select sub-song (0 = default starting song)
- // and return active song number out of [1,2,..,SIDTUNE_MAX_SONGS].
- uint_least16_t selectSong(const uint_least16_t songNum);
-
- // Retrieve sub-song specific information.
- // Beware! Still member-wise copy!
- const SidTuneInfo& getInfo();
-
- // Get a copy of sub-song specific information.
- // Beware! Still member-wise copy!
- void getInfo(SidTuneInfo&);
-
- // Determine current state of object (true = okay, false = error).
- // Upon error condition use ``getInfo'' to get a descriptive
- // text string in ``SidTuneInfo.statusString''.
- operator bool() { return status; }
- bool getStatus() { return status; }
-
- // Whether sidtune uses two SID chips.
- bool isStereo()
- {
- return (info.sidChipBase1!=0 && info.sidChipBase2!=0);
- }
-
- // Copy sidtune into C64 memory (64 KB).
- bool placeSidTuneInC64mem(uint_least8_t* c64buf);
-
- // --- file save & format conversion ---
-
- // These functions work for any successfully created object.
- // overWriteFlag: true = Overwrite existing file.
- // false = Default, return error when file already
- // exists.
- // One could imagine an "Are you sure ?"-checkbox before overwriting
- // any file.
- // returns: true = Successful, false = Error condition.
- bool saveC64dataFile( const char* destFileName, const bool overWriteFlag = false );
- bool saveSIDfile( const char* destFileName, const bool overWriteFlag = false );
- bool savePSIDfile( const char* destFileName, const bool overWriteFlag = false );
-
- // This function can be used to remove a duplicate C64 load address in
- // the C64 data (example: FE 0F 00 10 4C ...). A duplicate load address
- // of offset 0x02 is indicated by the ``fixLoad'' flag in the SidTuneInfo
- // structure.
- //
- // The ``force'' flag here can be used to remove the first load address
- // and set new INIT/PLAY addresses regardless of whether a duplicate
- // load address has been detected and indicated by ``fixLoad''.
- // For instance, some position independent sidtunes contain a load address
- // of 0xE000, but are loaded to 0x0FFE and call the player code at 0x1000.
- //
- // Do not forget to save the sidtune file.
- void fixLoadAddress(const bool force = false, uint_least16_t initAddr = 0,
- uint_least16_t playAddr = 0);
-
- // Does not affect status of object, and therefore can be used
- // to load files. Error string is put into info.statusString, though.
- bool loadFile(const char* fileName, Buffer_sidtt<const uint_least8_t>& bufferRef);
-
- bool saveToOpenFile( std::ofstream& toFile, const uint_least8_t* buffer, uint_least32_t bufLen );
-
- protected: // -------------------------------------------------------------
-
- SidTuneInfo info;
- bool status;
-
- uint_least8_t songSpeed[SIDTUNE_MAX_SONGS];
- uint_least8_t clockSpeed[SIDTUNE_MAX_SONGS];
- uint_least16_t songLength[SIDTUNE_MAX_SONGS];
-
- // holds text info from the format headers etc.
- char infoString[SIDTUNE_MAX_CREDIT_STRINGS][SIDTUNE_MAX_CREDIT_STRLEN];
-
- // See instructions at top.
- bool isSlashedFileName;
-
- public:
- // For files with header: offset to real data
- uint_least32_t fileOffset;
- protected:
-
- // Needed for MUS/STR player installation.
- uint_least16_t musDataLen;
-
- public:
- Buffer_sidtt<const uint_least8_t> cache;
-
- protected:
-
- // Filename extensions to append for various file types.
- static const char** fileNameExtensions;
-
- // --- protected member functions ---
-
- // Convert 32-bit PSID-style speed word to internal tables.
- void convertOldStyleSpeedToTables(uint_least32_t speed,
- int clock = SIDTUNE_CLOCK_PAL);
-
- // Check SidTuneInfo fields for all real c64 only formats
- bool checkRealC64Info(uint_least32_t speed);
- // Check the init address is legal for real C64 only tunes
- bool checkRealC64Init(void);
- // Check for valid relocation information
- bool checkRelocInfo(void);
- // Common address resolution procedure
- bool resolveAddrs(const uint_least8_t* c64data);
-
- // Support for various file formats.
-
- virtual bool PSID_fileSupport(const void* buffer, const uint_least32_t bufLen);
- virtual bool PSID_fileSupportSave(std::ofstream& toFile, const uint_least8_t* dataBuffer);
-
- virtual bool SID_fileSupport(const void* dataBuffer, uint_least32_t dataBufLen,
- const void* sidBuffer, uint_least32_t sidBufLen);
- virtual bool SID_fileSupportSave(std::ofstream& toFile);
-
- virtual bool MUS_fileSupport(Buffer_sidtt<const uint_least8_t>& musBufRef,
- Buffer_sidtt<const uint_least8_t>& strBufRef);
- virtual bool MUS_detect(const void* buffer, const uint_least32_t bufLen,
- uint_least32_t& voice3Index);
- virtual bool MUS_mergeParts(Buffer_sidtt<const uint_least8_t>& musBufRef,
- Buffer_sidtt<const uint_least8_t>& strBufRef);
- virtual void MUS_setPlayerAddress();
- virtual void MUS_installPlayer(uint_least8_t *c64buf);
- virtual int MUS_decodePetLine(SmartPtr_sidtt<const uint_least8_t>&, char*);
-
- virtual bool INFO_fileSupport(const void* dataBuffer, uint_least32_t dataBufLen,
- const void* infoBuffer, uint_least32_t infoBufLen);
-
- // Error and status message strings.
- static const char* txt_songNumberExceed;
- static const char* txt_empty;
- static const char* txt_unrecognizedFormat;
- static const char* txt_noDataFile;
- static const char* txt_notEnoughMemory;
- static const char* txt_cantLoadFile;
- static const char* txt_cantOpenFile;
- static const char* txt_fileTooLong;
- static const char* txt_dataTooLong;
- static const char* txt_cantCreateFile;
- static const char* txt_fileIoError;
- static const char* txt_VBI;
- static const char* txt_CIA;
- static const char* txt_noErrors;
- static const char* txt_na;
- static const char* txt_badAddr;
- static const char* txt_badReloc;
-
- private: // ---------------------------------------------------------------
-
- void init();
- void cleanup();
-#if !defined(SIDTUNE_NO_STDIN_LOADER)
- void getFromStdIn();
-#endif
- void getFromFiles(const char* name);
-
- void deleteFileNameCopies();
-
- // Try to retrieve single-file sidtune from specified buffer.
- void getFromBuffer(const uint_least8_t* const buffer, const uint_least32_t bufferLen);
-
- // Cache the data of a single-file or two-file sidtune and its
- // corresponding file names.
- bool acceptSidTune(const char* dataFileName, const char* infoFileName,
- Buffer_sidtt<const uint_least8_t>& buf);
-
- bool createNewFileName(Buffer_sidtt<char>& destString,
- const char* sourceName, const char* sourceExt);
-
- private: // prevent copying
- SidTune(const SidTune&);
- SidTune& operator=(SidTune&);
-};
-
-#endif /* SIDTUNE_H */