dmnt-cheat: multi-nybble opcodes, update libstrat

This commit is contained in:
Michael Scire 2019-03-05 00:53:45 -08:00
parent 7e93ca0977
commit 7d2dd628ba
3 changed files with 12 additions and 1 deletions

View file

@ -183,6 +183,9 @@ bool DmntCheatVm::DecodeNextOpcode(CheatVmOpcode *out) {
} }
opcode.opcode = (CheatVmOpcodeType)(((first_dword >> 28) & 0xF)); opcode.opcode = (CheatVmOpcodeType)(((first_dword >> 28) & 0xF));
if (opcode.opcode >= CheatVmOpcodeType_ExtendedWidth) {
opcode.opcode = (CheatVmOpcodeType)((((u32)opcode.opcode) << 4) | ((first_dword >> 24) & 0xF));
}
switch (opcode.opcode) { switch (opcode.opcode) {
case CheatVmOpcodeType_StoreStatic: case CheatVmOpcodeType_StoreStatic:
@ -294,6 +297,7 @@ bool DmntCheatVm::DecodeNextOpcode(CheatVmOpcode *out) {
} }
} }
break; break;
case CheatVmOpcodeType_ExtendedWidth:
default: default:
/* Unrecognized instruction cannot be decoded. */ /* Unrecognized instruction cannot be decoded. */
valid = false; valid = false;
@ -631,6 +635,9 @@ void DmntCheatVm::Execute(const CheatProcessMetadata *metadata) {
this->registers[cur_opcode.perform_math_reg.dst_reg_index] = res_val; this->registers[cur_opcode.perform_math_reg.dst_reg_index] = res_val;
} }
break; break;
default:
/* By default, we do a no-op. */
break;
} }
} }
} }

View file

@ -34,6 +34,10 @@ enum CheatVmOpcodeType : u32 {
/* These are not implemented by Gateway's VM. */ /* These are not implemented by Gateway's VM. */
CheatVmOpcodeType_PerformArithmeticRegister = 9, CheatVmOpcodeType_PerformArithmeticRegister = 9,
/* This is a meta entry, and not a real opcode. */
/* This is to facilitate multi-nybble instruction decoding in the future. */
CheatVmOpcodeType_ExtendedWidth = 12,
}; };
enum MemoryAccessType : u32 { enum MemoryAccessType : u32 {

@ -1 +1 @@
Subproject commit 9ce1dce4400461311a17712628febd99b25ff335 Subproject commit 82c67a62d69f04f656da495c696f264eea6fa63a