static int feature_exception3_data = 0;
static int feature_exception3_instruction = 0;
static int feature_sr_mask = 0;
+static int feature_min_interrupt_mask = 0;
static int feature_loop_mode = 0;
static int feature_loop_mode_register = -1;
static int feature_full_extension_format = 0;
// Supervisor mode and A7 was modified: skip this test round.
if (s && regs.regs[15] != a7) {
// but not if RTE
- if (!is_superstack_use_required())
+ if (!is_superstack_use_required()) {
test_exception = -1;
+ break;
+ }
+ }
+
+ // skip test if SR interrupt mask got too low
+ if (regs.intmask < feature_min_interrupt_mask) {
+ test_exception = -1;
+ break;
}
if (!test_exception) {
ini_getval(ini, INISECTION, _T("feature_exception3_instruction"), &feature_exception3_instruction);
feature_sr_mask = 0;
ini_getval(ini, INISECTION, _T("feature_sr_mask"), &feature_sr_mask);
+ feature_min_interrupt_mask = 0;
+ ini_getval(ini, INISECTION, _T("feature_min_interrupt_mask"), &feature_min_interrupt_mask);
feature_loop_mode = 0;
ini_getval(ini, INISECTION, _T("feature_loop_mode"), &feature_loop_mode);
if (feature_loop_mode) {
; 1 = all zeros and all ones only (2 CCR loops, 32 FPU loops)
feature_flags_mode=1
+; SR min interrupt mask
+; Amiga: can be zero.
+; Atari ST: should be 3 or larger.
+; Skips all tests that would set lower interrupt mask.
+feature_min_interrupt_mask=0
+
; SR extra mask.
; 0x8000 = T1
; 0x4000 = T0 (68020-68040)