core:
- optimize SPU and fix bug [#1356]; winport: - optimize Sound View Tool;
This commit is contained in:
parent
02701e48d9
commit
f9eb416311
|
@ -4695,7 +4695,7 @@ void FASTCALL _MMU_ARM7_write08(u32 adr, u8 val)
|
|||
if (slot2_write<ARMCPU_ARM7, u8>(adr, val))
|
||||
return;
|
||||
|
||||
if ((adr >= 0x04000400) && (adr < 0x04000520))
|
||||
if (SPU_core->isSPU(adr))
|
||||
{
|
||||
SPU_WriteByte(adr, val);
|
||||
return;
|
||||
|
@ -4801,7 +4801,7 @@ void FASTCALL _MMU_ARM7_write16(u32 adr, u16 val)
|
|||
if (slot2_write<ARMCPU_ARM7, u16>(adr, val))
|
||||
return;
|
||||
|
||||
if ((adr >= 0x04000400) && (adr < 0x04000520))
|
||||
if (SPU_core->isSPU(adr))
|
||||
{
|
||||
SPU_WriteWord(adr, val);
|
||||
return;
|
||||
|
@ -4982,7 +4982,7 @@ void FASTCALL _MMU_ARM7_write32(u32 adr, u32 val)
|
|||
if (slot2_write<ARMCPU_ARM7, u32>(adr, val))
|
||||
return;
|
||||
|
||||
if ((adr >= 0x04000400) && (adr < 0x04000520))
|
||||
if (SPU_core->isSPU(adr))
|
||||
{
|
||||
SPU_WriteLong(adr, val);
|
||||
return;
|
||||
|
@ -5103,7 +5103,7 @@ u8 FASTCALL _MMU_ARM7_read08(u32 adr)
|
|||
if (slot2_read<ARMCPU_ARM7, u8>(adr, slot2_val))
|
||||
return slot2_val;
|
||||
|
||||
if ((adr>=0x04000400)&&(adr<0x04000520))
|
||||
if (SPU_core->isSPU(adr))
|
||||
{
|
||||
return SPU_ReadByte(adr);
|
||||
}
|
||||
|
@ -5159,7 +5159,7 @@ u16 FASTCALL _MMU_ARM7_read16(u32 adr)
|
|||
if (slot2_read<ARMCPU_ARM7, u16>(adr, slot2_val))
|
||||
return slot2_val;
|
||||
|
||||
if ((adr>=0x04000400)&&(adr<0x04000520))
|
||||
if (SPU_core->isSPU(adr))
|
||||
{
|
||||
return SPU_ReadWord(adr);
|
||||
}
|
||||
|
@ -5259,7 +5259,7 @@ u32 FASTCALL _MMU_ARM7_read32(u32 adr)
|
|||
if (slot2_read<ARMCPU_ARM7, u32>(adr, slot2_val))
|
||||
return slot2_val;
|
||||
|
||||
if ((adr>=0x04000400)&&(adr<0x04000520))
|
||||
if (SPU_core->isSPU(adr))
|
||||
{
|
||||
return SPU_ReadLong(adr);
|
||||
}
|
||||
|
|
|
@ -72,6 +72,7 @@ extern SoundInterface_struct *SNDCoreList[];
|
|||
|
||||
//const int shift = (FORMAT == 0 ? 2 : 1);
|
||||
static const int format_shift[] = { 2, 1, 3, 0 };
|
||||
static const u8 volume_shift[] = { 0, 1, 2, 4 };
|
||||
|
||||
static const s8 indextbl[8] =
|
||||
{
|
||||
|
@ -397,8 +398,8 @@ void SPU_struct::KeyOn(int channel)
|
|||
//printf("keyon %d totlength:%d\n",channel,thischan.totlength);
|
||||
|
||||
|
||||
//LOG("Channel %d key on: vol = %d, datashift = %d, hold = %d, pan = %d, waveduty = %d, repeat = %d, format = %d, source address = %07X,"
|
||||
// "timer = %04X, loop start = %04X, length = %06X, MMU.ARM7_REG[0x501] = %02X\n", channel, chan->vol, chan->datashift, chan->hold,
|
||||
//LOG("Channel %d key on: vol = %d, volumeDiv = %d, hold = %d, pan = %d, waveduty = %d, repeat = %d, format = %d, source address = %07X,"
|
||||
// "timer = %04X, loop start = %04X, length = %06X, MMU.ARM7_REG[0x501] = %02X\n", channel, chan->vol, chan->volumeDiv, chan->hold,
|
||||
// chan->pan, chan->waveduty, chan->repeat, chan->format, chan->addr, chan->timer, chan->loopstart, chan->length, T1ReadByte(MMU.ARM7_REG, 0x501));
|
||||
|
||||
switch(thischan.format)
|
||||
|
@ -448,119 +449,225 @@ void SPU_struct::KeyOn(int channel)
|
|||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define SETBYTE(which,oldval,newval) oldval = (oldval & (~(0xFF<<(which*8)))) | ((newval)<<(which*8))
|
||||
#define GETBYTE(which,val) ((val>>(which*8))&0xFF)
|
||||
u8 SPU_struct::ReadByte(u32 addr)
|
||||
{
|
||||
//individual channel regs
|
||||
if ((addr & 0x0F00) == 0x0400)
|
||||
{
|
||||
u32 chan_num = (addr >> 4) & 0xF;
|
||||
channel_struct &thischan=channels[chan_num];
|
||||
|
||||
switch (addr & 0xF)
|
||||
{
|
||||
case 0x0: return thischan.vol;
|
||||
case 0x1: return (thischan.volumeDiv | (thischan.hold << 7));
|
||||
case 0x2: return thischan.pan;
|
||||
case 0x3: return ( thischan.waveduty
|
||||
| (thischan.repeat << 3)
|
||||
| (thischan.format << 5)
|
||||
| ((thischan.status == CHANSTAT_PLAY)?0x80:0)
|
||||
);
|
||||
case 0x8: return *(u8*)(thischan.timer + 0);
|
||||
case 0x9: return *(u8*)(thischan.timer + 1);
|
||||
case 0xA: return *(u8*)(thischan.loopstart + 0);
|
||||
case 0xB: return *(u8*)(thischan.loopstart + 1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
u8 SPU_ReadByte(u32 addr) {
|
||||
addr &= 0xFFF;
|
||||
return SPU_core->ReadByte(addr);
|
||||
}
|
||||
u16 SPU_ReadWord(u32 addr) {
|
||||
addr &= 0xFFF;
|
||||
return SPU_core->ReadWord(addr);
|
||||
}
|
||||
u32 SPU_ReadLong(u32 addr) {
|
||||
addr &= 0xFFF;
|
||||
return SPU_core->ReadLong(addr);
|
||||
switch(addr)
|
||||
{
|
||||
//SOUNDCNT
|
||||
case 0x500: return regs.mastervol;
|
||||
case 0x501: return (regs.ctl_left
|
||||
| (regs.ctl_right << 2)
|
||||
| (regs.ctl_ch1bypass << 4)
|
||||
| (regs.ctl_ch3bypass << 5)
|
||||
| (regs.masteren << 7)
|
||||
);
|
||||
|
||||
//SOUNDBIAS
|
||||
case 0x504: return *(u8*)(regs.soundbias + 0);
|
||||
case 0x505: return *(u8*)(regs.soundbias + 1);
|
||||
|
||||
//SNDCAP0CNT/SNDCAP1CNT
|
||||
case 0x508:
|
||||
case 0x509:
|
||||
{
|
||||
u32 which = (addr - 0x508);
|
||||
return regs.cap[which].add
|
||||
| (regs.cap[which].source << 1)
|
||||
| (regs.cap[which].oneshot << 2)
|
||||
| (regs.cap[which].bits8 << 3)
|
||||
| (regs.cap[which].runtime.running << 7);
|
||||
}
|
||||
|
||||
//SNDCAP0DAD
|
||||
case 0x510: return *(u8*)(regs.cap[0].dad + 0);
|
||||
case 0x511: return *(u8*)(regs.cap[0].dad + 1);
|
||||
case 0x512: return *(u8*)(regs.cap[0].dad + 2);
|
||||
case 0x513: return *(u8*)(regs.cap[0].dad + 3);
|
||||
|
||||
//SNDCAP0LEN
|
||||
case 0x514: return *(u8*)(regs.cap[0].len + 0);
|
||||
case 0x515: return *(u8*)(regs.cap[0].len + 1);
|
||||
|
||||
//SNDCAP1DAD
|
||||
case 0x518: return *(u8*)(regs.cap[1].dad + 0);
|
||||
case 0x519: return *(u8*)(regs.cap[1].dad + 1);
|
||||
case 0x51A: return *(u8*)(regs.cap[1].dad + 2);
|
||||
case 0x51B: return *(u8*)(regs.cap[1].dad + 3);
|
||||
|
||||
//SNDCAP1LEN
|
||||
case 0x51C: return *(u8*)(regs.cap[1].len + 0);
|
||||
case 0x51D: return *(u8*)(regs.cap[1].len + 1);
|
||||
} //switch on address
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
u16 SPU_struct::ReadWord(u32 addr)
|
||||
{
|
||||
return ReadByte(addr)|(ReadByte(addr+1)<<8);
|
||||
//individual channel regs
|
||||
if ((addr & 0x0F00) == 0x0400)
|
||||
{
|
||||
u32 chan_num = (addr >> 4) & 0xF;
|
||||
channel_struct &thischan=channels[chan_num];
|
||||
|
||||
switch (addr & 0xF)
|
||||
{
|
||||
case 0x0: return (thischan.vol
|
||||
| (thischan.volumeDiv << 8)
|
||||
| (thischan.hold << 15)
|
||||
);
|
||||
case 0x2: return (thischan.pan
|
||||
| (thischan.waveduty << 8)
|
||||
| (thischan.repeat << 11)
|
||||
| (thischan.format << 13)
|
||||
| ((thischan.status == CHANSTAT_PLAY)?(1 << 15):0)
|
||||
);
|
||||
case 0x8: return thischan.timer;
|
||||
case 0xA: return thischan.loopstart;
|
||||
} //switch on individual channel regs
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch(addr)
|
||||
{
|
||||
//SOUNDCNT
|
||||
case 0x500: return (regs.mastervol
|
||||
| (regs.ctl_left << 8)
|
||||
| (regs.ctl_right << 10)
|
||||
| (regs.ctl_ch1bypass << 12)
|
||||
| (regs.ctl_ch3bypass << 13)
|
||||
| (regs.masteren << 15)
|
||||
);
|
||||
|
||||
//SOUNDBIAS
|
||||
case 0x504: return regs.soundbias;
|
||||
|
||||
//SNDCAP0CNT/SNDCAP1CNT
|
||||
case 0x508:
|
||||
{
|
||||
u8 val0 = regs.cap[0].add
|
||||
| (regs.cap[0].source << 1)
|
||||
| (regs.cap[0].oneshot << 2)
|
||||
| (regs.cap[0].bits8 << 3)
|
||||
| (regs.cap[0].runtime.running << 7);
|
||||
u8 val1 = regs.cap[1].add
|
||||
| (regs.cap[1].source << 1)
|
||||
| (regs.cap[1].oneshot << 2)
|
||||
| (regs.cap[1].bits8 << 3)
|
||||
| (regs.cap[1].runtime.running << 7);
|
||||
return (u16)(val0 | (val1 << 8));
|
||||
}
|
||||
|
||||
//SNDCAP0DAD
|
||||
case 0x510: return *(u16*)(regs.cap[0].dad + 0);
|
||||
case 0x512: return *(u16*)(regs.cap[0].dad + 1);
|
||||
|
||||
//SNDCAP0LEN
|
||||
case 0x514: return regs.cap[0].len;
|
||||
|
||||
//SNDCAP1DAD
|
||||
case 0x518: return *(u16*)(regs.cap[1].dad + 0);
|
||||
case 0x51A: return *(u16*)(regs.cap[1].dad + 1);
|
||||
|
||||
//SNDCAP1LEN
|
||||
case 0x51C: return regs.cap[1].len;
|
||||
} //switch on address
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 SPU_struct::ReadLong(u32 addr)
|
||||
{
|
||||
return ReadByte(addr)|(ReadByte(addr+1)<<8)|(ReadByte(addr+2)<<16)|(ReadByte(addr+3)<<24);
|
||||
}
|
||||
|
||||
u8 SPU_struct::ReadByte(u32 addr)
|
||||
{
|
||||
switch(addr)
|
||||
//individual channel regs
|
||||
if ((addr & 0x0F00) == 0x0400)
|
||||
{
|
||||
//SOUNDCNT
|
||||
case 0x500: return regs.mastervol;
|
||||
case 0x501:
|
||||
return (regs.ctl_left)|(regs.ctl_right<<2)|(regs.ctl_ch1bypass<<4)|(regs.ctl_ch3bypass<<5)|(regs.masteren<<7);
|
||||
case 0x502: return 0;
|
||||
case 0x503: return 0;
|
||||
|
||||
//SOUNDBIAS
|
||||
case 0x504: return regs.soundbias&0xFF;
|
||||
case 0x505: return (regs.soundbias>>8)&0xFF;
|
||||
case 0x506: return 0;
|
||||
case 0x507: return 0;
|
||||
|
||||
//SNDCAP0CNT/SNDCAP1CNT
|
||||
case 0x508:
|
||||
case 0x509: {
|
||||
u32 which = addr-0x508;
|
||||
return regs.cap[which].add
|
||||
| (regs.cap[which].source<<1)
|
||||
| (regs.cap[which].oneshot<<2)
|
||||
| (regs.cap[which].bits8<<3)
|
||||
//| (regs.cap[which].active<<7); //? which is right? need test
|
||||
| (regs.cap[which].runtime.running<<7);
|
||||
}
|
||||
|
||||
//SNDCAP0DAD
|
||||
case 0x510: return GETBYTE(0,regs.cap[0].dad);
|
||||
case 0x511: return GETBYTE(1,regs.cap[0].dad);
|
||||
case 0x512: return GETBYTE(2,regs.cap[0].dad);
|
||||
case 0x513: return GETBYTE(3,regs.cap[0].dad);
|
||||
|
||||
//SNDCAP0LEN
|
||||
case 0x514: return GETBYTE(0,regs.cap[0].len);
|
||||
case 0x515: return GETBYTE(1,regs.cap[0].len);
|
||||
case 0x516: return 0; //not used
|
||||
case 0x517: return 0; //not used
|
||||
|
||||
//SNDCAP1DAD
|
||||
case 0x518: return GETBYTE(0,regs.cap[1].dad);
|
||||
case 0x519: return GETBYTE(1,regs.cap[1].dad);
|
||||
case 0x51A: return GETBYTE(2,regs.cap[1].dad);
|
||||
case 0x51B: return GETBYTE(3,regs.cap[1].dad);
|
||||
|
||||
//SNDCAP1LEN
|
||||
case 0x51C: return GETBYTE(0,regs.cap[1].len);
|
||||
case 0x51D: return GETBYTE(1,regs.cap[1].len);
|
||||
case 0x51E: return 0; //not used
|
||||
case 0x51F: return 0; //not used
|
||||
|
||||
default: {
|
||||
//individual channel regs
|
||||
|
||||
u32 chan_num = (addr >> 4) & 0xF;
|
||||
if(chan_num>0xF) return 0;
|
||||
channel_struct &thischan=channels[chan_num];
|
||||
|
||||
switch(addr & 0xF) {
|
||||
case 0x0: return thischan.vol;
|
||||
case 0x1: {
|
||||
u8 ret = thischan.datashift;
|
||||
if(ret==4) ret=3;
|
||||
ret |= thischan.hold<<7;
|
||||
return ret;
|
||||
}
|
||||
case 0x2: return thischan.pan;
|
||||
case 0x3: return thischan.waveduty|(thischan.repeat<<3)|(thischan.format<<5)|((thischan.status == CHANSTAT_PLAY)?0x80:0);
|
||||
case 0x4: return 0; //return GETBYTE(0,thischan.addr); //not readable
|
||||
case 0x5: return 0; //return GETBYTE(1,thischan.addr); //not readable
|
||||
case 0x6: return 0; //return GETBYTE(2,thischan.addr); //not readable
|
||||
case 0x7: return 0; //return GETBYTE(3,thischan.addr); //not readable
|
||||
case 0x8: return GETBYTE(0,thischan.timer);
|
||||
case 0x9: return GETBYTE(1,thischan.timer);
|
||||
case 0xA: return GETBYTE(0,thischan.loopstart);
|
||||
case 0xB: return GETBYTE(1,thischan.loopstart);
|
||||
case 0xC: return 0; //return GETBYTE(0,thischan.length); //not readable
|
||||
case 0xD: return 0; //return GETBYTE(1,thischan.length); //not readable
|
||||
case 0xE: return 0; //return GETBYTE(2,thischan.length); //not readable
|
||||
case 0xF: return 0; //return GETBYTE(3,thischan.length); //not readable
|
||||
default: return 0; //impossible
|
||||
switch (addr & 0xF)
|
||||
{
|
||||
case 0x0: return (thischan.vol
|
||||
| (thischan.volumeDiv << 8)
|
||||
| (thischan.hold << 15)
|
||||
| (thischan.pan << 16)
|
||||
| (thischan.waveduty << 24)
|
||||
| (thischan.repeat << 27)
|
||||
| (thischan.format << 29)
|
||||
| ((thischan.status == CHANSTAT_PLAY)?(1 << 31):0)
|
||||
);
|
||||
case 0x8: return (thischan.timer | (thischan.loopstart << 16));
|
||||
} //switch on individual channel regs
|
||||
} //default case
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch(addr)
|
||||
{
|
||||
//SOUNDCNT
|
||||
case 0x500: return (regs.mastervol
|
||||
| (regs.ctl_left << 8)
|
||||
| (regs.ctl_right << 10)
|
||||
| (regs.ctl_ch1bypass << 12)
|
||||
| (regs.ctl_ch3bypass << 13)
|
||||
| (regs.masteren << 15)
|
||||
);
|
||||
|
||||
//SOUNDBIAS
|
||||
case 0x504: return (u32)regs.soundbias;
|
||||
|
||||
//SNDCAP0CNT/SNDCAP1CNT
|
||||
case 0x508:
|
||||
{
|
||||
u8 val0 = regs.cap[0].add
|
||||
| (regs.cap[0].source << 1)
|
||||
| (regs.cap[0].oneshot << 2)
|
||||
| (regs.cap[0].bits8 << 3)
|
||||
| (regs.cap[0].runtime.running << 7);
|
||||
u8 val1 = regs.cap[1].add
|
||||
| (regs.cap[1].source << 1)
|
||||
| (regs.cap[1].oneshot << 2)
|
||||
| (regs.cap[1].bits8 << 3)
|
||||
| (regs.cap[1].runtime.running << 7);
|
||||
return (u32)(val0 | (val1 << 8));
|
||||
}
|
||||
|
||||
//SNDCAP0DAD
|
||||
case 0x510: return regs.cap[0].dad;
|
||||
|
||||
//SNDCAP0LEN
|
||||
case 0x514: return (u32)regs.cap[0].len;
|
||||
|
||||
//SNDCAP1DAD
|
||||
case 0x518: return regs.cap[1].dad;
|
||||
|
||||
//SNDCAP1LEN
|
||||
case 0x51C: return (u32)regs.cap[1].len;
|
||||
} //switch on address
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
SPUFifo::SPUFifo()
|
||||
|
@ -637,167 +744,265 @@ void SPU_struct::ProbeCapture(int which)
|
|||
|
||||
void SPU_struct::WriteByte(u32 addr, u8 val)
|
||||
{
|
||||
switch(addr)
|
||||
//individual channel regs
|
||||
if ((addr & 0x0F00) == 0x0400)
|
||||
{
|
||||
//SOUNDCNT
|
||||
case 0x500:
|
||||
regs.mastervol = val&0x7F;
|
||||
break;
|
||||
case 0x501:
|
||||
regs.ctl_left = (val>>0)&3;
|
||||
regs.ctl_right = (val>>2)&3;
|
||||
regs.ctl_ch1bypass = (val>>4)&1;
|
||||
regs.ctl_ch3bypass = (val>>5)&1;
|
||||
regs.masteren = (val>>7)&1;
|
||||
for(int i=0;i<16;i++)
|
||||
KeyProbe(i);
|
||||
break;
|
||||
case 0x502: break; //not used
|
||||
case 0x503: break; //not used
|
||||
|
||||
//SOUNDBIAS
|
||||
case 0x504: SETBYTE(0,regs.soundbias, val); break;
|
||||
case 0x505: SETBYTE(1,regs.soundbias, val&3); break;
|
||||
case 0x506: break; //these dont answer anyway
|
||||
case 0x507: break; //these dont answer anyway
|
||||
|
||||
//SNDCAP0CNT/SNDCAP1CNT
|
||||
case 0x508:
|
||||
case 0x509: {
|
||||
u32 which = addr-0x508;
|
||||
regs.cap[which].add = BIT0(val);
|
||||
regs.cap[which].source = BIT1(val);
|
||||
regs.cap[which].oneshot = BIT2(val);
|
||||
regs.cap[which].bits8 = BIT3(val);
|
||||
regs.cap[which].active = BIT7(val);
|
||||
ProbeCapture(which);
|
||||
break;
|
||||
}
|
||||
|
||||
//SNDCAP0DAD
|
||||
case 0x510: SETBYTE(0,regs.cap[0].dad,val); break;
|
||||
case 0x511: SETBYTE(1,regs.cap[0].dad,val); break;
|
||||
case 0x512: SETBYTE(2,regs.cap[0].dad,val); break;
|
||||
case 0x513: SETBYTE(3,regs.cap[0].dad,val&7); break;
|
||||
|
||||
//SNDCAP0LEN
|
||||
case 0x514: SETBYTE(0,regs.cap[0].len,val); break;
|
||||
case 0x515: SETBYTE(1,regs.cap[0].len,val); break;
|
||||
case 0x516: break; //not used
|
||||
case 0x517: break; //not used
|
||||
|
||||
//SNDCAP1DAD
|
||||
case 0x518: SETBYTE(0,regs.cap[1].dad,val); break;
|
||||
case 0x519: SETBYTE(1,regs.cap[1].dad,val); break;
|
||||
case 0x51A: SETBYTE(2,regs.cap[1].dad,val); break;
|
||||
case 0x51B: SETBYTE(3,regs.cap[1].dad,val&7); break;
|
||||
|
||||
//SNDCAP1LEN
|
||||
case 0x51C: SETBYTE(0,regs.cap[1].len,val); break;
|
||||
case 0x51D: SETBYTE(1,regs.cap[1].len,val); break;
|
||||
case 0x51E: break; //not used
|
||||
case 0x51F: break; //not used
|
||||
|
||||
|
||||
|
||||
default: {
|
||||
//individual channel regs
|
||||
|
||||
u32 chan_num = (addr >> 4) & 0xF;
|
||||
if(chan_num>0xF) break;
|
||||
u8 chan_num = (addr >> 4) & 0xF;
|
||||
channel_struct &thischan=channels[chan_num];
|
||||
|
||||
switch(addr & 0xF) {
|
||||
case 0x0:
|
||||
thischan.vol = val & 0x7F;
|
||||
break;
|
||||
switch (addr & 0x000F)
|
||||
{
|
||||
case 0x0: thischan.vol = (val & 0x7F); break;
|
||||
case 0x1:
|
||||
thischan.datashift = val & 0x3;
|
||||
if (thischan.datashift == 3)
|
||||
thischan.datashift = 4;
|
||||
thischan.hold = (val >> 7) & 0x1;
|
||||
break;
|
||||
case 0x2:
|
||||
thischan.pan = val & 0x7F;
|
||||
thischan.volumeDiv = (val & 0x03);
|
||||
thischan.hold = (val >> 7) & 0x01;
|
||||
break;
|
||||
case 0x2: thischan.pan = (val & 0x7F); break;
|
||||
case 0x3:
|
||||
thischan.waveduty = val & 0x7;
|
||||
thischan.repeat = (val >> 3) & 0x3;
|
||||
thischan.format = (val >> 5) & 0x3;
|
||||
thischan.keyon = BIT7(val);
|
||||
thischan.waveduty = (val & 0x07);
|
||||
thischan.repeat = (val >> 3) & 0x03;
|
||||
thischan.format = (val >> 5) & 0x03;
|
||||
thischan.keyon = (val >> 7) & 0x01;
|
||||
KeyProbe(chan_num);
|
||||
break;
|
||||
case 0x4: SETBYTE(0,thischan.addr,val); break;
|
||||
case 0x5: SETBYTE(1,thischan.addr,val); break;
|
||||
case 0x6: SETBYTE(2,thischan.addr,val); break;
|
||||
case 0x7: SETBYTE(3,thischan.addr,val&0x7); break; //only 27 bits of this register are used
|
||||
case 0x8:
|
||||
SETBYTE(0,thischan.timer,val);
|
||||
adjust_channel_timer(&thischan);
|
||||
break;
|
||||
case 0x9:
|
||||
SETBYTE(1,thischan.timer,val);
|
||||
adjust_channel_timer(&thischan);
|
||||
break;
|
||||
case 0xA: SETBYTE(0,thischan.loopstart,val); break;
|
||||
case 0xB: SETBYTE(1,thischan.loopstart,val); break;
|
||||
case 0xC: SETBYTE(0,thischan.length,val); break;
|
||||
case 0xD: SETBYTE(1,thischan.length,val); break;
|
||||
case 0xE: SETBYTE(2,thischan.length,val & 0x3F); break; //only 22 bits of this register are used
|
||||
case 0xF: SETBYTE(3,thischan.length,0); break;
|
||||
case 0x4: *(u8*)(thischan.addr + 0) = (val & 0xFC); break;
|
||||
case 0x5: *(u8*)(thischan.addr + 1) = val; break;
|
||||
case 0x6: *(u8*)(thischan.addr + 2) = val; break;
|
||||
case 0x7: *(u8*)(thischan.addr + 3) = (val & 0x07); break; //only 27 bits of this register are used
|
||||
case 0x8: *(u8*)(thischan.timer + 0) = val; adjust_channel_timer(&thischan); break;
|
||||
case 0x9: *(u8*)(thischan.timer + 1) = val; adjust_channel_timer(&thischan); break;
|
||||
|
||||
case 0xA: *(u8*)(thischan.loopstart + 0) = val; break;
|
||||
case 0xB: *(u8*)(thischan.loopstart + 1) = val; break;
|
||||
case 0xC: *(u8*)(thischan.length + 0) = val; break;
|
||||
case 0xD: *(u8*)(thischan.length + 1) = val; break;
|
||||
case 0xE: *(u8*)(thischan.length + 2) = (val & 0x3F); break; //only 22 bits of this register are used
|
||||
case 0xF: *(u8*)(thischan.length + 3) = 0; break;
|
||||
} //switch on individual channel regs
|
||||
} //default case
|
||||
return;
|
||||
}
|
||||
|
||||
switch(addr)
|
||||
{
|
||||
//SOUNDCNT
|
||||
case 0x500: regs.mastervol = (val & 0x7F); break;
|
||||
case 0x501:
|
||||
regs.ctl_left = (val >> 0) & 3;
|
||||
regs.ctl_right = (val >> 2) & 3;
|
||||
regs.ctl_ch1bypass = (val >> 4) & 1;
|
||||
regs.ctl_ch3bypass = (val >> 5) & 1;
|
||||
regs.masteren = (val >> 7) & 1;
|
||||
for(u8 i=0; i<16; i++)
|
||||
KeyProbe(i);
|
||||
break;
|
||||
|
||||
//SOUNDBIAS
|
||||
case 0x504: *(u8*)(regs.soundbias + 0) = val; break;
|
||||
case 0x505: *(u8*)(regs.soundbias + 1) = (val & 0x03); break;
|
||||
|
||||
//SNDCAP0CNT/SNDCAP1CNT
|
||||
case 0x508:
|
||||
case 0x509:
|
||||
{
|
||||
u32 which = (addr - 0x508);
|
||||
regs.cap[which].add = BIT0(val);
|
||||
regs.cap[which].source = BIT1(val);
|
||||
regs.cap[which].oneshot = BIT2(val);
|
||||
regs.cap[which].bits8 = BIT3(val);
|
||||
regs.cap[which].active = BIT7(val);
|
||||
ProbeCapture(which);
|
||||
break;
|
||||
}
|
||||
|
||||
//SNDCAP0DAD
|
||||
case 0x510: *(u8*)(regs.cap[0].dad + 0) = (val & 0xFC); break;
|
||||
case 0x511: *(u8*)(regs.cap[0].dad + 1) = val; break;
|
||||
case 0x512: *(u8*)(regs.cap[0].dad + 2) = val; break;
|
||||
case 0x513: *(u8*)(regs.cap[0].dad + 3) = (val & 0x07); break;
|
||||
|
||||
//SNDCAP0LEN
|
||||
case 0x514: *(u8*)(regs.cap[0].len + 0) = val; break;
|
||||
case 0x515: *(u8*)(regs.cap[0].len + 1) = val; break;
|
||||
|
||||
//SNDCAP1DAD
|
||||
case 0x518: *(u8*)(regs.cap[1].dad + 0) = (val & 0xFC); break;
|
||||
case 0x519: *(u8*)(regs.cap[1].dad + 1) = val; break;
|
||||
case 0x51A: *(u8*)(regs.cap[1].dad + 2) = val; break;
|
||||
case 0x51B: *(u8*)(regs.cap[1].dad + 3) = (val & 0x07); break;
|
||||
|
||||
//SNDCAP1LEN
|
||||
case 0x51C: *(u8*)(regs.cap[1].len + 0) = val; break;
|
||||
case 0x51D: *(u8*)(regs.cap[1].len + 1) = val; break;
|
||||
} //switch on address
|
||||
}
|
||||
|
||||
void SPU_WriteByte(u32 addr, u8 val)
|
||||
{
|
||||
//printf("%08X: chan:%02X reg:%02X val:%02X\n",addr,(addr>>4)&0xF,addr&0xF,val);
|
||||
addr &= 0xFFF;
|
||||
|
||||
SPU_core->WriteByte(addr,val);
|
||||
if(SPU_user) SPU_user->WriteByte(addr,val);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void SPU_struct::WriteWord(u32 addr, u16 val)
|
||||
{
|
||||
WriteByte(addr,val&0xFF);
|
||||
WriteByte(addr+1,(val>>8)&0xFF);
|
||||
//individual channel regs
|
||||
if ((addr & 0x0F00) == 0x0400)
|
||||
{
|
||||
u32 chan_num = (addr >> 4) & 0xF;
|
||||
channel_struct &thischan=channels[chan_num];
|
||||
|
||||
switch (addr & 0xF)
|
||||
{
|
||||
case 0x0:
|
||||
thischan.vol = (val & 0x7F);
|
||||
thischan.volumeDiv = (val >> 8) & 0x3;
|
||||
thischan.hold = (val >> 15) & 0x1;
|
||||
break;
|
||||
case 0x2:
|
||||
thischan.pan = (val & 0x7F);
|
||||
thischan.waveduty = (val >> 8) & 0x7;
|
||||
thischan.repeat = (val >> 11) & 0x3;
|
||||
thischan.format = (val >> 13) & 0x3;
|
||||
thischan.keyon = (val >> 15) & 0x1;
|
||||
KeyProbe(chan_num);
|
||||
break;
|
||||
case 0x4: *(u16*)(thischan.addr + 0) = (val & 0xFFFC); break;
|
||||
case 0x6: *(u16*)(thischan.addr + 1) = (val & 0x07FF); break;
|
||||
case 0x8: thischan.timer = val; adjust_channel_timer(&thischan); break;
|
||||
case 0xA: thischan.loopstart = val; break;
|
||||
case 0xC: *(u16*)(thischan.length + 0) = val; break;
|
||||
case 0xE: *(u16*)(thischan.length + 1) = (val & 0x003F); break; //only 22 bits of this register are used
|
||||
} //switch on individual channel regs
|
||||
return;
|
||||
}
|
||||
|
||||
switch (addr)
|
||||
{
|
||||
//SOUNDCNT
|
||||
case 0x500:
|
||||
regs.mastervol = (val & 0x7F);
|
||||
regs.ctl_left = (val >> 8) & 0x03;
|
||||
regs.ctl_right = (val >> 10) & 0x03;
|
||||
regs.ctl_ch1bypass = (val >> 12) & 0x01;
|
||||
regs.ctl_ch3bypass = (val >> 13) & 0x01;
|
||||
regs.masteren = (val >> 15) & 0x01;
|
||||
for(u8 i=0; i<16; i++)
|
||||
KeyProbe(i);
|
||||
break;
|
||||
|
||||
//SOUNDBIAS
|
||||
case 0x504: regs.soundbias = (val & 0x3FF); break;
|
||||
|
||||
//SNDCAP0CNT/SNDCAP1CNT
|
||||
case 0x508:
|
||||
{
|
||||
regs.cap[0].add = BIT0(val);
|
||||
regs.cap[0].source = BIT1(val);
|
||||
regs.cap[0].oneshot = BIT2(val);
|
||||
regs.cap[0].bits8 = BIT3(val);
|
||||
regs.cap[0].active = BIT7(val);
|
||||
ProbeCapture(0);
|
||||
|
||||
regs.cap[1].add = BIT8(val);
|
||||
regs.cap[1].source = BIT9(val);
|
||||
regs.cap[1].oneshot = BIT10(val);
|
||||
regs.cap[1].bits8 = BIT11(val);
|
||||
regs.cap[1].active = BIT15(val);
|
||||
ProbeCapture(1);
|
||||
break;
|
||||
}
|
||||
|
||||
//SNDCAP0DAD
|
||||
case 0x510: *(u16*)(regs.cap[0].dad + 0) = (val & 0xFFFC); break;
|
||||
case 0x512: *(u16*)(regs.cap[0].dad + 1) = (val & 0x7FFF); break;
|
||||
|
||||
//SNDCAP0LEN
|
||||
case 0x514: regs.cap[0].len = val; break;
|
||||
|
||||
//SNDCAP1DAD
|
||||
case 0x518: *(u16*)(regs.cap[1].dad + 0) = (val & 0xFFFC); break;
|
||||
case 0x51A: *(u16*)(regs.cap[1].dad + 1) = (val & 0x7FFF); break;
|
||||
|
||||
//SNDCAP1LEN
|
||||
case 0x51C: regs.cap[1].len = val; break;
|
||||
} //switch on address
|
||||
}
|
||||
|
||||
void SPU_WriteWord(u32 addr, u16 val)
|
||||
{
|
||||
//printf("%08X: chan:%02X reg:%02X val:%04X\n",addr,(addr>>4)&0xF,addr&0xF,val);
|
||||
addr &= 0xFFF;
|
||||
|
||||
SPU_core->WriteWord(addr,val);
|
||||
if(SPU_user) SPU_user->WriteWord(addr,val);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void SPU_struct::WriteLong(u32 addr, u32 val)
|
||||
{
|
||||
WriteByte(addr,val&0xFF);
|
||||
WriteByte(addr+1,(val>>8)&0xFF);
|
||||
WriteByte(addr+2,(val>>16)&0xFF);
|
||||
WriteByte(addr+3,(val>>24)&0xFF);
|
||||
//individual channel regs
|
||||
if ((addr & 0x0F00) == 0x0400)
|
||||
{
|
||||
u32 chan_num = (addr >> 4) & 0xF;
|
||||
channel_struct &thischan=channels[chan_num];
|
||||
|
||||
switch (addr & 0xF)
|
||||
{
|
||||
case 0x0:
|
||||
thischan.vol = val & 0x7F;
|
||||
thischan.volumeDiv = (val >> 8) & 0x3;
|
||||
thischan.hold = (val >> 15) & 0x1;
|
||||
thischan.pan = (val >> 16) & 0x7F;
|
||||
thischan.waveduty = (val >> 24) & 0x7;
|
||||
thischan.repeat = (val >> 27) & 0x3;
|
||||
thischan.format = (val >> 29) & 0x3;
|
||||
thischan.keyon = (val >> 31) & 0x1;
|
||||
KeyProbe(chan_num);
|
||||
break;
|
||||
|
||||
case 0x4: thischan.addr = (val & 0x07FFFFFC); break;
|
||||
case 0x8:
|
||||
thischan.timer = (val & 0xFFFF);
|
||||
thischan.loopstart = ((val >> 16) & 0xFFFF);
|
||||
adjust_channel_timer(&thischan);
|
||||
break;
|
||||
|
||||
case 0xC: thischan.length = (val & 0x003FFFFF); break; //only 22 bits of this register are used
|
||||
} //switch on individual channel regs
|
||||
return;
|
||||
}
|
||||
|
||||
switch(addr)
|
||||
{
|
||||
//SOUNDCNT
|
||||
case 0x500:
|
||||
regs.mastervol = (val & 0x7F);
|
||||
regs.ctl_left = ((val >> 8) & 3);
|
||||
regs.ctl_right = ((val>>10) & 3);
|
||||
regs.ctl_ch1bypass = ((val >> 12) & 1);
|
||||
regs.ctl_ch3bypass = ((val >> 13) & 1);
|
||||
regs.masteren = ((val >> 15) & 1);
|
||||
for(u8 i=0; i<16; i++)
|
||||
KeyProbe(i);
|
||||
break;
|
||||
|
||||
//SOUNDBIAS
|
||||
case 0x504: regs.soundbias = (val & 0x3FF);
|
||||
|
||||
//SNDCAP0CNT/SNDCAP1CNT
|
||||
case 0x508:
|
||||
regs.cap[0].add = BIT0(val);
|
||||
regs.cap[0].source = BIT1(val);
|
||||
regs.cap[0].oneshot = BIT2(val);
|
||||
regs.cap[0].bits8 = BIT3(val);
|
||||
regs.cap[0].active = BIT7(val);
|
||||
ProbeCapture(0);
|
||||
|
||||
regs.cap[1].add = BIT8(val);
|
||||
regs.cap[1].source = BIT9(val);
|
||||
regs.cap[1].oneshot = BIT10(val);
|
||||
regs.cap[1].bits8 = BIT11(val);
|
||||
regs.cap[1].active = BIT15(val);
|
||||
ProbeCapture(1);
|
||||
break;
|
||||
|
||||
//SNDCAP0DAD
|
||||
case 0x510: regs.cap[0].dad = (val & 0x07FFFFFC); break;
|
||||
|
||||
//SNDCAP0LEN
|
||||
case 0x514: regs.cap[0].len = (val & 0xFFFF); break;
|
||||
|
||||
//SNDCAP1DAD
|
||||
case 0x518: regs.cap[1].dad = (val & 0x07FFFFFC); break;
|
||||
|
||||
//SNDCAP1LEN
|
||||
case 0x51C: regs.cap[1].len = (val & 0xFFFF); break;
|
||||
} //switch on address
|
||||
}
|
||||
|
||||
void SPU_WriteLong(u32 addr, u32 val)
|
||||
{
|
||||
//printf("%08X: chan:%02X reg:%02X val:%08X\n",addr,(addr>>4)&0xF,addr&0xF,val);
|
||||
addr &= 0xFFF;
|
||||
|
||||
SPU_core->WriteLong(addr,val);
|
||||
if(SPU_user)
|
||||
SPU_user->WriteLong(addr,val);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
template<SPUInterpolationMode INTERPOLATE_MODE> static FORCEINLINE s32 Interpolate(s32 a, s32 b, double ratio)
|
||||
{
|
||||
double sampleA = (double)a;
|
||||
|
@ -962,19 +1167,19 @@ static FORCEINLINE void FetchPSGData(channel_struct *chan, s32 *data)
|
|||
|
||||
static FORCEINLINE void MixL(SPU_struct* SPU, channel_struct *chan, s32 data)
|
||||
{
|
||||
data = spumuldiv7(data, chan->vol) >> chan->datashift;
|
||||
data = spumuldiv7(data, chan->vol) >> volume_shift[chan->volumeDiv];
|
||||
SPU->sndbuf[SPU->bufpos<<1] += data;
|
||||
}
|
||||
|
||||
static FORCEINLINE void MixR(SPU_struct* SPU, channel_struct *chan, s32 data)
|
||||
{
|
||||
data = spumuldiv7(data, chan->vol) >> chan->datashift;
|
||||
data = spumuldiv7(data, chan->vol) >> volume_shift[chan->volumeDiv];
|
||||
SPU->sndbuf[(SPU->bufpos<<1)+1] += data;
|
||||
}
|
||||
|
||||
static FORCEINLINE void MixLR(SPU_struct* SPU, channel_struct *chan, s32 data)
|
||||
{
|
||||
data = spumuldiv7(data, chan->vol) >> chan->datashift;
|
||||
data = spumuldiv7(data, chan->vol) >> volume_shift[chan->volumeDiv];
|
||||
SPU->sndbuf[SPU->bufpos<<1] += spumuldiv7(data, 127 - chan->pan);
|
||||
SPU->sndbuf[(SPU->bufpos<<1)+1] += spumuldiv7(data, chan->pan);
|
||||
}
|
||||
|
@ -1177,7 +1382,7 @@ static void SPU_MixAudio_Advanced(bool actuallyMix, SPU_struct *SPU, int length)
|
|||
|
||||
//get channel's next output sample.
|
||||
_SPU_ChanUpdate(domix, SPU, chan);
|
||||
chanout[i] = SPU->lastdata >> chan->datashift;
|
||||
chanout[i] = SPU->lastdata >> volume_shift[chan->volumeDiv];
|
||||
|
||||
//save the panned results
|
||||
submix[i*2] = SPU->sndbuf[0];
|
||||
|
@ -1696,7 +1901,7 @@ void spu_savestate(EMUFILE* os)
|
|||
channel_struct &chan = spu->channels[j];
|
||||
write32le(chan.num,os);
|
||||
write8le(chan.vol,os);
|
||||
write8le(chan.datashift,os);
|
||||
write8le(chan.volumeDiv,os);
|
||||
write8le(chan.hold,os);
|
||||
write8le(chan.pan,os);
|
||||
write8le(chan.waveduty,os);
|
||||
|
@ -1762,7 +1967,8 @@ bool spu_loadstate(EMUFILE* is, int size)
|
|||
channel_struct &chan = spu->channels[j];
|
||||
read32le(&chan.num,is);
|
||||
read8le(&chan.vol,is);
|
||||
read8le(&chan.datashift,is);
|
||||
read8le(&chan.volumeDiv,is);
|
||||
if (chan.volumeDiv == 4) chan.volumeDiv = 3;
|
||||
read8le(&chan.hold,is);
|
||||
read8le(&chan.pan,is);
|
||||
read8le(&chan.waveduty,is);
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#define CHANSTAT_STOPPED 0
|
||||
#define CHANSTAT_PLAY 1
|
||||
|
||||
|
||||
//who made these static? theyre used in multiple places.
|
||||
FORCEINLINE u32 sputrunc(float f) { return u32floor(f); }
|
||||
FORCEINLINE u32 sputrunc(double d) { return u32floor(d); }
|
||||
|
@ -71,11 +72,36 @@ extern int SPU_currentCoreNum;
|
|||
|
||||
struct channel_struct
|
||||
{
|
||||
channel_struct()
|
||||
channel_struct() : num(0),
|
||||
vol(0),
|
||||
volumeDiv(0),
|
||||
hold(0),
|
||||
pan(0),
|
||||
waveduty(0),
|
||||
repeat(0),
|
||||
format(0),
|
||||
keyon(0),
|
||||
status(0),
|
||||
addr(0),
|
||||
timer(0),
|
||||
loopstart(0),
|
||||
length(0),
|
||||
totlength(0),
|
||||
double_totlength_shifted(0.f),
|
||||
sampcnt(0.f),
|
||||
sampinc(0.f),
|
||||
lastsampcnt(0),
|
||||
pcm16b(0),
|
||||
pcm16b_last(0),
|
||||
loop_pcm16b(0),
|
||||
index(0),
|
||||
loop_index(0),
|
||||
x(0),
|
||||
psgnoise_last(0)
|
||||
{}
|
||||
u32 num;
|
||||
u8 vol;
|
||||
u8 datashift;
|
||||
u8 volumeDiv;
|
||||
u8 hold;
|
||||
u8 pan;
|
||||
u8 waveduty;
|
||||
|
@ -181,16 +207,20 @@ public:
|
|||
void KeyProbe(int channel);
|
||||
void ProbeCapture(int which);
|
||||
void WriteByte(u32 addr, u8 val);
|
||||
void WriteWord(u32 addr, u16 val);
|
||||
void WriteLong(u32 addr, u32 val);
|
||||
u8 ReadByte(u32 addr);
|
||||
u16 ReadWord(u32 addr);
|
||||
u32 ReadLong(u32 addr);
|
||||
void WriteWord(u32 addr, u16 val);
|
||||
void WriteLong(u32 addr, u32 val);
|
||||
bool isSPU(u32 addr) { return ((addr >= 0x04000400) && (addr < 0x04000520)); }
|
||||
|
||||
//kills all channels but leaves SPU otherwise running normally
|
||||
void ShutUp();
|
||||
};
|
||||
|
||||
extern SPU_struct *SPU_core, *SPU_user;
|
||||
extern int spu_core_samples;
|
||||
|
||||
int SPU_ChangeSoundCore(int coreid, int buffersize);
|
||||
SoundInterface_struct *SPU_SoundCore();
|
||||
|
||||
|
@ -203,20 +233,38 @@ void SPU_ClearOutputBuffer(void);
|
|||
void SPU_Reset(void);
|
||||
void SPU_DeInit(void);
|
||||
void SPU_KeyOn(int channel);
|
||||
void SPU_WriteByte(u32 addr, u8 val);
|
||||
void SPU_WriteWord(u32 addr, u16 val);
|
||||
void SPU_WriteLong(u32 addr, u32 val);
|
||||
u8 SPU_ReadByte(u32 addr);
|
||||
u16 SPU_ReadWord(u32 addr);
|
||||
u32 SPU_ReadLong(u32 addr);
|
||||
static FORCEINLINE void SPU_WriteByte(u32 addr, u8 val)
|
||||
{
|
||||
addr &= 0xFFF;
|
||||
|
||||
SPU_core->WriteByte(addr,val);
|
||||
if(SPU_user)
|
||||
SPU_user->WriteByte(addr,val);
|
||||
}
|
||||
static FORCEINLINE void SPU_WriteWord(u32 addr, u16 val)
|
||||
{
|
||||
addr &= 0xFFF;
|
||||
|
||||
SPU_core->WriteWord(addr,val);
|
||||
if(SPU_user)
|
||||
SPU_user->WriteWord(addr,val);
|
||||
}
|
||||
static FORCEINLINE void SPU_WriteLong(u32 addr, u32 val)
|
||||
{
|
||||
addr &= 0xFFF;
|
||||
|
||||
SPU_core->WriteLong(addr,val);
|
||||
if(SPU_user)
|
||||
SPU_user->WriteLong(addr,val);
|
||||
}
|
||||
static FORCEINLINE u8 SPU_ReadByte(u32 addr) { return SPU_core->ReadByte(addr & 0x0FFF); }
|
||||
static FORCEINLINE u16 SPU_ReadWord(u32 addr) { return SPU_core->ReadWord(addr & 0x0FFF); }
|
||||
static FORCEINLINE u32 SPU_ReadLong(u32 addr) { return SPU_core->ReadLong(addr & 0x0FFF); }
|
||||
void SPU_Emulate_core(void);
|
||||
void SPU_Emulate_user(bool mix = true);
|
||||
void SPU_DefaultFetchSamples(s16 *sampleBuffer, size_t sampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer);
|
||||
size_t SPU_DefaultPostProcessSamples(s16 *postProcessBuffer, size_t requestedSampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer);
|
||||
|
||||
extern SPU_struct *SPU_core, *SPU_user;
|
||||
extern int spu_core_samples;
|
||||
|
||||
void spu_savestate(EMUFILE* os);
|
||||
bool spu_loadstate(EMUFILE* is, int size);
|
||||
|
||||
|
|
|
@ -1013,125 +1013,125 @@ BEGIN
|
|||
LTEXT "This will be necessary to emulate sound capture (reverb and music visualization). This is costly, few games use it, and the effect is unnecessary. Enable it if your system has power to spare; check the Sound Viewer to see if the game is using capture.",IDC_STATIC,196,91,170,44
|
||||
END
|
||||
|
||||
IDD_SOUND_VIEW DIALOGEX 0, 0, 550, 268
|
||||
IDD_SOUND_VIEW DIALOGEX 0, 0, 568, 269
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Sound View"
|
||||
FONT 8, "Ms Shell Dlg 2", 0, 0, 0x0
|
||||
BEGIN
|
||||
CTEXT "Volume",IDC_STATIC,30,22,100,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "Pan",IDC_STATIC,30,34,100,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "Hold",IDC_STATIC,131,22,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "Busy",IDC_STATIC,131,34,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "Repeat Mode",IDC_STATIC,154,22,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "Format",IDC_STATIC,154,34,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "Source Addr",IDC_STATIC,227,22,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "Loop Start",IDC_STATIC,227,34,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "Timer Value",IDC_STATIC,288,22,88,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "Sound Pos / Len",IDC_STATIC,288,34,88,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "Volume",IDC_STATIC,30,22,122,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "Pan",IDC_STATIC,30,34,122,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "Hold",IDC_STATIC,153,22,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "Busy",IDC_STATIC,153,34,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "Repeat Mode",IDC_STATIC,176,22,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "Format",IDC_STATIC,176,34,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "Source Addr",IDC_STATIC,249,22,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "Loop Start",IDC_STATIC,249,34,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "Timer Value",IDC_STATIC,310,22,88,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "Sound Pos / Len",IDC_STATIC,310,34,88,11,0,WS_EX_STATICEDGE
|
||||
RTEXT "#00",IDC_SOUND0ID,4,50,23,10
|
||||
CONTROL "",IDC_SOUND0VOLBAR,"msctls_progress32",0x1,30,49,68,11
|
||||
CTEXT "",IDC_SOUND0VOL,100,49,30,11,0,WS_EX_STATICEDGE
|
||||
CONTROL "",IDC_SOUND0PANBAR,"msctls_progress32",0x1,30,62,68,10
|
||||
CTEXT "",IDC_SOUND0PAN,100,61,30,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND0HOLD,131,49,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND0BUSY,131,61,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND0REPEATMODE,154,49,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND0FORMAT,154,61,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND0SAD,227,49,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND0PNT,227,61,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND0TMR,288,49,88,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND0POSLEN,288,61,88,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_SOUND0VOLBAR,30,49,85,11,NOT WS_GROUP
|
||||
CTEXT "",IDC_SOUND0VOL,122,49,30,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_SOUND0PANBAR,30,62,85,11,NOT WS_GROUP
|
||||
CTEXT "",IDC_SOUND0PAN,122,61,30,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND0HOLD,153,49,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND0BUSY,153,61,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND0REPEATMODE,176,49,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND0FORMAT,176,61,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND0SAD,249,49,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND0PNT,249,61,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND0TMR,310,49,88,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND0POSLEN,310,61,88,11,0,WS_EX_STATICEDGE
|
||||
RTEXT "#01",IDC_SOUND1ID,4,75,23,10
|
||||
CONTROL "",IDC_SOUND1VOLBAR,"msctls_progress32",0x1,30,74,68,11
|
||||
CTEXT "",IDC_SOUND1VOL,100,74,30,11,0,WS_EX_STATICEDGE
|
||||
CONTROL "",IDC_SOUND1PANBAR,"msctls_progress32",0x1,30,87,68,11
|
||||
CTEXT "",IDC_SOUND1PAN,100,87,30,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND1HOLD,131,74,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND1BUSY,131,87,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND1REPEATMODE,154,74,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND1FORMAT,154,87,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND1SAD,227,74,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND1PNT,227,87,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND1TMR,288,74,88,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND1POSLEN,288,87,88,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_SOUND1VOLBAR,30,74,85,11,NOT WS_GROUP
|
||||
CTEXT "",IDC_SOUND1VOL,122,74,30,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_SOUND1PANBAR,30,87,85,11,NOT WS_GROUP
|
||||
CTEXT "",IDC_SOUND1PAN,122,87,30,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND1HOLD,153,74,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND1BUSY,153,87,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND1REPEATMODE,176,74,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND1FORMAT,176,87,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND1SAD,249,74,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND1PNT,249,87,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND1TMR,310,74,88,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND1POSLEN,310,87,88,11,0,WS_EX_STATICEDGE
|
||||
RTEXT "#02",IDC_SOUND2ID,4,101,23,10
|
||||
CONTROL "",IDC_SOUND2VOLBAR,"msctls_progress32",0x1,30,100,68,11
|
||||
CTEXT "",IDC_SOUND2VOL,100,100,30,11,0,WS_EX_STATICEDGE
|
||||
CONTROL "",IDC_SOUND2PANBAR,"msctls_progress32",0x1,30,113,68,11
|
||||
CTEXT "",IDC_SOUND2PAN,100,113,30,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND2HOLD,131,100,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND2BUSY,131,113,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND2REPEATMODE,154,100,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND2FORMAT,154,113,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND2SAD,227,100,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND2PNT,227,113,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND2TMR,288,100,88,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND2POSLEN,288,113,88,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_SOUND2VOLBAR,30,100,85,11,NOT WS_GROUP
|
||||
CTEXT "",IDC_SOUND2VOL,122,100,30,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_SOUND2PANBAR,30,113,85,11,NOT WS_GROUP
|
||||
CTEXT "",IDC_SOUND2PAN,122,113,30,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND2HOLD,153,100,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND2BUSY,153,113,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND2REPEATMODE,176,100,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND2FORMAT,176,113,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND2SAD,249,100,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND2PNT,249,113,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND2TMR,310,100,88,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND2POSLEN,310,113,88,11,0,WS_EX_STATICEDGE
|
||||
RTEXT "#03",IDC_SOUND3ID,4,127,23,10
|
||||
CONTROL "",IDC_SOUND3VOLBAR,"msctls_progress32",0x1,30,126,68,11
|
||||
CTEXT "",IDC_SOUND3VOL,100,126,30,11,0,WS_EX_STATICEDGE
|
||||
CONTROL "",IDC_SOUND3PANBAR,"msctls_progress32",0x1,30,139,68,11
|
||||
CTEXT "",IDC_SOUND3PAN,100,139,30,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND3HOLD,131,126,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND3BUSY,131,139,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND3REPEATMODE,154,126,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND3FORMAT,154,139,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND3SAD,227,126,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND3PNT,227,139,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND3TMR,288,126,88,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND3POSLEN,288,139,88,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_SOUND3VOLBAR,30,126,85,11,NOT WS_GROUP
|
||||
CTEXT "",IDC_SOUND3VOL,122,126,30,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_SOUND3PANBAR,30,139,85,11,NOT WS_GROUP
|
||||
CTEXT "",IDC_SOUND3PAN,122,139,30,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND3HOLD,153,126,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND3BUSY,153,139,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND3REPEATMODE,176,126,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND3FORMAT,176,139,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND3SAD,249,126,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND3PNT,249,139,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND3TMR,310,126,88,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND3POSLEN,310,139,88,11,0,WS_EX_STATICEDGE
|
||||
RTEXT "#04",IDC_SOUND4ID,4,153,23,10
|
||||
CONTROL "",IDC_SOUND4VOLBAR,"msctls_progress32",0x1,30,152,68,11
|
||||
CTEXT "",IDC_SOUND4VOL,100,152,30,11,0,WS_EX_STATICEDGE
|
||||
CONTROL "",IDC_SOUND4PANBAR,"msctls_progress32",0x1,30,165,68,11
|
||||
CTEXT "",IDC_SOUND4PAN,100,165,30,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND4HOLD,131,152,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND4BUSY,131,165,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND4REPEATMODE,154,152,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND4FORMAT,154,165,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND4SAD,227,152,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND4PNT,227,165,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND4TMR,288,152,88,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND4POSLEN,288,165,88,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_SOUND4VOLBAR,30,152,85,11,NOT WS_GROUP
|
||||
CTEXT "",IDC_SOUND4VOL,122,152,30,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_SOUND4PANBAR,30,165,85,11,NOT WS_GROUP
|
||||
CTEXT "",IDC_SOUND4PAN,122,165,30,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND4HOLD,153,152,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND4BUSY,153,165,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND4REPEATMODE,176,152,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND4FORMAT,176,165,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND4SAD,249,152,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND4PNT,249,165,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND4TMR,310,152,88,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND4POSLEN,310,165,88,11,0,WS_EX_STATICEDGE
|
||||
RTEXT "#05",IDC_SOUND5ID,4,179,23,10
|
||||
CONTROL "",IDC_SOUND5VOLBAR,"msctls_progress32",0x1,30,178,68,11
|
||||
CTEXT "",IDC_SOUND5VOL,100,178,30,11,0,WS_EX_STATICEDGE
|
||||
CONTROL "",IDC_SOUND5PANBAR,"msctls_progress32",0x1,30,191,68,11
|
||||
CTEXT "",IDC_SOUND5PAN,100,191,30,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND5HOLD,131,178,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND5BUSY,131,191,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND5REPEATMODE,154,178,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND5FORMAT,154,191,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND5SAD,227,178,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND5PNT,227,191,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND5TMR,288,178,88,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND5POSLEN,288,191,88,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_SOUND5VOLBAR,30,178,85,11,NOT WS_GROUP
|
||||
CTEXT "",IDC_SOUND5VOL,122,178,30,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_SOUND5PANBAR,30,191,85,11,NOT WS_GROUP
|
||||
CTEXT "",IDC_SOUND5PAN,122,191,30,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND5HOLD,153,178,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND5BUSY,153,191,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND5REPEATMODE,176,178,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND5FORMAT,176,191,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND5SAD,249,178,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND5PNT,249,191,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND5TMR,310,178,88,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND5POSLEN,310,191,88,11,0,WS_EX_STATICEDGE
|
||||
RTEXT "#06",IDC_SOUND6ID,4,205,23,10
|
||||
CONTROL "",IDC_SOUND6VOLBAR,"msctls_progress32",0x1,30,204,68,11
|
||||
CTEXT "",IDC_SOUND6VOL,100,204,30,11,0,WS_EX_STATICEDGE
|
||||
CONTROL "",IDC_SOUND6PANBAR,"msctls_progress32",0x1,30,217,68,11
|
||||
CTEXT "",IDC_SOUND6PAN,100,217,30,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND6HOLD,131,204,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND6BUSY,131,217,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND6REPEATMODE,154,204,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND6FORMAT,154,217,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND6SAD,227,204,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND6PNT,227,217,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND6TMR,288,204,88,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND6POSLEN,288,217,88,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_SOUND6VOLBAR,30,204,85,11,NOT WS_GROUP
|
||||
CTEXT "",IDC_SOUND6VOL,122,204,30,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_SOUND6PANBAR,30,217,85,11,NOT WS_GROUP
|
||||
CTEXT "",IDC_SOUND6PAN,122,217,30,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND6HOLD,153,204,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND6BUSY,153,217,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND6REPEATMODE,176,204,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND6FORMAT,176,217,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND6SAD,249,204,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND6PNT,249,217,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND6TMR,310,204,88,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND6POSLEN,310,217,88,11,0,WS_EX_STATICEDGE
|
||||
RTEXT "#07",IDC_SOUND7ID,4,231,23,10
|
||||
CONTROL "",IDC_SOUND7VOLBAR,"msctls_progress32",0x1,30,230,68,11
|
||||
CTEXT "",IDC_SOUND7VOL,100,230,30,11,0,WS_EX_STATICEDGE
|
||||
CONTROL "",IDC_SOUND7PANBAR,"msctls_progress32",0x1,30,243,68,11
|
||||
CTEXT "",IDC_SOUND7PAN,100,243,30,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND7HOLD,131,230,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND7BUSY,131,243,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND7REPEATMODE,154,230,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND7FORMAT,154,243,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND7SAD,227,230,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND7PNT,227,243,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND7TMR,288,230,88,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND7POSLEN,288,243,88,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_SOUND7VOLBAR,30,230,85,11,NOT WS_GROUP
|
||||
CTEXT "",IDC_SOUND7VOL,122,230,30,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_SOUND7PANBAR,30,244,85,11,NOT WS_GROUP
|
||||
CTEXT "",IDC_SOUND7PAN,122,244,30,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND7HOLD,153,230,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND7BUSY,153,244,22,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND7REPEATMODE,176,230,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND7FORMAT,176,244,72,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND7SAD,249,230,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND7PNT,249,244,60,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND7TMR,310,230,88,11,0,WS_EX_STATICEDGE
|
||||
CTEXT "",IDC_SOUND7POSLEN,310,244,88,11,0,WS_EX_STATICEDGE
|
||||
PUSHBUTTON "V",IDC_SOUNDVIEW_CHANSWITCH,16,33,12,12
|
||||
CONTROL "Vol.Mode",IDC_BUTTON_VOLMODE,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | WS_TABSTOP,13,7,45,10
|
||||
CONTROL "Check1",IDC_SOUND0MUTE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,62,10,10
|
||||
|
@ -1142,59 +1142,59 @@ BEGIN
|
|||
CONTROL "Check1",IDC_SOUND5MUTE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,192,10,10
|
||||
CONTROL "Check1",IDC_SOUND6MUTE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,217,10,10
|
||||
CONTROL "Check1",IDC_SOUND7MUTE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,243,10,10
|
||||
GROUPBOX "Capture 0",IDC_STATIC,379,90,157,80
|
||||
LTEXT "508 ctrl",IDC_STATIC,403,103,25,8
|
||||
CHECKBOX "b0 AddCh1toCh0",IDC_CAP0_ADD,433,103,68,10
|
||||
CHECKBOX "b1 Src",IDC_CAP0_SRC,383,116,36,10
|
||||
CHECKBOX "b2 One-Shot",IDC_CAP0_ONESHOT,450,116,54,10
|
||||
CHECKBOX "b3 Typ",IDC_CAP0_TYPE,383,127,36,10
|
||||
CHECKBOX "b7 Active",IDC_CAP0_ACTIVE,450,127,49,10
|
||||
LTEXT "",IDC_CAP0_DAD,383,141,37,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_CAP0_CTRL,383,103,16,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_CAP0_SRCTEXT,419,116,25,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_CAP0_TYPETEXT,419,127,25,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "510 DAD",IDC_STATIC,423,143,29,8
|
||||
LTEXT "514 LEN",IDC_STATIC,492,143,27,8
|
||||
LTEXT "",IDC_CAP0_LEN,453,141,37,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_CAP0_CURDAD,384,156,37,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "DAD CUR",IDC_STATIC,423,156,32,8
|
||||
CHECKBOX "Running",IDC_CAP0_RUNNING,457,156,49,10
|
||||
GROUPBOX "Capture 1",IDC_STATIC,379,174,157,80
|
||||
LTEXT "509 ctrl",IDC_STATIC,403,187,25,8
|
||||
CHECKBOX "b0 AddCh3toCh2",IDC_CAP1_ADD,433,187,68,10
|
||||
CHECKBOX "b1 Src",IDC_CAP1_SRC,383,200,36,10
|
||||
CHECKBOX "b2 One-Shot",IDC_CAP1_ONESHOT,449,200,54,10
|
||||
CHECKBOX "b3 Typ",IDC_CAP1_TYPE,383,211,36,10
|
||||
CHECKBOX "b7 Active",IDC_CAP1_ACTIVE,449,211,49,10
|
||||
LTEXT "",IDC_CAP1_DAD,383,226,37,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_CAP1_CTRL,383,187,16,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_CAP1_SRCTEXT,419,200,25,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_CAP1_TYPETEXT,419,211,25,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "518 DAD",IDC_STATIC,423,227,29,8
|
||||
LTEXT "51C LEN",IDC_STATIC,492,227,28,8
|
||||
LTEXT "",IDC_CAP1_LEN,453,226,37,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_CAP1_CURDAD,383,240,37,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "DAD CUR",IDC_STATIC,423,240,32,8
|
||||
CHECKBOX "Running",IDC_CAP1_RUNNING,457,240,49,10
|
||||
GROUPBOX "Sound Control",IDC_STATIC,378,18,158,69
|
||||
LTEXT "",IDC_SNDCTRL_CTRL,385,29,26,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "500 Ctrl",IDC_STATIC,416,31,26,8
|
||||
LTEXT "",IDC_SNDCTRL_VOL,385,42,26,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "b0-6 Vol",IDC_STATIC,415,44,27,8
|
||||
LTEXT "",IDC_SNDCTRL_BIAS,456,30,26,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "504 Bias",IDC_STATIC,485,32,28,8
|
||||
CHECKBOX "b15 Enable",IDC_SNDCTRL_ENABLE,473,44,49,10
|
||||
LTEXT "",IDC_SNDCTRL_LEFTOUT,385,57,12,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "b8-9 L-Out",IDC_STATIC,400,59,36,8
|
||||
LTEXT "",IDC_SNDCTRL_LEFTOUTTEXT,445,57,25,11,0,WS_EX_STATICEDGE
|
||||
CHECKBOX "b12 ch1 nomix",IDC_SNDCTRL_CH1NOMIX,473,57,59,10
|
||||
LTEXT "",IDC_SNDCTRL_RIGHTOUT,385,70,12,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "b10-11 R-Out",IDC_STATIC,400,72,45,8
|
||||
LTEXT "",IDC_SNDCTRL_RIGHTOUTTEXT,445,71,25,11,0,WS_EX_STATICEDGE
|
||||
CHECKBOX "b13 ch3 nomix",IDC_SNDCTRL_CH3NOMIX,473,71,59,10
|
||||
CONTROL "Capture muted channels",IDC_SOUND_CAPTURE_MUTED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,435,5,94,10
|
||||
PUSHBUTTON "Analyze Cap",IDC_SOUND_ANALYZE_CAP,379,3,50,14
|
||||
PUSHBUTTON "Unmute All",IDC_SOUND_UNMUTE_ALL,325,3,50,14
|
||||
GROUPBOX "Capture 0",IDC_STATIC,402,90,157,80
|
||||
LTEXT "508 ctrl",IDC_STATIC,425,103,25,8
|
||||
CHECKBOX "b0 AddCh1toCh0",IDC_CAP0_ADD,455,103,68,10
|
||||
CHECKBOX "b1 Src",IDC_CAP0_SRC,405,116,36,10
|
||||
CHECKBOX "b2 One-Shot",IDC_CAP0_ONESHOT,472,116,54,10
|
||||
CHECKBOX "b3 Typ",IDC_CAP0_TYPE,405,127,36,10
|
||||
CHECKBOX "b7 Active",IDC_CAP0_ACTIVE,472,127,49,10
|
||||
LTEXT "",IDC_CAP0_DAD,405,141,37,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_CAP0_CTRL,405,103,16,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_CAP0_SRCTEXT,441,116,25,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_CAP0_TYPETEXT,441,127,25,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "510 DAD",IDC_STATIC,445,143,29,8
|
||||
LTEXT "514 LEN",IDC_STATIC,514,143,27,8
|
||||
LTEXT "",IDC_CAP0_LEN,475,141,37,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_CAP0_CURDAD,406,156,37,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "DAD CUR",IDC_STATIC,445,156,32,8
|
||||
CHECKBOX "Running",IDC_CAP0_RUNNING,479,156,49,10
|
||||
GROUPBOX "Capture 1",IDC_STATIC,402,175,157,80
|
||||
LTEXT "509 ctrl",IDC_STATIC,425,187,25,8
|
||||
CHECKBOX "b0 AddCh3toCh2",IDC_CAP1_ADD,455,187,68,10
|
||||
CHECKBOX "b1 Src",IDC_CAP1_SRC,405,200,36,10
|
||||
CHECKBOX "b2 One-Shot",IDC_CAP1_ONESHOT,471,200,54,10
|
||||
CHECKBOX "b3 Typ",IDC_CAP1_TYPE,405,211,36,10
|
||||
CHECKBOX "b7 Active",IDC_CAP1_ACTIVE,471,211,49,10
|
||||
LTEXT "",IDC_CAP1_DAD,405,226,37,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_CAP1_CTRL,405,187,16,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_CAP1_SRCTEXT,441,200,25,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_CAP1_TYPETEXT,441,211,25,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "518 DAD",IDC_STATIC,445,227,29,8
|
||||
LTEXT "51C LEN",IDC_STATIC,514,227,28,8
|
||||
LTEXT "",IDC_CAP1_LEN,475,226,37,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "",IDC_CAP1_CURDAD,405,240,37,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "DAD CUR",IDC_STATIC,445,240,32,8
|
||||
CHECKBOX "Running",IDC_CAP1_RUNNING,479,240,49,10
|
||||
GROUPBOX "Sound Control",IDC_STATIC,401,18,158,69
|
||||
LTEXT "",IDC_SNDCTRL_CTRL,407,29,26,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "500 Ctrl",IDC_STATIC,438,31,26,8
|
||||
LTEXT "",IDC_SNDCTRL_VOL,407,42,26,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "b0-6 Vol",IDC_STATIC,437,44,27,8
|
||||
LTEXT "",IDC_SNDCTRL_BIAS,478,30,26,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "504 Bias",IDC_STATIC,507,32,28,8
|
||||
CHECKBOX "b15 Enable",IDC_SNDCTRL_ENABLE,495,44,49,10
|
||||
LTEXT "",IDC_SNDCTRL_LEFTOUT,407,57,12,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "b8-9 L-Out",IDC_STATIC,422,59,36,8
|
||||
LTEXT "",IDC_SNDCTRL_LEFTOUTTEXT,467,57,25,11,0,WS_EX_STATICEDGE
|
||||
CHECKBOX "b12 ch1 nomix",IDC_SNDCTRL_CH1NOMIX,495,57,59,10
|
||||
LTEXT "",IDC_SNDCTRL_RIGHTOUT,407,70,12,11,0,WS_EX_STATICEDGE
|
||||
LTEXT "b10-11 R-Out",IDC_STATIC,422,72,45,8
|
||||
LTEXT "",IDC_SNDCTRL_RIGHTOUTTEXT,467,71,25,11,0,WS_EX_STATICEDGE
|
||||
CHECKBOX "b13 ch3 nomix",IDC_SNDCTRL_CH3NOMIX,495,71,59,10
|
||||
CONTROL "Capture muted channels",IDC_SOUND_CAPTURE_MUTED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,457,5,94,10
|
||||
PUSHBUTTON "Analyze Cap",IDC_SOUND_ANALYZE_CAP,401,3,50,14
|
||||
PUSHBUTTON "Unmute All",IDC_SOUND_UNMUTE_ALL,347,3,50,14
|
||||
END
|
||||
|
||||
IDD_TILE DIALOGEX 0, 0, 446, 180
|
||||
|
@ -1891,8 +1891,8 @@ BEGIN
|
|||
IDD_SOUND_VIEW, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 4
|
||||
RIGHTMARGIN, 536
|
||||
BOTTOMMARGIN, 254
|
||||
RIGHTMARGIN, 559
|
||||
BOTTOMMARGIN, 255
|
||||
END
|
||||
|
||||
IDD_WIFISETTINGS, DIALOG
|
||||
|
|
|
@ -69,29 +69,6 @@ inline int chanOfs()
|
|||
return SoundView_Data->viewFirst8Channels ? 0 : 8;
|
||||
}
|
||||
|
||||
inline int ProgressSetPosImmediate(HWND hDlg, int nIDDlgItem, int nPos)
|
||||
{
|
||||
int nOldPos = SendDlgItemMessage(hDlg, nIDDlgItem, PBM_GETPOS, (WPARAM)0, (LPARAM)0);
|
||||
int nMin = SendDlgItemMessage(hDlg, nIDDlgItem, PBM_GETRANGE, (WPARAM)TRUE, (LPARAM)NULL);
|
||||
int nMax = SendDlgItemMessage(hDlg, nIDDlgItem, PBM_GETRANGE, (WPARAM)FALSE, (LPARAM)NULL);
|
||||
|
||||
// get rid of fancy progress animation since Windows Vista
|
||||
// http://stackoverflow.com/questions/1061715/how-do-i-make-tprogressbar-stop-lagging
|
||||
if (nPos < nMax)
|
||||
{
|
||||
SendDlgItemMessage(hDlg, nIDDlgItem, PBM_SETPOS, (WPARAM)(nPos + 1), (LPARAM)0);
|
||||
SendDlgItemMessage(hDlg, nIDDlgItem, PBM_SETPOS, (WPARAM)nPos, (LPARAM)0); // This will set Progress backwards and give an instant update
|
||||
}
|
||||
else
|
||||
{
|
||||
SendDlgItemMessage(hDlg, nIDDlgItem, PBM_SETRANGE32, nMin, nPos + 1);
|
||||
SendDlgItemMessage(hDlg, nIDDlgItem, PBM_SETPOS, (WPARAM)(nPos + 1), (LPARAM)0);
|
||||
SendDlgItemMessage(hDlg, nIDDlgItem, PBM_SETRANGE32, nMin, nPos); // This will also set Progress backwards also so instant update
|
||||
}
|
||||
|
||||
return nOldPos;
|
||||
}
|
||||
|
||||
BOOL SoundView_DlgOpen(HWND hParentWnd)
|
||||
{
|
||||
HWND hDlg;
|
||||
|
@ -136,7 +113,12 @@ HWND SoundView_GetHWnd()
|
|||
return SoundView_Data ? SoundView_Data->hDlg : NULL;
|
||||
}
|
||||
|
||||
void SoundView_Refresh()
|
||||
static channel_struct oldchanel[16];
|
||||
static SPU_struct::REGS::CAP oldCap[2];
|
||||
static s32 volBar[16] = {0};
|
||||
static u16 oldCtrl = 0xFFFF;
|
||||
|
||||
void SoundView_Refresh(bool forceRedraw)
|
||||
{
|
||||
if(SoundView_Data == NULL || SPU_core == NULL)
|
||||
return;
|
||||
|
@ -144,21 +126,26 @@ void SoundView_Refresh()
|
|||
char buf[256];
|
||||
HWND hDlg = SoundView_Data->hDlg;
|
||||
static const int format_shift[] = { 2, 1, 3, 0 };
|
||||
static const u8 volume_shift[] = { 0, 1, 2, 4 };
|
||||
static const double ARM7_CLOCK = 33513982;
|
||||
|
||||
for(int chanId = 0; chanId < 8; chanId++) {
|
||||
int chan = chanId + chanOfs();
|
||||
channel_struct &thischan = SPU_core->channels[chan];
|
||||
channel_struct &oldchan = oldchanel[chan];
|
||||
|
||||
ProgressSetPosImmediate(hDlg, IDC_SOUND0PANBAR+chanId, spumuldiv7(128, thischan.pan));
|
||||
if (!forceRedraw && memcmp(&oldchan, &thischan, sizeof(channel_struct)) == 0) continue;
|
||||
|
||||
InvalidateRect(GetDlgItem(hDlg, IDC_SOUND0PANBAR+chanId), NULL, FALSE);
|
||||
if(thischan.status != CHANSTAT_STOPPED)
|
||||
{
|
||||
s32 vol = spumuldiv7(128, thischan.vol) >> thischan.datashift;
|
||||
ProgressSetPosImmediate(hDlg, IDC_SOUND0VOLBAR+chanId, vol);
|
||||
volBar[chan] = spumuldiv7(128, thischan.vol) >> volume_shift[thischan.volumeDiv];
|
||||
InvalidateRect(GetDlgItem(hDlg, IDC_SOUND0VOLBAR+chanId), NULL, FALSE);
|
||||
|
||||
if(SoundView_Data->volModeAlternate)
|
||||
sprintf(buf, "%d/%d", thischan.vol, 1 << thischan.datashift);
|
||||
sprintf(buf, "%d/%d", thischan.vol, 1 << volume_shift[thischan.volumeDiv]);
|
||||
else
|
||||
sprintf(buf, "%d", vol);
|
||||
sprintf(buf, "%d", volBar[chan]);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0VOL+chanId, buf);
|
||||
|
||||
if (thischan.pan == 0)
|
||||
|
@ -210,31 +197,35 @@ void SoundView_Refresh()
|
|||
SetDlgItemText(hDlg, IDC_SOUND0POSLEN+chanId, buf);
|
||||
}
|
||||
else {
|
||||
ProgressSetPosImmediate(hDlg, IDC_SOUND0VOLBAR+chanId, 0);
|
||||
strcpy(buf, "---");
|
||||
SetDlgItemText(hDlg, IDC_SOUND0VOL+chanId, buf);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0PAN+chanId, buf);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0HOLD+chanId, buf);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0BUSY+chanId, buf);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0REPEATMODE+chanId, buf);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0FORMAT+chanId, buf);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0SAD+chanId, buf);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0PNT+chanId, buf);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0TMR+chanId, buf);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0POSLEN+chanId, buf);
|
||||
#define _EMPTY "---"
|
||||
volBar[chan] = 0;
|
||||
InvalidateRect(GetDlgItem(hDlg, IDC_SOUND0VOLBAR+chanId), NULL, FALSE);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0VOL+chanId, _EMPTY);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0PAN+chanId, _EMPTY);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0HOLD+chanId, _EMPTY);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0BUSY+chanId, _EMPTY);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0REPEATMODE+chanId, _EMPTY);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0FORMAT+chanId, _EMPTY);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0SAD+chanId, _EMPTY);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0PNT+chanId, _EMPTY);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0TMR+chanId, _EMPTY);
|
||||
SetDlgItemText(hDlg, IDC_SOUND0POSLEN+chanId, _EMPTY);
|
||||
}
|
||||
memcpy(&oldchan, &thischan, sizeof(channel_struct));
|
||||
} //chan loop
|
||||
|
||||
//ctrl
|
||||
u16 ctrl = _MMU_ARM7_read16(0x04000500);
|
||||
if (oldCtrl != ctrl)
|
||||
{
|
||||
CheckDlgItem(hDlg,IDC_SNDCTRL_ENABLE,SPU_core->regs.masteren!=0);
|
||||
CheckDlgItem(hDlg,IDC_SNDCTRL_CH1NOMIX,SPU_core->regs.ctl_ch1bypass!=0);
|
||||
CheckDlgItem(hDlg,IDC_SNDCTRL_CH3NOMIX,SPU_core->regs.ctl_ch3bypass!=0);
|
||||
|
||||
sprintf(buf,"%04X",_MMU_ARM7_read16(0x04000500));
|
||||
sprintf(buf,"%04X",ctrl);
|
||||
SetDlgItemText(hDlg,IDC_SNDCTRL_CTRL,buf);
|
||||
|
||||
sprintf(buf,"%04X",_MMU_ARM7_read16(0x04000504));
|
||||
sprintf(buf,"%04X",SPU_core->regs.soundbias);
|
||||
SetDlgItemText(hDlg,IDC_SNDCTRL_BIAS,buf);
|
||||
|
||||
sprintf(buf,"%02X",SPU_core->regs.mastervol);
|
||||
|
@ -252,67 +243,71 @@ void SoundView_Refresh()
|
|||
SetDlgItemText(hDlg,IDC_SNDCTRL_LEFTOUTTEXT,leftouttext[SPU_core->regs.ctl_left]);
|
||||
|
||||
SetDlgItemText(hDlg,IDC_SNDCTRL_RIGHTOUTTEXT,rightouttext[SPU_core->regs.ctl_right]);
|
||||
|
||||
oldCtrl = ctrl;
|
||||
}
|
||||
|
||||
//cap0
|
||||
SPU_struct::REGS::CAP& cap0 = SPU_core->regs.cap[0];
|
||||
if (memcmp(&oldCap[0], &cap0, sizeof(SPU_struct::REGS::CAP)) != 0)
|
||||
{
|
||||
SPU_struct::REGS::CAP& cap = SPU_core->regs.cap[0];
|
||||
CheckDlgItem(hDlg,IDC_CAP0_ADD,cap0.add!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP0_SRC,cap0.source!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP0_ONESHOT,cap0.oneshot!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP0_TYPE,cap0.bits8!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP0_ACTIVE,cap0.active!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP0_RUNNING,cap0.runtime.running!=0);
|
||||
|
||||
CheckDlgItem(hDlg,IDC_CAP0_ADD,cap.add!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP0_SRC,cap.source!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP0_ONESHOT,cap.oneshot!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP0_TYPE,cap.bits8!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP0_ACTIVE,cap.active!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP0_RUNNING,cap.runtime.running!=0);
|
||||
|
||||
if(cap.source) SetDlgItemText(hDlg,IDC_CAP0_SRCTEXT,"Ch2");
|
||||
if(cap0.source) SetDlgItemText(hDlg,IDC_CAP0_SRCTEXT,"Ch2");
|
||||
else SetDlgItemText(hDlg,IDC_CAP0_SRCTEXT,"L-Mix");
|
||||
|
||||
if(cap.bits8) SetDlgItemText(hDlg,IDC_CAP0_TYPETEXT,"Pcm8");
|
||||
if(cap0.bits8) SetDlgItemText(hDlg,IDC_CAP0_TYPETEXT,"Pcm8");
|
||||
else SetDlgItemText(hDlg,IDC_CAP0_TYPETEXT,"Pcm16");
|
||||
|
||||
sprintf(buf,"%02X",_MMU_ARM7_read08(0x04000508));
|
||||
SetDlgItemText(hDlg,IDC_CAP0_CTRL,buf);
|
||||
|
||||
sprintf(buf,"%08X",cap.dad);
|
||||
sprintf(buf,"%08X",cap0.dad);
|
||||
SetDlgItemText(hDlg,IDC_CAP0_DAD,buf);
|
||||
|
||||
sprintf(buf,"%08X",cap.len);
|
||||
sprintf(buf,"%08X",cap0.len);
|
||||
SetDlgItemText(hDlg,IDC_CAP0_LEN,buf);
|
||||
|
||||
sprintf(buf,"%08X",cap.runtime.curdad);
|
||||
sprintf(buf,"%08X",cap0.runtime.curdad);
|
||||
SetDlgItemText(hDlg,IDC_CAP0_CURDAD,buf);
|
||||
|
||||
memcpy(&oldCap[0], &cap0, sizeof(SPU_struct::REGS::CAP));
|
||||
}
|
||||
|
||||
//cap1
|
||||
SPU_struct::REGS::CAP& cap1 = SPU_core->regs.cap[1];
|
||||
if (memcmp(&oldCap[1], &cap1, sizeof(SPU_struct::REGS::CAP)) != 0)
|
||||
{
|
||||
SPU_struct::REGS::CAP& cap = SPU_core->regs.cap[1];
|
||||
CheckDlgItem(hDlg,IDC_CAP1_ADD,cap1.add!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP1_SRC,cap1.source!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP1_ONESHOT,cap1.oneshot!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP1_TYPE,cap1.bits8!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP1_ACTIVE,cap1.active!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP1_RUNNING,cap1.runtime.running!=0);
|
||||
|
||||
CheckDlgItem(hDlg,IDC_CAP1_ADD,cap.add!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP1_SRC,cap.source!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP1_ONESHOT,cap.oneshot!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP1_TYPE,cap.bits8!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP1_ACTIVE,cap.active!=0);
|
||||
CheckDlgItem(hDlg,IDC_CAP1_RUNNING,cap.runtime.running!=0);
|
||||
|
||||
if(cap.source) SetDlgItemText(hDlg,IDC_CAP1_SRCTEXT,"Ch3"); //maybe call it "Ch3(+2)" if it fits
|
||||
if(cap1.source) SetDlgItemText(hDlg,IDC_CAP1_SRCTEXT,"Ch3"); //maybe call it "Ch3(+2)" if it fits
|
||||
else SetDlgItemText(hDlg,IDC_CAP1_SRCTEXT,"R-Mix");
|
||||
|
||||
if(cap.bits8) SetDlgItemText(hDlg,IDC_CAP1_TYPETEXT,"Pcm8");
|
||||
if(cap1.bits8) SetDlgItemText(hDlg,IDC_CAP1_TYPETEXT,"Pcm8");
|
||||
else SetDlgItemText(hDlg,IDC_CAP1_TYPETEXT,"Pcm16");
|
||||
|
||||
sprintf(buf,"%02X",_MMU_ARM7_read08(0x04000509));
|
||||
SetDlgItemText(hDlg,IDC_CAP1_CTRL,buf);
|
||||
|
||||
sprintf(buf,"%08X",cap.dad);
|
||||
sprintf(buf,"%08X",cap1.dad);
|
||||
SetDlgItemText(hDlg,IDC_CAP1_DAD,buf);
|
||||
|
||||
sprintf(buf,"%08X",cap.len);
|
||||
sprintf(buf,"%08X",cap1.len);
|
||||
SetDlgItemText(hDlg,IDC_CAP1_LEN,buf);
|
||||
|
||||
sprintf(buf,"%08X",cap.runtime.curdad);
|
||||
sprintf(buf,"%08X",cap1.runtime.curdad);
|
||||
SetDlgItemText(hDlg,IDC_CAP1_CURDAD,buf);
|
||||
|
||||
memcpy(&oldCap[1], &cap1, sizeof(SPU_struct::REGS::CAP));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -359,6 +354,63 @@ static void SoundView_SwitchChanOfs(SoundView_DataStruct *data)
|
|||
SoundView_Refresh();
|
||||
}
|
||||
|
||||
static LONG_PTR OldLevelBarProc = 0;
|
||||
static LONG_PTR OldPanBarProc = 0;
|
||||
static HBRUSH level_color = CreateSolidBrush(RGB(0, 255, 0));
|
||||
static HBRUSH level_background = CreateSolidBrush(RGB(90, 90, 90));
|
||||
static COLORREF pan_color = RGB(255, 0, 0);
|
||||
static COLORREF pan_center_color = RGB(200, 200, 200);
|
||||
static HBRUSH pan_background = (HBRUSH)COLOR_WINDOW;
|
||||
|
||||
INT_PTR CALLBACK LevelBarProc(HWND hBar, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (msg == WM_PAINT)
|
||||
{
|
||||
u8 chan = (u8)GetProp(hBar, "chan");
|
||||
PAINTSTRUCT ps;
|
||||
HDC hdc = BeginPaint(hBar, &ps);
|
||||
u32 vol = volBar[chan + chanOfs()];
|
||||
if (vol > 0)
|
||||
{
|
||||
RECT rc = {0, 0, vol, ps.rcPaint.bottom};
|
||||
FillRect(hdc, &rc, level_color);
|
||||
}
|
||||
if (vol < 128)
|
||||
{
|
||||
RECT rc2 = {vol + 1, 0, 128, ps.rcPaint.bottom};
|
||||
FillRect(hdc, &rc2, level_background);
|
||||
}
|
||||
EndPaint(hBar, &ps);
|
||||
}
|
||||
|
||||
return CallWindowProc((WNDPROC)OldLevelBarProc, hBar, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
INT_PTR CALLBACK PanBarProc(HWND hBar, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (msg == WM_PAINT)
|
||||
{
|
||||
u8 chan = (u8)GetProp(hBar, "chan");
|
||||
channel_struct &thischan = SPU_core->channels[chan + chanOfs()];
|
||||
PAINTSTRUCT ps;
|
||||
HDC hdc = BeginPaint(hBar, &ps);
|
||||
FillRect(hdc, &ps.rcPaint, pan_background);
|
||||
|
||||
SelectObject(hdc, GetStockObject(DC_PEN));
|
||||
if (thischan.pan != 64)
|
||||
{
|
||||
SetDCPenColor(hdc, pan_center_color);
|
||||
MoveToEx(hdc, 64, 0, NULL);
|
||||
LineTo(hdc, 64, ps.rcPaint.bottom);
|
||||
}
|
||||
SetDCPenColor(hdc, pan_color);
|
||||
MoveToEx(hdc, thischan.pan, 0, NULL);
|
||||
LineTo(hdc, thischan.pan, ps.rcPaint.bottom);
|
||||
EndPaint(hBar, &ps);
|
||||
}
|
||||
|
||||
return CallWindowProc((WNDPROC)OldPanBarProc, hBar, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
static INT_PTR CALLBACK SoundView_DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
|
@ -371,8 +423,13 @@ static INT_PTR CALLBACK SoundView_DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, L
|
|||
case WM_INITDIALOG:
|
||||
{
|
||||
for(int chanId = 0; chanId < 8; chanId++) {
|
||||
SendDlgItemMessage(hDlg, IDC_SOUND0VOLBAR+chanId, PBM_SETRANGE, (WPARAM)0, MAKELPARAM(0, 128));
|
||||
SendDlgItemMessage(hDlg, IDC_SOUND0PANBAR+chanId, PBM_SETRANGE, (WPARAM)0, MAKELPARAM(0, 128));
|
||||
HWND tmp = GetDlgItem(hDlg, IDC_SOUND0VOLBAR+chanId);
|
||||
OldLevelBarProc = SetWindowLongPtr(tmp, GWLP_WNDPROC, (LONG_PTR)LevelBarProc);
|
||||
SetProp(tmp, "chan", (HANDLE)chanId);
|
||||
|
||||
tmp = GetDlgItem(hDlg, IDC_SOUND0PANBAR+chanId);
|
||||
OldPanBarProc = SetWindowLongPtr(tmp, GWLP_WNDPROC, (LONG_PTR)PanBarProc);
|
||||
SetProp(tmp, "chan", (HANDLE)chanId);
|
||||
}
|
||||
|
||||
for(int chanId = 0; chanId < 8; chanId++) {
|
||||
|
@ -441,6 +498,7 @@ static INT_PTR CALLBACK SoundView_DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, L
|
|||
case IDC_SOUNDVIEW_CHANSWITCH:
|
||||
{
|
||||
SoundView_SwitchChanOfs(data);
|
||||
SoundView_Refresh(true);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ BOOL SoundView_DlgOpen(HWND hParentWnd);
|
|||
void SoundView_DlgClose();
|
||||
BOOL SoundView_IsOpened();
|
||||
HWND SoundView_GetHWnd();
|
||||
void SoundView_Refresh();
|
||||
void SoundView_Refresh(bool forceRedraw = false);
|
||||
|
||||
INT_PTR CALLBACK SoundView_DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
|
|
Loading…
Reference in New Issue