# HG changeset patch # User Michael Pavone # Date 1472617653 25200 # Node ID 9a3b9d86dabf8118ee1eaae67700f7efbe3555db # Parent 506b531cf570efee22ec5fcf92d15acb0820b4e4 Implement push and pop diff -r 506b531cf570 -r 9a3b9d86dabf src/cpu.c --- 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;