}
}
-static uae_u8 *validate_exception(struct registers *regs, uae_u8 *p, int excnum, int *gotexcnum, int *experr)
+static uae_u8 *validate_exception(struct registers *regs, uae_u8 *p, int excnum, int *gotexcnum, int *experr, int *extratrace)
{
int exclen = 0;
uae_u8 *exc;
outbp += strlen(outbp);
*experr = 1;
}
+ *extratrace = 1;
} else {
// Standalone Trace
uae_u16 vsr = (p[0] << 8) | (p[1]);
}
#endif
-static int check_cycles(int exc)
+static int check_cycles(int exc, int extratrace)
{
int gotcycles = 0;
}
int expectedcycles = last_registers.cycles;
+ int exceptioncycles = getexceptioncycles(exc);
if (cpu_lvl == 0) {
// move.w CYCLEREG,cycles
gotcycles -= 20;
gotcycles -= 20;
// <test instruction>
// EXCEPTION
- expectedcycles += getexceptioncycles(exc);
+ expectedcycles += exceptioncycles;
// bsr.b
gotcycles -= 18;
// move.w sr,-(sp)
gotcycles -= 24;
// <test instruction>
// ILLEGAL
- expectedcycles += getexceptioncycles(exc);
+ expectedcycles += exceptioncycles;
// bsr.b
gotcycles -= 18;
// move.w sr,-(sp)
}
gotcycles += cycles_adjust;
+ if (extratrace) {
+ expectedcycles += getexceptioncycles(9);
+ }
+
if (0 || abs(gotcycles - expectedcycles) > cycles_range) {
addinfo();
sprintf(outbp, "Got %ld cycles but expected %ld cycles (%08x %08x)\n", gotcycles, expectedcycles, test_regs.cycles, test_regs.cycles2);
int experr = 0;
int errflag = 0;
int errflag_orig = 0;
+ int extratrace = 0;
uae_u8 *outbp_old = outbp;
exception_stored = 0;
}
if (ignore_errors) {
if (exc) {
- p = validate_exception(&test_regs, p, exc, &cpuexc, &experr);
+ p = validate_exception(&test_regs, p, exc, &cpuexc, &experr, &extratrace);
}
errflag_orig = errflag;
errflag = 0;
break;
}
if (exc) {
- p = validate_exception(&test_regs, p, exc, &cpuexc, &experr);
+ p = validate_exception(&test_regs, p, exc, &cpuexc, &experr, &extratrace);
if (experr) {
errflag |= 1 << 16;
}