NES TDD

227. Cpu bus ppu default factory

Добавление PPU по умолчанию в CpuBus.

Урок 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.

Почему этот шаг нужен

CPU NES взаимодействует с PPU через регистры с отображением в память. Прежде чем CpuBus сможет маршрутизировать чтения/записи в диапазоне $2000-$3FFF, шине нужен объект PPU, которому она будет передавать эти обращения.

Важное архитектурное решение

Используйте default_factory вместо прямого PPU() в поле dataclass.

Почему

Каждый 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