|
|
- from dataclasses import dataclass, field
-
- from typing import List, Optional
-
- from gbso.cpu.cpu import CPU
- from gbso.cpu.state import CPUState
- from gbso.cpu.insn import Insn, UNUSED
-
-
- @dataclass
- class Program:
- insns: List[Insn] = field(default_factory=list)
-
- def execute(self, init_state: Optional[CPUState] = None) -> CPU:
- cpu = CPU(state=init_state)
- for insn in self.insns:
- insn.exec(cpu)
- return cpu
-
- def perf(self) -> int:
- return sum([insn.cycles() for insn in self.insns])
-
- def display(self) -> None:
- print("=" * 10)
- for insn in self.insns:
- print(insn.pretty())
- print("=" * 10)
-
- def pad(self, max_bytes: int) -> "Program":
- if len(self.insns) > max_bytes:
- raise ValueError("larger than amount to pad to")
-
- insns = self.insns.copy() + [UNUSED()] * (max_bytes - len(self.insns))
- return Program(insns=insns)
|