X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fdfsound%2Fexternals.h;h=5ec941525c234a4963471cee79f11853ac1c2092;hp=3a3ff68aad86b807f9072d920148fc86c62560cb;hb=b64fb8912577f6f1e856bf255b6bd96e4e977203;hpb=63a4f6b6a3b0315590cd3009df2c92480ed2d98b diff --git a/plugins/dfsound/externals.h b/plugins/dfsound/externals.h index 3a3ff68a..5ec94152 100644 --- a/plugins/dfsound/externals.h +++ b/plugins/dfsound/externals.h @@ -28,6 +28,11 @@ #define noinline #define unlikely(x) x #endif +#if defined(__GNUC__) && !defined(_TMS320C6X) +#define preload __builtin_prefetch +#else +#define preload(...) +#endif #define PSE_LT_SPU 4 #define PSE_SPU_ERR_SUCCESS 0 @@ -105,13 +110,11 @@ typedef struct unsigned int bNoise:1; // noise active flag unsigned int bFMod:2; // freq mod (0=off, 1=sound channel, 2=freq channel) unsigned int prevflags:3; // flags from previous block - + unsigned int bIgnoreLoop:1; // Ignore loop int iLeftVolume; // left volume int iRightVolume; // right volume ADSRInfoEx ADSRX; int iRawPitch; // raw pitch (0...3fff) - - int SB[32+4]; } SPUCHAN; /////////////////////////////////////////////////////////// @@ -123,8 +126,6 @@ typedef struct int VolLeft; int VolRight; - int iRVBLeft; - int iRVBRight; int FB_SRC_A; // (offset) int FB_SRC_B; // (offset) @@ -161,27 +162,26 @@ typedef struct int dirty; // registers changed - // normalized offsets - int nIIR_DEST_A0, nIIR_DEST_A1, nIIR_DEST_B0, nIIR_DEST_B1, - nACC_SRC_A0, nACC_SRC_A1, nACC_SRC_B0, nACC_SRC_B1, - nIIR_SRC_A0, nIIR_SRC_A1, nIIR_SRC_B0, nIIR_SRC_B1, - nACC_SRC_C0, nACC_SRC_C1, nACC_SRC_D0, nACC_SRC_D1, - nMIX_DEST_A0, nMIX_DEST_A1, nMIX_DEST_B0, nMIX_DEST_B1; // MIX_DEST_xx - FB_SRC_x - int nFB_SRC_A0, nFB_SRC_A1, nFB_SRC_B0, nFB_SRC_B1; + int FB_SRC_A0, FB_SRC_A1, FB_SRC_B0, FB_SRC_B1; } REVERBInfo; /////////////////////////////////////////////////////////// // psx buffers / addresses +#define SB_SIZE (32 + 4) + typedef struct { unsigned short spuCtrl; unsigned short spuStat; unsigned int spuAddr; - unsigned char * spuMemC; + union { + unsigned char *spuMemC; + unsigned short *spuMem; + }; unsigned char * pSpuIrq; unsigned int cycles_played; @@ -189,6 +189,7 @@ typedef struct int decode_dirty_ch; unsigned int bSpuInit:1; unsigned int bSPUIsOpen:1; + unsigned int bMemDirty:1; // had external write to SPU RAM unsigned int dwNoiseVal; // global noise generator unsigned int dwNoiseCount; @@ -200,11 +201,9 @@ typedef struct short * pS; void (CALLBACK *irqCallback)(void); // func of main emu, called on spu irq - void (CALLBACK *cddavCallback)(unsigned short,unsigned short); + void (CALLBACK *cddavCallback)(short, short); void (CALLBACK *scheduleCallback)(unsigned int); - int * sRVBStart; - xa_decode_t * xapGlobal; unsigned int * XAFeed; unsigned int * XAPlay; @@ -222,11 +221,20 @@ typedef struct int iLeftXAVol; int iRightXAVol; - int pad[32]; + SPUCHAN * s_chan; + REVERBInfo * rvb; + + // buffers + int * SB; + int * SSumLR; + + int pad[29]; unsigned short regArea[0x400]; - unsigned short spuMem[256*1024]; } SPUInfo; +#define regAreaGet(ch,offset) \ + spu.regArea[((ch<<4)|(offset))>>1] + /////////////////////////////////////////////////////////// // SPU.C globals /////////////////////////////////////////////////////////// @@ -234,15 +242,10 @@ typedef struct #ifndef _IN_SPU extern SPUInfo spu; -extern SPUCHAN s_chan[]; -extern REVERBInfo rvb; void do_samples(unsigned int cycles_to, int do_sync); void schedule_next_irq(void); -#define regAreaGet(ch,offset) \ - spu.regArea[((ch<<4)|(offset))>>1] - #define do_samples_if_needed(c, sync) \ do { \ if (sync || (int)((c) - spu.cycles_played) >= 16 * 768) \