diff options
| -rw-r--r-- | libpcsxcore/gte.c | 69 |
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; |
