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