-//WriteLog("\t\tOld OP: %08X -> ", op_pointer);
-//Temp, for testing...
-//No doubt, this type of check will break all kinds of stuff... !!! FIX !!!
-//And it does! !!! FIX !!!
-//Let's remove this "fix" since it screws up more than it fixes.
-/* if (op_pointer > ((p0 & 0x000007FFFF000000LL) >> 21))
- return;*/
-
-// NOTE: The link address only replaces bits 3-21 in the OLP, and this replaces
-// EVERYTHING. !!! FIX !!! [DONE]
-#warning "!!! Link address is not linked properly for all object types !!!"
-#warning "!!! Only BITMAP is properly handled !!!"
- op_pointer &= 0xFFC00007;
- op_pointer |= (p0 & 0x000007FFFF000000LL) >> 21;
-//WriteLog("New OP: %08X\n", op_pointer);
-//kludge: Seems that memory access is mirrored in the first 8MB of memory...
-if (op_pointer > 0x1FFFFF && op_pointer < 0x800000)
- op_pointer &= 0xFF1FFFFF; // Knock out bits 21-23
+
+ // OP bottom 3 bits are hardwired to zero. The link address
+ // reflects this, so we only need the top 19 bits of the address
+ // (which is why we only shift 21, and not 24).
+ op_pointer = (p0 & 0x000007FFFF000000LL) >> 21;
+
+ // KLUDGE: Seems that memory access is mirrored in the first 8MB of
+ // memory...
+ if (op_pointer > 0x1FFFFF && op_pointer < 0x800000)
+ op_pointer &= 0xFF1FFFFF; // Knock out bits 21-23