284. 验证:CPU 写入 PPU 内存后进行渲染
验证:CPU 写入 PPU 内存,然后 Console 渲染背景帧缓冲。
第 284 / 356 · tests/chapter_05_rendering_pipeline/test_284_VALIDATION_cpu_writes_ppu_memory_then_render.py
如果前面的 CPU、PPU、总线和渲染步骤都已完成,本测试不需要新的实现。
为什么需要这项验证
模拟器现在有两条重要的路径
CPU/PPU write path:
CPU program writes PPUADDR/PPUDATA
-> PPU memory changes
Rendering path:
Console.render_background_framebuffer()
-> reads current PPU memory
-> returns Framebuffer这个测试验证这两条路径观察到的是同一个 PPU 状态。
端到端路径
CPU executes STA $2006/$2007
-> CpuBus routes $2000-$2007 to PPU registers
-> PPUADDR selects PPU memory address
-> PPUDATA writes through PpuBus
Console.render_background_framebuffer()
-> reads nametable/palette/pattern memory from console.ppu
-> renders pure Framebuffer data微型 CPU 程序的行为
write $01 to PPU $2000
nametable[0] = tile ID 1
write $0F,$01,$02,$03 to PPU $3F00-$3F03
background palette 0 maps color index 3 to NES color $03合成的 CHR 设置
为了这项验证,CHR 数据直接在 PPU 内存中准备好。这样可以让测试专注于 CPU 对名称表/调色板 RAM 的写入以及渲染路径。对于 Mapper000/CHR ROM,CHR 图形通常来自卡带。
预期结果
top-left framebuffer pixel uses get_nes_rgb_color($03)重要的不变量
CPU 写入和 Console 渲染必须使用同一个 PPU 实例。
范围之外
- pygame 显示
- 真实的 ROM 测试夹具
- 通过卡带加载 CHR ROM
- 精灵
- 滚动
- OAMDMA
运行本课
uv run pytest tests/chapter_05_rendering_pipeline/test_284_VALIDATION_cpu_writes_ppu_memory_then_render.py -v