diff src/cpu.c @ 48:9a3b9d86dabf

Implement push and pop
author Michael Pavone <pavone@retrodev.com>
date Tue, 30 Aug 2016 21:27:33 -0700
parents 51672bd41cdd
children bce01001a8c1
line wrap: on
line diff
--- a/src/cpu.c	Tue Aug 30 21:01:07 2016 -0700
+++ b/src/cpu.c	Tue Aug 30 21:27:33 2016 -0700
@@ -244,9 +244,15 @@
 		context->exception = dst;
 		return;
 	case PUSH:
+		context->regs[REG_SP] -= 2;
+		cpu_write_16(context, (context->regs[REG_SR] << 8 & 0x7F0000) | context->regs[REG_SP], context->regs[dst]);
 		break;
-	case POP:
+	case POP: {
+		uint16_t sp = context->regs[REG_SP];
+		context->regs[REG_SP] += 2;
+		context->regs[dst] = cpu_read_16(context, (context->regs[REG_SR] << 8 & 0x7F0000) | sp);
 		break;
+	}
 	case GETPCH:
 		context->regs[dst] = context->exception_pc_msb >> 8 | context->pc_msb >> 16;
 		break;