NES TDD

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

Важная область действия

Этот шаг только называет биты состояния. Он ещё не реализует поведение попадания спрайта 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