Compare commits

..

6 Commits

View File

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