summaryrefslogtreecommitdiff
path: root/emux64/src/cpu/cpu_cycle.c
diff options
context:
space:
mode:
Diffstat (limited to 'emux64/src/cpu/cpu_cycle.c')
-rw-r--r--emux64/src/cpu/cpu_cycle.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/emux64/src/cpu/cpu_cycle.c b/emux64/src/cpu/cpu_cycle.c
index b3a8987..663b300 100644
--- a/emux64/src/cpu/cpu_cycle.c
+++ b/emux64/src/cpu/cpu_cycle.c
@@ -207,6 +207,21 @@ cpu_do_add(struct osmx_core *core)
}
+static int
+cpu_do_sub(struct osmx_core *core)
+{
+ struct arithop ops;
+ int error;
+
+ error = cpu_arithop(core, &ops);
+ if (error < 0) {
+ return error;
+ }
+
+ core->xn[ops.dest_reg] = ops.op1 - ops.op2;
+ return 0;
+}
+
int
cpu_run(struct osmx_core *core)
{
@@ -240,6 +255,12 @@ cpu_run(struct osmx_core *core)
continue;
}
break;
+ case OP_SUB:
+ if (cpu_do_sub(core) < 0) {
+ core->run = false;
+ continue;
+ }
+ break;
case OP_NOP:
break;
default: