Mercurial > repos > simple16
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;