aboutsummaryrefslogtreecommitdiff
path: root/src/orgaemu.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/orgaemu.c')
-rw-r--r--src/orgaemu.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/orgaemu.c b/src/orgaemu.c
index 74fd41f..38bd412 100644
--- a/src/orgaemu.c
+++ b/src/orgaemu.c
@@ -95,6 +95,14 @@ exec_op(uint16_t *mem, long pc)
push(b);
return pc + 1;
}
+ case OP_ROT: {
+ const uint16_t a = pop();
+ const uint16_t b = pop();
+ const uint16_t c = pop();
+ push(b);
+ push(a);
+ push(c);
+ } return pc + 1;
case OP_DUP: {
const uint16_t a = pop();
push(a);
@@ -145,6 +153,12 @@ exec_op(uint16_t *mem, long pc)
case OP_DEC:
push(pop() - 1);
return pc + 1;
+ case OP_DBG:
+ fprintf(stderr, "<%ld> ", stack_ptr);
+ for (size_t i = 0; i < stack_ptr; i++)
+ fprintf(stderr, "%d ", stack[i]);
+ fputc('\n', stderr);
+ return pc + 1;
default:
fprintf(stderr, "unhandled opcode %04x\n", mem[pc]);
if (mem[pc] <= OP_SLP)