from collections import defaultdict from dataclasses import dataclass, field from typing import Dict from gbso.cpu.regs import R8 @dataclass class CPUState: carry: int = 0 sp: int = 0 reg8: Dict[R8, int] = field(default_factory=lambda: defaultdict(lambda: 0)) memory: Dict[int, int] = field(default_factory=lambda: defaultdict(lambda: 0)) def copy(self) -> "CPUState": return CPUState( carry=self.carry, sp=self.sp, reg8=self.reg8.copy(), memory=self.memory.copy(), )