67 lines
1.2 KiB
C++
67 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 execXORB(void);
|
|
bool execXORW(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 execCMPI(void);
|
|
bool execCMPR(void);
|
|
bool execJUMP(void);
|
|
bool execJMPA(void);
|
|
bool execJMPB(void);
|
|
bool execJMPE(void);
|
|
bool execGRMN(void);
|
|
|
|
public:
|
|
VM(uint8_t *key);
|
|
VM(uint8_t *key, uint8_t *code, uint32_t codesize);
|
|
void status(void);
|
|
void run();
|
|
};
|
|
|
|
#endif |