summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorskidau <skidau@gmail.com>2015-12-29 10:21:12 +1100
committerskidau <skidau@gmail.com>2015-12-29 10:21:12 +1100
commitd3d0aa69ce35d471cb699771cbaf797aef55bb2e (patch)
tree9bf1026e89146b4c2410ac7346d7f1bc6e496df0 /Source/Core
parentaabcd441d9a9fa98565a6aaf82cf56b64b53767d (diff)
parent5555822ca2ff0acaefb85d8690de1f0d61404db7 (diff)
Merge pull request #3397 from skidau/dsp-acc-loop-end
Catered for the case where ADPCM audio would loop before the end of the stream
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/DSP/DSPAccelerator.cpp12
-rw-r--r--Source/Core/Core/HW/DSPHLE/UCodes/AXVoice.h12
2 files changed, 20 insertions, 4 deletions
diff --git a/Source/Core/Core/DSP/DSPAccelerator.cpp b/Source/Core/Core/DSP/DSPAccelerator.cpp
index 6a6ce0ffb4..b750d60ff9 100644
--- a/Source/Core/Core/DSP/DSPAccelerator.cpp
+++ b/Source/Core/Core/DSP/DSPAccelerator.cpp
@@ -121,10 +121,18 @@ u16 dsp_read_accelerator()
switch (g_dsp.ifx_regs[DSP_FORMAT])
{
case 0x00: // ADPCM audio
- if ((EndAddress & 15) == 0)
+ switch (EndAddress & 15)
+ {
+ case 0: // Tom and Jerry
step_size_bytes = 1;
- else
+ break;
+ case 1: // Blazing Angels
+ step_size_bytes = 0;
+ break;
+ default:
step_size_bytes = 2;
+ break;
+ }
val = ADPCM_Step(Address);
break;
case 0x0A: // 16-bit PCM audio
diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/AXVoice.h b/Source/Core/Core/HW/DSPHLE/UCodes/AXVoice.h
index 98c60cac30..684aa2c16e 100644
--- a/Source/Core/Core/HW/DSPHLE/UCodes/AXVoice.h
+++ b/Source/Core/Core/HW/DSPHLE/UCodes/AXVoice.h
@@ -152,10 +152,18 @@ u16 AcceleratorGetSample()
*acc_cur_addr += 2;
}
- if ((acc_end_addr & 15) == 0)
+ switch (acc_end_addr & 15)
+ {
+ case 0: // Tom and Jerry
step_size_bytes = 1;
- else
+ break;
+ case 1: // Blazing Angels
+ step_size_bytes = 0;
+ break;
+ default:
step_size_bytes = 2;
+ break;
+ }
int scale = 1 << (acc_pb->adpcm.pred_scale & 0xF);
int coef_idx = (acc_pb->adpcm.pred_scale >> 4) & 0x7;