notaz.gp2x.de
/
pcsx_rearmed.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gpulib: forgot to mark fb dirty
[pcsx_rearmed.git]
/
plugins
/
dfsound
/
spu.c
diff --git
a/plugins/dfsound/spu.c
b/plugins/dfsound/spu.c
index
283d598
..
04997ba
100644
(file)
--- a/
plugins/dfsound/spu.c
+++ b/
plugins/dfsound/spu.c
@@
-274,19
+274,16
@@
static void StartSound(int ch)
INLINE int FModChangeFrequency(int *SB, int pitch, int ns)
{
INLINE int FModChangeFrequency(int *SB, int pitch, int ns)
{
- unsigned int NP=pitch;
- int sinc;
+ pitch = (signed short)pitch;
+ pitch = ((32768 + iFMod[ns]) * pitch) >> 15;
+ pitch &= 0xffff;
+ if (pitch > 0x3fff)
+ pitch = 0x3fff;
- NP=((32768L+iFMod[ns])*NP)>>15;
+ iFMod[ns] = 0;
+ SB[32] = 1; // reset interpolation
- if(NP>0x3fff) NP=0x3fff;
- if(NP<0x1) NP=0x1;
-
- sinc=NP<<4; // calc frequency
- iFMod[ns]=0;
- SB[32]=1; // reset interpolation
-
- return sinc;
+ return pitch << 4;
}
////////////////////////////////////////////////////////////////////////
}
////////////////////////////////////////////////////////////////////////
@@
-399,16
+396,18
@@
static void decode_block_data(int *dest, const unsigned char *src, int predict_n
d = (int)*src;
s = (int)(signed short)((d & 0x0f) << 12);
d = (int)*src;
s = (int)(signed short)((d & 0x0f) << 12);
- fa = s >> shift_factor;
+ fa
= s >> shift_factor;
fa += ((s_1 * f[predict_nr][0])>>6) + ((s_2 * f[predict_nr][1])>>6);
fa += ((s_1 * f[predict_nr][0])>>6) + ((s_2 * f[predict_nr][1])>>6);
- s_2=s_1;s_1=fa;
+ ssat32_to_16(fa);
+ s_2 = s_1; s_1 = fa;
dest[nSample++] = fa;
s = (int)(signed short)((d & 0xf0) << 8);
dest[nSample++] = fa;
s = (int)(signed short)((d & 0xf0) << 8);
- fa = s >> shift_factor;
+ fa
= s >> shift_factor;
fa += ((s_1 * f[predict_nr][0])>>6) + ((s_2 * f[predict_nr][1])>>6);
fa += ((s_1 * f[predict_nr][0])>>6) + ((s_2 * f[predict_nr][1])>>6);
- s_2=s_1;s_1=fa;
+ ssat32_to_16(fa);
+ s_2 = s_1; s_1 = fa;
dest[nSample++] = fa;
}
dest[nSample++] = fa;
}
@@
-1286,7
+1285,7
@@
void schedule_next_irq(void)
void CALLBACK SPUasync(unsigned int cycle, unsigned int flags)
{
void CALLBACK SPUasync(unsigned int cycle, unsigned int flags)
{
- do_samples(cycle,
spu_config.iUseFixedUpdates
);
+ do_samples(cycle,
0
);
if (spu.spuCtrl & CTRL_IRQ)
schedule_next_irq();
if (spu.spuCtrl & CTRL_IRQ)
schedule_next_irq();
@@
-1328,6
+1327,7
@@
void CALLBACK SPUplayADPCMchannel(xa_decode_t *xap, unsigned int cycle, int is_s
do_samples(cycle, 1); // catch up to prevent source underflows later
FeedXA(xap); // call main XA feeder
do_samples(cycle, 1); // catch up to prevent source underflows later
FeedXA(xap); // call main XA feeder
+ spu.xapGlobal = xap; // store info for save states
}
// CDDA AUDIO
}
// CDDA AUDIO
@@
-1339,7
+1339,8
@@
int CALLBACK SPUplayCDDAchannel(short *pcm, int nbytes, unsigned int cycle, int
if (is_start)
do_samples(cycle, 1); // catch up to prevent source underflows later
if (is_start)
do_samples(cycle, 1); // catch up to prevent source underflows later
- return FeedCDDA((unsigned char *)pcm, nbytes);
+ FeedCDDA((unsigned char *)pcm, nbytes);
+ return 0;
}
// to be called after state load
}
// to be called after state load
@@
-1361,7
+1362,7
@@
static void SetupStreams(void)
spu.XAFeed = spu.XAStart;
spu.CDDAStart = malloc(CDDA_BUFFER_SIZE); // alloc cdda buffer
spu.XAFeed = spu.XAStart;
spu.CDDAStart = malloc(CDDA_BUFFER_SIZE); // alloc cdda buffer
- spu.CDDAEnd = spu.CDDAStart +
16384
;
+ spu.CDDAEnd = spu.CDDAStart +
CDDA_BUFFER_SIZE / sizeof(uint32_t)
;
spu.CDDAPlay = spu.CDDAStart;
spu.CDDAFeed = spu.CDDAStart;
spu.CDDAPlay = spu.CDDAStart;
spu.CDDAFeed = spu.CDDAStart;