From 568ad662bc06477e25dd3f91e50829b8340a7312 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 26 Apr 2012 19:59:23 +0000 Subject: fix push/pop --- emu.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/emu.c b/emu.c index c482383..b4e1e32 100644 --- a/emu.c +++ b/emu.c @@ -429,7 +429,7 @@ void (*op[nOpt])(unsigned short *a, unsigned short *b) = { }; unsigned short * -fetcharg(int a, int first) +fetcharg(int a, int barg) { switch (a) { case 0x00: @@ -465,10 +465,10 @@ fetcharg(int a, int first) return &mem[mem[reg[PC]++] + reg[a - 0x10]]; case 0x18: /* TODO push or pop */ - if (first) - return &mem[reg[SP]++]; /* push */ + if (barg) + return &mem[--reg[SP]]; /* push */ else - return &mem[--reg[SP]]; /* pop */ + return &mem[reg[SP]++]; /* pop */ case 0x19: /* peek */ return &mem[reg[SP]]; @@ -518,8 +518,8 @@ step(unsigned short *m, unsigned short *r) /* don't fetch first arg for extended opcodes */ reg[Aux] = (c >> 5) & 0x1f; - b = o ? fetcharg(reg[Aux], 0) : ®[Aux]; - a = fetcharg((c >> 10) & 0x3f, 1); + b = o ? fetcharg(reg[Aux], 1) : ®[Aux]; + a = fetcharg((c >> 10) & 0x3f, 0); if (skip) { skip = 0; -- cgit v1.2.3