X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;ds=sidebyside;f=int%2Finterpret.c;h=bf437ae3add492154cd6aafe3beff0240ed28726;hb=1383ec4c1733cc6f07fe68e0619446d60fe5277e;hp=4c60bc90e52511b9e3a51d922fe86ff7edbbffe4;hpb=93cabbcd5d18b7b45d6f43a6ff39f94cfcb95522;p=mTask.git diff --git a/int/interpret.c b/int/interpret.c index 4c60bc9..bf437ae 100644 --- a/int/interpret.c +++ b/int/interpret.c @@ -20,9 +20,13 @@ void run_task(struct task *t, int fd) printf("stack: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n", stack[0], stack[1], stack[2], stack[3], stack[4], stack[5], stack[6], stack[7], stack[8], stack[9]); + 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 +34,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 +95,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 +126,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");