00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef MUS_H
00022 #define MUS_H
00023
00024 #include "SidTuneBase.h"
00025
00026 class MUS : public SidTuneBase
00027 {
00028 private:
00030 uint_least16_t musDataLen;
00031
00032 private:
00033 bool resolveAddrs(const uint_least8_t *c64data);
00034 bool checkRelocInfo();
00035
00036 static bool detect(const uint_least8_t* buffer, uint_least32_t bufLen,
00037 uint_least32_t& voice3Index);
00038
00039 bool mergeParts(Buffer_sidtt<const uint_least8_t>& musBuf,
00040 Buffer_sidtt<const uint_least8_t>& strBuf);
00041
00042 void tryLoad(Buffer_sidtt<const uint_least8_t>& musBuf,
00043 Buffer_sidtt<const uint_least8_t>& strBuf,
00044 SmartPtr_sidtt<const uint8_t> &spPet,
00045 uint_least32_t voice3Index,
00046 bool init);
00047
00048 protected:
00049 MUS() {}
00050
00051 void installPlayer(sidmemory *mem);
00052
00053 void setPlayerAddress();
00054
00055 virtual void acceptSidTune(const char* dataFileName, const char* infoFileName,
00056 Buffer_sidtt<const uint_least8_t>& buf, bool isSlashedFileName);
00057
00058 public:
00059 virtual ~MUS() {}
00060
00061 static SidTuneBase* load(Buffer_sidtt<const uint_least8_t>& dataBuf, bool init = false);
00062 static SidTuneBase* load(Buffer_sidtt<const uint_least8_t>& musBuf,
00063 Buffer_sidtt<const uint_least8_t>& strBuf,
00064 uint_least32_t fileOffset,
00065 bool init = false);
00066
00067 virtual bool placeSidTuneInC64mem(sidmemory* mem);
00068
00069 private:
00070 MUS(const MUS&);
00071 MUS& operator=(MUS&);
00072 };
00073
00074 #endif // MUS_H