diff options
| author | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-11-05 01:21:22 +0000 |
|---|---|---|
| committer | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-11-05 01:21:22 +0000 |
| commit | df333a45edbccd632bb5d42993b1a0ef1b8fbd89 (patch) | |
| tree | b858b356f2e7363db16e496951afa3c8a45bd3cc | |
| parent | 2a4bcc1bd7faa3cda35e08f2b0efef60799b9465 (diff) | |
| download | pcsxr-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.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; |
