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
libretro: add a few options for the analog combo
[pcsx_rearmed.git]
/
plugins
/
dfsound
/
registers.c
diff --git
a/plugins/dfsound/registers.c
b/plugins/dfsound/registers.c
index
1e3767a
..
1e79c0e
100644
(file)
--- a/
plugins/dfsound/registers.c
+++ b/
plugins/dfsound/registers.c
@@
-132,7
+132,7
@@
void CALLBACK SPUwriteRegister(unsigned long reg, unsigned short val,
{
\r
//-------------------------------------------------//
\r
case H_SPUaddr:
\r
{
\r
//-------------------------------------------------//
\r
case H_SPUaddr:
\r
- spu.spuAddr = (unsigned
long) val<<
3;
\r
+ spu.spuAddr = (unsigned
int)val <<
3;
\r
//check_irq_io(spu.spuAddr);
\r
break;
\r
//-------------------------------------------------//
\r
//check_irq_io(spu.spuAddr);
\r
break;
\r
//-------------------------------------------------//
\r
@@
-144,8
+144,9
@@
void CALLBACK SPUwriteRegister(unsigned long reg, unsigned short val,
break;
\r
//-------------------------------------------------//
\r
case H_SPUctrl:
\r
break;
\r
//-------------------------------------------------//
\r
case H_SPUctrl:
\r
+ spu.spuStat = (spu.spuStat & ~0x3f) | (val & 0x3f);
\r
+ spu.spuStat &= ~STAT_IRQ | val;
\r
if (!(spu.spuCtrl & CTRL_IRQ)) {
\r
if (!(spu.spuCtrl & CTRL_IRQ)) {
\r
- spu.spuStat&=~STAT_IRQ;
\r
if (val & CTRL_IRQ)
\r
schedule_next_irq();
\r
}
\r
if (val & CTRL_IRQ)
\r
schedule_next_irq();
\r
}
\r
@@
-153,7
+154,7
@@
void CALLBACK SPUwriteRegister(unsigned long reg, unsigned short val,
break;
\r
//-------------------------------------------------//
\r
case H_SPUstat:
\r
break;
\r
//-------------------------------------------------//
\r
case H_SPUstat:
\r
- spu.spuStat=val&0xf800;
\r
+
//
spu.spuStat=val&0xf800;
\r
break;
\r
//-------------------------------------------------//
\r
case H_SPUReverbAddr:
\r
break;
\r
//-------------------------------------------------//
\r
case H_SPUReverbAddr:
\r
@@
-167,11
+168,11
@@
void CALLBACK SPUwriteRegister(unsigned long reg, unsigned short val,
goto upd_irq;
\r
//-------------------------------------------------//
\r
case H_SPUrvolL:
\r
goto upd_irq;
\r
//-------------------------------------------------//
\r
case H_SPUrvolL:
\r
- spu.rvb->VolLeft
=
val;
\r
+ spu.rvb->VolLeft
= (int16_t)
val;
\r
break;
\r
//-------------------------------------------------//
\r
case H_SPUrvolR:
\r
break;
\r
//-------------------------------------------------//
\r
case H_SPUrvolR:
\r
- spu.rvb->VolRight
=
val;
\r
+ spu.rvb->VolRight
= (int16_t)
val;
\r
break;
\r
//-------------------------------------------------//
\r
\r
break;
\r
//-------------------------------------------------//
\r
\r
@@
-213,20
+214,34
@@
void CALLBACK SPUwriteRegister(unsigned long reg, unsigned short val,
*/
\r
//-------------------------------------------------//
\r
case H_SPUon1:
\r
*/
\r
//-------------------------------------------------//
\r
case H_SPUon1:
\r
+ spu.last_keyon_cycles = cycles;
\r
do_samples_if_needed(cycles, 0, 2);
\r
SoundOn(0,16,val);
\r
break;
\r
//-------------------------------------------------//
\r
case H_SPUon2:
\r
do_samples_if_needed(cycles, 0, 2);
\r
SoundOn(0,16,val);
\r
break;
\r
//-------------------------------------------------//
\r
case H_SPUon2:
\r
+ spu.last_keyon_cycles = cycles;
\r
do_samples_if_needed(cycles, 0, 2);
\r
SoundOn(16,24,val);
\r
break;
\r
//-------------------------------------------------//
\r
case H_SPUoff1:
\r
do_samples_if_needed(cycles, 0, 2);
\r
SoundOn(16,24,val);
\r
break;
\r
//-------------------------------------------------//
\r
case H_SPUoff1:
\r
+ if (cycles - spu.last_keyon_cycles < 786u) {
\r
+ if (val & regAreaGet(H_SPUon1))
\r
+ log_unhandled("koff1 %04x %d\n", val, cycles - spu.last_keyon_cycles);
\r
+ val &= ~regAreaGet(H_SPUon1);
\r
+ }
\r
+ do_samples_if_needed(cycles, 0, 2);
\r
SoundOff(0,16,val);
\r
break;
\r
//-------------------------------------------------//
\r
case H_SPUoff2:
\r
SoundOff(0,16,val);
\r
break;
\r
//-------------------------------------------------//
\r
case H_SPUoff2:
\r
+ if (cycles - spu.last_keyon_cycles < 786u) {
\r
+ if (val & regAreaGet(H_SPUon1))
\r
+ log_unhandled("koff2 %04x %d\n", val, cycles - spu.last_keyon_cycles);
\r
+ val &= ~regAreaGet(H_SPUon2);
\r
+ }
\r
+ do_samples_if_needed(cycles, 0, 2);
\r
SoundOff(16,24,val);
\r
break;
\r
//-------------------------------------------------//
\r
SoundOff(16,24,val);
\r
break;
\r
//-------------------------------------------------//
\r
@@
-351,7
+366,7
@@
unsigned short CALLBACK SPUreadRegister(unsigned long reg, unsigned int cycles)
return spu.spuCtrl;
\r
\r
case H_SPUstat:
\r
return spu.spuCtrl;
\r
\r
case H_SPUstat:
\r
- return
(spu.spuStat & ~0x3F) | (spu.spuCtrl & 0x3F)
;
\r
+ return
spu.spuStat
;
\r
\r
case H_SPUaddr:
\r
return (unsigned short)(spu.spuAddr>>3);
\r
\r
case H_SPUaddr:
\r
return (unsigned short)(spu.spuAddr>>3);
\r
@@
-420,7
+435,7
@@
static void SoundOn(int start,int end,unsigned short val)
static void SoundOff(int start,int end,unsigned short val)
\r
{
\r
int ch;
\r
static void SoundOff(int start,int end,unsigned short val)
\r
{
\r
int ch;
\r
- for
(ch=start;ch<end;ch++,val>>=1)
// loop channels
\r
+ for
(ch = start; val && ch < end; ch++, val >>= 1)
// loop channels
\r
{
\r
if(val&1)
\r
{
\r
{
\r
if(val&1)
\r
{
\r
@@
-563,3
+578,5
@@
static void ReverbOn(int start,int end,unsigned short val)
spu.s_chan[ch].bReverb=val&1; // -> reverb on/off
\r
}
\r
}
\r
spu.s_chan[ch].bReverb=val&1; // -> reverb on/off
\r
}
\r
}
\r
+
\r
+// vim:shiftwidth=1:expandtab
\r