return (super ? 4 : 0) | (data ? 1 : 2);
}
-void mmu_bus_error(uaecptr addr, int fc, bool write, int size, bool rmw, uae_u32 status)
+void mmu_bus_error(uaecptr addr, int fc, bool write, int size, bool rmw, uae_u32 status, bool nonmmu)
{
if (currprefs.mmu_model == 68040) {
uae_u16 ssw = 0;
#endif
}
- ssw |= MMU_SSW_ATC;
+ if (!nonmmu)
+ ssw |= MMU_SSW_ATC;
regs.mmu_ssw = ssw;
#if MMUDEBUG > 0
status |= MMU_FSLW_TTR;
}
regs.wb3_data = val;
- mmu_bus_error(addr, mmu_get_fc (super, data), true, size, false, status);
+ mmu_bus_error(addr, mmu_get_fc (super, data), true, size, false, status, false);
}
#if MMUDEBUG > 2
write_log(_T("[MMU] mmu_translate error"));
#endif
- mmu_bus_error(addr, mmu_get_fc(super, data), write, 0, false, status);
+ mmu_bus_error(addr, mmu_get_fc(super, data), write, 0, false, status, false);
return 0;
}
{
uae_u32 status;
if (!mmu_fill_atc_try(addr, super, data, 0, cl, &status)) {
- mmu_bus_error(addr, mmu_get_fc(super, data), 0, size, rmw, status);
+ mmu_bus_error(addr, mmu_get_fc(super, data), 0, size, rmw, status, false);
return 0;
}
return x_phys_get_byte(mmu_get_real_address(addr, cl));
{
uae_u32 status;
if (!mmu_fill_atc_try(addr, super, data, 0, cl, &status)) {
- mmu_bus_error(addr, mmu_get_fc(super, data), 0, size, rmw, status);
+ mmu_bus_error(addr, mmu_get_fc(super, data), 0, size, rmw, status, false);
return 0;
}
return x_phys_get_word(mmu_get_real_address(addr, cl));
{
uae_u32 status;
if (!mmu_fill_atc_try(addr, super, false, 0, cl, &status)) {
- mmu_bus_error(addr, mmu_get_fc(super, false), 0, size, false, status);
+ mmu_bus_error(addr, mmu_get_fc(super, false), 0, size, false, status, false);
return 0;
}
return x_phys_get_iword(mmu_get_real_address(addr, cl));
{
uae_u32 status;
if (!mmu_fill_atc_try(addr, super, data, 0, cl, &status)) {
- mmu_bus_error(addr, mmu_get_fc(super, data), 0, size, rmw, status);
+ mmu_bus_error(addr, mmu_get_fc(super, data), 0, size, rmw, status, false);
return 0;
}
return x_phys_get_long(mmu_get_real_address(addr, cl));
{
uae_u32 status;
if (!mmu_fill_atc_try(addr, super, false, 0, cl, &status)) {
- mmu_bus_error(addr, mmu_get_fc(super, false), 0, size, false, status);
+ mmu_bus_error(addr, mmu_get_fc(super, false), 0, size, false, status, false);
return 0;
}
return x_phys_get_ilong(mmu_get_real_address(addr, cl));
uae_u32 status;
if (!mmu_fill_atc_try(addr, super, data, 1, cl, &status)) {
regs.wb3_data = val;
- mmu_bus_error(addr, mmu_get_fc(super, data), 1, size, rmw, status);
+ mmu_bus_error(addr, mmu_get_fc(super, data), 1, size, rmw, status, false);
return;
}
x_phys_put_byte(mmu_get_real_address(addr, cl), val);
uae_u32 status;
if (!mmu_fill_atc_try(addr, super, data, 1, cl, &status)) {
regs.wb3_data = val;
- mmu_bus_error(addr, mmu_get_fc(super, data), 1, size, rmw, status);
+ mmu_bus_error(addr, mmu_get_fc(super, data), 1, size, rmw, status, false);
return;
}
x_phys_put_word(mmu_get_real_address(addr, cl), val);
uae_u32 status;
if (!mmu_fill_atc_try(addr, super, data, 1, cl, &status)) {
regs.wb3_data = val;
- mmu_bus_error(addr, mmu_get_fc(super, data), 1, size, rmw, status);
+ mmu_bus_error(addr, mmu_get_fc(super, data), 1, size, rmw, status, false);
return;
}
x_phys_put_long(mmu_get_real_address(addr, cl), val);