Картридж Денди.

Денди спроектирована так, что вся программа и все данные хранятся исключительно на картридже. Сама приставка не содержит никакой постоянной памяти. Картридж устанавливается в специальный разъём, на который выведены как шины CPU, так и PPU (см. приложение 4). До сих пор мы использовали модель картриджа, содержащую 32k PRG-ROM и 8k CHR-ROM. Такие картриджи реально применяются для хранения небольших игр - их память полностью адресутся CPU и PPU. Для большинства же игр такой объём явно недостаточен – поэтому большинство картриджей имеют значительно больший объём памяти (до 1024k PRG-ROM и 1024k CHR-ROM). Понятно, что непосредственно процессор не может адресовать такой объём памяти. В Денди применяется метод «страничной адресации» памяти картриджа. Картриджи большого объёма содержат, помимо микросхем памяти, еще и переключатель страниц («mapper»). Маппер – контроллер (или логическая схема), состояние которого однозначно определяет блоки ПЗУ картриджа, отображаемые в данный момент в адресное пространство процессора, или знакогенератор PPU. Размер переключаемых окон зависит от типа маппера, а с некоторыми мапперами может даже варьироваться, типичные конфигурации - 4*8k, 2*16k или 1*32k (возможны и иные конфигурации - причем, как правило последнее окно неперключаемое).

Видов мапперов существует очень много (наиболее распространены около десяти) – каждый из них имеет свои возможности: вид и объём используемой в картридже памяти, возможность использования дополнительной памяти, наличие звукового процессора и пр., а также имеет свои (уникальные) команды управления. Большим количеством модификаций «классических» мапперов мы обязаны «пиратам» - стремящимся либо с сэкономить на железе, любо запихнуть на один картридж много всего разного, иногда же - и то и другое сразу ;-)

И так - картридж содержит:

PRG-ROM – микросхема ПЗУ, хранящая программу и данные (неотъемлемая часть любого картриджа). Подключается к шинам процессора. Старшие линии адреса и управляющие входы подключаются к мапперу (если маппер предусматривает переключение страниц PRG-ROM).

CHR-ROM (RAM) – микросхема памяти, подключаемая к шинам PPU - возможен один из двух вариантов:

  • ПЗУ (ROM) – хранит заранее «прошитые» знакогенераторы PPU, которые могут переключаться, если это предусматривает маппер. Подключается к шинам PPU и мапперу (если маппер предусматривает переключение страниц знакогенератора).
  • ОЗУ (RAM) – статическая память, размером 8k (два знакогенератора). В этом случае знакогенераторы должны хранится в PRG-ROM и программно (через PPU) загружаться в CHR-RAM. Преимуществом такой организации является то, что есть возможность изменения одной иконки знакогенератора, при сохранении всех остальных. В предыдущем случае имелась возможность только выбирать заранее созданные знакогенераторы (если их несколько).

Mapper – контроллер или логическая схема, осуществляющая коммутацию блоков реальной ПЗУ в адресные пространства CPU и PPU. Находится на картридже и подключается к шинам CPU и/или PPU. Некоторые мапперы состоят из нескольких микросхем. Любая программа пишется под определенный тип маппера.

Также картридж (в редких случаях) может содержать:

SRAM (WRAM) - (Адресное пространство CPU $6000-$7FFF) – Статическое ОЗУ, может питаться от компактной батарейки, располагающейся на картридже. Предназначено для «сохранения» игр (если есть батарейка), или просто служит дополнительным ОЗУ (хорошее дополнение). Для него выделено «окно» в адресном пространстве CPU размером 8k (в 4 раза больше встроенного в приставку ОЗУ, а скорость таже) - существуют картриджи, несущие на борту до 32k ОЗУ (т.е. 4 страницы, переключаемые маппером). Данное расширение поддерживается далеко не всеми мапперами, но точно поддерживается MMC1,MMC3 и MMC5 (MMC5 – достаточно редкий картридж).

Expansion ROM - (Адресное пространство CPU $5000-$5FFF) – Дополнительные 4k памяти (для CPU). Аналогично SRAM - используется, как правило, с маппером MMC5.

VRAM - (Адресное пространство PPU $2800-$2FFF) – «Недостающие» 2k VRAM для двух экранных страниц PPU. (Используется очень немногими играми.)

Звуковой процессор - предназначен для более качественного синтеза звука, нежели это реализуется встроенным pAPU (например: VRC6, VRC7 и другие).

Да и вообще, стоит заметить, что большинство аппаратных возможностей Денди могут быть использованы только с картриджем MMC5 (и некоторыми другими). Да – и конечно, ничто не мешает разработать новый маппер самому (в архитектуре приставки ничего менять не придется! - всю логику управления маппером содержит программа на картридже).

Программирование мапперов.

В адресном пространстве CPU - адреса $8000-$FFFF выделены для отражения на них памяти картриджа - PRG-ROM. Логически может быть организовано несколько окон, управляемых маппером. Размер и количество окон определяется архитектурой маппера, некоторые типы предусматривают переменный размер окна. Наиболее распространенный вариант 2*16k или 4*8k - в последнее окно позиционируется, как правило «хвост» ПЗУ (иногда начало), а также, зачастую, последнее окно переключению не подлежит.

Каждый маппер имеет определенное количество регистров управления, доступных только для записи. Адресуются они через области, отведенные для PRG-ROM. То есть – чтение из памяти по адресам $8000-$FFFF приводит к чтению ПЗУ (PRG-ROM), а запись, по некоторым адресам из этого диапазона (см. спецификации мапперов), приводит к записи управляющих слов в соответствующие регистры маппера.

В качестве примера рассмотрим простейший маппер – «UNROM».

Маппер UNROM.

UNROM – один из простейших мапперов. Он предусматривает работу с PRG-ROM объёмом 128k, в качестве CHR используется ОЗУ размером 8k. Маппер строится на базе двух микросхем (74ls161 и 74ls32) и программно представлен как один регистр, который отражается на всё пространство первого окна ($8000-$BFFF). То есть запись по любому адресу из этого диапазона приведет к записи в регистр маппера. Записываемый байт определяет номер блока ПЗУ, подключаемого в окно $8000-$BFFF (блоки нумеруются с нуля и с начала адресации реальной ПЗУ). В окно $C000-$FFFF всегда подключены последние 16k ПЗУ.

Знакогенератор заполняется программно, через регистры PPU ($2006,$2007) – запись должна производится в адресное пространство PPU, отведенное под знакогенератор ($0000-$1FFF).

Информацию об архитектуре других типов мапперов см. в приложении «Спецификации мапперов».


Введение
Глава 1
Глава 2
Глава 3
Глава 4
Глава 5
Приложение 1
Приложение 2
Приложение 3
Приложение 4
Приложение 5
Приложение 6

Яндекс.Метрика