X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=int%2Finterpret.c;fp=int%2Finterpret.c;h=0000000000000000000000000000000000000000;hb=6c8939998c64aafb8cdfa40e52a227bf72767648;hp=39c24b0e58e8684b1f0816f1a5315031b4146b72;hpb=56d27bb3b0dc3c4502c8447b75e4cd56ceecab03;p=mTask.git diff --git a/int/interpret.c b/int/interpret.c deleted file mode 100644 index 39c24b0..0000000 --- a/int/interpret.c +++ /dev/null @@ -1,154 +0,0 @@ -#include -#include - -#include "mTaskSymbols.h" -#include "interpret.h" -#include "interface.h" -#include "task.h" -#include "sds.h" - -#ifdef STM -#define trace(op, ...) {}; -#else -#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; - int plen = t->tlen; - int pc = 0; - 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]); - - switch(program[pc++]){ - case BCNOP: trace("nop"); - break; - case BCLAB: trace("label: 0x%02x!!!!!!", program[pc]); - pc++; - break; - case BCPUSH: trace("push %d", 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", f16(pc)); - sds_store(f16(pc), stack[--sp]); - pc+=2; - break; - case BCSDSFETCH: trace("sds fetch: %d", f16(pc)); - stack[sp++] = sds_fetch(f16(pc)); - pc+=2; - break; - 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; - break; - case BCADD: trace("add"); - stack[sp-2] = stack[sp-1] + stack[sp-2]; - sp -= 1; - break; - case BCSUB: trace("sub"); - stack[sp-2] = stack[sp-1] - stack[sp-2]; - sp -= 1; - break; - case BCMUL: trace("mul"); - stack[sp-2] = stack[sp-1] * stack[sp-2]; - sp -= 1; - break; - case BCDIV: trace("div"); - stack[sp-2] = stack[sp-1] / stack[sp-2]; - sp -= 1; - break; - case BCAND: trace("and"); - stack[sp-2] = stack[sp-1] && stack[sp-2]; - sp -= 1; - break; - case BCOR: trace("or"); - stack[sp-2] = stack[sp-1] || stack[sp-2]; - sp -= 1; - break; - case BCEQ: trace("eq"); - stack[sp-2] = stack[sp-1] == stack[sp-2]; - sp -= 1; - break; - case BCNEQ: trace("neq"); - stack[sp-2] = stack[sp-1] != stack[sp-2]; - sp -= 1; - break; - case BCLES: trace("les"); - stack[sp-2] = stack[sp-1] < stack[sp-2]; - sp -= 1; - break; - case BCGRE: trace("gre"); - stack[sp-2] = stack[sp-1] > stack[sp-2]; - sp -= 1; - break; - case BCLEQ: trace("leq"); - stack[sp-2] = stack[sp-1] <= stack[sp-2]; - sp -= 1; - break; - case BCGEQ: trace("geq"); - stack[sp-2] = stack[sp-1] >= stack[sp-2]; - sp -= 1; - break; - case BCJMP: trace("jmp to %d", program[pc]); - pc = program[pc]-1; - break; - case BCJMPT: trace("jmpt to %d", program[pc]); - pc = stack[--sp] ? program[pc]-1 : pc+1; - break; - 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()"); - break; - case BCSERIALPRINT: trace("SerialPrint()"); - break; - case BCSERIALPRINTLN: trace("SerialPrintln()"); - break; - case BCSERIALREAD: trace("SerialRead()"); - break; - case BCSERIALPARSEINT: trace("SerialParseInt()"); - break; - case BCANALOGREAD: trace("AnalogRead(%d)", program[pc]); - stack[sp++] = read_apin(program[pc++]); - break; - case BCANALOGWRITE: trace("AnalogWrite(%d)", program[pc]); - write_apin(program[pc++], stack[sp-1]); - sp--; - break; - case BCDIGITALREAD: trace("DigitalRead(%d)", program[pc]); - stack[sp++] = read_dpin(program[pc++]); - break; - case BCDIGITALWRITE: trace("DigitalWrite(%d)", program[pc]); - 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]); - } - } - debug("Task terminated"); -}