X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=int%2Finterpret.c;h=39c24b0e58e8684b1f0816f1a5315031b4146b72;hb=f90517d738696125a067f113edf93f404873115b;hp=e1245894cb27a1b58015d17ef017ca2d4513713b;hpb=fb5465ae10e39a9505634e0aaf8e1cab9710f5d7;p=mTask.git diff --git a/int/interpret.c b/int/interpret.c index e124589..39c24b0 100644 --- a/int/interpret.c +++ b/int/interpret.c @@ -7,13 +7,15 @@ #include "task.h" #include "sds.h" -#ifdef STM32F767xx -#define trace(op, ...) ; +#ifdef STM +#define trace(op, ...) {}; #else -#define trace(op, ...) ; -//printf("pc: %d, sp: %d, op: " op "\n", pc, sp, ##__VA_ARGS__); +#define trace(op, ...) {}; +//#define trace(op, ...) printf("pc: %d, sp: %d, op: " op "\n", pc, sp, ##__VA_ARGS__); #endif +#define f16(p) program[pc]*265+program[pc+1] + void run_task(struct task *t) { uint8_t *program = t->bc; @@ -22,11 +24,11 @@ void run_task(struct task *t) int sp = 0; char stack[STACKSIZE] = {0}; debug("Running task with length: %d", plen); - while(pc != plen){ - debug("program: %d", program[pc]); - debug("stack: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x", - stack[0], stack[1], stack[2], stack[3], stack[4], - stack[5], stack[6], stack[7], stack[8], stack[9]); + while(pc < plen){ +// debug("program: %d", program[pc]); +// debug("stack: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x", +// 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"); @@ -35,20 +37,23 @@ void run_task(struct task *t) pc++; break; case BCPUSH: trace("push %d", program[pc]*265+program[pc+1]); - stack[sp++] = program[pc]*265 + program[pc+1]; + stack[sp++] = f16(pc); pc+=2; break; case BCPOP: trace("pop"); sp--; break; - case BCSDSSTORE: trace("sds store: %d", program[pc]); - sds_store(program[pc++], stack[--sp]); + case BCSDSSTORE: trace("sds store: %d", f16(pc)); + sds_store(f16(pc), stack[--sp]); + pc+=2; break; - case BCSDSFETCH: trace("sds fetch: %d", program[pc]); - stack[sp++] = sds_fetch(program[pc++]); + case BCSDSFETCH: trace("sds fetch: %d", f16(pc)); + stack[sp++] = sds_fetch(f16(pc)); + pc+=2; break; - case BCSDSPUBLISH: trace("sds publish %d", program[pc]); - sds_publish(program[pc++]); + case BCSDSPUBLISH: trace("sds publish %d", f16(pc)); + sds_publish(f16(pc)); + pc+=2; break; case BCNOT: trace("not"); stack[sp] = stack[sp] > 0 ? 0 : 1; @@ -107,7 +112,7 @@ void run_task(struct task *t) case BCJMPT: trace("jmpt to %d", program[pc]); pc = stack[--sp] ? program[pc]-1 : pc+1; break; - case BCJMPF: trace("jmpf to %d", program[pc]); + case BCJMPF: trace("jmpf(%d) to %d", stack[sp-1], program[pc]); pc = stack[--sp] ? pc+1 : program[pc]-1; break; case BCSERIALAVAIL: trace("SerialAvailable()"); @@ -134,6 +139,12 @@ void run_task(struct task *t) write_dpin(program[pc++], stack[sp-1]); sp--; break; + case BCLEDON: trace("LedOn(%d)", program[pc]); + led_on(program[pc++]); + break; + case BCLEDOFF: trace("LedOn(%d)", program[pc]); + led_off(program[pc++]); + break; default: trace("unrecognized"); die("Unrecognized command: %d", program[pc-1]);