forked from peperunas/pasticciotto
-
Notifications
You must be signed in to change notification settings - Fork 0
/
vm.h
87 lines (82 loc) · 1.75 KB
/
vm.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#ifndef VM_H
#define VM_H
#include "vmas.h"
#include <stdint.h>
enum regs { R0, R1, R2, R3, S0, S1, S2, S3, IP, RP, SP, NUM_REGS };
typedef struct flags {
uint8_t ZF : 1;
uint8_t CF : 1;
} flags_t;
class VM {
private:
////////////////////////
// FUNCTIONS
///////////////////////
void initVariables(void);
void encryptOpcodes(uint8_t *key);
bool dstRegCheck(uint8_t reg);
bool srcDstRegCheck(uint8_t dst, uint8_t src);
/*
DBG UTILS
*/
uint8_t *getRegName(uint8_t);
/*
IMPLEMENTATIONS
*/
bool execMOVI(void);
bool execMOVR(void);
bool execMOVM(void);
bool execLODI(void);
bool execLODR(void);
bool execSTRI(void);
bool execSTRR(void);
bool execADDI(void);
bool execADDR(void);
bool execSUBI(void);
bool execSUBR(void);
bool execANDB(void);
bool execANDW(void);
bool execANDR(void);
bool execYORB(void);
bool execYORW(void);
bool execYORR(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 execSHLI(void);
bool execSHLR(void);
bool execSHRI(void);
bool execSHRR(void);
bool execPUSH(void);
bool execPOOP(void);
bool execCMPB(void);
bool execCMPW(void);
bool execCMPR(void);
bool execJMPI(void);
bool execJMPR(void);
bool execJPAI(void);
bool execJPAR(void);
bool execJPBI(void);
bool execJPBR(void);
bool execJPEI(void);
bool execJPER(void);
bool execJPNI(void);
bool execJPNR(void);
bool execCALL(void);
bool execRETN(void);
bool execGRMN(void);
public:
VM(uint8_t *key);
VM(uint8_t *key, uint8_t *code, uint32_t codesize);
uint16_t regs[0xb];
flags_t flags;
VMAddrSpace as;
void status(void);
void run();
};
#endif