Compare commits

..

7 Commits

View File

@ -156,16 +156,18 @@ 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 not OpF.UNEXPANDED in opdesc.flags or OpF.QUICK in opdesc.flags: if 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
return (*main_part, *upper_part) upper_part = struct.unpack(">i", self.mem[addr+4:addr+8])
return main_part return (*main_part, *upper_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
@ -180,13 +182,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](
self, r3, r1, i8 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](
self, r3, r1, disp r3, r1, disp
) )
if opdesc.layout == OpL.BRANCH: if opdesc.layout == OpL.BRANCH: