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
standalone: allow lighrec for testing
[pcsx_rearmed.git]
/
plugins
/
dfsound
/
registers.c
diff --git
a/plugins/dfsound/registers.c
b/plugins/dfsound/registers.c
index
61d0b81
..
e75f708
100644
(file)
--- a/
plugins/dfsound/registers.c
+++ b/
plugins/dfsound/registers.c
@@
-161,6
+161,17
@@
void CALLBACK SPUwriteRegister(unsigned long reg, unsigned short val,
break;
\r
//-------------------------------------------------//
\r
\r
break;
\r
//-------------------------------------------------//
\r
\r
+ case H_SPUmvolL:
\r
+ case H_SPUmvolR:
\r
+ if (val & 0x8000)
\r
+ log_unhandled("w master sweep: %08lx %04x\n", reg, val);
\r
+ break;
\r
+
\r
+ case 0x0dac:
\r
+ if (val != 4)
\r
+ log_unhandled("1f801dac %04x\n", val);
\r
+ break;
\r
+
\r
/*
\r
case H_ExtLeft:
\r
//auxprintf("EL %d\n",val);
\r
/*
\r
case H_ExtLeft:
\r
//auxprintf("EL %d\n",val);
\r
@@
-296,7
+307,7
@@
unsigned short CALLBACK SPUreadRegister(unsigned long reg)
{
\r
const int ch=(r>>4)-0xc0;
\r
if(spu.dwNewChannel&(1<<ch)) return 1; // we are started, but not processed? return 1
\r
{
\r
const int ch=(r>>4)-0xc0;
\r
if(spu.dwNewChannel&(1<<ch)) return 1; // we are started, but not processed? return 1
\r
- if((spu.dwChannel
On&(1<<ch)) &&
// same here... we haven't decoded one sample yet, so no envelope yet. return 1 as well
\r
+ if((spu.dwChannel
sAudible&(1<<ch)) &&
// same here... we haven't decoded one sample yet, so no envelope yet. return 1 as well
\r
!spu.s_chan[ch].ADSRX.EnvelopeVol)
\r
return 1;
\r
return (unsigned short)(spu.s_chan[ch].ADSRX.EnvelopeVol>>16);
\r
!spu.s_chan[ch].ADSRX.EnvelopeVol)
\r
return 1;
\r
return (unsigned short)(spu.s_chan[ch].ADSRX.EnvelopeVol>>16);
\r
@@
-335,6
+346,10
@@
unsigned short CALLBACK SPUreadRegister(unsigned long reg)
//case H_SPUIsOn2:
\r
// return IsSoundOn(16,24);
\r
\r
//case H_SPUIsOn2:
\r
// return IsSoundOn(16,24);
\r
\r
+ case H_SPUMute1:
\r
+ case H_SPUMute2:
\r
+ log_unhandled("r isOn: %08lx\n", reg);
\r
+ break;
\r
}
\r
\r
return spu.regArea[(r-0xc00)>>1];
\r
}
\r
\r
return spu.regArea[(r-0xc00)>>1];
\r
@@
-350,7
+365,7
@@
static void SoundOn(int start,int end,unsigned short val)
\r
for(ch=start;ch<end;ch++,val>>=1) // loop channels
\r
{
\r
\r
for(ch=start;ch<end;ch++,val>>=1) // loop channels
\r
{
\r
- if((val&1) && regAreaGet
(ch,6))
// mmm... start has to be set before key on !?!
\r
+ if((val&1) && regAreaGet
Ch(ch, 6))
// mmm... start has to be set before key on !?!
\r
{
\r
spu.s_chan[ch].bIgnoreLoop = 0;
\r
spu.dwNewChannel|=(1<<ch);
\r
{
\r
spu.s_chan[ch].bIgnoreLoop = 0;
\r
spu.dwNewChannel|=(1<<ch);
\r
@@
-431,6
+446,7
@@
static void SetVolumeL(unsigned char ch,short vol) // LEFT VOLUME
if(vol&0x8000) // sweep?
\r
{
\r
short sInc=1; // -> sweep up?
\r
if(vol&0x8000) // sweep?
\r
{
\r
short sInc=1; // -> sweep up?
\r
+ log_unhandled("ch%d sweepl %04x\n", ch, vol);
\r
if(vol&0x2000) sInc=-1; // -> or down?
\r
if(vol&0x1000) vol^=0xffff; // -> mmm... phase inverted? have to investigate this
\r
vol=((vol&0x7f)+1)/2; // -> sweep: 0..127 -> 0..64
\r
if(vol&0x2000) sInc=-1; // -> or down?
\r
if(vol&0x1000) vol^=0xffff; // -> mmm... phase inverted? have to investigate this
\r
vol=((vol&0x7f)+1)/2; // -> sweep: 0..127 -> 0..64
\r
@@
-457,6
+473,7
@@
static void SetVolumeR(unsigned char ch,short vol) // RIGHT VOLUME
if(vol&0x8000) // comments... see above :)
\r
{
\r
short sInc=1;
\r
if(vol&0x8000) // comments... see above :)
\r
{
\r
short sInc=1;
\r
+ log_unhandled("ch%d sweepr %04x\n", ch, vol);
\r
if(vol&0x2000) sInc=-1;
\r
if(vol&0x1000) vol^=0xffff;
\r
vol=((vol&0x7f)+1)/2;
\r
if(vol&0x2000) sInc=-1;
\r
if(vol&0x1000) vol^=0xffff;
\r
vol=((vol&0x7f)+1)/2;
\r
@@
-488,6
+505,10
@@
static void SetPitch(int ch,unsigned short val) // SET PITCH
spu.s_chan[ch].sinc = NP << 4;
\r
spu.s_chan[ch].sinc_inv = 0;
\r
spu.SB[ch * SB_SIZE + 32] = 1; // -> freq change in simple interpolation mode: set flag
\r
spu.s_chan[ch].sinc = NP << 4;
\r
spu.s_chan[ch].sinc_inv = 0;
\r
spu.SB[ch * SB_SIZE + 32] = 1; // -> freq change in simple interpolation mode: set flag
\r
+ if (val)
\r
+ spu.dwChannelsAudible |= 1u << ch;
\r
+ else
\r
+ spu.dwChannelsAudible &= ~(1u << ch);
\r
}
\r
\r
////////////////////////////////////////////////////////////////////////
\r
}
\r
\r
////////////////////////////////////////////////////////////////////////
\r