Work in progress

This commit is contained in:
2017-01-30 19:37:11 +01:00
parent 415688d5c5
commit 3eba81d2bd
13 changed files with 237 additions and 50 deletions

16
vm.cpp
View File

@@ -3,6 +3,8 @@
#include <stdlib.h>
#include "parser.h"
#include "error.h"
#include "constants.h"
#include <SDL.h> // For SDL_Delay
#define MAX_EXTERNAL_CALLS 256
#define MAX_DATA_STACK 256
@@ -116,30 +118,22 @@ static void load_rom() {
}
static void load_program(const char* filename) {
/* FILE *f = fopen(filename, "rb");
fseek(f, 0, SEEK_END);
long fsize = ftell(f);
fseek(f, 0, SEEK_SET);
fread(mem, fsize, 1, f);
fclose(f);*/
FILE *f = fopen(filename, "rb");
fseek(f, 0, SEEK_END);
long fsize = ftell(f);
fseek(f, 0, SEEK_SET); //same as rewind(f);
char *program = (char*)malloc(fsize + 1);
fread(program, fsize, 1, f);
fclose(f);
program[fsize] = 0;
//unsigned char* rawCode =
register_constants();
parser_parse(program, mem);
free(program);
if (error_raised()) {
error_print();
//getchar();
}
else {
printf("Compilation complete!\nProgram size: %d bytes\nMemory usage: %d bytes\n", parser_get_codesize(), parser_get_memory_usage());
@@ -240,7 +234,7 @@ const int vm_step() {
case OP_GEQ: stack_push(vm_datastack, stack_pop(vm_datastack) >= stack_pop(vm_datastack)); vm_cycles++; break;
case OP_IN: stack_push(vm_datastack, in_ports[vm_program[vm_pc++]]()); vm_cycles++; break;
case OP_OUT: out_ports[vm_program[vm_pc++]](stack_pop(vm_datastack)); vm_cycles++; break;
case OP_SLEEP: sleeping = true; vm_cycles++; break;
case OP_SLEEP: SDL_Delay(stack_pop(vm_datastack) * 1000); vm_cycles++; break;
}
return vm_cycles;
}