Basic arithmetic and jump labels

This commit is contained in:
2019-11-17 21:02:35 +01:00
commit b84557b3e1
34 changed files with 1350 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
#pragma once
namespace Execute
{
struct Flags
{
};
}

View File

@@ -0,0 +1,19 @@
#pragma once
namespace Execute
{
struct Registers
{
union
{
struct
{
int A;
int B;
int C;
int D;
};
int registers[4];
};
};
}

16
include/execute/state.hpp Normal file
View File

@@ -0,0 +1,16 @@
#pragma once
#include <string>
#include <unordered_map>
namespace Execute
{
struct State
{
unsigned currentStatement;
unsigned nextStatement;
std::unordered_map<std::string, unsigned> const & labelStatementIndice;
State(std::unordered_map<std::string, unsigned> const & labelStatementIndice);
};
}

View File

@@ -0,0 +1,33 @@
#include <execute/flags.hpp>
#include <execute/registers.hpp>
#include <execute/state.hpp>
#include <interpret/code.hpp>
namespace Execute
{
class VirtualMachine
{
private:
Flags flags;
Registers registers;
State state;
bool terminated;
Interpret::Code const & code;
void Step();
public:
void Run();
void SingleStep();
Flags const & GetFlags() const;
Registers const & GetRegisters() const;
State const & GetState() const;
Interpret::Statement const * const GetCurrentStatement() const;
bool IsTerminated() const;
VirtualMachine(Interpret::Code const & code);
};
}