fix if statements and sds publishing
[mTask.git] / int / interpret.c
index 4c60bc9..6875097 100644 (file)
@@ -23,6 +23,9 @@ void run_task(struct task *t, int fd)
                switch(program[pc++]){
                case BCNOP: trace("nop\n");
                        break;
+               case BCLAB: trace("label: 0x%02x!!!!!!\n", program[pc]);
+                       pc++;
+                       break;
                case BCPUSH: trace("push %d\n", program[pc]*265+program[pc+1]);
                        stack[sp++] = program[pc]*265 + program[pc+1];
                        pc+=2;
@@ -30,13 +33,13 @@ void run_task(struct task *t, int fd)
                case BCPOP: trace("pop\n");
                        sp--;
                        break;
-               case BCSDSSTORE: trace("sds store\n");
-                       sds_store(program[pc++], stack[sp-1]);
+               case BCSDSSTORE: trace("sds store: %d\n", program[pc]);
+                       sds_store(program[pc++], stack[--sp]);
                        break;
-               case BCSDSFETCH: trace("sds fetch\n");
+               case BCSDSFETCH: trace("sds fetch: %d\n", program[pc]);
                        stack[sp++] = sds_fetch(program[pc++]);
                        break;
-               case BCSDSPUBLISH: trace("sds publish\n");
+               case BCSDSPUBLISH: trace("sds publish %d\n", program[pc]);
                        sds_publish(program[pc++], fd);
                        break;
                case BCNOT: trace("not\n");
@@ -91,13 +94,13 @@ void run_task(struct task *t, int fd)
                        sp -= 1;
                        break;
                case BCJMP: trace("jmp to %d\n", program[pc]);
-                       pc = pc + program[pc];
+                       pc = program[pc]-1;
                        break;
                case BCJMPT: trace("jmpt to %d\n", program[pc]);
-                       pc += stack[sp] ? program[pc] : 1;
+                       pc = stack[--sp] ? program[pc]-1 : pc+1;
                        break;
                case BCJMPF: trace("jmpf to %d\n", program[pc]);
-                       pc += stack[sp] ? 1 : program[pc];
+                       pc = stack[--sp] ? pc+1 : program[pc]-1;
                        break;
                case BCSERIALAVAIL: trace("SerialAvailable()\n");
                        break;
@@ -122,7 +125,8 @@ void run_task(struct task *t, int fd)
                        pc++;
                        break;
                default:
-                       die("Unrecognized command: %d\n", program[--pc]);
+                       trace("unrecognized\n");
+                       die("Unrecognized command: %d\n", program[pc-1]);
                }
        }
        debug("Task terminated\n");