NES TDD

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