From df333a45edbccd632bb5d42993b1a0ef1b8fbd89 Mon Sep 17 00:00:00 2001 From: "SND\\shalma_cp" Date: Fri, 5 Nov 2010 01:21:22 +0000 Subject: gte.c - add some extra MAME changes (MTC2) - experimental: not in use git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@59188 e17a0e51-4ae3-4d35-97c3-1a29b211df97 --- libpcsxcore/gte.c | 69 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 20 deletions(-) (limited to 'libpcsxcore') diff --git a/libpcsxcore/gte.c b/libpcsxcore/gte.c index b5acadab..3959294b 100644 --- a/libpcsxcore/gte.c +++ b/libpcsxcore/gte.c @@ -267,29 +267,58 @@ static inline void MTC2(u32 value, int reg) { case 30: { - int a; - gteLZCS = value; - - a = gteLZCS; - if (a > 0) { - int i; - for (i = 31; (a & (1 << i)) == 0 && i >= 0; i--); - gteLZCR = 31 - i; - } else if (a < 0) { - int i; - a ^= 0xffffffff; - for (i = 31; (a & (1 << i)) == 0 && i >= 0; i--); - gteLZCR = 31 - i; - } else { - gteLZCR = 32; - } +#if 1 + int a; + gteLZCS = value; + + // non-MAME code + a = gteLZCS; + if (a > 0) { + int i; + for (i = 31; (a & (1 << i)) == 0 && i >= 0; i--); + gteLZCR = 31 - i; + } else if (a < 0) { + int i; + a ^= 0xffffffff; + for (i = 31; (a & (1 << i)) == 0 && i >= 0; i--); + gteLZCR = 31 - i; + } else { + gteLZCR = 32; + } +#else + // MAME + u32 lzcs = value; + u32 lzcr = 0; + + gteLZCS = value; + + if( ( lzcs & 0x80000000 ) == 0 ) + { + lzcs = ~lzcs; + } + while( ( lzcs & 0x80000000 ) != 0 ) + { + lzcr++; + lzcs <<= 1; + } + gteLZCR = lzcr; +#endif } break; - case 7: - case 29: - case 31: - return; +#if 1 + // non-MAME + case 7: + case 29: + return; + + case 31: + return; +#else + case 31: + value = psxRegs.CP2D.r[reg]; + break; +#endif default: psxRegs.CP2D.r[reg] = value; -- cgit v1.2.3