if (ismoves) {
// MOVES special behavior
- int fc2 = write ? regs.dfc : regs.sfc;
- if (fc2 == 0 || fc2 == 3 || fc2 == 4 || fc2 == 7)
+ int old_fc = fc = write ? regs.dfc : regs.sfc;
+ if ((fc & 3) == 0 || (fc & 3) == 3) {
ssw |= MMU_SSW_TT1;
- if ((fc2 & 3) != 3)
- fc2 &= ~2;
+ } else if (fc & 2) {
+ fc = (fc & 4) | 1;
+ }
#if MMUDEBUGMISC > 0
- write_log (_T("040 MMU MOVES fc=%d -> %d\n"), fc, fc2);
+ write_log (_T("040 MMU MOVES fc=%d -> %d\n"), old_fc, fc);
#endif
- fc = fc2;
}
ssw |= fc & MMU_SSW_TM; /* TM = FC */
}
+ ismoves = false;
rmw_cycle = false;
locked_rmw_cycle = false;
regs.mmu_fault_addr = addr;
int i;
int old_s;
- // Always use supervisor mode to access descriptors
+ // Use supervisor mode to access descriptors (really is fc = 7)
old_s = regs.s;
regs.s = 1;