MCPcopy Create free account
hub / github.com/ObEngine/ObEngine / write

Method write

extlibs/soloud/src/audiosource/tedsid/sid.cpp:280–408  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

278}
279
280void SIDsound::write(unsigned int adr, unsigned char value)
281{
282 lastByteWritten = value;
283
284 SIDVoice &v = voice[adr/7];
285 switch (adr) {
286 case 0:
287 case 7:
288 case 14:
289 v.freq = (unsigned short)((v.freq & 0xff00) | value);
290 v.add = (unsigned int)(((double)v.freq
291 * sidBaseFreq) * 16.0 / sampleRate + 0.5);
292 break;
293
294 case 1:
295 case 8:
296 case 15:
297 v.freq = (unsigned short)((v.freq & 0xff) | (value << 8));
298 v.add = (unsigned int)(((double)v.freq
299 * sidBaseFreq) * 16.0 / sampleRate + 0.5);
300 break;
301
302 case 2:
303 case 9:
304 case 16:
305 v.pw = (unsigned short)((v.pw & 0x0f00) | value);
306 break;
307
308 case 3:
309 case 10:
310 case 17:
311 v.pw = (unsigned short)((v.pw & 0xff) | ((value & 0xf) << 8));
312 break;
313
314 case 4:
315 case 11:
316 case 18:
317 if ((value & 1) != (unsigned char) v.gate) {
318 if (value & 1) {
319 // gate on
320 v.egState = EG_ATTACK;
321 v.envCounterCompare = v.envAttackAdd;
322 } else {
323 // gate off
324#if 00
325 if (v.egState != EG_FROZEN)
326#endif
327 v.egState = EG_RELEASE;
328 v.envCounterCompare = v.envReleaseSub;
329 }
330 v.gate = value & 1;
331 }
332 v.modulatedBy->sync = value & 2;
333 v.ring = value & 4;
334 if ((value & 8) && !v.test) {
335 v.accu = 0; //(model_ >= SID8580) ? 0 : 0;
336 unsigned int bit19 = (v.shiftReg >> 19) & 1;
337 v.shiftReg = (v.shiftReg & 0x7ffffd) | ((bit19^1) << 1);

Callers 5

tickMethod · 0.45
sol.hppFile · 0.45
callMethod · 0.45
pushMethod · 0.45

Calls

no outgoing calls

Tested by

no test coverage detected