Create funzioni check registri
This commit is contained in:
parent
b881b7f9a2
commit
7eb95ac130
26
vm/vm.cpp
26
vm/vm.cpp
@ -128,7 +128,24 @@ void VM::initVariables(void) {
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
bool VM::dstRegCheck(uint8_t reg) {
|
||||||
|
if (reg == IP || reg == SP || reg == RP) {
|
||||||
|
DBG_ERROR(("Invalid register!\n"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool VM::srcDstRegCheck(uint8_t dst, uint8_t src) {
|
||||||
|
if (dst == IP || dst == SP || dst == RP) {
|
||||||
|
DBG_ERROR(("Invalid register!\n"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (src == IP || src == SP || src == RP) {
|
||||||
|
DBG_ERROR(("Invalid register!\n"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
INSTRUCTIONS IMPLEMENTATIONS
|
INSTRUCTIONS IMPLEMENTATIONS
|
||||||
*/
|
*/
|
||||||
@ -142,10 +159,8 @@ bool VM::execMOVI(void) {
|
|||||||
dst = as.code[regs[IP] + 1];
|
dst = as.code[regs[IP] + 1];
|
||||||
imm = *((uint16_t *)&as.code[regs[IP] + 2]);
|
imm = *((uint16_t *)&as.code[regs[IP] + 2]);
|
||||||
DBG_INFO(("MOVI %s, 0x%x\n", getRegName(dst), imm));
|
DBG_INFO(("MOVI %s, 0x%x\n", getRegName(dst), imm));
|
||||||
if (dst == IP || dst == SP || dst == RP) {
|
if (!dstRegCheck(dst))
|
||||||
DBG_ERROR(("MOVI: Invalid register!\n"));
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
regs[dst] = imm;
|
regs[dst] = imm;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -160,7 +175,8 @@ bool VM::execMOVR(void) {
|
|||||||
dst = as.code[regs[IP] + 1] >> 4;
|
dst = as.code[regs[IP] + 1] >> 4;
|
||||||
src = as.code[regs[IP] + 1] & 0b00001111;
|
src = as.code[regs[IP] + 1] & 0b00001111;
|
||||||
DBG_INFO(("MOVR %s, %s\n", getRegName(dst), getRegName(src)));
|
DBG_INFO(("MOVR %s, %s\n", getRegName(dst), getRegName(src)));
|
||||||
if (dst == IP || src == IP || dst == SP || src == SP || dst == RP || src== RP) {
|
if (dst == IP || src == IP || dst == SP || src == SP || dst == RP ||
|
||||||
|
src == RP) {
|
||||||
DBG_ERROR(("MOVR: Invalid register!\n"));
|
DBG_ERROR(("MOVR: Invalid register!\n"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
3
vm/vm.h
3
vm/vm.h
@ -16,6 +16,9 @@ private:
|
|||||||
///////////////////////
|
///////////////////////
|
||||||
void initVariables(void);
|
void initVariables(void);
|
||||||
void encryptOpcodes(uint8_t *key);
|
void encryptOpcodes(uint8_t *key);
|
||||||
|
bool dstRegCheck(uint8_t reg);
|
||||||
|
bool srcDstRegCheck(uint8_t dst, uint8_t src);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
DBG UTILS
|
DBG UTILS
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user