libsidplayfp  1.8.3
SidTuneInfoImpl.h
1 /*
2  * This file is part of libsidplayfp, a SID player engine.
3  *
4  * Copyright 2011-2015 Leandro Nini
5  * Copyright 2007-2010 Antti Lankila
6  * Copyright 2000 Simon White
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 #ifndef SIDTUNEINFOIMPL_H
24 #define SIDTUNEINFOIMPL_H
25 
26 #include <stdint.h>
27 #include <vector>
28 #include <string>
29 
30 #include "sidplayfp/SidTuneInfo.h"
31 
36 {
37 public:
38  const char* m_formatString;
39 
40  unsigned int m_songs;
41  unsigned int m_startSong;
42  unsigned int m_currentSong;
43 
44  int m_songSpeed;
45 
46  clock_t m_clockSpeed;
47 
48  compatibility_t m_compatibility;
49 
50  uint_least32_t m_dataFileLen;
51 
52  uint_least32_t m_c64dataLen;
53 
54  uint_least16_t m_loadAddr;
55  uint_least16_t m_initAddr;
56  uint_least16_t m_playAddr;
57 
58  uint_least8_t m_relocStartPage;
59 
60  uint_least8_t m_relocPages;
61 
62  std::string m_path;
63 
64  std::string m_dataFileName;
65 
66  std::string m_infoFileName;
67 
68  std::vector<model_t> m_sidModels;
69 
70  std::vector<uint_least16_t> m_sidChipAddresses;
71 
72  std::vector<std::string> m_infoString;
73 
74  std::vector<std::string> m_commentString;
75 
76  bool m_fixLoad;
77 
78 private: // prevent copying
80  SidTuneInfoImpl& operator=(SidTuneInfoImpl&);
81 
82 public:
83  SidTuneInfoImpl() :
84  m_formatString("N/A"),
85  m_songs(0),
86  m_startSong(0),
87  m_currentSong(0),
88  m_songSpeed(SPEED_VBI),
89  m_clockSpeed(CLOCK_UNKNOWN),
90  m_compatibility(COMPATIBILITY_C64),
91  m_dataFileLen(0),
92  m_c64dataLen(0),
93  m_loadAddr(0),
94  m_initAddr(0),
95  m_playAddr(0),
96  m_relocStartPage(0),
97  m_relocPages(0),
98  m_fixLoad(false)
99  {
100  m_sidModels.push_back(SIDMODEL_UNKNOWN);
101  m_sidChipAddresses.push_back(0xd400);
102 
103  }
104 
105  uint_least16_t loadAddr() const { return m_loadAddr; }
106 
107  uint_least16_t initAddr() const { return m_initAddr; }
108 
109  uint_least16_t playAddr() const { return m_playAddr; }
110 
111  unsigned int songs() const { return m_songs; }
112 
113  unsigned int startSong() const { return m_startSong; }
114 
115  unsigned int currentSong() const { return m_currentSong; }
116 
117  uint_least16_t sidChipBase1() const { return m_sidChipAddresses[0]; }
118  uint_least16_t sidChipBase2() const { return m_sidChipAddresses.size() > 1 ? m_sidChipAddresses[1] : SIDMODEL_UNKNOWN; }
119 
120  uint_least16_t sidChipBase(unsigned int i) const
121  {
122  return i < m_sidChipAddresses.size() ? m_sidChipAddresses[i] : 0;
123  }
124 
125  bool isStereo() const { return m_sidChipAddresses.size() > 1; }
126 
127  int sidChips() const { return m_sidChipAddresses.size(); }
128 
129  int songSpeed() const { return m_songSpeed; }
130 
131  uint_least8_t relocStartPage() const { return m_relocStartPage; }
132 
133  uint_least8_t relocPages() const { return m_relocPages; }
134 
135  model_t sidModel1() const { return m_sidModels[0]; }
136  model_t sidModel2() const { return m_sidModels.size() > 1 ? m_sidModels[1] : SIDMODEL_UNKNOWN; }
137 
138  model_t sidModel(unsigned int i) const
139  {
140  return i < m_sidModels.size() ? m_sidModels[i] : SIDMODEL_UNKNOWN;
141  }
142 
143  compatibility_t compatibility() const { return m_compatibility; }
144 
145  unsigned int numberOfInfoStrings() const { return m_infoString.size(); }
146  const char* infoString(unsigned int i) const { return i<numberOfInfoStrings()?m_infoString[i].c_str():""; }
147 
148  unsigned int numberOfCommentStrings() const { return m_commentString.size(); }
149  const char* commentString(unsigned int i) const { return i<numberOfCommentStrings()?m_commentString[i].c_str():""; }
150 
151  uint_least32_t dataFileLen() const { return m_dataFileLen; }
152 
153  uint_least32_t c64dataLen() const { return m_c64dataLen; }
154 
155  clock_t clockSpeed() const { return m_clockSpeed; }
156 
157  const char* formatString() const { return m_formatString; }
158 
159  bool fixLoad() const { return m_fixLoad; }
160 
161  const char* path() const { return m_path.c_str(); }
162 
163  const char* dataFileName() const { return m_dataFileName.c_str(); }
164 
165  const char* infoFileName() const { return !m_infoFileName.empty()?m_infoFileName.c_str():0; }
166 };
167 
168 #endif /* SIDTUNEINFOIMPL_H */
const char * infoString(unsigned int i) const
text info from the format headers etc.
Definition: SidTuneInfoImpl.h:146
unsigned int songs() const
Definition: SidTuneInfoImpl.h:111
static const int SPEED_VBI
Vertical-Blanking-Interrupt.
Definition: SidTuneInfo.h:64
uint_least16_t sidChipBase(unsigned int i) const
Definition: SidTuneInfoImpl.h:120
bool isStereo() const
Definition: SidTuneInfoImpl.h:125
uint_least16_t loadAddr() const
Definition: SidTuneInfoImpl.h:105
uint_least32_t c64dataLen() const
Definition: SidTuneInfoImpl.h:153
uint_least16_t sidChipBase1() const
0xD400 (normal, 1st SID)
Definition: SidTuneInfoImpl.h:117
uint_least16_t playAddr() const
Definition: SidTuneInfoImpl.h:109
model_t sidModel2() const
second SID
Definition: SidTuneInfoImpl.h:136
Definition: SidTuneInfo.h:38
uint_least8_t relocStartPage() const
Definition: SidTuneInfoImpl.h:131
uint_least32_t dataFileLen() const
Definition: SidTuneInfoImpl.h:151
const char * formatString() const
Definition: SidTuneInfoImpl.h:157
File is C64 compatible.
Definition: SidTuneInfo.h:56
unsigned int numberOfCommentStrings() const
Number of comments.
Definition: SidTuneInfoImpl.h:148
int songSpeed() const
Definition: SidTuneInfoImpl.h:129
Definition: SidTuneInfoImpl.h:35
uint_least16_t initAddr() const
Definition: SidTuneInfoImpl.h:107
bool fixLoad() const
Definition: SidTuneInfoImpl.h:159
clock_t clockSpeed() const
Definition: SidTuneInfoImpl.h:155
const char * dataFileName() const
Definition: SidTuneInfoImpl.h:163
model_t sidModel1() const
first SID
Definition: SidTuneInfoImpl.h:135
unsigned int startSong() const
Definition: SidTuneInfoImpl.h:113
model_t sidModel(unsigned int i) const
Definition: SidTuneInfoImpl.h:138
const char * commentString(unsigned int i) const
Used to stash the MUS comment somewhere.
Definition: SidTuneInfoImpl.h:149
unsigned int currentSong() const
Definition: SidTuneInfoImpl.h:115
compatibility_t
Definition: SidTuneInfo.h:55
int sidChips() const
Definition: SidTuneInfoImpl.h:127
const char * path() const
Definition: SidTuneInfoImpl.h:161
unsigned int numberOfInfoStrings() const
the number of available text info lines
Definition: SidTuneInfoImpl.h:145
uint_least8_t relocPages() const
Definition: SidTuneInfoImpl.h:133
uint_least16_t sidChipBase2() const
0xD??0 (2nd SID) or 0 (no 2nd SID)
Definition: SidTuneInfoImpl.h:118
const char * infoFileName() const
Definition: SidTuneInfoImpl.h:165
compatibility_t compatibility() const
Definition: SidTuneInfoImpl.h:143