diff --git a/miggy-emu/src/main/java/miggy/cpu/genpoet/CoreGenerator.java b/miggy-emu/src/main/java/miggy/cpu/genpoet/CoreGenerator.java index 11db238..63d2bd2 100644 --- a/miggy-emu/src/main/java/miggy/cpu/genpoet/CoreGenerator.java +++ b/miggy-emu/src/main/java/miggy/cpu/genpoet/CoreGenerator.java @@ -2999,7 +2999,9 @@ public class CoreGenerator { private void op_reset_microcode() { addState("op_reset"); + check_privileged(); consume(130, 1, 0); + addFormattedMicroInsn("handle_reset()"); microprefetch(true, null); } diff --git a/miggy-emu/src/main/java/miggy/cpupoet/Core.java b/miggy-emu/src/main/java/miggy/cpupoet/Core.java index 1f68fbd..67e7a6f 100644 --- a/miggy-emu/src/main/java/miggy/cpupoet/Core.java +++ b/miggy-emu/src/main/java/miggy/cpupoet/Core.java @@ -5180,7 +5180,14 @@ public abstract class Core extends CoreALU { mpc = resume_prefetch; continue; case 336: /* op_reset */ + if ((sr & 0x2000) == 0) { + elapsed += 6; + tvn = 32; + mpc = trapill; + continue; + } elapsed += 126; + handle_reset(); mpc = resume_prefetch; continue; case 337: /* op_trap */ diff --git a/miggy-emu/src/test/java/miggy/cpupoet/InstructionTests.java b/miggy-emu/src/test/java/miggy/cpupoet/InstructionTests.java index 7c29402..1895834 100644 --- a/miggy-emu/src/test/java/miggy/cpupoet/InstructionTests.java +++ b/miggy-emu/src/test/java/miggy/cpupoet/InstructionTests.java @@ -125,6 +125,7 @@ public class InstructionTests extends TestCase { test.executeBinTest("CLR.l"); test.executeBinTest("TRAP"); test.executeBinTest("TRAPV"); + test.executeBinTest("RESET"); } public void testJMP() { diff --git a/miggy-emu/src/test/resources/miggy/cpupoet/RESET.json.bin b/miggy-emu/src/test/resources/miggy/cpupoet/RESET.json.bin new file mode 100644 index 0000000..83ba6de Binary files /dev/null and b/miggy-emu/src/test/resources/miggy/cpupoet/RESET.json.bin differ