41
41
42
42
#include < algorithm>
43
43
44
+ #include " core/logger.h"
44
45
#include " spu/externals.h"
45
46
#include " spu/interface.h"
46
47
@@ -71,21 +72,27 @@ void PCSX::SPU::impl::writeRegister(uint32_t reg, uint16_t val) {
71
72
72
73
regArea[(r - 0xc00 ) >> 1 ] = val;
73
74
75
+ // PCSX::PSXSPU_LOGGER::Log("SPU.write, writeRegister %08x: %04x\n", reg, val);
76
+
74
77
// Check if this is one of the voice configuration registers
75
78
if (r >= 0x0c00 && r < 0x0d80 ) {
76
79
int ch = (r >> 4 ) - 0xc0 ; // Figure out which voice it is
77
80
switch (r & 0x0f ) {
78
81
case 0 : // Left volume
79
82
SetVolumeL ((uint8_t )ch, val);
83
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice[%02i] Set Volume L = %04x\n " , ch, val);
80
84
break ;
81
85
case 2 : // Right volume
82
86
SetVolumeR ((uint8_t )ch, val);
87
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice[%02i] Set Volume R = %04x\n " , ch, val);
83
88
break ;
84
89
case 4 : // Pitch
85
90
SetPitch (ch, val);
91
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice[%02i] ADPCM Sample Rate = %04x\n " , ch, val);
86
92
break ;
87
93
case 6 : // Sample start address
88
94
// Brain Dead 13 - align to 16 boundary
95
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice[%02i] ADPCM Start Address = %04x\n " , ch, val);
89
96
s_chan[ch].pStart = spuMemC + (uint32_t )((val << 3 ) & ~0xf );
90
97
break ;
91
98
case 8 : { // Attack/Decay/Sustain/Release (ADSR)
@@ -95,6 +102,7 @@ void PCSX::SPU::impl::writeRegister(uint32_t reg, uint16_t val) {
95
102
(val & (ADSRFlags::AttackShiftMask | ADSRFlags::AttackStepMask)) >> 8 ;
96
103
s_chan[ch].ADSRX .get <exDecayRate>().value = (val & ADSRFlags::DecayShiftMask) >> 4 ;
97
104
s_chan[ch].ADSRX .get <exSustainLevel>().value = val & ADSRFlags::SustainLevelMask;
105
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice[%02i] ADSR = %04x\n " , ch, val);
98
106
// ---------------------------------------------// stuff below is only for debug mode
99
107
100
108
s_chan[ch].ADSR .get <AttackModeExp>().value = (val & ADSRFlags::AttackMode) ? 1 : 0 ;
@@ -138,6 +146,7 @@ void PCSX::SPU::impl::writeRegister(uint32_t reg, uint16_t val) {
138
146
(val & (ADSRFlags::SustainShiftMask | ADSRFlags::SustainStepMask)) >> 6 ;
139
147
s_chan[ch].ADSRX .get <exReleaseModeExp>().value = (val & ADSRFlags::ReleaseMode) ? 1 : 0 ;
140
148
s_chan[ch].ADSRX .get <exReleaseRate>().value = val & ADSRFlags::ReleaseShiftMask;
149
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice[%02i] ADSR2 = %04x\n " , ch, val);
141
150
// ----------------------------------------------// stuff below is only for debug mode
142
151
143
152
s_chan[ch].ADSR .get <SustainModeExp>().value = (val & ADSRFlags::SustainMode) ? 1 : 0 ;
@@ -183,14 +192,16 @@ void PCSX::SPU::impl::writeRegister(uint32_t reg, uint16_t val) {
183
192
}
184
193
} break ;
185
194
case 12 : // TODO: Emulate ADSR Volume
195
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice[%02i] ADSR Volume = %04x, unimplemented\n " , ch, val);
186
196
break ;
187
197
// ------------------------------------------------//
188
198
case 14 : // loop?
189
199
// WaitForSingleObject(s_chan[ch].hMutex,2000); // -> no multithread fuckups
190
200
// align to 16-byte boundary
191
201
s_chan[ch].pLoop = spuMemC + ((uint32_t )((val << 3 ) & ~0xf ));
192
- s_chan[ch].data .get <Chan::IgnoreLoop>().value = true ;
193
- // ReleaseMutex(s_chan[ch].hMutex); // -> oki, on with the thread
202
+ // s_chan[ch].data.get<Chan::IgnoreLoop>().value = true;
203
+ // ReleaseMutex(s_chan[ch].hMutex); // -> oki, on with the thread
204
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice[%02i] ADPCM Repeat Address = %04x\n " , ch, val);
194
205
break ;
195
206
// ------------------------------------------------//
196
207
}
@@ -202,6 +213,7 @@ void PCSX::SPU::impl::writeRegister(uint32_t reg, uint16_t val) {
202
213
switch (r) {
203
214
case H_SPUaddr:
204
215
spuAddr = (uint32_t )val * 8 ;
216
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Data Transfer Address = %04x\n " , val);
205
217
break ;
206
218
207
219
case H_SPUdata:
@@ -210,15 +222,18 @@ void PCSX::SPU::impl::writeRegister(uint32_t reg, uint16_t val) {
210
222
if (spuAddr > 0x7ffff ) {
211
223
spuAddr = 0 ;
212
224
}
225
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Data Transfer Fifo = %04x\n " , val);
213
226
break ;
214
227
215
228
case H_SPUctrl:
216
229
spuCtrl = val;
217
230
m_noiseClock = (spuCtrl & (ControlFlags::NoiseShiftMask | ControlFlags::NoiseStepMask)) >> 8 ;
231
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, CTRL = %04x\n " , val);
218
232
break ;
219
233
220
234
case H_SPUstat:
221
235
spuStat = val & 0xf800 ;
236
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, STAT = %04x, (read-only)\n " , val);
222
237
break ;
223
238
224
239
case H_SPUReverbAddr:
@@ -231,205 +246,255 @@ void PCSX::SPU::impl::writeRegister(uint32_t reg, uint16_t val) {
231
246
rvb.CurrAddr = rvb.StartAddr ;
232
247
}
233
248
}
249
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, mBASE = %04x\n " , val);
234
250
break ;
235
251
236
252
case H_SPUirqAddr:
237
253
spuIrq = val;
238
254
pSpuIrq = spuMemC + ((uint32_t )val << 3 );
255
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, IRQ Address = %04x\n " , val);
239
256
break ;
240
257
241
258
case H_SPUrvolL:
242
259
rvb.VolLeft = val;
260
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, vLOUT = %04x\n " , val);
243
261
break ;
244
262
245
263
case H_SPUrvolR:
246
264
rvb.VolRight = val;
265
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, vROUT = %04x\n " , val);
266
+ break ;
267
+ // -------------------------------------------------//
268
+ case H_ExtLeft:
269
+ // auxprintf("EL %d\n",val);
270
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, External Audio Input Volume Left = %04x, unimplemented\n " , val);
271
+ break ;
272
+ // -------------------------------------------------//
273
+ case H_ExtRight:
274
+ // auxprintf("ER %d\n",val);
275
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, External Audio Input Volume Right = %04x, unimplemented\n " , val);
276
+ break ;
277
+ // -------------------------------------------------//
278
+ case H_SPUmvolL:
279
+ // auxprintf("ML %d\n",val);
280
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Main Volume Left = %04x, unimplemented\n " , val);
281
+ break ;
282
+ // -------------------------------------------------//
283
+ case H_SPUmvolR:
284
+ // auxprintf("MR %d\n",val);
285
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Main Volume Right = %04x, unimplemented\n " , val);
286
+ break ;
287
+ // -------------------------------------------------//
288
+ case H_SPUMute1:
289
+ // auxprintf("M0 %04x\n",val);
290
+ // PCSX::PSXSPU_LOGGER::Log("SPU.write, Voice 0..23 ON/OFF (status) (ENDX) = %04x, (read-only)\n", val);
291
+ break ;
292
+ // -------------------------------------------------//
293
+ case H_SPUMute2:
294
+ // auxprintf("M1 %04x\n",val);
295
+ // PCSX::PSXSPU_LOGGER::Log("SPU.write, Voice 0..23 ON/OFF2 (status) (ENDX) = %04x, (read-only)\n", val);
247
296
break ;
248
- // -------------------------------------------------//
249
-
250
- /*
251
- case H_ExtLeft:
252
- //auxprintf("EL %d\n",val);
253
- break;
254
- //-------------------------------------------------//
255
- case H_ExtRight:
256
- //auxprintf("ER %d\n",val);
257
- break;
258
- //-------------------------------------------------//
259
- case H_SPUmvolL:
260
- //auxprintf("ML %d\n",val);
261
- break;
262
- //-------------------------------------------------//
263
- case H_SPUmvolR:
264
- //auxprintf("MR %d\n",val);
265
- break;
266
- //-------------------------------------------------//
267
- case H_SPUMute1:
268
- //auxprintf("M0 %04x\n",val);
269
- break;
270
- //-------------------------------------------------//
271
- case H_SPUMute2:
272
- //auxprintf("M1 %04x\n",val);
273
- break;
274
- */
275
297
276
298
case H_SPUon1:
277
299
SoundOn (0 , 16 , val);
300
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice 0..23 Key ON = %04x\n " , val);
278
301
break ;
279
302
280
303
case H_SPUon2:
281
304
SoundOn (16 , 24 , val);
305
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice 0..23 Key ON2 = %04x\n " , val);
282
306
break ;
283
307
284
308
case H_SPUoff1:
285
309
SoundOff (0 , 16 , val);
310
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice 0..23 Key OFF = %04x\n " , val);
286
311
break ;
287
312
288
313
case H_SPUoff2:
289
314
SoundOff (16 , 24 , val);
315
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice 0..23 Key OFF2 = %04x\n " , val);
290
316
break ;
291
317
292
318
case H_CDLeft:
293
319
iLeftXAVol = val & 0x7fff ;
294
320
if (cddavCallback) {
295
321
cddavCallback (0 , val);
296
322
}
323
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, CD Audio Input Volume Left = %04x, unimplemented\n " , val);
297
324
break ;
298
325
299
326
case H_CDRight:
300
327
iRightXAVol = val & 0x7fff ;
301
328
if (cddavCallback) {
302
329
cddavCallback (1 , val);
303
330
}
331
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, CD Audio Input Volume Right = %04x, unimplemented\n " , val);
304
332
break ;
305
333
306
334
case H_FMod1:
307
335
FModOn (0 , 16 , val);
336
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice 0..23 Pitch Modulation Enable Flags = %04x\n " , val);
308
337
break ;
309
338
310
339
case H_FMod2:
311
340
FModOn (16 , 24 , val);
341
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice 0..23 Pitch Modulation Enable Flags2 = %04x\n " , val);
312
342
break ;
313
343
314
344
case H_Noise1:
315
345
NoiseOn (0 , 16 , val);
346
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Noise mode enable 0..23 = %04x\n " , val);
316
347
break ;
317
348
318
349
case H_Noise2:
319
350
NoiseOn (16 , 24 , val);
351
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Noise mode enable2 0..23 = %04x\n " , val);
320
352
break ;
321
353
322
354
case H_RVBon1:
323
355
ReverbOn (0 , 16 , val);
356
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Reverb enable 0..23 = %04x\n " , val);
324
357
break ;
325
358
326
359
case H_RVBon2:
327
360
ReverbOn (16 , 24 , val);
361
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Reverb enable2 0..23 = %04x\n " , val);
328
362
break ;
329
363
330
364
case H_Reverb + 0 :
331
-
332
365
rvb.FB_SRC_A = val;
333
366
334
367
// OK, here's the fake REVERB stuff...
335
368
// depending on effect we do more or less delay and repeats... bah
336
369
// still... better than nothing :)
337
370
338
371
SetREVERB (val);
372
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, dAPF1 = %04x\n " , val);
339
373
break ;
340
374
341
375
case H_Reverb + 2 :
342
376
rvb.FB_SRC_B = (int16_t )val;
377
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, dAPF2 = %04x\n " , val);
343
378
break ;
344
379
case H_Reverb + 4 :
345
380
rvb.IIR_ALPHA = (int16_t )val;
381
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, vIIR = %04x\n " , val);
346
382
break ;
347
383
case H_Reverb + 6 :
348
384
rvb.ACC_COEF_A = (int16_t )val;
385
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, vCOMB1 = %04x\n " , val);
349
386
break ;
350
387
case H_Reverb + 8 :
351
388
rvb.ACC_COEF_B = (int16_t )val;
389
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, vCOMB2 = %04x\n " , val);
352
390
break ;
353
391
case H_Reverb + 10 :
354
392
rvb.ACC_COEF_C = (int16_t )val;
393
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, vCOMB3 = %04x\n " , val);
355
394
break ;
356
395
case H_Reverb + 12 :
357
396
rvb.ACC_COEF_D = (int16_t )val;
397
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, vCOMB4 = %04x\n " , val);
358
398
break ;
359
399
case H_Reverb + 14 :
360
400
rvb.IIR_COEF = (int16_t )val;
401
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, vWALL = %04x\n " , val);
361
402
break ;
362
403
case H_Reverb + 16 :
363
404
rvb.FB_ALPHA = (int16_t )val;
405
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, vAPF1 = %04x\n " , val);
364
406
break ;
365
407
case H_Reverb + 18 :
366
408
rvb.FB_X = (int16_t )val;
409
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, vAPF2 = %04x\n " , val);
367
410
break ;
368
411
case H_Reverb + 20 :
369
412
rvb.IIR_DEST_A0 = (int16_t )val;
413
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, mLSAME = %04x\n " , val);
370
414
break ;
371
415
case H_Reverb + 22 :
372
416
rvb.IIR_DEST_A1 = (int16_t )val;
417
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, mRSAME = %04x\n " , val);
373
418
break ;
374
419
case H_Reverb + 24 :
375
420
rvb.ACC_SRC_A0 = (int16_t )val;
421
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, mLCOMB1 = %04x\n " , val);
376
422
break ;
377
423
case H_Reverb + 26 :
378
424
rvb.ACC_SRC_A1 = (int16_t )val;
425
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, mRCOMB1 = %04x\n " , val);
379
426
break ;
380
427
case H_Reverb + 28 :
381
428
rvb.ACC_SRC_B0 = (int16_t )val;
429
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, mLCOMB2 = %04x\n " , val);
382
430
break ;
383
431
case H_Reverb + 30 :
384
432
rvb.ACC_SRC_B1 = (int16_t )val;
433
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, mRCOMB2 = %04x\n " , val);
385
434
break ;
386
435
case H_Reverb + 32 :
387
436
rvb.IIR_SRC_A0 = (int16_t )val;
437
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, dLSAME = %04x\n " , val);
388
438
break ;
389
439
case H_Reverb + 34 :
390
440
rvb.IIR_SRC_A1 = (int16_t )val;
441
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, dRSAME = %04x\n " , val);
391
442
break ;
392
443
case H_Reverb + 36 :
393
444
rvb.IIR_DEST_B0 = (int16_t )val;
445
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, mLDIFF = %04x\n " , val);
394
446
break ;
395
447
case H_Reverb + 38 :
396
448
rvb.IIR_DEST_B1 = (int16_t )val;
449
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, mRDIFF = %04x\n " , val);
397
450
break ;
398
451
case H_Reverb + 40 :
399
452
rvb.ACC_SRC_C0 = (int16_t )val;
453
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, mLCOMB3 = %04x\n " , val);
400
454
break ;
401
455
case H_Reverb + 42 :
402
456
rvb.ACC_SRC_C1 = (int16_t )val;
457
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, mRCOMB3 = %04x\n " , val);
403
458
break ;
404
459
case H_Reverb + 44 :
405
460
rvb.ACC_SRC_D0 = (int16_t )val;
461
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, mLCOMB4 = %04x\n " , val);
406
462
break ;
407
463
case H_Reverb + 46 :
408
464
rvb.ACC_SRC_D1 = (int16_t )val;
465
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, mRCOMB4 = %04x\n " , val);
409
466
break ;
410
467
case H_Reverb + 48 :
411
468
rvb.IIR_SRC_B1 = (int16_t )val;
469
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, dLDIFF = %04x\n " , val);
412
470
break ;
413
471
case H_Reverb + 50 :
414
472
rvb.IIR_SRC_B0 = (int16_t )val;
473
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, dRDIFF = %04x\n " , val);
415
474
break ;
416
475
case H_Reverb + 52 :
417
476
rvb.MIX_DEST_A0 = (int16_t )val;
477
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, mLAPF1 = %04x\n " , val);
418
478
break ;
419
479
case H_Reverb + 54 :
420
480
rvb.MIX_DEST_A1 = (int16_t )val;
481
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, mRAPF1 = %04x\n " , val);
421
482
break ;
422
483
case H_Reverb + 56 :
423
484
rvb.MIX_DEST_B0 = (int16_t )val;
485
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, mLAPF2 = %04x\n " , val);
424
486
break ;
425
487
case H_Reverb + 58 :
426
488
rvb.MIX_DEST_B1 = (int16_t )val;
489
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, mRAPF2 = %04x\n " , val);
427
490
break ;
428
491
case H_Reverb + 60 :
429
492
rvb.IN_COEF_L = (int16_t )val;
493
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, vLIN = %04x\n " , val);
430
494
break ;
431
495
case H_Reverb + 62 :
432
496
rvb.IN_COEF_R = (int16_t )val;
497
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, vRIN = %04x\n " , val);
433
498
break ;
434
499
}
435
500
0 commit comments