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