NES TDD

283. Framebuffer фона в Console

Предоставить данные текущего фонового framebuffer из Console.

Урок 283 из 356 · tests/chapter_05_rendering_pipeline/test_283_console_background_framebuffer.py

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

emulator/console.py

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

Рендерер уже умеет извлекать фоновый framebuffer из текущей памяти PPU:

ppu_background_to_framebuffer(ppu)

Console — это координатор машины верхнего уровня, владеющий связью CPU/PPU. В будущем код фронтенда должен иметь возможность запрашивать у Console текущий фоновый framebuffer, не зная деталей извлечения памяти PPU.

На этом шаге добавляется небольшой метод

console.render_background_framebuffer() -> Framebuffer

Важное разделение

Console.step()
    advances emulation time

Console.render_background_framebuffer()
    observes current PPU memory and returns pure framebuffer data

Не выполняйте рендеринг внутри Console.step(). Реальный кадр содержит множество инструкций CPU; рендеринг после каждой инструкции CPU был бы расточительным и смешивал бы тайминг с наблюдением.

Пример предлагаемой реализации

from emulator.rendering.framebuffer import Framebuffer
from emulator.rendering.ppu_background_renderer import ppu_background_to_framebuffer


class Console:
    ...

    def render_background_framebuffer(self) -> Framebuffer:
        return ppu_background_to_framebuffer(self.ppu)

Архитектурное правило

Метод по-прежнему возвращает чистые данные framebuffer. Не импортируйте pygame здесь.

Вне рамок этого шага

  • отображение pygame
  • step_until_frame/run_frame
  • спрайты
  • OAMDMA
  • ввод с контроллера

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

uv run pytest tests/chapter_05_rendering_pipeline/test_283_console_background_framebuffer.py -v