gipu/cpp/vm.h

53 lines
598 B
C
Raw Normal View History

2017-05-13 18:36:46 +01:00
#ifndef VM_H
#define VM_H
2017-05-14 13:06:17 +01:00
#include <stdint.h>
#include "vmas.h"
2017-05-13 18:36:46 +01:00
2017-05-14 13:06:17 +01:00
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
2017-05-13 18:36:46 +01:00
};
class VM {
2017-05-14 13:06:17 +01:00
uint16_t regs[0xb];
struct flags {
uint8_t zf : 1;
uint8_t cf : 1;
};
VMAddrSpace as;
2017-05-13 18:36:46 +01:00
2017-05-14 13:06:17 +01:00
public:
VM();
VM(uint8_t *code, uint32_t codesize);
void init_regs(void);
void status(void);
void run(uint8_t *code);
2017-05-13 18:36:46 +01:00
};
#endif