244. 验证:微型 ROM 写入 PPU 内存

验证测试:微型 iNES ROM 通过 PPUADDR/PPUDATA 写入 PPU 内存。

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 路由。本测试证明,一个从微型卡带式 iNES ROM 中取出的真实 CPU 程序能够写入 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