#include "debug.h" #include "vm.h" /* #define MEMORY_SIZE 65536 /\* 64KB memory (adjustable) *\/ */ #define MEMORY_SIZE 1024 void run_vm(Data *memory, uint32_t memory_size) { uint32_t pc = 1; /* Program counter */ while (pc) { pc = step_vm(memory, memory_size, pc); } } int main() { Data memory[MEMORY_SIZE] = {0}; /* Memory array */ int i = 1; memory[0].c[0] = 'z'; memory[0].c[1] = 'r'; memory[0].c[2] = 'e'; memory[0].c[3] = '0'; memory[i++].u = OP_ADD_REAL; memory[i++].u = 102; memory[i++].u = 103; memory[i++].u = 103; memory[i++].u = OP_SUB; memory[i++].u = 100; memory[i++].u = 101; memory[i++].u = 100; memory[i++].u = OP_JGT_INT; memory[i++].u = 100; memory[i++].u = 99; memory[i++].u = 1; memory[i++].u = OP_REAL_TO_INT; memory[i++].u = 103; memory[i++].u = 1; memory[i++].u = 103; memory[i++].u = OP_INT_TO_STRING; memory[i++].u = 103; memory[i++].u = 1; memory[i++].u = 104; memory[i++].u = OP_PRINT_STRING; memory[i++].u = 105; memory[i++].u = 1; memory[i++].u = 1; memory[i++].u = OP_READ_STRING; memory[i++].u = 1; memory[i++].u = 1; memory[i++].u = 109; memory[i++].u = OP_PRINT_STRING; memory[i++].u = 110; memory[i++].u = 1; memory[i++].u = 1; memory[i++].u = OP_HALT; memory[i++].u = 0; memory[i++].u = 0; memory[i++].u = 0; memory[99].u = 0; memory[100].u = 5; memory[101].u = 1; memory[102].f = 5.f; memory[103].f = 5.f; run_vm(memory, MEMORY_SIZE); return core_dump(memory, MEMORY_SIZE); }