#ifndef VM_H #define VM_H #include #include "vmas.h" enum regs { R0, R1, R2, R3, S0, S1, S2, S3, IP, BP, SP }; enum ins { MOVI, MOVR, MOVM, ADDI, ADDR, ADDM, SUBI, SUBR, SUBM, XORI, XORR, XORM, NOTI, NOTR, NOTM, MULI, MULR, MULM, DIVI, DIVR, DIVM, PUSH, POOP, CALL, HALT, NOPE }; class VM { uint16_t regs[0xb]; struct flags { uint8_t zf : 1; uint8_t cf : 1; }; VMAddrSpace as; public: VM(); VM(uint8_t *code, uint32_t codesize); void init_regs(void); void status(void); void run(uint8_t *code); }; #endif