diff options
| author | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-04-15 12:10:49 +0000 |
|---|---|---|
| committer | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-04-15 12:10:49 +0000 |
| commit | 8c939ea635450f85b3153cd463a9d6825c2a20aa (patch) | |
| tree | 80cdf09386630296915f03dc27d992d0eba31ad2 | |
| parent | ad59e35254c0a563a7e9c387916c5a1547097c70 (diff) | |
| download | pcsxr-8c939ea635450f85b3153cd463a9d6825c2a20aa.tar.gz | |
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@45449 e17a0e51-4ae3-4d35-97c3-1a29b211df97
| -rw-r--r-- | AUTHORS | 8 | ||||
| -rw-r--r-- | ChangeLog | 8 | ||||
| -rw-r--r-- | libpcsxcore/gte.c | 33 | ||||
| -rw-r--r-- | libpcsxcore/psxmem.c | 4 | ||||
| -rw-r--r-- | plugins/dfsound/freeze.c | 2 |
5 files changed, 33 insertions, 22 deletions
@@ -19,13 +19,13 @@ df Copyright: (C) 2005 Ryan Schultz (C) 2007 Stephen Chao (C) 2006 Marcus Comstedt -PCSX-Reloaded Maintainer: Wei Mingzhi <whistler@openoffice.org> +PCSX-Reloaded Maintainer: Wei Mingzhi <whistler_wmz@users.sf.net> PCSX-Reloaded Contributors: avlex (Help on xcode project) dario86 (Various bugfixes) - edgbla (Bugfix) - Gabriele Gorla (Rewritten MDEC decoder) - maggix (Leopard compilation fix) + edgbla (Various core/plugin fixes) + Gabriele Gorla (MDEC decoder) + maggix (Snow Leopard compile fix) NeToU (Bugfix) Peter Collingbourne (Various core/psxbios fixes) shalma (Various core fixes) @@ -1,3 +1,11 @@ +April 15, 2010 Wei Mingzhi <whistler_wmz@users.sf.net> + + * plugins/dfsound/freeze.c: Fixed the sound doesn't always play properly + after loading the state. (Thanks edgbla) + * libpcsxcore/psxmem.c: Fixed KKND freeze at startup. (edgbla) + * libpcsxcore/gte.c: Fixed gteDCPL. (edgbla) + * AUTHORS: Updated info. + April 14, 2010 Wei Mingzhi <whistler_wmz@users.sf.net> * libpcsxcore/gte.c: Use u32 instead of unsigned long. diff --git a/libpcsxcore/gte.c b/libpcsxcore/gte.c index e5cf561d..9c437f4c 100644 --- a/libpcsxcore/gte.c +++ b/libpcsxcore/gte.c @@ -157,8 +157,8 @@ #define GTE_MX(op) ((op >> 17) & 3) #define GTE_V(op) ((op >> 15) & 3) #define GTE_CV(op) ((op >> 13) & 3) -#define GTE_CD(op) ((op >> 11 ) & 3) /* not used */ -#define GTE_LM(op) ((op >> 10 ) & 1) +#define GTE_CD(op) ((op >> 11) & 3) /* not used */ +#define GTE_LM(op) ((op >> 10) & 1) #define GTE_CT(op) ((op >> 6) & 15) /* not used */ #define GTE_FUNCT(op) (op & 63) #define INS_COFUN(op) (op & 0x1ffffff) @@ -191,10 +191,10 @@ static inline s32 LIM(s32 value, s32 max, s32 min, u32 flag) { #define A3(a) BOUNDS((a), 0x7fffffff, (1 << 28), -(s64)0x80000000, (1 << 31) | (1 << 25)) #define limB1(a, l) LIM((a), 0x7fff, -0x8000 * !l, (1 << 31) | (1 << 24)) #define limB2(a, l) LIM((a), 0x7fff, -0x8000 * !l, (1 << 31) | (1 << 23)) -#define limB3(a, l) LIM((a), 0x7fff, -0x8000 * !l, (1 << 22) ) -#define limC1(a) LIM((a), 0x00ff, 0x0000, (1 << 21) ) -#define limC2(a) LIM((a), 0x00ff, 0x0000, (1 << 20) ) -#define limC3(a) LIM((a), 0x00ff, 0x0000, (1 << 19) ) +#define limB3(a, l) LIM((a), 0x7fff, -0x8000 * !l, (1 << 22)) +#define limC1(a) LIM((a), 0x00ff, 0x0000, (1 << 21)) +#define limC2(a) LIM((a), 0x00ff, 0x0000, (1 << 20)) +#define limC3(a) LIM((a), 0x00ff, 0x0000, (1 << 19)) #define limD(a) LIM((a), 0xffff, 0x0000, (1 << 31) | (1 << 18)) static inline u32 limE(u32 result) { @@ -641,24 +641,25 @@ void gteOP() { } void gteDCPL() { - int shift = 12 * GTE_SF(gteop); int lm = GTE_LM(gteop); - s64 iR = (gteR << 4) * gteIR1; - s64 iG = (gteG << 4) * gteIR2; - s64 iB = (gteB << 4) * gteIR3; + + s64 RIR1 = ((s64)gteR * gteIR1) >> 8; + s64 GIR2 = ((s64)gteG * gteIR2) >> 8; + s64 BIR3 = ((s64)gteB * gteIR3) >> 8; #ifdef GTE_LOG GTE_LOG("DCPL\n"); #endif gteFLAG = 0; - gteMAC1 = A1(iR + gteIR0 * limB1(gteRFC - iR, 0)) >> shift; - gteMAC2 = A2(iG + gteIR0 * limB1(gteGFC - iG, 0)) >> shift; - gteMAC3 = A3(iB + gteIR0 * limB1(gteBFC - iB, 0)) >> shift; + gteMAC1 = A1(RIR1 + ((gteIR0 * limB1(gteRFC - RIR1, 0)) >> 12)); + gteMAC2 = A2(GIR2 + ((gteIR0 * limB1(gteGFC - GIR2, 0)) >> 12)); + gteMAC3 = A3(BIR3 + ((gteIR0 * limB1(gteBFC - BIR3, 0)) >> 12)); + + gteIR1 = limB1(gteMAC1, lm); + gteIR2 = limB2(gteMAC2, lm); + gteIR3 = limB3(gteMAC3, lm); - gteIR1 = limB1(gteMAC1 >> 4, lm); - gteIR2 = limB2(gteMAC2 >> 4, lm); - gteIR3 = limB3(gteMAC3 >> 4, lm); gteRGB0 = gteRGB1; gteRGB1 = gteRGB2; gteCODE2 = gteCODE; diff --git a/libpcsxcore/psxmem.c b/libpcsxcore/psxmem.c index 2ab5615d..0b276bfc 100644 --- a/libpcsxcore/psxmem.c +++ b/libpcsxcore/psxmem.c @@ -62,7 +62,7 @@ int psxMemInit() { psxP = &psxM[0x200000]; psxH = &psxM[0x210000]; - psxR = (char *)malloc(0x00080000); + psxR = (s8 *)malloc(0x00080000); if (psxMemRLUT == NULL || psxMemWLUT == NULL || psxM == NULL || psxP == NULL || psxH == NULL) { @@ -295,7 +295,7 @@ void psxMemWrite32(u32 mem, u32 value) { memset(psxMemWLUT + 0x8000, 0, 0x80 * sizeof(void *)); memset(psxMemWLUT + 0xa000, 0, 0x80 * sizeof(void *)); break; - case 0x1e988: + case 0x00: case 0x1e988: if (writeok == 1) break; writeok = 1; for (i = 0; i < 0x80; i++) psxMemWLUT[i + 0x0000] = (void *)&psxM[(i & 0x1f) << 16]; diff --git a/plugins/dfsound/freeze.c b/plugins/dfsound/freeze.c index 37045b81..f38cfc6e 100644 --- a/plugins/dfsound/freeze.c +++ b/plugins/dfsound/freeze.c @@ -169,6 +169,8 @@ void LoadStateV5(SPUFreeze_t * pF) s_chan[i].iMute=0;
s_chan[i].iIrqDone=0;
}
+
+ spuAddr = 0xffffffff;
}
////////////////////////////////////////////////////////////////////////
|
