libsidplayfp 1.0.3
MUS.h
00001 /*
00002  * This file is part of libsidplayfp, a SID player engine.
00003  *
00004  * Copyright 2012-2013 Leandro Nini <drfiemost@users.sourceforge.net>
00005  *
00006  *  This program is free software; you can redistribute it and/or modify
00007  *  it under the terms of the GNU General Public License as published by
00008  *  the Free Software Foundation; either version 2 of the License, or
00009  *  (at your option) any later version.
00010  *
00011  *  This program is distributed in the hope that it will be useful,
00012  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  *  GNU General Public License for more details.
00015  *
00016  *  You should have received a copy of the GNU General Public License
00017  *  along with this program; if not, write to the Free Software
00018  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
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:    // prevent copying
00070     MUS(const MUS&);
00071     MUS& operator=(MUS&);
00072 };
00073 
00074 #endif // MUS_H