Compare commits

..

6 Commits

View File

@ -156,18 +156,16 @@ class VM:
addr = self.pc.value * 4
main_part = struct.unpack(">BBBb", self.mem[addr:addr+4])
if OpF.UNEXPANDED in opdesc.flags or OpF.QUICK in opdesc.flags:
return main_part
upper_part = struct.unpack(">i", self.mem[addr+4:addr+8])
return (*main_part, *upper_part)
if not OpF.UNEXPANDED in opdesc.flags or OpF.QUICK in opdesc.flags:
upper_part = struct.unpack(">i", self.mem[addr+4:addr+8])
return (*main_part, *upper_part)
return main_part
def _run_callback(
self,
opdesc: OpcodeDescription,
args: tuple[int, ...]
) -> None:
if not (OpF.QUICK in opdesc.flags or OpF.UNEXPANDED in opdesc.flags):
self._vm_flags |= VMFlags.EXPANDED_INSTR
if opdesc.layout == OpL.MATH:
assert len(args) == 4
_, r3, r1, r2_or_i8 = args
@ -182,13 +180,13 @@ class VM:
assert len(args) == 4
_, r3, r1, i8 = args
self.instr_callbacks[opdesc](
r3, r1, i8
self, r3, r1, i8
)
else:
assert len(args) == 5
_, r3, r1, _, disp = args
self.instr_callbacks[opdesc](
r3, r1, disp
self, r3, r1, disp
)
if opdesc.layout == OpL.BRANCH: