gipu/cpp/vm.h
2017-05-17 19:31:27 +02:00

65 lines
1.2 KiB
C++

#ifndef VM_H
#define VM_H
#include "vmas.h"
#include <stdint.h>
enum regs { R0, R1, R2, R3, S0, S1, S2, S3, IP, BP, SP, NUM_REGS };
class VM {
private:
////////////////////////
// VARIABLES
////////////////////////
uint16_t regs[0xb];
struct flags {
uint8_t zf : 1;
uint8_t cf : 1;
};
VMAddrSpace as;
////////////////////////
// FUNCTIONS
///////////////////////
void initVariables(void);
void defineOpcodes(uint8_t *key);
/*
DBG UTILS
*/
uint8_t *getRegName(uint8_t);
/*
IMPLEMENTATIONS
*/
bool execMOVI(void);
bool execMOVR(void);
bool execMOVM(void);
bool execLOAD(void);
bool execSTOR(void);
bool execADDI(void);
bool execADDR(void);
bool execSUBI(void);
bool execSUBR(void);
bool execXORI(void);
bool execXORR(void);
bool execNOTR(void);
bool execMULI(void);
bool execMULR(void);
bool execDIVI(void);
bool execDIVR(void);
bool execPUSH(void);
bool execPOOP(void);
bool execCOMP(void);
bool execJUMP(void);
bool execJMPA(void);
bool execJMPB(void);
bool execJMPE(void);
bool execGERM(void);
public:
VM(uint8_t *key);
VM(uint8_t *key, uint8_t *code, uint32_t codesize);
void status(void);
void run();
};
#endif