231. Ppu 状态标志常量

定义 PPUSTATUS 标志常量。

231 / 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_231_ppu_status_flag_constants.py

要更新的文件

emulator/ppu/ppu.py

要添加的常量

VBLANK_STARTED      (Will be used in next test)
SPRITE_ZERO_HIT     (Will be used later...)
SPRITE_OVERFLOW     (Will be used later...)

为什么需要这一步

PPUSTATUS 是 CPU 可读的 PPU 状态寄存器,位于 $2002。它是一个字节,其重要的硬件状态标志位于高位:

bit:  7 6 5 4 3 2 1 0
      V S O - - - - -

含义

V = VBlank started
S = Sprite 0 hit
O = Sprite overflow

为什么使用常量

像 0x80、0x40、0x20 这样的魔法数字在机制上可以工作,但它们掩盖了硬件含义。命名常量能让之后的 PPU 行为更易读:

self.status &= ~VBLANK_STARTED

比下面这样更清晰:

self.status &= ~0x80

重要范围说明

这一步只是命名状态位,尚未实现 sprite 0 命中或精灵溢出行为。那些需要渲染、精灵评估、OAM 和扫描线时序的支持。

建议实现的伪代码

VBLANK_STARTED = 1 << 7
SPRITE_ZERO_HIT = 1 << 6
SPRITE_OVERFLOW = 1 << 5

为什么是 1 << 7:

将 1 左移 7 位会得到一个只有第 7 位被置位的字节

1 << 7 == 0b1000_0000 == 0x80

运行本课

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