changeset 48:9a3b9d86dabf

Implement push and pop
author Michael Pavone <pavone@retrodev.com>
date Tue, 30 Aug 2016 21:27:33 -0700
parents 506b531cf570
children 5f30c4d18d79
files src/cpu.c
diffstat 1 files changed, 7 insertions(+), 1 deletions(-) [+]
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;