newemuloop: fix bug in cascaded timers. fixes shrek streamed music
This commit is contained in:
parent
980a06f871
commit
3e9dd9d6c0
|
@ -1539,12 +1539,12 @@ template<int procnum, int num> struct TSequenceItem_Timer : public TSequenceItem
|
||||||
for(int i=num;i<4;i++)
|
for(int i=num;i<4;i++)
|
||||||
{
|
{
|
||||||
//maybe too many checks if this is here, but we need it here for now
|
//maybe too many checks if this is here, but we need it here for now
|
||||||
if(!MMU.timerON[procnum][num]) return;
|
if(!MMU.timerON[procnum][i]) return;
|
||||||
|
|
||||||
if(MMU.timerMODE[procnum][num] == 0xFFFF)
|
if(MMU.timerMODE[procnum][i] == 0xFFFF)
|
||||||
{
|
{
|
||||||
++(MMU.timer[procnum][num]);
|
++(MMU.timer[procnum][i]);
|
||||||
over = !MMU.timer[procnum][num];
|
over = !MMU.timer[procnum][i];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1552,10 +1552,10 @@ template<int procnum, int num> struct TSequenceItem_Timer : public TSequenceItem
|
||||||
first = false;
|
first = false;
|
||||||
|
|
||||||
over = true;
|
over = true;
|
||||||
int remain = 65536 - MMU.timerReload[procnum][num];
|
int remain = 65536 - MMU.timerReload[procnum][i];
|
||||||
int ctr=0;
|
int ctr=0;
|
||||||
while(nds.timerCycle[procnum][num] <= nds_timer) {
|
while(nds.timerCycle[procnum][i] <= nds_timer) {
|
||||||
nds.timerCycle[procnum][num] += (remain << MMU.timerMODE[procnum][num]);
|
nds.timerCycle[procnum][i] += (remain << MMU.timerMODE[procnum][i]);
|
||||||
ctr++;
|
ctr++;
|
||||||
}
|
}
|
||||||
if(ctr>1) {
|
if(ctr>1) {
|
||||||
|
@ -1565,11 +1565,11 @@ template<int procnum, int num> struct TSequenceItem_Timer : public TSequenceItem
|
||||||
|
|
||||||
if(over)
|
if(over)
|
||||||
{
|
{
|
||||||
MMU.timer[procnum][num] = MMU.timerReload[procnum][num];
|
MMU.timer[procnum][i] = MMU.timerReload[procnum][i];
|
||||||
if(T1ReadWord(regs, 0x102 + num*4) & 0x40)
|
if(T1ReadWord(regs, 0x102 + i*4) & 0x40)
|
||||||
{
|
{
|
||||||
if(procnum==0) NDS_makeARM9Int(3 + num);
|
if(procnum==0) NDS_makeARM9Int(3 + i);
|
||||||
else NDS_makeARM7Int(3 + num);
|
else NDS_makeARM7Int(3 + i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue