68 lines
1.5 KiB
C
68 lines
1.5 KiB
C
#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);
|
|
}
|