libsidplayfp  1.0.3
psiddrv.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 PSIDDRV_H
00022 #define PSIDDRV_H
00023 
00024 #include <stdint.h>
00025 
00026 class SidTuneInfo;
00027 class sidmemory;
00028 
00029 class psiddrv
00030 {
00031 private:
00032     const SidTuneInfo *m_tuneInfo;
00033     const char *m_errorString;
00034 
00035     uint8_t *reloc_driver;
00036     int      reloc_size;
00037 
00038     uint_least16_t m_driverAddr;
00039     uint_least16_t m_driverLength;
00040     uint_least16_t m_powerOnDelay;
00041 
00042 private:
00043     static uint8_t psid_driver[];
00044 
00045 private:
00050     uint8_t iomap(uint_least16_t addr) const;
00051 
00052 public:
00053     psiddrv(const SidTuneInfo *tuneInfo) :
00054         m_tuneInfo(tuneInfo),
00055         m_powerOnDelay(0) {}
00056 
00062     void powerOnDelay(uint_least16_t delay) { m_powerOnDelay = delay; }
00063 
00069     bool drvReloc(sidmemory *mem);
00070 
00077     void install(sidmemory *mem) const;
00078 
00084     const char* errorString() const { return m_errorString; }
00085 
00086     uint_least16_t driverAddr() const { return m_driverAddr; }
00087     uint_least16_t driverLength() const { return m_driverLength; }
00088 };
00089 
00090 #endif