#ifndef VM_H #define VM_H #include "vmas.h" #include 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