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;
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");
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;
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");