First alpha version. Added support for putting\getting from TOS int and double
This commit is contained in:
parent
8d09513639
commit
9d30a3f8f5
5 changed files with 109 additions and 0 deletions
12
VaninVM/IOcode.c
Normal file
12
VaninVM/IOcode.c
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
#include "IOcode.h"
|
||||||
|
|
||||||
|
char* read_bytecode(char* path)
|
||||||
|
{
|
||||||
|
FILE* input;
|
||||||
|
char* buffer = (char*)calloc(1, 1000); //Early version without bytecode file
|
||||||
|
fopen_s(&input, "bytecode", "rb");
|
||||||
|
fread_s(buffer, 1000, sizeof(char), 1000, input); //Early version without bytecode file
|
||||||
|
fclose(input);
|
||||||
|
|
||||||
|
return buffer;
|
||||||
|
}
|
8
VaninVM/IOcode.h
Normal file
8
VaninVM/IOcode.h
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#ifndef IOCODE_H
|
||||||
|
#define IOCODE_H
|
||||||
|
|
||||||
|
#include <malloc.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
char* read_bytecode(char*);
|
||||||
|
#endif
|
36
VaninVM/Main.c
Normal file
36
VaninVM/Main.c
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
#include "IOcode.h"
|
||||||
|
#include "TOS.h"
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
char* code;
|
||||||
|
int ip;
|
||||||
|
|
||||||
|
|
||||||
|
int exec_status = 1;
|
||||||
|
|
||||||
|
code = read_bytecode("bytecode");
|
||||||
|
initTOS();
|
||||||
|
|
||||||
|
ip = 0;
|
||||||
|
|
||||||
|
while (exec_status)
|
||||||
|
{
|
||||||
|
switch (code[ip])
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
push_double(12.1);
|
||||||
|
ip++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 78:
|
||||||
|
exec_status = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("%f", pop_double());
|
||||||
|
getchar();
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
35
VaninVM/TOS.c
Normal file
35
VaninVM/TOS.c
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#include <malloc.h>
|
||||||
|
#include "TOS.h"
|
||||||
|
|
||||||
|
void push_int(int num)
|
||||||
|
{
|
||||||
|
TOS[tp++] = num;
|
||||||
|
}
|
||||||
|
|
||||||
|
int pop_int()
|
||||||
|
{
|
||||||
|
int num = TOS[--tp];
|
||||||
|
return num;
|
||||||
|
}
|
||||||
|
|
||||||
|
void push_double(double num)
|
||||||
|
{
|
||||||
|
tos_num cont = { num };
|
||||||
|
push_int(cont.num_i[0]);
|
||||||
|
push_int(cont.num_i[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
double pop_double()
|
||||||
|
{
|
||||||
|
tos_num cont;
|
||||||
|
cont.num_i[1] = pop_int();
|
||||||
|
cont.num_i[0] = pop_int();
|
||||||
|
return cont.num_d;
|
||||||
|
}
|
||||||
|
|
||||||
|
int initTOS()
|
||||||
|
{
|
||||||
|
TOS = (int*)calloc(1, 1500);
|
||||||
|
tp = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
18
VaninVM/TOS.h
Normal file
18
VaninVM/TOS.h
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#ifndef TOS_H
|
||||||
|
#define TOS_H
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
double num_d;
|
||||||
|
int num_i[2];
|
||||||
|
} tos_num;
|
||||||
|
|
||||||
|
int* TOS;
|
||||||
|
int tp;
|
||||||
|
int initTOS();
|
||||||
|
void push_int(int);
|
||||||
|
void push_double(double);
|
||||||
|
int pop_int();
|
||||||
|
double pop_double();
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue