Основные принципы NES (7) Mapper
Основные принципы NES (7) Mapper

Mapper

картограф, это понятие происходит от memory картографирование, также называемое Memory Management Circuit,Это схема, которая выполняет сопоставление адресов. Проще говоря, она определяет, как отображается физическая память. CPU или PPU адресное пространство

mapper Может использоваться для поддержки добавления кассет. RAM Он даже поддерживает дополнительные аудиоканалы, но более общая цель — управлять отображением физической памяти в адресное пространство, прорываясь в игру. 40KB ограничения

Почему говорят, что это ограничение в 40 КБ? Потому что в первые дни максимальный размер типичной игры составлял $16 \times 2 = 32КБ$ и CHR $8КБ$, что в сумме составляло 40КБ. сложное аппаратное обеспечение картографа может позволить играм преодолеть этот предел.

Существует слишком много типов картографов, и картографы разных версий NES также различаются. Их сотни, но здесь для иллюстрации мы выберем несколько картографов, используемых в обычных играх.

NROM

Mapper 000 с нулевым рейтингом — это самый простой картограф, такой как Super Mario, который использует NROM. NROM также делится на типы. Размер ПЗУ, хранящего PRG в NROM-128 (далее PRG-ROM), составляет всего 16КБ, а в NROM-256 — 256КБ.

  • Первый банк (16 КБ) PRG сопоставлен с адресами 0x8000-0xBFFF, а последний банк — с адресами 0xC000-0xFFFF.
  • Первые 8 КБ видеопамяти PPU сопоставлены с CHR, который является PatternTable.

Это простейший NROM, что соответствует предыдущему обсуждению CPU и PPU. Разве мы не говорили, что не будем обсуждать сложные ситуации? На самом деле мы использовали NROM в качестве примера.

MMC1

Mapper 001, игры, использующие MMC1, включают Double Dragon, Castlevania и т. д. Давайте посмотрим на его банк и взаимосвязь картографирования:

  • ЦП 0x6000-0x7FFF сопоставлен с банком ОЗУ PRG объемом 8 КБ, который является необязательным.
  • CPU 0x8000-0xBFFF сопоставлено с PRG ROM один из банк, это bank Илипереключаемыйили фиксированныйдляпервый
  • CPU 0xC000-0xFFFF сопоставлено с PRG ROM один из банк, это bank Илипереключаемыйили фиксированныйдляпоследний
  • PPU 0x0000-0x0FFF сопоставлено Калифорния 4KB переключаемый CHR bank
  • PPU 0x1000-0x1FFF сопоставлено Калифорния 4KB переключаемый CHR bank

Сопоставитель MMC1 гораздо более совершенен. Он имеет ряд регистров портов. Мы можем управлять этими портами для настройки MMC1. Давайте кратко рассмотрим, какие порты существуют:

Control

0x8000-0x9FFF, запись данных по любому адресу в этой части адресного пространства будет записана в регистр 0. У некоторых друзей могут возникнуть вопросы, не отображается ли эта часть адресного пространства в PRG? Почему она подключена к регистру? Хотя я не знаю конкретной схемы, нетрудно сделать вывод, что это не проблема. Программный код PRG доступен только для чтения, но здесь он написан. Во многих местах, где порты одинаковы, но чтение и запись различаются, сопоставление может быть разным. Например, когда я ранее говорил о последовательном порте, многие порты выглядели вот так, поэтому конфликта нет и нет. проблема здесь. Давайте посмотрим на часть порта 0x8000-0x9FFF, представленную адресным пространством:

  • bit0:0 выражатьнастраиватьдля horizontal зеркало, 1 выражатьнастраиватьдля vertical зеркало
  • bit1:0 выражатьнастраиватьдля single зеркало
  • Бит 2: 0 означает, что переключение банков происходит в 0xC000-0xFFFF, 1 означает, что переключение банков происходит в 0x8000-0xBFFF.
  • bit3:0 выражать bank Размердля 32 КБ,это единоразовый обмен. 32KB(0x8000-0xFFFF),1 выражатьв соответствии с bit2 настройки для обмена
  • bit4:0 выражатьодноразовый обмен 8KB из CHR,1 выражатьобмен 2 отдельный 4KB CHR banks
  • бит7: установить 1 выразитьочистить эту регистрацию

Позвольте мне объяснить, что этот банк не имеет определенного размера, все зависит от настроек оборудования, и все PRG CHR и т. д. используют банк в качестве базовой единицы обмена. Позвольте мне объяснить это здесь. .

CHR bank 0

0xA000-0xBFFF, эта часть адресного пространства подключена к другому порту. Запись номера банка CHR в этот порт может выбрать, какой банк CHR будет сопоставлен с 0x0000-0x0FFF PPU. Если размер банка CHR установлен на. 8 КБ в регистре управления, тогда банк будет выбран и сопоставлен с 0x0000-0x1FFF.

CHR bank 1

0xC000-0xDFFF, по той же причине, что и выше. Запись номера банка CHR по любому адресу в этой части адресного пространства может сопоставить выбранный банк с 0x1000-0x1FFF PPU.

PRG bank

0xE000-0xFFFF, таким же образом запишите номер банка PRG для выбора банка PRG. Что касается размера этого банка, то, будет ли он сопоставлен с 0x8000 или 0xC000 в адресном пространстве ЦП, зависит от настройки регистра управления.

UNROM

Далее давайте посмотрим на картограф 002. Известные игры, использующие этот картограф, включают Contra, Mega Man и т. д. UNROM более мощный и может поддерживать до 4M PRG. Вы должны знать, что модуль M был очень большим для игры в то время. Хотя UNROM может поддерживать 4M PRG большой емкости, UNROM на самом деле не так сложен, как MMC1. Давайте посмотрим на планирование (сопоставление отношений) его банков.

  • CPU 0x8000-0xBFFF,16KB переключаемый PRG ROM bank
  • CPU 0xCFFF-0xFFFF,16KB зафиксированный PRG ROM банка, эта часть адресного пространства фиксирована парламенто последняя часть PRG bank
  • CHR емкость 8KB,Сразупо сравнению с PPU начиная с 2КБ

Вот и все, все довольно просто. UNROM поддерживает только 2 типа зеркалирования, вертикальное и горизонтальное, а способ настройки - приварка (пайка площадки, если я правильно понимаю) при изготовлении кассеты. Имеет регистр выбора банка, который пишет любой. адрес в этой части адресного пространства 0x8000-0xFFFF в номер банка PRG, чтобы выбрать банк PRG и сопоставить его с 0x8000.

Не знаю, есть ли у друзей, которые внимательно смотрят, такие игры, как Contra и Mega Man, — это все игры, особенно Contra. В статье, о которой я упоминал ранее, было много примеров возможностей Contra. Достаточно ли 8K? Очевидно, что сумма всех таблиц шаблонов должна превышать 2, что составляет 8 КБ.

Такие игры, как Contra, немного особенные, в них нет CHR ПЗУ, некоторые из них CHR ОЗУ (может быть PPU начало 8KB рассматривается как CHR ОЗУ), через FCEUX Все, кто знает о Контре PRG ROM для 128 КБ, нет CHR ROM,его PatternTable Прямо там PRG Внутри, когда игра запущена CPU контрольный пропуск PPU порт будет PatternTable от PRG Копировать в CHR RAM

CNROM

mapper003 CNROM, это mapper Он также относительно прост и более известен, чем для игры и меть Dragon Quest, Takahashi Celebrity из MapleStory и т. д., как упоминалось выше. mapper Все они написаны примерно об одном и том же, поэтому у вас должно быть это понятие, я его кратко опишу позже.

banks

  • PRG ROM только 16KB или 32 КБ, с mapper 000 То же самое, нет bank switching
  • CHR ROM больше, вверх to 2M,CHR bank size для 8KB,CHR banks Переключение между парламенто с PPU из 0x0000-0x1FFF

register

Существует только один регистр, аналогичный UNROM. Запишите номер банка CHR по любому адресу в части адресного пространства 0x8000-0xFFFF, чтобы выбрать банк CHR, сопоставленный с 0x0000-0x1FFF.

MMC3

mapper004 ММС3, викорируйте MMC3 из Есть много игр,Более известный, чем для, я предпочитаю изиметь вспыльчивые сериалы, такие как «Горячие боевые легенды».,Кровавая история и так далее.

Banks

В MMC3 есть очень подробный план банков. Их много, и значения схожие, я не буду их писать, а просто посмотрите информацию на вики:

  • CPU 0x6000-0x7FFF: 8 KB PRG RAM bank (optional)
  • CPU 0x8000-0x9FFF (or 0xC000-0xDFFF): 8 KB switchable PRG ROM bank
  • CPU 0xA000-0xBFFF: 8 KB switchable PRG ROM bank
  • CPU 0xC000-0xDFFF (or 0x8000-0x9FFF): 8 KB PRG ROM bank, fixed to the second-last bank
  • CPU 0xE000-0xFFFF: 8 KB PRG ROM bank, fixed to the last bank
  • PPU 0x0000-0x07FF (or 0x1000-0x17FF): 2 KB switchable CHR bank
  • PPU 0x0800-0x0FFF (or 0x1800-0x1FFF): 2 KB switchable CHR bank
  • PPU 0x1000-0x13FF (or 0x0000-0x03FF): 1 KB switchable CHR bank
  • PPU 0x1400-0x17FF (or 0x0400-0x07FF): 1 KB switchable CHR bank
  • PPU 0x1800-0x1BFF (or 0x0800-0x0BFF): 1 KB switchable CHR bank
  • PPU 0x1C00-0x1FFF (or 0x0C00-0x0FFF): 1 KB switchable CHR bank

Registers

Bank Select

0x8000-0x9FFE, четные адреса между ними подключены к регистру выбора банка. Как следует из названия, запись в этот регистр может управлять методом сопоставления. Подробности я опубликую непосредственно из вики.

Просто обратите внимание на первые несколько. Различные методы отображения RRR различны. Представленная выше картина очень ясна, поэтому я не буду объяснять ее дальше.

Bank Data

0x8001-0x9FFF, нечетные адреса между ними подключены к регистру банковских данных, который предназначен для записи номера банка в этот регистр, чтобы выбрать банк, а затем сопоставить его в соответствии с методом в регистре выбора банка.

Mirroring

0xA000-0xBFFE, даже адреса между ними связаны с Mirroring Зарегистрируйтесь, этот реестр bit0 для 0 слова выражают вертикальныйзеркало,для 1 слова выражают Горизонтальное зеркалирование

PRG RAM

0xA001-0xBFFF Нечетная часть адреса связана с этим Зарегистрируйтесь, этот реестр bit7 Можно включить PRG Короче говоря, ОЗУ (0x6000-0x7FFF) позволяет архивировать.

MMC3 позволяет генерировать прерывания IRQ. Как упоминалось ранее, процессор имеет три прерывания: RESET, NMI и IRQ. Источники первых двух были упомянуты, а источник прерывания IRQ поступает из этого преобразователя. Существует 4 регистра. связанные с этим:

IRQ Latch

0xC000-0xDFFE Даже часть этого регистра хранит число, которое начинает считать счетчик IRQ.

IRQ reload

0xC000-0xDFFF Нечетная часть, запись любых данных в этот регистр приведет к перезагрузке числа, хранящегося в защелке IRQ, во внутренний счетчик.

IRQ disable

0xE000-0xFFFE Даже часть, запись любых данных в этот регистр отключит генерацию IRQ

IRQ enable

0xE001-0xFFFF Нечетная часть: запись любых данных в этот регистр активирует генерацию IRQ.

Что касается того, что делать после генерации прерывания, посмотрите на обработчик прерываний IRQ. IRQ, сгенерированный картографом, может использоваться для разделения экрана. Разве я не говорил ранее, что попадание спрайта 0 можно использовать для оценки рендеринга. строка сканирования Как только рендеринг достигает этой точки, ее также можно использовать здесь IRQ, это также основная функция IRQ.

Хорошо, выше приведено некоторое содержимое картографа. Если вас интересуют более подробные сведения, обратитесь к информации в вики. На этом этапе, в сочетании со всем ранее описанным контентом, вы должны иметь общее представление о том, как PRG, CHR, картограф, ЦП и PPU NES работают вместе, обеспечивая запуск игры.

На этом статья заканчивается. Если у вас есть какие-либо вопросы, пожалуйста, критикуйте и поправляйте меня. Каждый может общаться и учиться у меня.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода