NES TDD

244. Проверка: крошечный ROM пишет в память PPU

ПРОВЕРОЧНЫЙ ТЕСТ: крошечный iNES ROM пишет в память PPU через PPUADDR/PPUDATA.

Урок 244 из 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_244_VALIDATION_tiny_rom_writes_ppu_memory.py

Этот файл не является шагом реализации для студента.

В этом тесте нечего реализовывать нового. Он существует только для проверки того, что построенные до этого части работают вместе через свои реальные границы:

iNES bytes
    -> Cartridge.from_ines_bytes(data)
    -> CpuBus(cartridge=cartridge, ppu=ppu)
    -> CPU.reset()
    -> CPU.step()
    -> STA $2006 / STA $2007
    -> CpuBus.write(...)
    -> PPU.write_register(...)
    -> PPUADDR sets vram_addr
    -> PPUDATA writes through PpuBus
    -> VRAM stores the byte

Почему нужна эта проверка

Предыдущие тесты проверяли поведение PPUADDR, PPUDATA, приращение PPUCTRL, PpuBus и маршрутизацию CpuBus по отдельности. Этот тест доказывает, что реальная программа CPU, полученная из крошечного iNES ROM на картридже, может писать в память со стороны PPU.

Крошечная программа, размещённая по адресу CPU $8000:

A9 20       LDA #$20
8D 06 20    STA $2006    ; PPUADDR high byte
A9 00       LDA #$00
8D 06 20    STA $2006    ; PPUADDR low byte
A9 AA       LDA #$AA
8D 07 20    STA $2007    ; PPUDATA write to PPU memory at $2000
EA          NOP

Ожидаемый результат

ppu.ppu_bus.read($2000) == $AA
ppu.vram_addr == $2001

Вне рамок

  • рендеринг
  • точность зеркалирования таблиц имён
  • точность палитровой RAM
  • запись в CHR RAM
  • чтение PPUDATA/буферизация чтения
  • тайминг VBlank/NMI

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

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