#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 *reg_name(uint8_t); /* IMPLEMENTATIONS */ bool exec_movi(void); bool exec_movr(void); bool exec_movm(void); bool exec_load(void); bool exec_stor(void); bool exec_addi(void); public: VM(uint8_t * key); VM(uint8_t * key, uint8_t *code, uint32_t codesize); void status(void); void run(); }; #endif