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 是位于 $2001 的 CPU 可写渲染掩码寄存器。它控制渲染的哪些部分可见,以及色彩如何被强调。

其位布局通常写作

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