111 #include "sidplayfp/sidbuilder.h"
112 #include "sidplayfp/event.h"
120 # define XSID_DEBUG DEBUG
133 const char *
const m_name;
135 event_phase_t m_phase;
142 uint_least16_t address;
143 uint_least16_t cycleCount;
144 enum {FM_NONE = 0, FM_HUELS, FM_GALWAY} mode;
146 uint_least8_t volShift;
147 uint_least8_t sampleLimit;
152 uint_least16_t samEndAddr;
153 uint_least16_t samRepeatAddr;
154 uint_least16_t samPeriod;
155 uint_least8_t samRepeat;
156 uint_least8_t samScale;
157 enum {SO_LOWHIGH = 0, SO_HIGHLOW = 1};
158 uint_least8_t samOrder;
159 uint_least8_t samNibble;
162 uint_least8_t galTones;
163 uint_least8_t galInitLength;
164 uint_least8_t galLength;
165 uint_least8_t galVolume;
166 uint_least8_t galLoopWait;
167 uint_least8_t galNullWait;
170 event_clock_t cycles;
171 event_clock_t outputs;
177 void sampleInit (
void);
178 void sampleClock (
void);
179 void galwayInit (
void);
180 void galwayClock (
void);
183 uint_least8_t convertAddr(uint_least8_t addr)
184 {
return ((addr & 0x3) | ((addr >> 3) & 0x0c)); }
187 uint8_t read (uint_least8_t addr)
188 {
return reg[convertAddr (addr)]; }
189 void write (uint_least8_t addr, uint8_t data)
190 { reg[convertAddr (addr)] = data; }
191 int8_t output (
void);
193 {
return mode == FM_GALWAY; }
195 uint_least8_t limit (
void)
196 {
return sampleLimit; }
198 inline void checkForInit (
void);
199 inline int8_t sampleCalculate (
void);
200 inline void galwayTonePeriod (
void);
203 operator bool()
const {
return (active); }
216 static const char *credit;
221 static const int8_t sampleConvertTable[16];
226 void checkForInit (
channel *ch);
227 inline void setSidData0x18 (
void);
228 inline void recallSidData0x18 (
void);
229 int8_t sampleOutput (
void);
230 void sampleOffsetCalc (
void);
231 virtual uint8_t readMemByte (uint_least16_t addr) = 0;
232 virtual void writeMemByte (uint8_t data) = 0;
238 void reset () { sidemu::reset (); }
239 void reset (uint8_t);
240 uint8_t read (uint_least8_t) {
return 0; }
241 void write (uint_least8_t, uint8_t) { ; }
242 const char *credits (
void) {
return credit;}
245 uint8_t read (uint_least16_t) {
return 0; }
246 void write (uint_least16_t addr, uint8_t data);
247 void mute (
bool enable);
248 bool isMuted (
void) {
return muted; }
249 void suppress (
bool enable);
251 void sidSamples (
bool enable)
252 { _sidSamples = enable; }
254 bool storeSidData0x18 (uint8_t data);