235. Чтение и запись VRAM в PpuBus
Добавить базовую пересылку чтения/записи из PpuBus в VRAM.
Урок 235 из 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_235_ppu_bus_vram_read_write.py
Файл для обновления
emulator/bus/ppu_bus.pyМетоды для реализации
PpuBus.read(addr: int) -> int
PpuBus.write(addr: int, value: int) -> NoneЗачем нужен этот шаг
Прежде чем PPUADDR/PPUDATA смогут писать в видеопамять, PPU нужен похожий на шину объект, который может принимать PPU-адреса и осуществлять доступ к памяти.
В этом первом шаге чтения/записи избегайте тестирования области CHR $0000-$1FFF. CHR будет протестирован отдельно, так как это затрагивает поведение маппера картриджа.
Пока используйте не-CHR адреса, например $2000:
PpuBus.write($2000, $AA)
PpuBus.read($2000) -> $AAПредлагаемый псевдокод реализации для области вне CHR/региона по умолчанию
def read(self, addr: int) -> int:
addr = addr & PPU_ADDRESS_MASK
return self.vram.read(addr)
def write(self, addr: int, value: int) -> None:
addr = addr & PPU_ADDRESS_MASK
self.vram.write(addr, value)Позже в этих методах появятся секции для
- область CHR: $0000-$1FFF
- область таблиц имён: $2000-$3EFF
- область палитры: $3F00-$3FFF
Запустить этот урок
uv run pytest tests/chapter_03_ppu_memory_and_graphics_data/test_235_ppu_bus_vram_read_write.py -v