- If instruction generated privilege violation exception, extra test round is run in supervisor mode.
- Optionally can do any combination of T0, T1, S and M -bit SR register extra test rounds.
- Every opcode value is tested. Total number of tests per opcode depends on available addressing modes etc. It can be hundreds of thousands or even millions..
+- Optinnally can be used to fully validate address and bus errors. Bus error testing requires extra hardware/logic.
Test generation details:
- Single instruction test set will take long time to run on real 68000. Few minutes to much longer...
- Undefined flags (for example DIV and CHK or 68000/010 bus address error) are also verified. It probably would be good idea to optionally filter them out.
- FPU testing is not yet fully implemented.
+- TAS test will return wrong results if test RAM region is not fully TAS read-modify-write special memory access compatible.
Tester compatibility (integer instructions only):
-68000: Complete. Including bus and address error stack frame/register/CCR modification undocumented behavior. Cycle count support.
+68000: Complete. Including bus and address error stack frame/register/CCR modification undocumented behavior. Full cycle count support.
68010: Almost complete (same as 68000). Loop mode is also fully supported. NOTE: DIVS overflow undocumented N-flag is not fully correct.
68020: Almost complete (DIV undocumented behavior is not yet known)
68030: Same as 68020.
0xDFF006 is used for cycle counting = accuracy will be +-2 CPU cycles. 0xDFF006 behavior must be accurate.
Currently only supported hardware for cycle counting is 7MHz 68000/68010 PAL Amiga with real Fast RAM.
-Bus error cycle counting is not yet supported.
-
--
Not implemented or only partially implemented:
- Some instructions (for example TRAP) had wrong expected cycle count if instruction generated any non-trace exception and also trace exception.
- added -skipexcccr parameter. Skip CCR check if instruction generates bus, address, divide by zero or CHK exception.
- added -skipmem (ignore memory write mismatches) -skipreg (ignore register mismatched) -skipccr (ignored CCR mismatch) parameters.
+
+09.02.2020
+
+- All 68000 tests are 100% confirmed, including full cycle-count support.
+
+15.02.2020
+
+- 68000 Address error timing fix (CHK.W cycle count error)
+- 68000 MOVE to memory address error cycle order fixed.
+- 68000 re-verified (except bus errors)
Address/Bus Error:
- [memory access causing bus/address error]
-- 8 idle cycles
+- 8 idle cycles (+4 if bus error)
- write PC low word
- write SR
- write PC high word
start = 4;
if (nr == 7) // TRAPV
start = 0;
- else if (nr == 2 || nr == 3)
+ else if (nr == 3)
start = 8;
+ else if (nr == 2)
+ start = 12;
}
if (start)
} else {
switch (nr)
{
- case 2: cycles = 54; break; /* Bus error */
+ case 2: cycles = 58; break; /* Bus error */
case 3: cycles = 54; break; /* Address error */
case 4: cycles = 34; break; /* Illegal instruction */
case 5: cycles = 34; break; /* Division by zero */
} else {
switch (nr)
{
- case 2: cycles = 130; break; /* Bus error */
+ case 2: cycles = 134; break; /* Bus error */
case 3: cycles = 130; break; /* Address error */
case 4: cycles = 38; break; /* Illegal instruction */
case 5: cycles = 38; break; /* Division by zero */