summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/t11/t11ops.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/cpu/t11/t11ops.c')
-rw-r--r--src/emu/cpu/t11/t11ops.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/emu/cpu/t11/t11ops.c b/src/emu/cpu/t11/t11ops.c
index 490d674846a..80af765ac1f 100644
--- a/src/emu/cpu/t11/t11ops.c
+++ b/src/emu/cpu/t11/t11ops.c
@@ -255,7 +255,7 @@ static void op_0000(void)
{
switch (t11.op & 0x3f)
{
- case 0x00: /* HALT */ t11_ICount = 0; break;
+ case 0x00: /* HALT */ halt(); break;
case 0x01: /* WAIT */ t11_ICount = 0; t11.wait_state = 1; break;
case 0x02: /* RTI */ t11_ICount -= 24; PC = POP(); PSW = POP(); change_pc(PC); t11_check_irqs(); break;
case 0x03: /* BPT */ t11_ICount -= 48; PUSH(PSW); PUSH(PC); PC = RWORD(0x0c); PSW = RWORD(0x0e); change_pc(PC); t11_check_irqs(); break;
@@ -266,6 +266,17 @@ static void op_0000(void)
}
}
+static void halt(void)
+{
+ t11_ICount -= 48;
+ PUSH(PSW);
+ PUSH(PC);
+ PC = RWORD(0x04);
+ PSW = RWORD(0x06);
+ change_pc(PC);
+ t11_check_irqs();
+}
+
static void illegal(void)
{
t11_ICount -= 48;
@@ -275,7 +286,17 @@ static void illegal(void)
PSW = RWORD(0x0a);
change_pc(PC);
t11_check_irqs();
-PC = 0;
+}
+
+static void mark(void)
+{
+ t11_ICount -= 36;
+
+ SP = SP + 2 * (t11.op & 0x3f);
+ PC = REGW(5);
+ REGW(5) = POP();
+
+ change_pc(PC);
}
static void jmp_rgd(void) { t11_ICount -= 15; { JMP(RGD); } }