Compare commits
6 Commits
aaa0a95657
...
3dd281a424
| Author | SHA1 | Date | |
|---|---|---|---|
| 3dd281a424 | |||
| 24e8c90e34 | |||
| 5c47baa26f | |||
| 2a768064d3 | |||
| f2a85cf037 | |||
| 2ba51d841d |
14
src/vm.py
14
src/vm.py
@ -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:
|
||||
|
||||
Reference in New Issue
Block a user