227. CPU 总线 PPU 默认工厂
为 CpuBus 添加一个默认的 PPU。
第 227 / 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_227_cpu_bus_ppu_default_factory.py
待更新文件
emulator/bus/cpu_bus.py待添加内容
CpuBus should own a PPU instance.该步骤存在的原因
NES CPU 通过内存映射寄存器与 PPU 通信。在 CpuBus 能够路由 $2000-$3FFF 范围内的读/写之前,总线需要一个 PPU 对象来转发这些访问。
重要的设计选择
在数据类字段中使用 default_factory,而不是直接使用 PPU()。
原因
每个 CpuBus 都应该拥有自己的 PPU 实例。在多个总线实例之间共享同一个可变的 PPU,会在各个测试和模拟器实例之间产生隐藏的耦合。
建议的实现伪代码
from dataclasses import dataclass, field
from emulator.ppu.ppu import PPU
@dataclass
class CpuBus:
...
ppu: PPU = field(default_factory=PPU)运行本课
uv run pytest tests/chapter_03_ppu_memory_and_graphics_data/test_227_cpu_bus_ppu_default_factory.py -v