Some work on variable type consistancy, and getting rid of 64 bit processor checks.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@1214 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
arcum42 2009-05-17 21:57:24 +00:00
parent 1b012e9dd9
commit 1a53f45b2c
20 changed files with 230 additions and 513 deletions

View File

@ -24,13 +24,8 @@ AUTOMAKE_OPTIONS = foreign
noinst_HEADERS=AAFilter.h cpu_detect.h FIRFilter.h RateTransposer.h TDStretch.h cpu_detect_x86_gcc.cpp noinst_HEADERS=AAFilter.h cpu_detect.h FIRFilter.h RateTransposer.h TDStretch.h cpu_detect_x86_gcc.cpp
noinst_LIBRARIES = libSoundTouch.a noinst_LIBRARIES = libSoundTouch.a
if X86_64
libSoundTouch_a_CXXFLAGS = -fPIC
libSoundTouch_a_CFLAGS = -fPIC
else
libSoundTouch_a_CXXFLAGS = -msse -mmmx libSoundTouch_a_CXXFLAGS = -msse -mmmx
libSoundTouch_a_CFLAGS = -msse -mmmx libSoundTouch_a_CFLAGS = -msse -mmmx
endif
#lib_LTLIBRARIES=libSoundTouch.la #lib_LTLIBRARIES=libSoundTouch.la
# the mmx_gcc.cpp and cpu_detect_x86_gcc.cpp may need to be conditionally included here from things discovered in configure.ac # the mmx_gcc.cpp and cpu_detect_x86_gcc.cpp may need to be conditionally included here from things discovered in configure.ac

View File

@ -20,34 +20,6 @@ CFLAGS+=" -m32 "
CPPFLAGS+=" -m32 " CPPFLAGS+=" -m32 "
CXXFLAGS+=" -m32 " CXXFLAGS+=" -m32 "
CCASFLAGS+=" -m32 " CCASFLAGS+=" -m32 "
dnl Check for 64bit CPU
AC_MSG_CHECKING(for a x86-64 CPU)
dnl if test "$build_os" == "target_os"
dnl then
AC_TRY_RUN([
int main()
{
int a = 0;
int*pa = &a;
asm(".intel_syntax\n"
"mov %%rax, %0\n"
"mov %%eax, [%%rax]\n"
".att_syntax\n"
: : "r"(pa) : "%rax");
return 0;
}
],cpu64=yes,cpu64=no,)
dnl else
dnl cpu64=no
dnl fi
if test "x$cpu64" == xyes
then
AC_DEFINE(__x86_64__,1,[__x86_64__])
fi
AC_MSG_RESULT($cpu64)
AM_CONDITIONAL(X86_64, test x$cpu64 = xyes)
# Checks for header files. # Checks for header files.
AC_CHECK_HEADERS([limits.h memory.h stdlib.h string.h]) AC_CHECK_HEADERS([limits.h memory.h stdlib.h string.h])

View File

@ -169,28 +169,4 @@ namespace Threading
return result; return result;
} }
#ifdef __x86_64__
__forceinline void pcsx2_InterlockedExchange64(volatile s64* Target, s64 Value)
{
__asm__ __volatile__(
".intel_syntax noprefix\n"
"lock xchg [%0], rax\n"
".att_syntax\n" : : "r"(Target), "a"(Value) : "memory"
);
return 0;
}
__forceinline s64 pcsx2_InterlockedCompareExchange64(volatile s64* dest, s64 exch, s64 comp)
{
s64 old;
__asm__ __volatile__(
"lock; cmpxchgq %q2, %q1"
: "=a" (old)
: "r" (exch), "m" (*dest), "a" (comp)
);
return old;
}
#endif
} }

View File

@ -23,10 +23,10 @@
#include <string> #include <string>
using namespace std; using namespace std;
const unsigned char version = PS2E_SPU2_VERSION; const u8 version = PS2E_SPU2_VERSION;
const unsigned char revision = 0; const u8 revision = 0;
const unsigned char build = 7; // increase that with each version const u8 build = 8; // increase that with each version
const unsigned int minor = 1; // increase that with each version const u32 minor = 0; // increase that with each version
// ADSR constants // ADSR constants
#define ATTACK_MS 494L #define ATTACK_MS 494L
@ -50,16 +50,16 @@ ADMA Adma7;
u32 MemAddr[2]; u32 MemAddr[2];
u32 g_nSpuInit = 0; u32 g_nSpuInit = 0;
unsigned short interrupt = 0; u16 interrupt = 0;
s8 *spu2regs = NULL; s8 *spu2regs = NULL;
u16* spu2mem = NULL; u16* spu2mem = NULL;
u16* pSpuIrq[2] = {NULL}; u16* pSpuIrq[2] = {NULL};
u32 dwEndChannel2[2] = {0}; // keeps track of what channels have ended u32 dwEndChannel2[2] = {0}; // keeps track of what channels have ended
unsigned long dwNoiseVal = 1; // global noise generator u32 dwNoiseVal = 1; // global noise generator
int SPUCycles = 0, SPUWorkerCycles = 0; s32 SPUCycles = 0, SPUWorkerCycles = 0;
int SPUStartCycle[2]; s32 SPUStartCycle[2];
int SPUTargetCycle[2]; s32 SPUTargetCycle[2];
int ADMAS4Write(); int ADMAS4Write();
int ADMAS7Write(); int ADMAS7Write();
@ -70,7 +70,7 @@ void (*irqCallbackSPU2)(); // func of main emu, called on spu i
void (*irqCallbackDMA4)() = 0; // func of main emu, called on spu irq void (*irqCallbackDMA4)() = 0; // func of main emu, called on spu irq
void (*irqCallbackDMA7)() = 0; // func of main emu, called on spu irq void (*irqCallbackDMA7)() = 0; // func of main emu, called on spu irq
const int f[5][2] = { const s32 f[5][2] = {
{ 0, 0 }, { 0, 0 },
{ 60, 0 }, { 60, 0 },
{ 115, -52 }, { 115, -52 },
@ -221,9 +221,9 @@ EXPORT_C_(void) SPU2async(u32 cycle)
void InitADSR() // INIT ADSR void InitADSR() // INIT ADSR
{ {
unsigned long r, rs, rd; u32 r, rs, rd;
int i; s32 i;
memset(RateTable, 0, sizeof(unsigned long)*160); // build the rate table according to Neill's rules (see at bottom of file) memset(RateTable, 0, sizeof(u32)*160); // build the rate table according to Neill's rules (see at bottom of file)
r = 3; r = 3;
rs = 1; rs = 1;
@ -678,9 +678,9 @@ int ADMAS4Write()
spuaddr = C0_SPUADDR; spuaddr = C0_SPUADDR;
// SPU2 Deinterleaves the Left and Right Channels // SPU2 Deinterleaves the Left and Right Channels
memcpy((short*)(spu2mem + spuaddr + 0x2000), (short*)Adma4.MemAddr, 512); memcpy((s16*)(spu2mem + spuaddr + 0x2000), (s16*)Adma4.MemAddr, 512);
Adma4.MemAddr += 256; Adma4.MemAddr += 256;
memcpy((short*)(spu2mem + spuaddr + 0x2200), (short*)Adma4.MemAddr, 512); memcpy((s16*)(spu2mem + spuaddr + 0x2200), (s16*)Adma4.MemAddr, 512);
Adma4.MemAddr += 256; Adma4.MemAddr += 256;
spuaddr = (spuaddr + 256) & 511; spuaddr = (spuaddr + 256) & 511;
C0_SPUADDR_SET(spuaddr); C0_SPUADDR_SET(spuaddr);
@ -704,9 +704,9 @@ int ADMAS7Write()
spuaddr = C1_SPUADDR; spuaddr = C1_SPUADDR;
// SPU2 Deinterleaves the Left and Right Channels // SPU2 Deinterleaves the Left and Right Channels
memcpy((short*)(spu2mem + spuaddr + 0x2400), (short*)Adma7.MemAddr, 512); memcpy((s16*)(spu2mem + spuaddr + 0x2400), (s16*)Adma7.MemAddr, 512);
Adma7.MemAddr += 256; Adma7.MemAddr += 256;
memcpy((short*)(spu2mem + spuaddr + 0x2600), (short*)Adma7.MemAddr, 512); memcpy((s16*)(spu2mem + spuaddr + 0x2600), (s16*)Adma7.MemAddr, 512);
Adma7.MemAddr += 256; Adma7.MemAddr += 256;
spuaddr = (spuaddr + 256) & 511; spuaddr = (spuaddr + 256) & 511;
C1_SPUADDR_SET(spuaddr); C1_SPUADDR_SET(spuaddr);
@ -740,7 +740,7 @@ EXPORT_C_(void) SPU2writeDMA4Mem(u16* pMem, int size)
} }
spuaddr = C0_SPUADDR; spuaddr = C0_SPUADDR;
memcpy((unsigned char*)(spu2mem + spuaddr), (unsigned char*)pMem, size << 1); memcpy((u8*)(spu2mem + spuaddr), (u8*)pMem, size << 1);
spuaddr += size; spuaddr += size;
C0_SPUADDR_SET(spuaddr); C0_SPUADDR_SET(spuaddr);
@ -779,7 +779,7 @@ EXPORT_C_(void) SPU2writeDMA7Mem(u16* pMem, int size)
} }
spuaddr = C1_SPUADDR; spuaddr = C1_SPUADDR;
memcpy((unsigned char*)(spu2mem + spuaddr), (unsigned char*)pMem, size << 1); memcpy((u8*)(spu2mem + spuaddr), (u8*)pMem, size << 1);
spuaddr += size; spuaddr += size;
C1_SPUADDR_SET(spuaddr); C1_SPUADDR_SET(spuaddr);
@ -820,9 +820,9 @@ EXPORT_C_(void) SPU2interruptDMA7()
} }
// turn channels on // turn channels on
void SoundOn(int start, int end, unsigned short val) // SOUND ON PSX COMAND void SoundOn(s32 start, s32 end, u16 val) // SOUND ON PSX COMAND
{ {
for (int ch = start;ch < end;ch++, val >>= 1) // loop channels for (s32 ch = start;ch < end;ch++, val >>= 1) // loop channels
{ {
if ((val&1) && voices[ch].pStart) // mmm... start has to be set before key on !?! if ((val&1) && voices[ch].pStart) // mmm... start has to be set before key on !?!
{ {
@ -833,16 +833,16 @@ void SoundOn(int start, int end, unsigned short val) // SOUND ON PSX COMAND
} }
// turn channels off // turn channels off
void SoundOff(int start, int end, unsigned short val) // SOUND OFF PSX COMMAND void SoundOff(s32 start, s32 end, u16 val) // SOUND OFF PSX COMMAND
{ {
for (int ch = start;ch < end;ch++, val >>= 1) // loop channels for (s32 ch = start;ch < end;ch++, val >>= 1) // loop channels
{ {
if (val&1) // && s_chan[i].bOn) mmm... if (val&1) // && s_chan[i].bOn) mmm...
voices[ch].bStop = true; voices[ch].bStop = true;
} }
} }
void FModOn(int start, int end, unsigned short val) // FMOD ON PSX COMMAND void FModOn(s32 start, s32 end, u16 val) // FMOD ON PSX COMMAND
{ {
int ch; int ch;
@ -891,8 +891,10 @@ EXPORT_C_(void) SPU2write(u32 mem, u16 value)
case 4: case 4:
{ {
int NP; int NP;
if (value > 0x3fff) NP = 0x3fff; // get pitch val if (value > 0x3fff)
else NP = value; NP = 0x3fff; // get pitch val
else
NP = value;
pvoice->pvoice->pitch = NP; pvoice->pvoice->pitch = NP;
@ -924,8 +926,8 @@ EXPORT_C_(void) SPU2write(u32 mem, u16 value)
// more channel info // more channel info
if ((r >= 0x01c0 && r <= 0x02E0) || (r >= 0x05c0 && r <= 0x06E0)) if ((r >= 0x01c0 && r <= 0x02E0) || (r >= 0x05c0 && r <= 0x06E0))
{ {
int ch = 0; s32 ch = 0;
unsigned long rx = r; u32 rx = r;
if (rx >= 0x400) if (rx >= 0x400)
{ {
ch = 24; ch = 24;
@ -939,7 +941,7 @@ EXPORT_C_(void) SPU2write(u32 mem, u16 value)
switch (rx) switch (rx)
{ {
case 0x1C0: case 0x1C0:
pvoice->iStartAddr = (((unsigned long)value & 0x3f) << 16) | (pvoice->iStartAddr & 0xFFFF); pvoice->iStartAddr = (((u32)value & 0x3f) << 16) | (pvoice->iStartAddr & 0xFFFF);
pvoice->pStart = (u8*)(spu2mem + pvoice->iStartAddr); pvoice->pStart = (u8*)(spu2mem + pvoice->iStartAddr);
break; break;
case 0x1C2: case 0x1C2:
@ -947,7 +949,7 @@ EXPORT_C_(void) SPU2write(u32 mem, u16 value)
pvoice->pStart = (u8*)(spu2mem + pvoice->iStartAddr); pvoice->pStart = (u8*)(spu2mem + pvoice->iStartAddr);
break; break;
case 0x1C4: case 0x1C4:
pvoice->iLoopAddr = (((unsigned long)value & 0x3f) << 16) | (pvoice->iLoopAddr & 0xFFFF); pvoice->iLoopAddr = (((u32)value & 0x3f) << 16) | (pvoice->iLoopAddr & 0xFFFF);
pvoice->pLoop = (u8*)(spu2mem + pvoice->iLoopAddr); pvoice->pLoop = (u8*)(spu2mem + pvoice->iLoopAddr);
pvoice->bIgnoreLoop = pvoice->iLoopAddr > 0; pvoice->bIgnoreLoop = pvoice->iLoopAddr > 0;
break; break;
@ -958,7 +960,7 @@ EXPORT_C_(void) SPU2write(u32 mem, u16 value)
break; break;
case 0x1C8: case 0x1C8:
// unused... check if it gets written as well // unused... check if it gets written as well
pvoice->iNextAddr = (((unsigned long)value & 0x3f) << 16) | (pvoice->iNextAddr & 0xFFFF); pvoice->iNextAddr = (((u32)value & 0x3f) << 16) | (pvoice->iNextAddr & 0xFFFF);
break; break;
case 0x1CA: case 0x1CA:
// unused... check if it gets written as well // unused... check if it gets written as well
@ -982,8 +984,8 @@ EXPORT_C_(void) SPU2write(u32 mem, u16 value)
IRQINFO |= 4; IRQINFO |= 4;
irqCallbackSPU2(); irqCallbackSPU2();
} }
if (spuaddr > 0xFFFFE) if (spuaddr > 0xFFFFE) spuaddr = 0x2800;
spuaddr = 0x2800;
C0_SPUADDR_SET(spuaddr); C0_SPUADDR_SET(spuaddr);
spu2Ru16(REG_C0_SPUSTAT) &= ~0x80; spu2Ru16(REG_C0_SPUSTAT) &= ~0x80;
spu2Ru16(REG_C0_CTRL) &= ~0x30; spu2Ru16(REG_C0_CTRL) &= ~0x30;
@ -998,8 +1000,8 @@ EXPORT_C_(void) SPU2write(u32 mem, u16 value)
IRQINFO |= 8; IRQINFO |= 8;
irqCallbackSPU2(); irqCallbackSPU2();
} }
if (spuaddr > 0xFFFFE) if (spuaddr > 0xFFFFE) spuaddr = 0x2800;
spuaddr = 0x2800;
C1_SPUADDR_SET(spuaddr); C1_SPUADDR_SET(spuaddr);
spu2Ru16(REG_C1_SPUSTAT) &= ~0x80; spu2Ru16(REG_C1_SPUSTAT) &= ~0x80;
spu2Ru16(REG_C1_CTRL) &= ~0x30; spu2Ru16(REG_C1_CTRL) &= ~0x30;
@ -1082,23 +1084,27 @@ EXPORT_C_(u16) SPU2read(u32 mem)
if ((r >= 0x0000 && r <= 0x0180) || (r >= 0x0400 && r <= 0x0580)) // some channel info? if ((r >= 0x0000 && r <= 0x0180) || (r >= 0x0400 && r <= 0x0580)) // some channel info?
{ {
int ch = 0; s32 ch = 0;
if (r >= 0x400) ch = ((r - 0x400) >> 4) + 24;
else ch = (r >> 4); if (r >= 0x400)
ch = ((r - 0x400) >> 4) + 24;
else
ch = (r >> 4);
VOICE_PROCESSED* pvoice = &voices[ch]; VOICE_PROCESSED* pvoice = &voices[ch];
switch (r&0x0f) switch (r&0x0f)
{ {
case 10: case 10:
return (unsigned short)(pvoice->ADSRX.EnvelopeVol >> 16); return (u16)(pvoice->ADSRX.EnvelopeVol >> 16);
} }
} }
if ((r > 0x01c0 && r <= 0x02E0) || (r > 0x05c0 && r <= 0x06E0)) // some channel info? if ((r > 0x01c0 && r <= 0x02E0) || (r > 0x05c0 && r <= 0x06E0)) // some channel info?
{ {
int ch = 0; s32 ch = 0;
unsigned long rx = r; u32 rx = r;
if (rx >= 0x400) if (rx >= 0x400)
{ {
ch = 24; ch = 24;
@ -1132,16 +1138,15 @@ EXPORT_C_(u16) SPU2read(u32 mem)
spuaddr = C0_SPUADDR; spuaddr = C0_SPUADDR;
ret = spu2mem[spuaddr]; ret = spu2mem[spuaddr];
spuaddr++; spuaddr++;
if (spuaddr > 0xfffff) if (spuaddr > 0xfffff) spuaddr = 0;
spuaddr = 0;
C0_SPUADDR_SET(spuaddr); C0_SPUADDR_SET(spuaddr);
break; break;
case REG_C1_SPUDATA: case REG_C1_SPUDATA:
spuaddr = C1_SPUADDR; spuaddr = C1_SPUADDR;
ret = spu2mem[spuaddr]; ret = spu2mem[spuaddr];
spuaddr++; spuaddr++;
if (spuaddr > 0xfffff) if (spuaddr > 0xfffff) spuaddr = 0;
spuaddr = 0;
C1_SPUADDR_SET(spuaddr); C1_SPUADDR_SET(spuaddr);
break; break;
@ -1196,7 +1201,7 @@ void VOICE_PROCESSED::SetVolume(int iProcessRight)
if (vol&0x8000) // sweep not working if (vol&0x8000) // sweep not working
{ {
short sInc = 1; // -> sweep up? s16 sInc = 1; // -> sweep up?
if (vol&0x2000) sInc = -1; // -> or down? if (vol&0x2000) sInc = -1; // -> or down?
if (vol&0x1000) vol ^= 0xffff; // -> mmm... phase inverted? have to investigate this if (vol&0x1000) vol ^= 0xffff; // -> mmm... phase inverted? have to investigate this
vol = ((vol & 0x7f) + 1) / 2; // -> sweep: 0..127 -> 0..64 vol = ((vol & 0x7f) + 1) / 2; // -> sweep: 0..127 -> 0..64
@ -1270,7 +1275,10 @@ EXPORT_C_(s32) SPU2freeze(int mode, freezeData *data)
{ {
memcpy(spu2regs, spud->spu2regs, 0x10000); memcpy(spu2regs, spud->spu2regs, 0x10000);
} }
else printf("SPU2null wrong format\n"); else
{
printf("SPU2null wrong format\n");
}
} }
else else
if (mode == FREEZE_SAVE) if (mode == FREEZE_SAVE)

View File

@ -46,15 +46,15 @@ extern "C"
extern FILE *spu2Log; extern FILE *spu2Log;
#define SPU2_LOG __Log //debug mode #define SPU2_LOG __Log //debug mode
extern const unsigned char version; extern const u8 version;
extern const unsigned char revision; extern const u8 revision;
extern const unsigned char build; extern const u8 build;
extern const unsigned int minor; extern const u32 minor;
extern char *libraryName; extern char *libraryName;
typedef struct typedef struct
{ {
int Log; s32 Log;
} Config; } Config;
extern Config conf; extern Config conf;
@ -218,18 +218,18 @@ struct _SPU_VOICE
// ADSR INFOS PER CHANNEL // ADSR INFOS PER CHANNEL
struct ADSRInfoEx struct ADSRInfoEx
{ {
int State; s32 State;
int AttackModeExp; s32 AttackModeExp;
int AttackRate; s32 AttackRate;
int DecayRate; s32 DecayRate;
int SustainLevel; s32 SustainLevel;
int SustainModeExp; s32 SustainModeExp;
int SustainIncrease; s32 SustainIncrease;
int SustainRate; s32 SustainRate;
int ReleaseModeExp; s32 ReleaseModeExp;
int ReleaseRate; s32 ReleaseRate;
int EnvelopeVol; s32 EnvelopeVol;
long lVolume; s32 lVolume;
}; };
#define NSSIZE 48 // ~ 1 ms of data #define NSSIZE 48 // ~ 1 ms of data
@ -257,18 +257,18 @@ struct VOICE_PROCESSED
// start save state // start save state
int iSBPos; // mixing stuff s32 iSBPos; // mixing stuff
int spos; s32 spos;
int sinc; s32 sinc;
int iActFreq; // current psx pitch s32 iActFreq; // current psx pitch
int iUsedFreq; // current pc pitch s32 iUsedFreq; // current pc pitch
int iStartAddr, iLoopAddr, iNextAddr; s32 iStartAddr, iLoopAddr, iNextAddr;
ADSRInfoEx ADSRX; // next ADSR settings (will be moved to active on sample start) ADSRInfoEx ADSRX; // next ADSR settings (will be moved to active on sample start)
bool bIgnoreLoop, bNew, bNoise, bReverb, bOn, bStop, bVolChanged; bool bIgnoreLoop, bNew, bNoise, bReverb, bOn, bStop, bVolChanged;
int memoffset; // if first core, 0, if second, 0x400 s32 memoffset; // if first core, 0, if second, 0x400
// end save state // end save state
@ -283,11 +283,11 @@ struct VOICE_PROCESSED
struct ADMA struct ADMA
{ {
unsigned short * MemAddr; u16 * MemAddr;
long IntPointer; s32 IntPointer;
int Index; s32 Index;
int AmountLeft; s32 AmountLeft;
int Enabled; s32 Enabled;
}; };
#endif /* __SPU2_H__ */ #endif /* __SPU2_H__ */

View File

@ -6,11 +6,6 @@ INCLUDES = -I@srcdir@/../../../common/include -I@srcdir@/3rdparty -I@srcdir@/..
libSPU2X_a_CXXFLAGS = $(shell pkg-config --cflags gtk+-2.0) -liconv libSPU2X_a_CXXFLAGS = $(shell pkg-config --cflags gtk+-2.0) -liconv
libSPU2X_a_CFLAGS = $(shell pkg-config --cflags gtk+-2.0) -liconv libSPU2X_a_CFLAGS = $(shell pkg-config --cflags gtk+-2.0) -liconv
if X86_64
libSPU2X_a_CXXFLAGS += -fPIC
libSPU2X_a_CFLAGS += -fPIC
endif
# Create a shared object by faking an exe (thanks to ODE makefiles) # Create a shared object by faking an exe (thanks to ODE makefiles)
traplibdir=$(prefix) traplibdir=$(prefix)

View File

@ -63,32 +63,6 @@ dnl gtk
AC_MSG_CHECKING(gtk2+) AC_MSG_CHECKING(gtk2+)
AC_CHECK_PROG(GTK_CONFIG, pkg-config, pkg-config) AC_CHECK_PROG(GTK_CONFIG, pkg-config, pkg-config)
LIBS+=$(pkg-config --libs gtk+-2.0) LIBS+=$(pkg-config --libs gtk+-2.0)
dnl Check for 64bit CPU
AC_MSG_CHECKING(for a x86-64 CPU)
dnl if test "$build_os" == "target_os"
dnl then
AC_TRY_RUN([
int main()
{
int a = 0;
int*pa = &a;
asm(".intel_syntax\n"
"mov %%rax, %0\n"
"mov %%eax, [%%rax]\n"
".att_syntax\n"
: : "r"(pa) : "%rax");
return 0;
}
],cpu64=yes,cpu64=no,)
dnl else
dnl cpu64=no
dnl fi
if test "x$cpu64" == xyes
then
AC_DEFINE(__x86_64__,1,[__x86_64__])
fi
AC_MSG_RESULT($cpu64)
AM_CONDITIONAL(X86_64, test x$cpu64 = xyes)
dnl bindir = pcsx2exe dnl bindir = pcsx2exe

View File

@ -1,10 +1,4 @@
noinst_LIBRARIES = libZeroGSLinux.a noinst_LIBRARIES = libZeroGSLinux.a
if X86_64
libZeroGSLinux_a_CPPFLAGS = -fPIC
libZeroGSLinux_a_CXXFLAGS = -fPIC
libZeroGSLinux_a_CFLAGS = -fPIC
endif
INCLUDES = $(shell pkg-config --cflags gtk+-2.0) -I@srcdir@/../ -I@srcdir@/../common INCLUDES = $(shell pkg-config --cflags gtk+-2.0) -I@srcdir@/../ -I@srcdir@/../common
libZeroGSLinux_a_SOURCES = callbacks.c Conf.cpp interface.c Linux.cpp support.c libZeroGSLinux_a_SOURCES = callbacks.c Conf.cpp interface.c Linux.cpp support.c

View File

@ -6,16 +6,9 @@ INCLUDES = -I@srcdir@/../../../common/include -I@srcdir@/../../../3rdparty
libZeroGSogl_a_CPPFLAGS = $(shell pkg-config --cflags gtk+-2.0) libZeroGSogl_a_CPPFLAGS = $(shell pkg-config --cflags gtk+-2.0)
libZeroGSogl_a_CXXFLAGS = $(shell pkg-config --cflags gtk+-2.0) libZeroGSogl_a_CXXFLAGS = $(shell pkg-config --cflags gtk+-2.0)
if X86_64
libZeroGSogl_a_CPPFLAGS += -fPIC
libZeroGSogl_a_CXXFLAGS += -fPIC
CCASFLAGS += -fPIC
endif
# Create a shared object by faking an exe (thanks to ODE makefiles) # Create a shared object by faking an exe (thanks to ODE makefiles)
traplibdir=$(prefix) traplibdir=$(prefix)
if RELEASE_TO_PUBLIC if RELEASE_TO_PUBLIC
preext=r preext=r
endif endif
@ -33,11 +26,7 @@ libZeroGSogl_a_SOURCES = \
GSmain.cpp memcpy_amd.cpp Regs.cpp x86.cpp zpipe.cpp \ GSmain.cpp memcpy_amd.cpp Regs.cpp x86.cpp zpipe.cpp \
Mem.cpp rasterfont.cpp targets.cpp zerogs.cpp Mem.cpp rasterfont.cpp targets.cpp zerogs.cpp
if X86_64
libZeroGSogl_a_SOURCES += x86-64.S
else
libZeroGSogl_a_SOURCES += x86-32.S libZeroGSogl_a_SOURCES += x86-32.S
endif
if SSE2 if SSE2
CCASFLAGS+= -DZEROGS_SSE2 CCASFLAGS+= -DZEROGS_SSE2

View File

@ -643,8 +643,6 @@ GREP
SHARED_LDFLAGS SHARED_LDFLAGS
so_ext so_ext
GTK_CONFIG GTK_CONFIG
X86_64_FALSE
X86_64_TRUE
SSE2_FALSE SSE2_FALSE
SSE2_TRUE SSE2_TRUE
RELEASE_TO_PUBLIC_FALSE RELEASE_TO_PUBLIC_FALSE
@ -4627,92 +4625,6 @@ else
fi fi
{ $as_echo "$as_me:$LINENO: checking for a x86-64 CPU" >&5
$as_echo_n "checking for a x86-64 CPU... " >&6; }
if test "$cross_compiling" = yes; then
{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
{ { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling
See \`config.log' for more details." >&5
$as_echo "$as_me: error: cannot run test program while cross compiling
See \`config.log' for more details." >&2;}
{ (exit 1); exit 1; }; }; }
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
int main()
{
int a = 0;
int*pa = &a;
asm(".intel_syntax\n"
"mov %%rax, %0\n"
"mov %%eax, [%%rax]\n"
".att_syntax\n"
: : "r"(pa) : "%rax");
return 0;
}
_ACEOF
rm -f conftest$ac_exeext
if { (ac_try="$ac_link"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
$as_echo "$ac_try_echo") >&5
(eval "$ac_link") 2>&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && { ac_try='./conftest$ac_exeext'
{ (case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
$as_echo "$ac_try_echo") >&5
(eval "$ac_try") 2>&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
cpu64=yes
else
$as_echo "$as_me: program exited with status $ac_status" >&5
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
cpu64=no
fi
rm -rf conftest.dSYM
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
if test "x$cpu64" == xyes
then
cat >>confdefs.h <<\_ACEOF
#define __x86_64__ 1
_ACEOF
fi
{ $as_echo "$as_me:$LINENO: result: $cpu64" >&5
$as_echo "$cpu64" >&6; }
if test x$cpu64 = xyes; then
X86_64_TRUE=
X86_64_FALSE='#'
else
X86_64_TRUE='#'
X86_64_FALSE=
fi
{ $as_echo "$as_me:$LINENO: checking gtk2+" >&5 { $as_echo "$as_me:$LINENO: checking gtk2+" >&5
$as_echo_n "checking gtk2+... " >&6; } $as_echo_n "checking gtk2+... " >&6; }
# Extract the first word of "pkg-config", so it can be a program name with args. # Extract the first word of "pkg-config", so it can be a program name with args.
@ -6127,13 +6039,6 @@ $as_echo "$as_me: error: conditional \"SSE2\" was never defined.
Usually this means the macro was only invoked conditionally." >&2;} Usually this means the macro was only invoked conditionally." >&2;}
{ (exit 1); exit 1; }; } { (exit 1); exit 1; }; }
fi fi
if test -z "${X86_64_TRUE}" && test -z "${X86_64_FALSE}"; then
{ { $as_echo "$as_me:$LINENO: error: conditional \"X86_64\" was never defined.
Usually this means the macro was only invoked conditionally." >&5
$as_echo "$as_me: error: conditional \"X86_64\" was never defined.
Usually this means the macro was only invoked conditionally." >&2;}
{ (exit 1); exit 1; }; }
fi
: ${CONFIG_STATUS=./config.status} : ${CONFIG_STATUS=./config.status}
ac_write_fail=0 ac_write_fail=0

View File

@ -68,33 +68,6 @@ fi
AC_MSG_RESULT($sse2) AC_MSG_RESULT($sse2)
AM_CONDITIONAL(SSE2, test x$sse2 = xyes) AM_CONDITIONAL(SSE2, test x$sse2 = xyes)
dnl Check for 64bit CPU
AC_MSG_CHECKING(for a x86-64 CPU)
dnl if test "$build_os" == "target_os"
dnl then
AC_TRY_RUN([
int main()
{
int a = 0;
int*pa = &a;
asm(".intel_syntax\n"
"mov %%rax, %0\n"
"mov %%eax, [%%rax]\n"
".att_syntax\n"
: : "r"(pa) : "%rax");
return 0;
}
],cpu64=yes,cpu64=no,)
dnl else
dnl cpu64=no
dnl fi
if test "x$cpu64" == xyes
then
AC_DEFINE(__x86_64__,1,[__x86_64__])
fi
AC_MSG_RESULT($cpu64)
AM_CONDITIONAL(X86_64, test x$cpu64 = xyes)
dnl gtk dnl gtk
AC_MSG_CHECKING(gtk2+) AC_MSG_CHECKING(gtk2+)
AC_CHECK_PROG(GTK_CONFIG, pkg-config, pkg-config) AC_CHECK_PROG(GTK_CONFIG, pkg-config, pkg-config)

View File

@ -6,11 +6,6 @@ INCLUDES = -I@srcdir@/../../common/include
libZeroPAD_a_CXXFLAGS = $(shell pkg-config --cflags gtk+-2.0) libZeroPAD_a_CXXFLAGS = $(shell pkg-config --cflags gtk+-2.0)
libZeroPAD_a_CFLAGS = $(shell pkg-config --cflags gtk+-2.0) libZeroPAD_a_CFLAGS = $(shell pkg-config --cflags gtk+-2.0)
if X86_64
libZeroPAD_a_CXXFLAGS += -fPIC
libZeroPAD_a_CFLAGS += -fPIC
endif
# Create a shared object by faking an exe (thanks to ODE makefiles) # Create a shared object by faking an exe (thanks to ODE makefiles)
traplibdir=$(prefix) traplibdir=$(prefix)

View File

@ -41,32 +41,6 @@ fi
AM_CONDITIONAL(DEBUGBUILD, test x$debug = xyes) AM_CONDITIONAL(DEBUGBUILD, test x$debug = xyes)
AC_MSG_RESULT($debug) AC_MSG_RESULT($debug)
dnl Check for 64bit CPU
AC_MSG_CHECKING(for a x86-64 CPU)
dnl if test "$build_os" == "target_os"
dnl then
AC_TRY_RUN([
int main()
{
int a = 0;
int*pa = &a;
asm(".intel_syntax\n"
"mov %%rax, %0\n"
"mov %%eax, [%%rax]\n"
".att_syntax\n"
: : "r"(pa) : "%rax");
return 0;
}
],cpu64=yes,cpu64=no,)
dnl else
dnl cpu64=no
dnl fi
if test "x$cpu64" == xyes
then
AC_DEFINE(__x86_64__,1,[__x86_64__])
fi
AC_MSG_RESULT($cpu64)
AM_CONDITIONAL(X86_64, test x$cpu64 = xyes)
AC_CHECK_FUNCS([ _aligned_malloc _aligned_free ], AC_DEFINE(HAVE_ALIGNED_MALLOC)) AC_CHECK_FUNCS([ _aligned_malloc _aligned_free ], AC_DEFINE(HAVE_ALIGNED_MALLOC))

View File

@ -6,11 +6,6 @@ INCLUDES = -I@srcdir@/../../common/include -I@srcdir@/../../3rdparty
libZeroSPU2_a_CXXFLAGS = $(shell pkg-config --cflags gtk+-2.0) libZeroSPU2_a_CXXFLAGS = $(shell pkg-config --cflags gtk+-2.0)
libZeroSPU2_a_CFLAGS = $(shell pkg-config --cflags gtk+-2.0) libZeroSPU2_a_CFLAGS = $(shell pkg-config --cflags gtk+-2.0)
if X86_64
libZeroSPU2_a_CXXFLAGS += -fPIC
libZeroSPU2_a_CFLAGS += -fPIC
endif
# Create a shared object by faking an exe (thanks to ODE makefiles) # Create a shared object by faking an exe (thanks to ODE makefiles)
traplibdir=$(prefix) traplibdir=$(prefix)

View File

@ -55,33 +55,6 @@ fi
AC_MSG_RESULT($devbuild) AC_MSG_RESULT($devbuild)
AM_CONDITIONAL(RELEASE_TO_PUBLIC, test x$devbuild = xno) AM_CONDITIONAL(RELEASE_TO_PUBLIC, test x$devbuild = xno)
dnl Check for 64bit CPU
AC_MSG_CHECKING(for a x86-64 CPU)
dnl if test "$build_os" == "target_os"
dnl then
AC_TRY_RUN([
int main()
{
int a = 0;
int*pa = &a;
asm(".intel_syntax\n"
"mov %%rax, %0\n"
"mov %%eax, [%%rax]\n"
".att_syntax\n"
: : "r"(pa) : "%rax");
return 0;
}
],cpu64=yes,cpu64=no,)
dnl else
dnl cpu64=no
dnl fi
if test "x$cpu64" == xyes
then
AC_DEFINE(__x86_64__,1,[__x86_64__])
fi
AC_MSG_RESULT($cpu64)
AM_CONDITIONAL(X86_64, test x$cpu64 = xyes)
AC_CHECK_FUNCS([ _aligned_malloc _aligned_free ], AC_DEFINE(HAVE_ALIGNED_MALLOC)) AC_CHECK_FUNCS([ _aligned_malloc _aligned_free ], AC_DEFINE(HAVE_ALIGNED_MALLOC))
dnl gtk dnl gtk

View File

@ -23,7 +23,7 @@
#define Sleep(ms) usleep(1000*ms) #define Sleep(ms) usleep(1000*ms)
inline unsigned long timeGetTime() inline u32 timeGetTime()
{ {
#ifdef _WIN32 #ifdef _WIN32
_timeb t; _timeb t;
@ -33,7 +33,7 @@ inline unsigned long timeGetTime()
ftime(&t); ftime(&t);
#endif #endif
return (unsigned long)(t.time*1000+t.millitm); return (u32)(t.time*1000+t.millitm);
} }
#include <sys/time.h> #include <sys/time.h>

View File

@ -31,7 +31,7 @@ SPU_CONTROL_* VOICE_PROCESSED::GetCtrl()
return ((SPU_CONTROL_*)(spu2regs+memoffset+REG_C0_CTRL)); return ((SPU_CONTROL_*)(spu2regs+memoffset+REG_C0_CTRL));
} }
void VOICE_PROCESSED::SetVolume(int iProcessRight) void VOICE_PROCESSED::SetVolume(s32 iProcessRight)
{ {
u16 vol = iProcessRight ? pvoice->right.word : pvoice->left.word; u16 vol = iProcessRight ? pvoice->right.word : pvoice->left.word;
@ -101,8 +101,8 @@ void VOICE_PROCESSED::InterpolateUp()
{ {
if (SB[32]==1) // flag == 1? calc step and set flag... and don't change the value in this pass if (SB[32]==1) // flag == 1? calc step and set flag... and don't change the value in this pass
{ {
const int id1=SB[30]-SB[29]; // curr delta to next val const s32 id1=SB[30]-SB[29]; // curr delta to next val
const int id2=SB[31]-SB[30]; // and next delta to next-next val :) const s32 id2=SB[31]-SB[30]; // and next delta to next-next val :)
SB[32]=0; SB[32]=0;
@ -159,9 +159,9 @@ void VOICE_PROCESSED::InterpolateDown()
} }
} }
void VOICE_PROCESSED::FModChangeFrequency(int ns) void VOICE_PROCESSED::FModChangeFrequency(s32 ns)
{ {
int NP=pvoice->pitch; s32 NP=pvoice->pitch;
NP=((32768L+iFMod[ns])*NP)/32768L; NP=((32768L+iFMod[ns])*NP)/32768L;
@ -173,8 +173,7 @@ void VOICE_PROCESSED::FModChangeFrequency(int ns)
iActFreq=NP; iActFreq=NP;
iUsedFreq=NP; iUsedFreq=NP;
sinc=(((NP/10)<<16)/4800); sinc=(((NP/10)<<16)/4800);
if (!sinc) if (!sinc) sinc=1;
sinc=1;
// freq change in simple interpolation mode // freq change in simple interpolation mode
SB[32]=1; SB[32]=1;
@ -188,7 +187,7 @@ static void __forceinline GetNoiseValues(s32& VD)
if(Seed&0x100) if(Seed&0x100)
VD = (s32)((Seed&0xff)<<8); VD = (s32)((Seed&0xff)<<8);
else if(!(Seed&0xffff)) else if (!(Seed&0xffff))
VD = (s32)0x8000; VD = (s32)0x8000;
else else
VD = (s32)0x7fff; VD = (s32)0x7fff;
@ -226,7 +225,7 @@ static void __forceinline GetNoiseValues(s32& VD)
// and sometimes the noise will be used as fmod modulation... pfff // and sometimes the noise will be used as fmod modulation... pfff
int VOICE_PROCESSED::iGetNoiseVal() int VOICE_PROCESSED::iGetNoiseVal()
{ {
int fa; s32 fa;
/*if ((dwNoiseVal<<=1)&0x80000000L) /*if ((dwNoiseVal<<=1)&0x80000000L)
{ {
@ -248,7 +247,7 @@ int VOICE_PROCESSED::iGetNoiseVal()
return fa; return fa;
} }
void VOICE_PROCESSED::StoreInterpolationVal(int fa) void VOICE_PROCESSED::StoreInterpolationVal(s32 fa)
{ {
if (bFMod==2) // fmod freq channel if (bFMod==2) // fmod freq channel
SB[29]=fa; SB[29]=fa;
@ -269,9 +268,9 @@ void VOICE_PROCESSED::StoreInterpolationVal(int fa)
} }
} }
int VOICE_PROCESSED::iGetInterpolationVal() s32 VOICE_PROCESSED::iGetInterpolationVal()
{ {
int fa; s32 fa;
if (bFMod==2) return SB[29]; if (bFMod==2) return SB[29];

View File

@ -27,7 +27,7 @@
void CALLBACK SPU2readDMAMem(u16 *pMem, int size, int core) void CALLBACK SPU2readDMAMem(u16 *pMem, int size, int core)
{ {
u32 spuaddr; u32 spuaddr;
int i, dma, offset; s32 i, dma, offset;
if ( core == 0) if ( core == 0)
{ {
@ -44,7 +44,7 @@ void CALLBACK SPU2readDMAMem(u16 *pMem, int size, int core)
SPU2_LOG("SPU2 readDMA%dMem size %x, addr: %x\n", dma, size, pMem); SPU2_LOG("SPU2 readDMA%dMem size %x, addr: %x\n", dma, size, pMem);
for (i=0; i < size; i++) for (i = 0; i < size; i++)
{ {
*pMem++ = *(u16*)(spu2mem + spuaddr); *pMem++ = *(u16*)(spu2mem + spuaddr);
if ((spu2Rs16(REG_C0_CTRL + offset) & 0x40) && (C_IRQA(core) == spuaddr)) if ((spu2Rs16(REG_C0_CTRL + offset) & 0x40) && (C_IRQA(core) == spuaddr))
@ -94,7 +94,7 @@ int ADMASWrite(int core)
{ {
u32 spuaddr; u32 spuaddr;
ADMA *Adma; ADMA *Adma;
int dma, offset; s32 dma, offset;
if (core == 0) if (core == 0)
{ {
@ -159,7 +159,7 @@ void CALLBACK SPU2writeDMAMem(u16* pMem, int size, int core)
{ {
u32 spuaddr; u32 spuaddr;
ADMA *Adma; ADMA *Adma;
int dma, offset; s32 dma, offset;
if (core == 0) if (core == 0)
{ {
@ -240,7 +240,7 @@ void CALLBACK SPU2writeDMA7Mem(u16* pMem, int size)
void CALLBACK SPU2interruptDMA(int core) void CALLBACK SPU2interruptDMA(int core)
{ {
int dma, offset; s32 dma, offset;
if (core == 0) if (core == 0)
{ {

View File

@ -44,14 +44,14 @@ u16* spu2mem = NULL;
u16* pSpuIrq[2] = {NULL}; u16* pSpuIrq[2] = {NULL};
u32 dwNewChannel2[2] = {0}; // keeps track of what channels that have been turned on u32 dwNewChannel2[2] = {0}; // keeps track of what channels that have been turned on
u32 dwEndChannel2[2] = {0}; // keeps track of what channels have ended u32 dwEndChannel2[2] = {0}; // keeps track of what channels have ended
unsigned long dwNoiseVal=1; // global noise generator u32 dwNoiseVal=1; // global noise generator
bool g_bPlaySound = true; // if true, will output sound, otherwise no bool g_bPlaySound = true; // if true, will output sound, otherwise no
int iFMod[NSSIZE]; s32 iFMod[NSSIZE];
int s_buffers[NSSIZE][2]; // left and right buffers s32 s_buffers[NSSIZE][2]; // left and right buffers
// mixer thread variables // mixer thread variables
static bool s_bThreadExit = true; static bool s_bThreadExit = true;
static int s_nDropPacket = 0; static s32 s_nDropPacket = 0;
string s_strIniPath="inis/zerospu2.ini"; string s_strIniPath="inis/zerospu2.ini";
#ifdef _WIN32 #ifdef _WIN32
@ -66,7 +66,7 @@ void* SPU2ThreadProc(void*);
#endif #endif
static AUDIOBUFFER s_pAudioBuffers[NSPACKETS]; static AUDIOBUFFER s_pAudioBuffers[NSPACKETS];
static int s_nCurBuffer = 0, s_nQueuedBuffers = 0; static s32 s_nCurBuffer = 0, s_nQueuedBuffers = 0;
static s16* s_pCurOutput = NULL; static s16* s_pCurOutput = NULL;
static u32 g_startcount=0xffffffff; static u32 g_startcount=0xffffffff;
static u32 g_packetcount=0; static u32 g_packetcount=0;
@ -76,15 +76,15 @@ soundtouch::SoundTouch* pSoundTouch=NULL;
WavOutFile* g_pWavRecord=NULL; // used for recording WavOutFile* g_pWavRecord=NULL; // used for recording
static u64 s_GlobalTimeStamp = 0; static u64 s_GlobalTimeStamp = 0;
static int s_nDurations[64]={0}; static s32 s_nDurations[64]={0};
static int s_nCurDuration=0; static s32 s_nCurDuration=0;
static int s_nTotalDuration=0; static s32 s_nTotalDuration=0;
int SPUCycles = 0, SPUWorkerCycles = 0; s32 SPUCycles = 0, SPUWorkerCycles = 0;
int SPUStartCycle[2]; s32 SPUStartCycle[2];
int SPUTargetCycle[2]; s32 SPUTargetCycle[2];
int g_logsound=0; s32 g_logsound=0;
int ADMASWrite(int c); int ADMASWrite(int c);
@ -97,7 +97,7 @@ void (*irqCallbackDMA7)()=0;
uptr g_pDMABaseAddr=0; uptr g_pDMABaseAddr=0;
const int f[5][2] = { const s32 f[5][2] = {
{ 0, 0 }, { 0, 0 },
{ 60, 0 }, { 60, 0 },
{ 115, -52 }, { 115, -52 },
@ -239,7 +239,7 @@ s32 CALLBACK SPU2init()
memset(voices, 0, sizeof(voices)); memset(voices, 0, sizeof(voices));
// last 24 channels have higher mem offset // last 24 channels have higher mem offset
for (int i = 0; i < 24; ++i) for (s32 i = 0; i < 24; ++i)
voices[i+24].memoffset = 0x400; voices[i+24].memoffset = 0x400;
// init each channel // init each channel
@ -305,7 +305,7 @@ s32 CALLBACK SPU2open(void *pDsp)
s_pCurOutput = (s16*)s_pAudioBuffers[0].pbuf; s_pCurOutput = (s16*)s_pAudioBuffers[0].pbuf;
assert( s_pCurOutput != NULL); assert( s_pCurOutput != NULL);
for (int i = 0; i < ArraySize(s_nDurations); ++i) for (s32 i = 0; i < ArraySize(s_nDurations); ++i)
{ {
s_nDurations[i] = NSFRAMES*1000; s_nDurations[i] = NSFRAMES*1000;
} }
@ -410,7 +410,7 @@ void CALLBACK SPU2async(u32 cycle)
void InitADSR() // INIT ADSR void InitADSR() // INIT ADSR
{ {
u32 r,rs,rd; u32 r,rs,rd;
int i; s32 i;
memset(RateTable,0,sizeof(u32)*160); // build the rate table according to Neill's rules (see at bottom of file) memset(RateTable,0,sizeof(u32)*160); // build the rate table according to Neill's rules (see at bottom of file)
r=3;rs=1;rd=0; r=3;rs=1;rd=0;
@ -434,7 +434,7 @@ void InitADSR() // INIT ADSR
} }
} }
int MixADSR(VOICE_PROCESSED* pvoice) // MIX ADSR s32 MixADSR(VOICE_PROCESSED* pvoice) // MIX ADSR
{ {
u32 rateadd[8] = { 0, 4, 6, 8, 9, 10, 11, 12 }; u32 rateadd[8] = { 0, 4, 6, 8, 9, 10, 11, 12 };
@ -536,11 +536,11 @@ int MixADSR(VOICE_PROCESSED* pvoice) // MIX ADSR
return 0; return 0;
} }
void MixChannels(int core) void MixChannels(s32 core)
{ {
// mix all channels // mix all channels
int c_offset = 0x0400 * core; s32 c_offset = 0x0400 * core;
int dma, left_vol, right_vol; s32 dma, left_vol, right_vol;
ADMA *Adma; ADMA *Adma;
if (core == 0) if (core == 0)
@ -560,12 +560,12 @@ void MixChannels(int core)
if ((spu2Ru16(REG_C0_MMIX + c_offset) & 0xF0) && (spu2Ru16(REG_C0_ADMAS + c_offset) & (0x1 + core))) if ((spu2Ru16(REG_C0_MMIX + c_offset) & 0xF0) && (spu2Ru16(REG_C0_ADMAS + c_offset) & (0x1 + core)))
{ {
for (int ns=0;ns<NSSIZE;ns++) for (s32 ns=0;ns<NSSIZE;ns++)
{ {
if ((spu2Ru16(REG_C0_MMIX + c_offset) & 0x80)) if ((spu2Ru16(REG_C0_MMIX + c_offset) & 0x80))
s_buffers[ns][0] += (((short*)spu2mem)[0x2000 + c_offset +Adma->Index]*(int)spu2Ru16(left_vol))>>16; s_buffers[ns][0] += (((s16*)spu2mem)[0x2000 + c_offset +Adma->Index]*(s32)spu2Ru16(left_vol))>>16;
if ((spu2Ru16(REG_C0_MMIX + c_offset) & 0x40)) if ((spu2Ru16(REG_C0_MMIX + c_offset) & 0x40))
s_buffers[ns][1] += (((short*)spu2mem)[0x2200 + c_offset +Adma->Index]*(int)spu2Ru16(right_vol))>>16; s_buffers[ns][1] += (((s16*)spu2mem)[0x2200 + c_offset +Adma->Index]*(s32)spu2Ru16(right_vol))>>16;
Adma->Index +=1; Adma->Index +=1;
MemAddr[core] += 4; MemAddr[core] += 4;
@ -602,7 +602,7 @@ void SPU2Worker()
{ {
u8* start; u8* start;
u32 nSample; u32 nSample;
int ch, predict_nr, shift_factor, flags; s32 ch, predict_nr, shift_factor, flags;
// assume s_buffers are zeroed out // assume s_buffers are zeroed out
if ( dwNewChannel2[0] || dwNewChannel2[1] ) if ( dwNewChannel2[0] || dwNewChannel2[1] )
@ -624,11 +624,11 @@ void SPU2Worker()
pChannel->VoiceChangeFrequency(); pChannel->VoiceChangeFrequency();
// loop until 1 ms of data is reached // loop until 1 ms of data is reached
int ns = 0; s32 ns = 0;
while(ns<NSSIZE) while(ns<NSSIZE)
{ {
int s_1, s_2, fa; s32 s_1, s_2, fa;
// fmod freq channel // fmod freq channel
if (pChannel->bFMod==1 && iFMod[ns]) pChannel->FModChangeFrequency(ns); if (pChannel->bFMod==1 && iFMod[ns]) pChannel->FModChangeFrequency(ns);
@ -662,8 +662,8 @@ void SPU2Worker()
for (nSample=0; nSample<28; ++start) for (nSample=0; nSample<28; ++start)
{ {
int s; s32 s;
int d = (int)*start; s32 d = (s32)*start;
s = ((d & 0xf)<<12); s = ((d & 0xf)<<12);
if (s & 0x8000) s |= 0xffff0000; if (s & 0x8000) s |= 0xffff0000;
@ -685,7 +685,7 @@ void SPU2Worker()
} }
// irq occurs no matter what core access the address // irq occurs no matter what core access the address
for (int core = 0; core < 2; ++core) for (s32 core = 0; core < 2; ++core)
{ {
if (((SPU_CONTROL_*)(spu2regs + (0x400 * core) + REG_C0_CTRL))->irq) // some callback and irq active? if (((SPU_CONTROL_*)(spu2regs + (0x400 * core) + REG_C0_CTRL))->irq) // some callback and irq active?
{ {
@ -736,7 +736,7 @@ void SPU2Worker()
else else
fa=pChannel->iGetInterpolationVal(); // get sample val fa=pChannel->iGetInterpolationVal(); // get sample val
int sval = (MixADSR(pChannel) * fa) / 1023; // mix adsr s32 sval = (MixADSR(pChannel) * fa) / 1023; // mix adsr
if (pChannel->bFMod == 2) // fmod freq channel if (pChannel->bFMod == 2) // fmod freq channel
{ {
@ -767,7 +767,7 @@ ENDX:
{ {
assert( s_pCurOutput != NULL); assert( s_pCurOutput != NULL);
for (int ns=0; ns<NSSIZE; ns++) for (s32 ns=0; ns<NSSIZE; ns++)
{ {
// clamp and write // clamp and write
clampandwrite16(s_pCurOutput[0],s_buffers[ns][0]); clampandwrite16(s_pCurOutput[0],s_buffers[ns][0]);
@ -784,7 +784,7 @@ ENDX:
if ( conf.options & OPTION_RECORDING ) if ( conf.options & OPTION_RECORDING )
{ {
static int lastrectime = 0; static s32 lastrectime = 0;
if (timeGetTime() - lastrectime > 5000) if (timeGetTime() - lastrectime > 5000)
{ {
WARN_LOG("ZeroSPU2: recording\n"); WARN_LOG("ZeroSPU2: recording\n");
@ -840,17 +840,17 @@ ENDX:
} }
// resamples pStereoSamples // resamples pStereoSamples
void ResampleLinear(s16* pStereoSamples, int oldsamples, s16* pNewSamples, int newsamples) void ResampleLinear(s16* pStereoSamples, s32 oldsamples, s16* pNewSamples, s32 newsamples)
{ {
for (int i = 0; i < newsamples; ++i) for (s32 i = 0; i < newsamples; ++i)
{ {
int io = i * oldsamples; s32 io = i * oldsamples;
int old = io / newsamples; s32 old = io / newsamples;
int rem = io - old * newsamples; s32 rem = io - old * newsamples;
old *= 2; old *= 2;
int newsampL = pStereoSamples[old] * (newsamples - rem) + pStereoSamples[old+2] * rem; s32 newsampL = pStereoSamples[old] * (newsamples - rem) + pStereoSamples[old+2] * rem;
int newsampR = pStereoSamples[old+1] * (newsamples - rem) + pStereoSamples[old+3] * rem; s32 newsampR = pStereoSamples[old+1] * (newsamples - rem) + pStereoSamples[old+3] * rem;
pNewSamples[2 * i] = newsampL / newsamples; pNewSamples[2 * i] = newsampL / newsamples;
pNewSamples[2 * i + 1] = newsampR / newsamples; pNewSamples[2 * i + 1] = newsampR / newsamples;
} }
@ -868,7 +868,7 @@ DWORD WINAPI SPU2ThreadProc(LPVOID)
void* SPU2ThreadProc(void* lpParam) void* SPU2ThreadProc(void* lpParam)
#endif #endif
{ {
int nReadBuf = 0; s32 nReadBuf = 0;
while (!s_bThreadExit) while (!s_bThreadExit)
{ {
@ -901,13 +901,13 @@ void* SPU2ThreadProc(void* lpParam)
} }
//int ps2delay = timeGetTime() - s_pAudioBuffers[nReadBuf].timestamp; //s32 ps2delay = timeGetTime() - s_pAudioBuffers[nReadBuf].timestamp;
int NewSamples = s_pAudioBuffers[nReadBuf].avgtime; s32 NewSamples = s_pAudioBuffers[nReadBuf].avgtime;
if ( (conf.options & OPTION_TIMESTRETCH) ) if ( (conf.options & OPTION_TIMESTRETCH) )
{ {
int bytesbuf = SoundGetBytesBuffered(); s32 bytesbuf = SoundGetBytesBuffered();
if ( bytesbuf < 8000 ) if ( bytesbuf < 8000 )
NewSamples += 1000; NewSamples += 1000;
// check the current timestamp, if too far apart, speed up audio // check the current timestamp, if too far apart, speed up audio
@ -928,25 +928,25 @@ void* SPU2ThreadProc(void* lpParam)
NewSamples = min(NewSamples, NSFRAMES * NSSIZE * 3); NewSamples = min(NewSamples, NSFRAMES * NSSIZE * 3);
int oldsamples = s_pAudioBuffers[nReadBuf].len / 4; s32 oldsamples = s_pAudioBuffers[nReadBuf].len / 4;
if ((nReadBuf & 3) == 0) // wow, this if statement makes the whole difference if ((nReadBuf & 3) == 0) // wow, this if statement makes the whole difference
pSoundTouch->setTempoChange(100.0f*(float)oldsamples/(float)NewSamples - 100.0f); pSoundTouch->setTempoChange(100.0f*(float)oldsamples/(float)NewSamples - 100.0f);
for( int sx=0; sx<oldsamples*2; sx++ ) for( s32 sx=0; sx<oldsamples*2; sx++ )
s_floatBuffer[sx] = ((s16*)s_pAudioBuffers[nReadBuf].pbuf)[sx]/65536.0f; s_floatBuffer[sx] = ((s16*)s_pAudioBuffers[nReadBuf].pbuf)[sx]/65536.0f;
pSoundTouch->putSamples(s_floatBuffer, oldsamples); pSoundTouch->putSamples(s_floatBuffer, oldsamples);
// extract 2*NSFRAMES ms at a time // extract 2*NSFRAMES ms at a time
int nOutSamples; s32 nOutSamples;
do do
{ {
nOutSamples = pSoundTouch->receiveSamples(s_floatBuffer, NSSIZE * NSFRAMES * 5); nOutSamples = pSoundTouch->receiveSamples(s_floatBuffer, NSSIZE * NSFRAMES * 5);
if ( nOutSamples > 0 ) if ( nOutSamples > 0 )
{ {
for( int sx=0; sx<nOutSamples*2; sx++ ) for( s32 sx=0; sx<nOutSamples*2; sx++ )
s_ThreadBuffer[sx] = (s16)(s_floatBuffer[sx]*65536.0f); s_ThreadBuffer[sx] = (s16)(s_floatBuffer[sx]*65536.0f);
SoundFeedVoiceData((u8*)s_ThreadBuffer, nOutSamples * 4); SoundFeedVoiceData((u8*)s_ThreadBuffer, nOutSamples * 4);
@ -969,9 +969,9 @@ void* SPU2ThreadProc(void* lpParam)
} }
// turn channels on // turn channels on
void SoundOn(int start,int end,unsigned short val) // SOUND ON PSX COMAND void SoundOn(s32 start,s32 end,u16 val) // SOUND ON PSX COMAND
{ {
for (int ch=start;ch<end;ch++,val>>=1) // loop channels for (s32 ch=start;ch<end;ch++,val>>=1) // loop channels
{ {
if ((val&1) && voices[ch].pStart) // mmm... start has to be set before key on !?! if ((val&1) && voices[ch].pStart) // mmm... start has to be set before key on !?!
{ {
@ -983,17 +983,17 @@ void SoundOn(int start,int end,unsigned short val) // SOUND ON PSX COMAND
} }
// turn channels off // turn channels off
void SoundOff(int start,int end,unsigned short val) // SOUND OFF PSX COMMAND void SoundOff(s32 start,s32 end,u16 val) // SOUND OFF PSX COMMAND
{ {
for (int ch=start;ch<end;ch++,val>>=1) // loop channels for (s32 ch=start;ch<end;ch++,val>>=1) // loop channels
{ {
if (val&1) voices[ch].bStop=true; // && s_chan[i].bOn) mmm... if (val&1) voices[ch].bStop=true; // && s_chan[i].bOn) mmm...
} }
} }
void FModOn(int start,int end,unsigned short val) // FMOD ON PSX COMMAND void FModOn(s32 start,s32 end,u16 val) // FMOD ON PSX COMMAND
{ {
int ch; s32 ch;
for (ch=start;ch<end;ch++,val>>=1) // loop channels for (ch=start;ch<end;ch++,val>>=1) // loop channels
{ {
@ -1010,9 +1010,9 @@ void FModOn(int start,int end,unsigned short val) // FMOD ON PSX COMMAND
} }
} }
void VolumeOn(int start,int end,unsigned short val,int iRight) // VOLUME ON PSX COMMAND void VolumeOn(s32 start,s32 end,u16 val,s32 iRight) // VOLUME ON PSX COMMAND
{ {
int ch; s32 ch;
for (ch=start;ch<end;ch++,val>>=1) // loop channels for (ch=start;ch<end;ch++,val>>=1) // loop channels
{ {
@ -1048,7 +1048,7 @@ void CALLBACK SPU2write(u32 mem, u16 value)
// channel info // channel info
if ((r<0x0180) || (r>=0x0400 && r<0x0580)) // u32s are always >= 0. if ((r<0x0180) || (r>=0x0400 && r<0x0580)) // u32s are always >= 0.
{ {
int ch=0; s32 ch=0;
if (r >= 0x400) if (r >= 0x400)
ch = ((r - 0x400) >> 4) + 24; ch = ((r - 0x400) >> 4) + 24;
else else
@ -1064,7 +1064,7 @@ void CALLBACK SPU2write(u32 mem, u16 value)
break; break;
case 4: case 4:
{ {
int NP; s32 NP;
if (value> 0x3fff) if (value> 0x3fff)
NP=0x3fff; // get pitch val NP=0x3fff; // get pitch val
else else
@ -1100,8 +1100,8 @@ void CALLBACK SPU2write(u32 mem, u16 value)
// more channel info // more channel info
if ((r>=0x01c0 && r<0x02E0)||(r>=0x05c0 && r<0x06E0)) if ((r>=0x01c0 && r<0x02E0)||(r>=0x05c0 && r<0x06E0))
{ {
int ch=0; s32 ch=0;
unsigned long rx=r; u32 rx=r;
if (rx>=0x400) if (rx>=0x400)
{ {
ch=24; ch=24;
@ -1257,7 +1257,7 @@ u16 CALLBACK SPU2read(u32 mem)
// if the register is any of the regs before core 0, or is somewhere between core 0 and 1... // if the register is any of the regs before core 0, or is somewhere between core 0 and 1...
if ((r < 0x0180) || (r >= 0x0400 && r < 0x0580)) // u32s are always >= 0. if ((r < 0x0180) || (r >= 0x0400 && r < 0x0580)) // u32s are always >= 0.
{ {
int ch = 0; s32 ch = 0;
if (r >= 0x400) if (r >= 0x400)
ch=((r - 0x400) >> 4) + 24; ch=((r - 0x400) >> 4) + 24;
@ -1272,8 +1272,8 @@ u16 CALLBACK SPU2read(u32 mem)
if ((r>=REG_VA_SSA && r<REG_A_ESA) || (r>=0x05c0 && r<0x06E0)) // some channel info? if ((r>=REG_VA_SSA && r<REG_A_ESA) || (r>=0x05c0 && r<0x06E0)) // some channel info?
{ {
int ch=0; s32 ch=0;
unsigned long rx = r; u32 rx = r;
if (rx >=0x400) if (rx >=0x400)
{ {
@ -1390,24 +1390,24 @@ s32 CALLBACK SPU2test()
} }
// size is in bytes // size is in bytes
void LogPacketSound(void* packet, int memsize) void LogPacketSound(void* packet, s32 memsize)
{ {
u16 buf[28]; u16 buf[28];
u8* pstart = (u8*)packet; u8* pstart = (u8*)packet;
int s_1 = 0, s_2=0; s32 s_1 = 0, s_2=0;
for (int i = 0; i < memsize; i += 16) for (s32 i = 0; i < memsize; i += 16)
{ {
int predict_nr=(int)pstart[0]; s32 predict_nr=(s32)pstart[0];
int shift_factor=predict_nr&0xf; s32 shift_factor=predict_nr&0xf;
predict_nr >>= 4; predict_nr >>= 4;
pstart += 2; pstart += 2;
for (int nSample=0;nSample<28; ++pstart) for (s32 nSample=0;nSample<28; ++pstart)
{ {
int d=(int)*pstart; s32 d=(s32)*pstart;
int s, fa; s32 s, fa;
s =((d & 0xf) << 12); s =((d & 0xf) << 12);
SetPacket(s); SetPacket(s);
@ -1420,7 +1420,7 @@ void LogPacketSound(void* packet, int memsize)
} }
} }
void LogRawSound(void* pleft, int leftstride, void* pright, int rightstride, int numsamples) void LogRawSound(void* pleft, s32 leftstride, void* pright, s32 rightstride, s32 numsamples)
{ {
if (g_pWavRecord == NULL ) if (g_pWavRecord == NULL )
g_pWavRecord = new WavOutFile(RECORD_FILENAME, SAMPLE_RATE, 16, 2); g_pWavRecord = new WavOutFile(RECORD_FILENAME, SAMPLE_RATE, 16, 2);
@ -1431,7 +1431,7 @@ void LogRawSound(void* pleft, int leftstride, void* pright, int rightstride, int
tempbuf.resize(2 * numsamples); tempbuf.resize(2 * numsamples);
for (int i = 0; i < numsamples; ++i) for (s32 i = 0; i < numsamples; ++i)
{ {
tempbuf[2*i+0] = *(s16*)left; tempbuf[2*i+0] = *(s16*)left;
tempbuf[2*i+1] = *(s16*)right; tempbuf[2*i+1] = *(s16*)right;
@ -1462,7 +1462,7 @@ int CALLBACK SPU2setupRecording(int start, void* pData)
void save_data(freezeData *data) void save_data(freezeData *data)
{ {
SPU2freezeData *spud; SPU2freezeData *spud;
int i; s32 i;
spud = (SPU2freezeData*)data->data; spud = (SPU2freezeData*)data->data;
spud->version = 0x70000001; spud->version = 0x70000001;
@ -1470,8 +1470,8 @@ void save_data(freezeData *data)
memcpy(spud->spu2regs, spu2regs, 0x10000); memcpy(spud->spu2regs, spu2regs, 0x10000);
memcpy(spud->spu2mem, spu2mem, 0x200000); memcpy(spud->spu2mem, spu2mem, 0x200000);
spud->nSpuIrq[0] = (int)(pSpuIrq[0] - spu2mem); spud->nSpuIrq[0] = (s32)(pSpuIrq[0] - spu2mem);
spud->nSpuIrq[1] = (int)(pSpuIrq[1] - spu2mem); spud->nSpuIrq[1] = (s32)(pSpuIrq[1] - spu2mem);
memcpy(spud->dwNewChannel2, dwNewChannel2, 4*2); memcpy(spud->dwNewChannel2, dwNewChannel2, 4*2);
memcpy(spud->dwEndChannel2, dwEndChannel2, 4*2); memcpy(spud->dwEndChannel2, dwEndChannel2, 4*2);
@ -1518,7 +1518,7 @@ void save_data(freezeData *data)
void load_data(freezeData *data) void load_data(freezeData *data)
{ {
SPU2freezeData *spud; SPU2freezeData *spud;
int i; s32 i;
spud = (SPU2freezeData*)data->data; spud = (SPU2freezeData*)data->data;
@ -1556,7 +1556,7 @@ void load_data(freezeData *data)
for (i = 0; i < ArraySize(voices); ++i) for (i = 0; i < ArraySize(voices); ++i)
{ {
memcpy(&voices[i], &spud->voices[i], min((int)SPU_VOICE_STATE_SIZE, spud->voicesize)); memcpy(&voices[i], &spud->voices[i], min((s32)SPU_VOICE_STATE_SIZE, spud->voicesize));
voices[i].pStart = (u8*)((uptr)spud->voices[i].pStart+(uptr)spu2mem); voices[i].pStart = (u8*)((uptr)spud->voices[i].pStart+(uptr)spu2mem);
voices[i].pLoop = (u8*)((uptr)spud->voices[i].pLoop+(uptr)spu2mem); voices[i].pLoop = (u8*)((uptr)spud->voices[i].pLoop+(uptr)spu2mem);
voices[i].pCurr = (u8*)((uptr)spud->voices[i].pCurr+(uptr)spu2mem); voices[i].pCurr = (u8*)((uptr)spud->voices[i].pCurr+(uptr)spu2mem);
@ -1565,7 +1565,7 @@ void load_data(freezeData *data)
s_GlobalTimeStamp = 0; s_GlobalTimeStamp = 0;
g_startcount = 0xffffffff; g_startcount = 0xffffffff;
for (int i = 0; i < ArraySize(s_nDurations); ++i) for (s32 i = 0; i < ArraySize(s_nDurations); ++i)
{ {
s_nDurations[i] = NSFRAMES*1000; s_nDurations[i] = NSFRAMES*1000;
} }

View File

@ -88,24 +88,24 @@ extern FILE *spu2Log;
extern s8 *spu2regs; extern s8 *spu2regs;
extern u16* spu2mem; extern u16* spu2mem;
extern int iFMod[NSSIZE]; extern s32 iFMod[NSSIZE];
extern u32 MemAddr[2]; extern u32 MemAddr[2];
extern unsigned long dwNoiseVal; // global noise generator extern u32 dwNoiseVal; // global noise generator
// functions of main emu, called on spu irq // functions of main emu, called on spu irq
extern void (*irqCallbackSPU2)(); extern void (*irqCallbackSPU2)();
extern void (*irqCallbackDMA4)(); extern void (*irqCallbackDMA4)();
extern void (*irqCallbackDMA7)(); extern void (*irqCallbackDMA7)();
extern int SPUCycles, SPUWorkerCycles; extern s32 SPUCycles, SPUWorkerCycles;
extern int SPUStartCycle[2]; extern s32 SPUStartCycle[2];
extern int SPUTargetCycle[2]; extern s32 SPUTargetCycle[2];
extern u16 interrupt; extern u16 interrupt;
typedef struct { typedef struct {
int Log; s32 Log;
int options; s32 options;
} Config; } Config;
extern Config conf; extern Config conf;
@ -173,7 +173,7 @@ static __forceinline u32 C1_IRQA()
return SPU2_GET32BIT(REG_C1_IRQA_LO, REG_C1_IRQA_HI); return SPU2_GET32BIT(REG_C1_IRQA_LO, REG_C1_IRQA_HI);
} }
static __forceinline u32 C_IRQA(int c) static __forceinline u32 C_IRQA(s32 c)
{ {
if (c == 0) if (c == 0)
return C0_IRQA(); return C0_IRQA();
@ -191,7 +191,7 @@ static __forceinline u32 C1_SPUADDR()
return SPU2_GET32BIT(REG_C1_SPUADDR_LO, REG_C1_SPUADDR_HI); return SPU2_GET32BIT(REG_C1_SPUADDR_LO, REG_C1_SPUADDR_HI);
} }
static __forceinline u32 C_SPUADDR(int c) static __forceinline u32 C_SPUADDR(s32 c)
{ {
if (c == 0) if (c == 0)
return C0_SPUADDR(); return C0_SPUADDR();
@ -209,7 +209,7 @@ static __forceinline void C1_SPUADDR_SET(u32 value)
SPU2_SET32BIT(value, REG_C1_SPUADDR_LO, REG_C1_SPUADDR_HI); SPU2_SET32BIT(value, REG_C1_SPUADDR_LO, REG_C1_SPUADDR_HI);
} }
static __forceinline void C_SPUADDR_SET(u32 value, int c) static __forceinline void C_SPUADDR_SET(u32 value, s32 c)
{ {
if (c == 0) if (c == 0)
C0_SPUADDR_SET(value); C0_SPUADDR_SET(value);
@ -282,18 +282,18 @@ struct _SPU_VOICE
// ADSR INFOS PER CHANNEL // ADSR INFOS PER CHANNEL
struct ADSRInfoEx struct ADSRInfoEx
{ {
int State; s32 State;
int AttackModeExp; s32 AttackModeExp;
int AttackRate; s32 AttackRate;
int DecayRate; s32 DecayRate;
int SustainLevel; s32 SustainLevel;
int SustainModeExp; s32 SustainModeExp;
int SustainIncrease; s32 SustainIncrease;
int SustainRate; s32 SustainRate;
int ReleaseModeExp; s32 ReleaseModeExp;
int ReleaseRate; s32 ReleaseRate;
int EnvelopeVol; s32 EnvelopeVol;
long lVolume; s32 lVolume;
}; };
#define SPU_VOICE_STATE_SIZE (sizeof(VOICE_PROCESSED)-4*sizeof(void*)) #define SPU_VOICE_STATE_SIZE (sizeof(VOICE_PROCESSED)-4*sizeof(void*))
@ -311,34 +311,34 @@ struct VOICE_PROCESSED
void InterpolateUp(); void InterpolateUp();
void InterpolateDown(); void InterpolateDown();
void FModChangeFrequency(int ns); void FModChangeFrequency(int ns);
int iGetNoiseVal(); s32 iGetNoiseVal();
void StoreInterpolationVal(int fa); void StoreInterpolationVal(int fa);
int iGetInterpolationVal(); s32 iGetInterpolationVal();
void Stop(); void Stop();
SPU_CONTROL_* GetCtrl(); SPU_CONTROL_* GetCtrl();
// start save state // start save state
int leftvol, rightvol; // left right volumes s32 leftvol, rightvol; // left right volumes
int iSBPos; // mixing stuff s32 iSBPos; // mixing stuff
int SB[32+32]; s32 SB[32+32];
int spos; s32 spos;
int sinc; s32 sinc;
int iIrqDone; // debug irq done flag s32 iIrqDone; // debug irq done flag
int s_1; // last decoding infos s32 s_1; // last decoding infos
int s_2; s32 s_2;
int iOldNoise; // old noise val for this channel s32 iOldNoise; // old noise val for this channel
int iActFreq; // current psx pitch s32 iActFreq; // current psx pitch
int iUsedFreq; // current pc pitch s32 iUsedFreq; // current pc pitch
int iStartAddr, iLoopAddr, iNextAddr; s32 iStartAddr, iLoopAddr, iNextAddr;
int bFMod; s32 bFMod;
ADSRInfoEx ADSRX; // next ADSR settings (will be moved to active on sample start) ADSRInfoEx ADSRX; // next ADSR settings (will be moved to active on sample start)
int memoffset; // if first core, 0, if second, 0x400 s32 memoffset; // if first core, 0, if second, 0x400
int chanid; // channel id s32 chanid; // channel id
bool bIgnoreLoop, bNew, bNoise, bReverb, bOn, bStop, bVolChanged; bool bIgnoreLoop, bNew, bNoise, bReverb, bOn, bStop, bVolChanged;
bool bVolumeR, bVolumeL; bool bVolumeR, bVolumeL;
@ -363,15 +363,15 @@ struct AUDIOBUFFER
// Variable used to smooth out sound by concentrating on new voices // Variable used to smooth out sound by concentrating on new voices
u32 timestamp; // in microseconds, only used for time stretching u32 timestamp; // in microseconds, only used for time stretching
u32 avgtime; u32 avgtime;
int newchannels; s32 newchannels;
}; };
struct ADMA struct ADMA
{ {
unsigned short * MemAddr; u16* MemAddr;
int Index; s32 Index;
int AmountLeft; s32 AmountLeft;
int Enabled; s32 Enabled;
// used to make sure that ADMA doesn't get interrupted with a writeDMA call // used to make sure that ADMA doesn't get interrupted with a writeDMA call
}; };
@ -384,19 +384,19 @@ struct SPU2freezeData
u8 spu2regs[0x10000]; u8 spu2regs[0x10000];
u8 spu2mem[0x200000]; u8 spu2mem[0x200000];
u16 interrupt; u16 interrupt;
int nSpuIrq[2]; s32 nSpuIrq[2];
u32 dwNewChannel2[2], dwEndChannel2[2]; u32 dwNewChannel2[2], dwEndChannel2[2];
u32 dwNoiseVal; u32 dwNoiseVal;
int iFMod[NSSIZE]; s32 iFMod[NSSIZE];
u32 MemAddr[2]; u32 MemAddr[2];
ADMA adma[2]; ADMA adma[2];
u32 Adma4MemAddr, Adma7MemAddr; u32 Adma4MemAddr, Adma7MemAddr;
int SPUCycles, SPUWorkerCycles; s32 SPUCycles, SPUWorkerCycles;
int SPUStartCycle[2]; s32 SPUStartCycle[2];
int SPUTargetCycle[2]; s32 SPUTargetCycle[2];
int voicesize; s32 voicesize;
VOICE_PROCESSED voices[SPU_NUMBER_VOICES+1]; VOICE_PROCESSED voices[SPU_NUMBER_VOICES+1];
}; };