@@ -102,7 +102,7 @@ void PCSX::SPU::impl::writeRegister(uint32_t reg, uint16_t val) {
102
102
(val & (ADSRFlags::AttackShiftMask | ADSRFlags::AttackStepMask)) >> 8 ;
103
103
s_chan[ch].ADSRX .get <exDecayRate>().value = (val & ADSRFlags::DecayShiftMask) >> 4 ;
104
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);
105
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice[%02i] ADSR(lo) = %04x\n " , ch, val);
106
106
// ---------------------------------------------// stuff below is only for debug mode
107
107
108
108
s_chan[ch].ADSR .get <AttackModeExp>().value = (val & ADSRFlags::AttackMode) ? 1 : 0 ;
@@ -146,7 +146,7 @@ void PCSX::SPU::impl::writeRegister(uint32_t reg, uint16_t val) {
146
146
(val & (ADSRFlags::SustainShiftMask | ADSRFlags::SustainStepMask)) >> 6 ;
147
147
s_chan[ch].ADSRX .get <exReleaseModeExp>().value = (val & ADSRFlags::ReleaseMode) ? 1 : 0 ;
148
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);
149
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice[%02i] ADSR(hi) = %04x\n " , ch, val);
150
150
// ----------------------------------------------// stuff below is only for debug mode
151
151
152
152
s_chan[ch].ADSR .get <SustainModeExp>().value = (val & ADSRFlags::SustainMode) ? 1 : 0 ;
@@ -199,7 +199,7 @@ void PCSX::SPU::impl::writeRegister(uint32_t reg, uint16_t val) {
199
199
// WaitForSingleObject(s_chan[ch].hMutex,2000); // -> no multithread fuckups
200
200
// align to 16-byte boundary
201
201
s_chan[ch].pLoop = spuMemC + ((uint32_t )((val << 3 ) & ~0xf ));
202
- // s_chan[ch].data.get<Chan::IgnoreLoop>().value = true;
202
+ s_chan[ch].data .get <Chan::IgnoreLoop>().value = true ;
203
203
// ReleaseMutex(s_chan[ch].hMutex); // -> oki, on with the thread
204
204
PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice[%02i] ADPCM Repeat Address = %04x\n " , ch, val);
205
205
break ;
@@ -287,32 +287,28 @@ void PCSX::SPU::impl::writeRegister(uint32_t reg, uint16_t val) {
287
287
// -------------------------------------------------//
288
288
case H_SPUMute1:
289
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);
290
+ // PCSX::PSXSPU_LOGGER::Log("SPU.write, Voice 0..23 ON/OFF (status) (ENDX) = %04x, (read-only)\n", val);
291
291
break ;
292
292
// -------------------------------------------------//
293
293
case H_SPUMute2:
294
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);
295
+ // PCSX::PSXSPU_LOGGER::Log("SPU.write, Voice 0..23 ON/OFF2 (status) (ENDX) = %04x, (read-only)\n", val);
296
296
break ;
297
297
298
298
case H_SPUon1:
299
299
SoundOn (0 , 16 , val);
300
- PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice 0..23 Key ON = %04x\n " , val);
301
300
break ;
302
301
303
302
case H_SPUon2:
304
303
SoundOn (16 , 24 , val);
305
- PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice 0..23 Key ON2 = %04x\n " , val);
306
304
break ;
307
305
308
306
case H_SPUoff1:
309
307
SoundOff (0 , 16 , val);
310
- PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice 0..23 Key OFF = %04x\n " , val);
311
308
break ;
312
309
313
310
case H_SPUoff2:
314
311
SoundOff (16 , 24 , val);
315
- PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice 0..23 Key OFF2 = %04x\n " , val);
316
312
break ;
317
313
318
314
case H_CDLeft:
@@ -333,32 +329,26 @@ void PCSX::SPU::impl::writeRegister(uint32_t reg, uint16_t val) {
333
329
334
330
case H_FMod1:
335
331
FModOn (0 , 16 , val);
336
- PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice 0..23 Pitch Modulation Enable Flags = %04x\n " , val);
337
332
break ;
338
333
339
334
case H_FMod2:
340
335
FModOn (16 , 24 , val);
341
- PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice 0..23 Pitch Modulation Enable Flags2 = %04x\n " , val);
342
336
break ;
343
337
344
338
case H_Noise1:
345
339
NoiseOn (0 , 16 , val);
346
- PCSX::PSXSPU_LOGGER::Log (" SPU.write, Noise mode enable 0..23 = %04x\n " , val);
347
340
break ;
348
341
349
342
case H_Noise2:
350
343
NoiseOn (16 , 24 , val);
351
- PCSX::PSXSPU_LOGGER::Log (" SPU.write, Noise mode enable2 0..23 = %04x\n " , val);
352
344
break ;
353
345
354
346
case H_RVBon1:
355
347
ReverbOn (0 , 16 , val);
356
- PCSX::PSXSPU_LOGGER::Log (" SPU.write, Reverb enable 0..23 = %04x\n " , val);
357
348
break ;
358
349
359
350
case H_RVBon2:
360
351
ReverbOn (16 , 24 , val);
361
- PCSX::PSXSPU_LOGGER::Log (" SPU.write, Reverb enable2 0..23 = %04x\n " , val);
362
352
break ;
363
353
364
354
case H_Reverb + 0 :
@@ -568,6 +558,7 @@ void PCSX::SPU::impl::SoundOn(int start, int end, uint16_t val) {
568
558
s_chan[ch].data .get <Chan::IgnoreLoop>().value = false ;
569
559
s_chan[ch].data .get <Chan::New>().value = true ;
570
560
dwNewChannel |= (1 << ch); // bitfield for faster testing
561
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice %02i ON\n " , ch);
571
562
}
572
563
}
573
564
}
@@ -576,6 +567,9 @@ void PCSX::SPU::impl::SoundOn(int start, int end, uint16_t val) {
576
567
void PCSX::SPU::impl::SoundOff (int start, int end, uint16_t val) {
577
568
for (int ch = start; ch < end; ch++, val >>= 1 ) {
578
569
if (val & 1 ) {
570
+ if (s_chan[ch].data .get <Chan::Stop>().value != true ) {
571
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice %02i OFF\n " , ch);
572
+ }
579
573
s_chan[ch].data .get <Chan::Stop>().value = true ;
580
574
}
581
575
}
@@ -586,10 +580,16 @@ void PCSX::SPU::impl::FModOn(int start, int end, uint16_t val) {
586
580
for (int ch = start; ch < end; ch++, val >>= 1 ) {
587
581
if (val & 1 ) { // Check if modulation should be enabled for this voice
588
582
if (ch > 0 ) { // Pitch modulation doesn't work for voice 0
583
+ if (s_chan[ch].data .get <Chan::FMod>().value != 1 ) {
584
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice %02i Pitch Modulation ON\n " , ch);
585
+ }
589
586
s_chan[ch].data .get <Chan::FMod>().value = 1 ; // sound channel
590
587
s_chan[ch - 1 ].data .get <Chan::FMod>().value = 2 ; // freq channel
591
588
}
592
589
} else {
590
+ if (s_chan[ch].data .get <Chan::FMod>().value != 0 ) {
591
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice %02i Pitch Modulation OFF\n " , ch);
592
+ }
593
593
s_chan[ch].data .get <Chan::FMod>().value = 0 ; // --> turn off fmod
594
594
}
595
595
}
@@ -599,7 +599,17 @@ void PCSX::SPU::impl::FModOn(int start, int end, uint16_t val) {
599
599
// respectively
600
600
void PCSX::SPU::impl::NoiseOn (int start, int end, uint16_t val) {
601
601
for (int ch = start; ch < end; ch++, val >>= 1 ) {
602
- s_chan[ch].data .get <Chan::Noise>().value = val & 1 ;
602
+ if (val & 1 ) {
603
+ if (s_chan[ch].data .get <Chan::Noise>().value != true ) {
604
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice %02i Noise ON\n " , ch);
605
+ }
606
+ s_chan[ch].data .get <Chan::Noise>().value = true ;
607
+ } else {
608
+ if (s_chan[ch].data .get <Chan::Noise>().value != false ) {
609
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice %02i Noise OFF\n " , ch);
610
+ }
611
+ s_chan[ch].data .get <Chan::Noise>().value = false ;
612
+ }
603
613
}
604
614
}
605
615
@@ -701,6 +711,20 @@ void PCSX::SPU::impl::SetPitch(int ch, uint16_t val) // SET PITCH
701
711
// Enable/disable reverb for voices [start, end] depending on val
702
712
void PCSX::SPU::impl::ReverbOn (int start, int end, uint16_t val) {
703
713
for (int ch = start; ch < end; ch++, val >>= 1 ) {
704
- s_chan[ch].data .get <Chan::Reverb>().value = val & 1 ;
714
+ if (val & 1 ) {
715
+ if (s_chan[ch].data .get <Chan::Reverb>().value != true ) {
716
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice %02i Reverb ON\n " , ch);
717
+ }
718
+ s_chan[ch].data .get <Chan::Reverb>().value = true ;
719
+
720
+ }
721
+ else
722
+ {
723
+ if (s_chan[ch].data .get <Chan::Reverb>().value != false ) {
724
+ PCSX::PSXSPU_LOGGER::Log (" SPU.write, Voice %02i Reverb OFF\n " , ch);
725
+ }
726
+ s_chan[ch].data .get <Chan::Reverb>().value = false ;
727
+ }
728
+
705
729
}
706
730
}
0 commit comments