NES TDD

234. Базовая структура PpuBus

Создать базовую структуру PpuBus.

Урок 234 из 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_234_ppu_bus_basic_shape.py

Файлы для создания/обновления

emulator/bus/ppu_bus.py

Класс для реализации

PpuBus

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

У NES два разных адресных пространства

CPU address space: $0000-$FFFF
    routed by CpuBus

PPU address space: $0000-$3FFF
    routed by PpuBus

PPU не должен навсегда писать напрямую в сырую VRAM. Он должен взаимодействовать со стабильной

границей адресного пространства PPU

PPU -> PpuBus -> VRAM / mapper CHR / palette RAM later

Это позволяет поведению PPUDATA оставаться стабильным, пока внутреннее устройство PpuBus со временем становится более точным.

Важная константа

PPU_ADDRESS_MASK = 0x3FFF

Зачем

Адреса PPU 14-битные. Маскирование с 0x3FFF сворачивает любой адрес в доступный PPU диапазон $0000-$3FFF.

Начальное хранилище

Пока PpuBus владеет большим хранилищем VRAM. Это временное упрощение, которое позволяет нам построить PPUADDR/PPUDATA до полной точности таблиц имён/палитры.

Предлагаемый псевдокод реализации

from dataclasses import dataclass, field
from typing import Optional

from emulator.memory.vram import VRAM
from emulator.cartridge.mapper_interface import MapperInterface

PPU_ADDRESS_MASK = 0x3FFF


@dataclass
class PpuBus:
    vram: VRAM = field(default_factory=VRAM)
    mapper: Optional[MapperInterface] = None

Запустить этот урок

uv run pytest tests/chapter_03_ppu_memory_and_graphics_data/test_234_ppu_bus_basic_shape.py -v