236. Протокол интерфейса маппера
Создать MapperInterface как протокол для границы шина/маппер.
Урок 236 из 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_236_mapper_interface_protocol.py
Файл для создания
emulator/cartridge/mapper_interface.pyProtocol для реализации
MapperInterfaceЗачем нужен этот вспомогательный класс
PpuBus не должен зависеть напрямую от Mapper000. Mapper000 — лишь один из мапперов картриджа. Мапперы в дальнейшем могут по-другому переключать банки PRG/CHR, но PpuBus должен нуждаться лишь в небольшом интерфейсе:
read_prg(addr)
read_chr(addr)Это позволяет PpuBus учитывать маппер, не делая его привязанным к Mapper000.
Что такое Protocol? Protocol описывает методы, которые объект должен предоставлять. Классу не нужно явно наследоваться от Protocol. Если у объекта есть нужные методы, он структурно соответствует протоколу.
Предлагаемый псевдокод реализации
from typing import Protocol
class MapperInterface(Protocol):
def read_prg(self, addr: int) -> int:
...
def read_chr(self, addr: int) -> int:
...Заметка на будущее
Когда будут реализованы записи в CHR RAM, этот протокол может вырасти
write_chr(addr, value)Пока не требуйте его, потому что Mapper000 на этом этапе не реализует записи в CHR.
Запустить этот урок
uv run pytest tests/chapter_03_ppu_memory_and_graphics_data/test_236_mapper_interface_protocol.py -v