Work in progress
This commit is contained in:
16
vm.cpp
16
vm.cpp
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user