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