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 PpuBusPPU не должен навсегда писать напрямую в сырую 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