Compare commits
7 Commits
3dd281a424
...
aaa0a95657
| Author | SHA1 | Date | |
|---|---|---|---|
| aaa0a95657 | |||
| becdd26311 | |||
| f543952637 | |||
| 9c4b80bf68 | |||
| 33b56fec71 | |||
| 304a28c1b2 | |||
| 76cf62d6c4 |
14
src/vm.py
14
src/vm.py
@ -156,16 +156,18 @@ class VM:
|
||||
addr = self.pc.value * 4
|
||||
main_part = struct.unpack(">BBBb", self.mem[addr:addr+4])
|
||||
|
||||
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
|
||||
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)
|
||||
|
||||
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
|
||||
@ -180,13 +182,13 @@ class VM:
|
||||
assert len(args) == 4
|
||||
_, r3, r1, i8 = args
|
||||
self.instr_callbacks[opdesc](
|
||||
self, r3, r1, i8
|
||||
r3, r1, i8
|
||||
)
|
||||
else:
|
||||
assert len(args) == 5
|
||||
_, r3, r1, _, disp = args
|
||||
self.instr_callbacks[opdesc](
|
||||
self, r3, r1, disp
|
||||
r3, r1, disp
|
||||
)
|
||||
|
||||
if opdesc.layout == OpL.BRANCH:
|
||||
|
||||
Reference in New Issue
Block a user