NES TDD

247. Битовые константы PPUMASK

Определить битовые константы PPUMASK ($2001).

Урок 247 из 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_247_ppumask_bit_constants.py

Ссылка

https://www.nesdev.org/wiki/PPU_registers#PPUMASK

Файл для обновления

emulator/ppu/ppu.py

Константы для добавления

MASK_GRAYSCALE
MASK_SHOW_BACKGROUND_LEFT_8
MASK_SHOW_SPRITES_LEFT_8
MASK_SHOW_BACKGROUND
MASK_SHOW_SPRITES
MASK_EMPHASIZE_RED
MASK_EMPHASIZE_GREEN
MASK_EMPHASIZE_BLUE

Почему этот шаг важен

PPUMASK — это доступный для записи CPU регистр маски рендеринга по адресу $2001. Он управляет тем, какие части рендеринга видимы и как усиливаются цвета.

Раскладка битов обычно записывается как

BGRs bMmG

Значение

B = emphasize blue
G = emphasize green
R = emphasize red
s = show sprites
b = show background
M = show sprites in leftmost 8 pixels
m = show background in leftmost 8 pixels
G = grayscale

Важные рамки

Этот тест требует только именованных констант. Поведение рендеринга будет использовать эти имена позже. Не реализуйте на этом шаге фактические оттенки серого, усиление цвета, рендеринг фона или рендеринг спрайтов.

Предлагаемый псевдокод реализации

# PPUMASK ($2001) bits: BGRs bMmG
MASK_GRAYSCALE = 1 << 0
MASK_SHOW_BACKGROUND_LEFT_8 = 1 << 1
MASK_SHOW_SPRITES_LEFT_8 = 1 << 2
MASK_SHOW_BACKGROUND = 1 << 3
MASK_SHOW_SPRITES = 1 << 4
MASK_EMPHASIZE_RED = 1 << 5
MASK_EMPHASIZE_GREEN = 1 << 6
MASK_EMPHASIZE_BLUE = 1 << 7

Распространённое значение

$1E == 0b0001_1110

Это включает

  • левые 8 пикселей фона
  • левые 8 пикселей спрайтов
  • рендеринг фона
  • рендеринг спрайтов

Вне рамок

  • фактический рендеринг пикселей
  • поведение палитры оттенков серого
  • поведение усиления цвета
  • поведение отсечения левого края

Запустить этот урок

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