Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитектура и программирование Dendy.doc
Скачиваний:
9
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

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

В адресном пространстве CPU есть два окна, в которые отображается содержимое PRG-ROM ($8000-$BFFF и $C000-FFFF). В окно $C000-$FFFF всегда отображается последний блок PRG-ROM («хвост» ПЗУ). За содержимое окна $8000-$BFFF – отвечает маппер (как правило, при включении – это самое начало ПЗУ).

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

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

Маппер unrom.

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

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

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

Ввод/Вывод в Денди.

Архитектура Денди не изобилует большим (а может и достаточным) количеством портов ввода/вывода. Программно под порты выделены две ячейки из адресного пространства CPU (на аппаратном уровне процессора). Это ячейки с адресами $4016 и $4017. Аппаратных же линий намного меньше – а именно: 3 линии (бита) на выход и 5 + 2 линии на вход. Опрос линий чисто программный.

Наиболее распространены (в России) модели приставок Денди с двумя «разъёмами» для «джойстиков» (так их называют в быту) – по 15 контактов каждый (есть и 9-ти контактные или шнуры джойстиков могут быть «вделаны» в приставку, в этом случае, как правило, есть еще один 15-ти штырьковый разъём – но такие варианты встречаются редко). Условимся называть разъём для подключения первого джойстика «Порт A», второго «Порт B» (каждый по 15 штырьков). Если оба порта имеют по 9 штырьков, то есть третий – 15-ти штырьковый, который дублирует «Порт B» и содержит дополнительные сигналы (аналогично, если джойстики неразъемные). Если, как в большинстве случаев, оба разъема имеют 15 контактов – к «Порту A» подключено не более шести, ко второму – все 15 (в том числе и сигналы с «Порта A», правда, на другие контакты). В общем «Порт A» предназначен для подключения «первого» джойстика (аппаратно возможно и подключение светового пистолета - «Zapper»). К «Порту B» подключается все другие периферийные устройства (второй джойстик, световой пистолет, разъветвитель на 4 джойстика и многое другое), фактически на него выведены все линии портов ввода/вывода Денди (за исключением одного из «Порта A»). Теперь подробнее о программной модели и аппаратной реализации.

Вывод – 3 бита “OUT” (непосредственно с процессора), адресуются путем записи значения в регистр $4016, младшие биты. Бит 0 используется в качестве стробирующего сигнала-защелки состояния джойстиков (см. ниже).

Ввод – порт $4016 “J1”(чтение), аппаратно присутствуют только два младших бита. Бит D0 выведен на «Порт A» и используется для чтения последовательного кода состояния джойстика 1. Бит D1 выведен на «Порт B».

Ввод – порт $4017 “J2” (чтение), аппаратно присутствуют 5 младших бит. Нулевой бит – аналогично для джойстика 2.

Распиновка портов (2 по 15) приведена на рисунке.