summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-11-05 01:21:22 +0000
committerSND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-11-05 01:21:22 +0000
commitdf333a45edbccd632bb5d42993b1a0ef1b8fbd89 (patch)
treeb858b356f2e7363db16e496951afa3c8a45bd3cc
parent2a4bcc1bd7faa3cda35e08f2b0efef60799b9465 (diff)
downloadpcsxr-df333a45edbccd632bb5d42993b1a0ef1b8fbd89.tar.gz
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
-rw-r--r--libpcsxcore/gte.c69
1 files changed, 49 insertions, 20 deletions
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;