X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=int%2Finterpret.c;fp=int%2Finterpret.c;h=687509784947e25b8398d87b2142a7c9e15e624c;hb=955c4eb992b45e48a1a3dad6418236431ddcd095;hp=4c60bc90e52511b9e3a51d922fe86ff7edbbffe4;hpb=1c8014ff74afb966b891a4689d8ee3e512300746;p=mTask.git diff --git a/int/interpret.c b/int/interpret.c index 4c60bc9..6875097 100644 --- a/int/interpret.c +++ b/int/interpret.c @@ -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");