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
|
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:
|
||||||
|
|||||||
Reference in New Issue
Block a user