aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2012-04-26 19:59:23 +0000
committerDimitri Sokolyuk <demon@dim13.org>2012-04-26 19:59:23 +0000
commit568ad662bc06477e25dd3f91e50829b8340a7312 (patch)
tree70f1d104037391b87bbf82f7aba980f63af10231
parentb4b1b3584a095a27d6cf397f7f013ac9a06fe6df (diff)
fix push/pop
-rw-r--r--emu.c12
1 files 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) : &reg[Aux];
- a = fetcharg((c >> 10) & 0x3f, 1);
+ b = o ? fetcharg(reg[Aux], 1) : &reg[Aux];
+ a = fetcharg((c >> 10) & 0x3f, 0);
if (skip) {
skip = 0;