1.2.3. Адресное пространство Как уже отмечалось, центральный процессор приставки способен обращаться к 65536 ячейкам памяти с адресами от 0000h до FFFFh. Однако в связи с упрощенной схемой дешифрации адреса реальный объем памяти, используемой видеоприставкой, гораздо меньше. Рассмотрим распределение адресного пространства приставки (рис. 1.5) и назначение основных блоков.
Рис. 1.5. Распределение адресного пространства центрального процессора игровой приставки DENDY Адреса 0000h - 07FFh: здесь располагается встроенное ОЗУ приставки, используемое для хранения переменных во время работы программы, а также нулевая страница памяти и стек процессора. При выключении питания содержимое этой области памяти теряется. Адреса 0800h - OFFFh: обращение по любому из указанных адресов приведет к обращению к встроенному ОЗУ приставки, следовательно, адрес 0800h аналогичен адресу 0000h, адрес 0801h- адресу 0001h и т.д. Адреса 1000h - 17FFh: то же, что и для адресов 0800h - 0FFFh. Адреса 1800h - 1FFFh: то же, что и для адресов 0800h - 0FFFh. Адреса 2000h- 2007h: регистры видеопроцессора. Адреса 4000h-4016h: регистры звукового процессора, контроллера прямого доступа к памяти (ПДП) и контроллера ввода/вывода. Адреса 5000h - 5FFFh: в стандартной конфигурации не используются, предназначены для модулей расширения. Адреса 6000h - 7FFFh: оперативная память картриджа. Может отсутствовать. Адреса 8000h - BFFFh: переключаемый банк постоянной памяти программ картриджа. В простейших картриджах не применяется. Адреса С000h - FFFFh: непереключаемый банк постоянной памяти программ картриджа. Присутствует в любом картридже независимо от размера памяти. По этим адресам всегда подключаются последние 16 Кб ПЗУ картриджа. В шесть ячеек ПЗУ с адресами FFFAh - FFFFh записаны адреса процедур обслуживания прерываний. 1.2.4. Видеопроцессор Видеопроцессор игровой приставки DENDY предназначен для формирования изображения на экране телевизора. Характеристики видеопроцессора в значительной мере определяют возможности приставки и качество выводимой картинки. В ранних моделях DENDY применялась отдельная микросхема видеопроцессора НА6538, в более поздних - микросхема UM6561, объединяющая все микросхемы приставки в одном корпусе. С точки зрения параметров видеопроцессора названные микросхемы аналогичны. Описываемый видеопроцессор ориентирован на блочную графику с использованием спрайтов. Информация об изображении хранится в видеопамяти, которая не входит в адресное пространство центрального процессора. Доступ к видеопамяти осуществляется через регистры видеопроцессора. Часто в картридже располагается отдельный блок видеопамяти, подключаемый вместо встроенной. Это делается для ускорения работы видеопроцессора и улучшения графики. Различия между PAL- и NTSC-версиями приставки проявляются при выводе данных на экран. В системе PAL размер картинки составляет 256x240 точек. В NTSC разрешение меньше - 256x224 точки. Информация об изображении, выходящем за эти границы, остается в видеопамяти, но не появляется на экране. В результате длительность кадрового гасящего импульса изменяется (см. ниже), что может привести к несовместимости между названными версиями устройства. Рассмотрим более подробно структуру видеопамяти игровой приставки и процесс формирования изображения на экране телевизора. Карта видеопамяти Карта распределения адресного пространства видеопроцессора игровой приставки DENDY представлена на рис. 1.6.
Рис. 1.6. Адресное пространство видеопроцессора игровой приставки DENDY Как видно из рис. 1.6, видеопроцессор может работать с 16 Кб памяти в диапазоне адресов 0000h-3FFFh. Однако, как и в случае с центральным процессором, объем реально присутствующей памяти гораздо меньше: он составляет всего 2 Кб. В видеопамяти приставки DENDY выделено несколько областей, имеющих различное назначение. Рассмотрим, как они влияют на формирование изображения. Знакогенератор. Эта область видеопамяти занимает первые 8 Кб с адресами 0000h - 1FFFh. Здесь хранятся битовые образы выводимых на экран символов. Под символом в данном случае подразумевается блок изображения размером 8x8 точек. Каждый битовый образ требует 16 байт памяти. Видеопроцессор совмещает две части битового образа, в результате чего получается четырехцветное изображение. Цвет с кодом, два младших разряда которого равны 0, всегда воспринимается видеопроцессором как прозрачный. Этот процесс поясняется на рис. 1.7. Как видно из рис. 1.6, область памяти 0000h -1FFFh разделена на две таблицы знакогенераторов с базовыми адресами 0000h и 1000h. Одна таблица хранит изображения блоков, из которых строится фоновая картинка, в другой находятся битовые образы спрайтов. Назначение таблиц определяется программным путем при записи кода в управляющий регистр видеопроцессора. Итак, первым этапом, необходимым для вывода изображения на экран, является разработка знакогенераторов для фона и спрайтов. Из сделанных вами блоков и будет состоять показываемая картинка.
Рис. 1.7. Формирование символов в игровой приставке DENDY Обычно в ПЗУ игрового картриджа содержится один или несколько заранее записанных знакогенераторов. Микросхема контроллера управления страницами памяти подключает один из них в адресное пространство видеопроцессора, и все его символы становятся доступными для вывода на экран. Экранная страница. В адресном пространстве видеопроцессора DENDY располагаются четыре экранные страницы. Однако установленной в игровой приставке памяти хватает только для размещения двух экранных страниц, одна из которых называется активной. Как программы используют эти страницы, будет объяснено ниже. Каждая экранная страница делится на область символов и область атрибутов. Активная экранная страница - это страница видеопамяти, содержимое которой служит для формирования изображения на экране. Область символов - часть экранной страницы, включающая информацию о номерах элементов знакогенератора, из которых строится изображение. Область атрибутов - часть экранной страницы, где хранятся сведения о цвете элементов знакогенератора, из которых строится изображение. Область символов каждой экранной страницы содержит 960 байт и представляет собой сетку из 30 строк по 32 символа в каждой. Таким образом, размер экрана равен 256x240 точек. Важное отличие NTSC-версии приставки состоит в том, что верхний и нижний ряды символов на экране не показываются и размер видимого изображения по вертикали уменьшается до 224 точек Предположим, что на экран нужно вывести букву «А», битовый образ которой уже размещен в знакогенераторе по адресу 0100h (рис. 1.7). Если активна первая экранная страница, то запись числа 01h в видеопамять по адресу 2000h приведет к появлению буквы в верхнем левом углу экрана (только в PAL-версии). Сразу за областью символов начинается область атрибутов экранной страницы, занимающая 64 байта. Каждая ячейка области атрибутов хранит информацию о цвете четырех смежных квадратов размером 2x2 символа, которые в свою очередь образуют квадрат 4x4 символа. Таким образом, два младших бита ячейки области атрибутов первой экранной страницы с адресом 23C0h содержат данные о цвете для символов, располагающихся в ячейках области символов первой экранной страницы с адресами 2000h, 2001h, 2020h и 2021h. Структура экранной страницы игровой приставки DENDY представлена на рис. 1.8.
Рис. 1.8. Структура экранной страницы видеопроцессора игровой приставки DENDY: а - область символов; б - область атрибутов Для получения номера цвета точки, изображенной где-либо на экране, требуются два бита из соответствующего байта атрибутов и два бита из битового образа, записанного в знакогенераторе. В результате получается 4-разрядное число в диапазоне 0-15, однозначно задающее номер цвета в палитре (рис. 1.9). Внутренней видеопамяти игровой приставки достаточно только для размещения двух экранных страниц. Это приводит к возникновению эффекта, называемого отражением экранных страниц. Четыре основных случая отражения рассмотрены ниже. Горизонтальное отражение. В этом режиме попарно объединяются экранные страницы 0, 1 и 2, 3,
Рис. 1.9. Формирование цветовой информации в видеопроцессоре игровой приставки DENDY то есть запись в экранную страницу 0 идентична записи в экранную страницу 1. Вертикальное отражение. В данном режиме объединяются экранные страницы 0, 2 и 1, 3. Запись в экранную страницу 0 идентична записи в экранную страницу 2. Режим одного экрана. В таком случае используется одна экранная страница с установленным номером. Режим четырех экранов. Если в картридже установлено дополнительное ОЗУ для видеопроцессора, то можно работать со всеми четырьмя экранными страницами. Режим отражения экранных страниц видеопамяти полностью зависит от контроллера страниц памяти, находящегося в картридже. Внутренние схемы видеопроцессора не позволяют менять этот режим. Некоторые контроллеры страниц памяти модифицируют его путем записи кода в управляющий регистр во время выполнения программы. Палитра. В памяти видеопроцессора игровой приставки по адресам 3F00h-3FlFh располагаются палитра фона и палитра спрайтов. Каждая палитра содержит по 16 цветов, которые могут быть одновременно использованы для раскрашивания изображения. 4-разрядный код, образованный как объяснялось выше, однозначно определяет номер цвета в палитре. В каждую ячейку палитры помещается 8-разрядное значение, устанавливающее цвет точки на экране. Шестой и седьмой разряды записанного в ячейке числа игнорируются. Необходимо учитывать также эффект, называемый отражением палитр. Каждая четвертая ячейка палитры отражается на аналогичную ячейку другой палитры, то есть в адресном пространстве видеопроцессора совмещены ячейки с адресами 3F00h и 3F10h, 3F04h и 3F14h, 3F08h и 3F18h, 3F0Ch и 3F1Ch, поскольку цвет с двумя младшими битами 00 всегда определяется как прозрачный и не влияет на окраску изображения. Содержимое ячейки памяти с адресом 3F00h задает цвет фона для всего экрана. Возможности видеопроцессора Разнообразие и качество программного обеспечения игровой приставки в значительной степени определяются возможностями видеопроцессора и теми манипуляциями с графической информацией, которые он в состоянии производить сам, в то время как центральный процессор приставки занят другими задачами. Игровая приставка DENDY, как уже было сказано, создавалась для использования спрайтовой графики. Спрайты - графические блоки фиксированного размера, которые обрабатываются видеопроцессором независимо от основного изображения. Видеопроцессор DENDY позволяет выводить на экран до 64 спрайтов размером 8x8 или 8x16 точек каждый, передвигать спрайты и фон независимо друг от друга и плавно прокручивать фоновую картинку в любом направлении. Рассмотрим эти функции устройства более подробно. Спрайты. Если в игре используются спрайты размером 8x8 точек, то их изображения хранятся в одном из знакогенераторов, расположенных в видеопамяти. Если применяются спрайты размером 8x16 точек, то изображения спрайтов с четными номерами помещаются в знакогенератор 0 (с базовым адресом 0000h), а с нечетными - в знакогенератор 1 (с базовым адресом 1000h). Иногда контроллер страниц памяти, установленной в картридже, дополнительно подключает ПЗУ, где изображения спрайтов записаны заранее. Память спрайтов. Это отдельная страница памяти видеопроцессора, которая содержит информацию о специальных графических блоках - спрайтах. Память спрайтов занимает 256 байт, которые не входят в адресное пространство видеопроцессора. Для каждого из 64 спрайтов, с которыми может работать видеопроцессор игровой приставки, отведено по четыре байта. В этих байтах располагается следующая информация: 1. Координата верхнего левого утла спрайта по вертикали. 2. Номер блока с изображением спрайта в знакогенераторе. 3. Атрибуты спрайта: D7 - отражение спрайта относительно вертикальной оси: 1 - выводится зеркальное отражение спрайта; 0 - выводится обычный спрайт. D6 - отражение спрайта относительно горизонтальной оси: 1 - выводится зеркальное отражение спрайта; 0 - выводится обычный спрайт. D5 - приоритет спрайта: 1 - спрайт поверх фона; 0 - фон поверх спрайта. D4 - D2 - не используются. D1, D0 - два старших бита для формирования цветовой информации. 4. Координата верхнеголевого угла спрайта по горизонтали. На одной линии экрана может располагаться не более 8 спрайтов. При написании программ для игровой приставки следует помнить об этом ограничении. На экране спрайты всегда представлены в соответствии со своим приоритетом. Если вывести в одно и то же место экрана два спрайта, то верхним окажется спрайт с меньшим номером. Номер спрайта определяется положением его описания в памяти спрайтов. Таким образом, данные о спрайте 0 занимают первые четыре байта памяти спрайтов, о спрайте 1 -вторые четыре байта и т.д. Информация в память спрайтов может быть записана непосредственно через регистры видеопроцессора или с помощью контроллера прямого доступа к памяти. Скроллинг изображения. Видеопроцессор игровой приставки позволяет плавно прокручивать фоновое изображение в вертикальном или горизонтальном направлении независимо от спрайтов. При вертикальной прокрутке две экранные страницы объединяются в общее изображение размером 256x480 точек, которое можно перемещать вверх или вниз. При горизонтальной прокрутке две экранные страницы группируются в изображение размером 512x240 точек, которое передвигается вправо или влево. Выбор способа отражения экранных страниц, которые рассматривались выше, зависит от используемого вида аппаратного скроллинга. Скроллинг изображения осуществляется путем записи значения смещения в специальный регистр видеопроцессора. Организация экранной памяти при аппаратной прокрутке изображения показана на рис. 1.10. Кадровый синхроимпульс. Доступ к видеопамяти игровой приставки возможен только через регистры видеопроцессора при его программном выключении или во время кадрового гасящего импульса. Рассмотрим более детально процесс формирования изображения на экране телевизора.
Рис. 1.10. Объединение экранных страниц в игровой приставке DENDY при аппаратном скроллинге Генерация кадра начинается с левого верхнего угла и идет по строкам вниз. По окончании вывода каждой строки в видеосигнал добавляется строчный синхроимпульс. Так последовательно отображаются все 240 строк, составляющие полный экран. В завершение видеопроцессор посылает одновременно кадровый синхроимпульс и сигнал немаскируемого прерывания NMI. Это занимает время, необходимое для вывода четырех телевизионных строк. Затем видеопамять становится доступной в течение периода формирования кадрового синхроимпульса. Данный период равен времени, затрачиваемому на вывод 20 телевизионных строк, после чего доступ к видеопамяти запрещается и начинается развертка нового кадра. Такой процесс повторяется 50 раз в секунду для системы PAL и 60 раз в секунду для NTSC. Слои изображения. Создаваемое игровой приставкой DENDY изображение состоит из четырех независимых слоев. Рассмотрим их, начиная с самого нижнего: 1. Полностью окрашенный экран, цвет которого определяется содержимым ячейки видеопамяти с адресом 3F00h. 2. Спрайты с битом приоритета, равным 0. 3. Фоновое изображение. 4.Спрайты с битом приоритета, равным 1. Регистры видеопроцессора Всю работу по формированию изображения на экране центральный процессор осуществляет, передавая данные видеопроцессору через регистры управления и получая данные из регистров контроля состояния видеопроцессора. Назначение регистров описано ниже. Регистр 1 управления видеопроцессором Адрес: 2000h. Тип: запись. Назначение разрядов: D7 - формирование запроса немаскируемого прерывания NMI при кадровом синхроимпульсе: 0 - запрещено; 1 - разрешено. D6 - не используется, должен быть равен 0. D5 - размер спрайтов: 0 - 8x8 точек; 1 - 8x16 точек. D4 - базовый адрес знакогенератора для формирования фона: 0 - 0000h; 1 - 1000h. D3 - базовый адрес знакогенератора для формирования спрайтов: 0 - 0000h; 1 - 1000h. D2 - приращение адреса при обращении к видеопамяти: 0 - увеличение адреса на 1 (горизонтальная запись); 1 - увеличение адреса на 32 (вертикальная запись). D1, DO - адрес активной экранной страницы: 00 - 2000h; 01 - 2400h; 10 - 2800h; 11 - 2C00h. Регистр 2 управления видеопроцессором Адрес: 2001h. Тип: запись. Назначение разрядов: D7 - D5 - яркость экрана/интенсивность цвета (не используется). D4 - управление отображением: 0 - спрайты не видны; 1 - спрайты выводятся. D3 - управление отображением: 0 - фон не отображается; 1 - фон отображается. D2 - задание области вывода спрайтов: 0 - спрайты невидимы в крайнем левом столбце из 8 точек; 1 - спрайты видны на всем экране. D1 - определение области вывода фона: 0 - фон невидим в крайнем левом столбце из 8 точек; 1 - фон присутствует на всем экране. DO - тип дисплея (не используется). Регистр состояния видеопроцессора Адрес: 2002h. Тип: чтение. Назначение разрядов: D7 - флаг кадрового синхроимпульса: 1 - видеопроцессор генерирует кадровый синхроимпульс; 0 - видеопроцессор формирует изображение. Разряд устанавливается при получении кадрового синхроимпульса и сбрасывается при окончании формирования синхроимпульса или после чтения содержимого регистра. D6 - флаг обнаружения спрайта 0: 1 - спрайт с номером 0 выведен на экран; 0 - спрайт с номером 0 не обнаружен. Разряд становится равен 1, когда видеопроцессор начинает вывод на экран спрайта с номером 0 (первый в памяти спрайтов). Например, если координата спрайта 0 по вертикали равна 42, то разряд будет установлен во время показа 42-й строки кадра. Сброс разряда происходит при генерации кадрового синхроимпульса или после чтения содержимого регистра. D5 - счетчик количества спрайтов на линии: 1 - больше 8 спрайтов на текущей линии; 0 - 8 или меньше спрайтов на текущей линии. D4 - разрешение записи в видеопамять: 1 - запись запрещена; 0 - запись разрешена. Регистр адреса памяти спрайтов Адрес: 2003h. Тип: запись. Назначение разрядов. В регистр записывается 8-разрядное значение кода, определяющее адрес в памяти спрайтов для последующего доступа через регистр 2004h. Регистр данных памяти спрайтов Адрес: 2004h. Тип: запись/чтение. Назначение разрядов. Через регистр осуществляется доступ к памяти спрайтов видеопроцессора. Начальный адрес устанавливается путем записи значения кода в регистр 2003h. После каждого обращения к регистру адрес автоматически увеличивается на 1. Регистр аппаратной прокрутки Адрес: 2005h. Тип: двойная запись. Назначение разрядов. В регистр последовательно помещаются два кода для осуществления аппаратной прокрутки фонового изображения. Первое записываемое значение передается в регистр вертикальной прокрутки, второе - горизонтальной. Эти значения определяют смещение графического фрагмента от начала экранной страницы. При работе с данной функцией видеопроцессора следует помнить, что эффект отражения экранных страниц не позволяет одновременно использовать вертикальную и горизонтальную прокрутки, если в картридже нет дополнительной видеопамяти. Регистр адреса видеопамяти Адрес: 2006h. Тип: двойная запись. Назначение разрядов. В этот регистр последовательно помещаются два байта 16-разрядного адреса для последующего доступа к видеопамяти через регистр 2 007h. Сначала записывается старший байт адреса, затем младший. Регистр данных видеопамяти Адрес: 2007h. Тип: запись/чтение. Назначение разрядов. Через регистр осуществляется доступ к видеопамяти. Начальный адрес записывается в регистр 2006h. После каждого обращения к регистру адрес автоматически увеличивается на 1 или на 32 - в зависимости от состояния разряда D2 регистра 2000h. Из-за особенностей конструкции видеопроцессора первое чтение из видеопамяти после установки нового адреса дает неверный результат. Например, для чтения байта, расположенного в видеопамяти по адресу 2000h, необходимо выполнить следующие команды: VRAM_RD: LDA #$20 STA $2006 ; Установка старшего ; байта адреса. LDA #$00 STA $2006 ; Установка младшего ; байта адреса. LDA $2007 ; Первое чтение ; из видеопамяти. ; Пропуск неверного результата. LDA $2007 ; Второе чтение ; из видеопамяти. ; Теперь в А содержимое ячейки ; видеопамяти с адресом 2000h. LDA $2007 ; Теперь в А содержимое ячейки ; видеопамяти с адресом 2001h, ; если разряд D2 регистра 2000h сброшен, ; или ячейки видеопамяти с адресом 2020h, ; если разряд D2 регистра 200Oh . ; установлен. При записи данных в видеопамять и при работе с палитрами (адреса 3F00h - 3FlFh) рассмотренная особенность не проявляется. Следует также помнить, что любой доступ к видеопамяти возможен только в момент формирования кадрового синхроимпульса. Прямой доступ к памяти Игровая приставка DENDY содержит контроллер прямого доступа к памяти, который позволяет быстро переписать 256 байт из основной памяти в память спрайтов без участия центрального процессора. С точки зрения программирования такой контроллер представляет собой один 8-разрядный регистр с адресом 4014h. Регистр адреса прямого доступа к памяти Адрес: 4014h. Tun: запись. Назначение разрядов. В регистр записывается 8-разрядное число, определяющее адрес страницы в основной памяти. Контроллер прямого доступа к памяти передает содержимое выбранной страницы основной памяти в память спрайтов. Например, после записи в регистр 4014h кода C3h в память спрайтов видеопроцессора направляется содержимое основной памяти игровой приставки, расположенное в диапазоне C300h - C3FFh. 1.2.5. Звуковой процессор Подобно видеопроцессору, освобождающему центральный процессор от необходимости обрабатывать графическую информацию, звуковой процессор предназначен для самостоятельных действий по формированию аудиосигналов. Звуковой процессор игровой приставки DENDY поддерживает четыре аналоговых аудиоканала и один цифровой (в некоторых моделях цифровой канал отсутствует). Регистры звукового процессора С точки зрения программирования звуковой процессор представляет собой набор регистров с адресами 4000h - 4015h. Записывая данные в эти регистры, программа сообщает звуковому процессору о параметрах генерируемого сигнала. Первые два аналоговых канала формируют выходной сигнал с прямоугольной формой импульсов, третий канал - треугольные импульсы, а четвертый - сигнал шума. Регистр управления канала 1 Адрес: 4000h. Тип: запись. Регистр управления генератором канала 1 Адрес: 4001h. Тип: запись. Регистр управления частотой канала 1 Адрес: 4002h, 4003h. Тип: запись. В эти два регистра записывается 12-разрядное число, задающее частоту выходного сигнала. В регистр 4002h помещаются старшие четыре разряда, а в регистр 4003h - младшие восемь. Регистр управления канала 2 Адрес: 4004h. Тип: запись. Регистр управления генератором канала 2 Адрес: 4005h. Тип: запись. Регистр управления частотой канала 2 Адрес: 4006h, 4007h. Тип: запись. В эти два регистра записывается 12-разрядное двоичное число, задающее частоту выходного сигнала. В регистр 4006h помещаются старшие четыре разряда, а в регистр 4007h - младшие восемь. Регистры управления канала 3 (треугольные импульсы) Адрес: 4008h, 4009h. Тип: запись. Регистр управления частотой канала 3 Адрес: 400Ah, 400Bh. Тип: запись. В эти два регистра записывается 12-разрядное двоичное число, задающее частоту выходного сигнала аналогично соответствующим регистрам для каналов 1 и 2. Регистры управления канала 4 (сигнал шума) Адрес: 400Ch, 400Dh. Тип: запись. Регистр управления частотой канала 4 Адрес: 400Ah, 400Bh. Тип: запись. В эти два регистра записывается 12-разрядное двоичное число, задающее частоту выходного сигнала аналогично соответствующим регистрам для каналов 1 и 2. Регистр управления цифровым каналом Адрес: 4010h. Тип: запись. Регистр управления громкостью цифрового канала Адрес: 4011h. Тип: запись. Число, записываемое в данный регистр, определяет уровень выходного сигнала цифрового аудио-канала. Регистр часто используется при воспроизведении оцифрованной музыки и речи. Регистр адреса цифрового канала Адрес: 4012h. Тип: запись. Число, записываемое в этот регистр, задает адрес расположения данных для цифрового канала звукового процессора в основной памяти. Адрес вычисляется следующим образом: (Содержимое регистра 4012h) х 64 + 49152.
Регистр длины блока данных цифрового канала Адрес: 4013h. Тип: запись. Число, записываемое в этот регистр, задает длину блока данных, содержащего информацию для цифрового аудиоканала. Длина блока рассчитывается следующим образом: (Содержимое регистра 4013h)x 16 + 1. Регистр управления звуковым процессором Адрес: 4015h. Tun: запись. Назначение разрядов: D4 - устанавливается в 1 для включения цифрового канала. D3 - устанавливается в 1 для включения канала шумового сигнала. D2 - устанавливается в 1 для включения канала с треугольной формой импульсов. D1 - устанавливается в 1 для включения канала 2 звукового сопровождения. D0 - устанавливается в 1 для включения канала 1 звукового сопровождения. 1.2.6. Структура картриджа Структурная схема картриджа игровой приставки DENDY приведена на рис. 1.11.
Рис. 1.11. Структурная схема картриджа игровой приставки DENDY Любой картридж обязательно содержит одну или несколько 16-килобайтных страниц ПЗУ, хранящих программное обеспечение, а также один или несколько 8-килобайтных блоков памяти (ОЗУ или ПЗУ) для видеопроцессора. ПЗУ с программным обеспечением находится в адресном пространстве центрального процессора в диапазоне 8000h - FFFFh. По адресам C000h -FFFFh всегда подключена последняя 16-килобайтная страница ПЗУ. В диапазоне адресов 8000h - BFFFh может быть подсоединена любая из оставшихся страниц ПЗУ (сразу после запуска приставки это обычно первая страница). Если объем ПЗУ картриджа составляет 32 Кб или меньше, такое ПЗУ просто включается в адресное пространство центрального процессора. Если объем ПЗУ больше 32 Кб, в картридж устанавливается специальная микросхема контроллера страниц памяти (МВС), определяющая, какая страница ПЗУ доступна центральному процессору при обращении по адресам 8000h - BFFFh. Имеющаяся в картридже микросхема ПЗУ для видеопроцессора содержит знакогенераторы, которые подключаются к видеопамяти по адресам 0000h - 1FFFh и хранят информацию, необходимую для формирования изображения на экране телевизора. Число используемых знакогенераторов зависит от сложности игры, а управление ими осуществляет микросхема контроллера страниц памяти. Вместо ПЗУ знакогенератора в картридже может располагаться микросхема ОЗУ, применяемая для тех же целей. В этом случае данные знакогенераторов содержатся в ПЗУ с программным обеспечением и передаются в видеопамять программным путем. Некоторые картриджи содержат дополнительное ОЗУ с питанием от встроенной батарейки, которое позволяет сохранять игровую ситуацию на время выключения приставки. ОЗУ подсоединяется к центральному процессору и доступно по адресам 6000h - 7FFFh. Следует отметить, что существует более десяти различных моделей контроллеров страниц памяти. Более подробную информацию можно найти в Internet на сайтах, указанных в конце книги. 1.2.7. Организация ввода/вывода Управление приставкой осуществляется с помощью пультов управления, подключаемых к ней через специальные разъемы. Также к приставке можно подсоединить световой пистолет, адаптер для использования четырех пультов, интерфейс управления роботом и другие устройства. Схемотехника этих устройств будет рассмотрена в следующем разделе, а здесь мы опишем архитектуру ввода/вывода с точки зрения программирования. В игровой приставке DENDY есть два порта ввода/вывода, через которые поступают данные от любых подключенных к ней устройств. Назначение разрядов этих портов зависит от типа внешнего устройства. Игровой пульт С приставкой DENDY можно использовать один или два игровых пульта. Для программиста работа с пультами сводится к формированию импульса, по которому происходит запись состояния кнопок пульта в сдвиговый регистр и последующее чтение данных из регистра. Чтобы сохранить состояние кнопок пульта в сдвиговом регистре, необходимо записать сначала 1, а затем 0 по адресу 4 016h посредством приведенного фрагмента: Joy_strobe: LDX #$01 STX $4016 DEX STX $4016 После выполнения данной программы в регистрах обоих пультов сохраняется состояние восьми кнопок. Теперь при каждом обращении по адресу 4016h для первого пульта и 4017h для второго по линии DO шины данных будут поступать сведения о состоянии кнопок (0 - не нажата; 1 - нажата) в следующем порядке: А, В, SELECT, START, UP, DOWN, LEFT, RIGHT. Следовательно, процедура чтения состояния игрового пульта должна выглядеть так: Joy_read: ; Формирование сигнала для записи ; состояния клавиш пульта в регистр. LDX #$01 STX $4016 DEX STX $4016 ; Последовательное чтение состояния ; клавиш. LDY #$08 ; Количество ; последовательных чтений. Joy_loop: LDA 4016 ; Чтение состояния ; клавиши. ROR ; Перенос разряда D0 ; в флаг С. TXA ROL ; Добавление разряда. ; к результату. TAX DEY BNE Joy_loop ; В аккумуляторе байт состояния ; кнопок пульта. RTS Через специальный адаптер допустимо одновременное подключение четырех игровых пультов. В этом случае при последовательном чтении порта 4016h сначала передаются восемь бит состояния пульта 1, а затем восемь бит состояния пульта 3. Из порта 4017 h аналогичным образом считывается состояние пультов 2 и 4. При работе с четырьмя пультами формировать синхроимпульс нужно только один раз, после чего будут считаны состояния всех пультов. Световой пистолет Световой пистолет подсоединяется к разъему игровой приставки DENDY вместо одного из пультов. С точки зрения программирования работа со световым пистолетом сводится к анализу двух разрядов в байте, считываемом из порта 4016h или 4017h. Положение курка светового пистолета определяется анализом разряда D3: единица здесь сигнализирует о нажатии курка. Сигнал с фототранзистора влияет на разряд D4: если он засвечен, в этом разряде будет 0. Порты вода/вывода Система ввода/вывода игровой приставки DENDY состоит из двух портов с адресами 4016h и 4017h. Регистр игрового порта 1 Адрес: 4016h. Тип: запись/чтение. Назначение разрядов: D0 - при записи формируется стробирующий импульс для сохранения состояния пультов; при чтении определяется состояние пультов 1 и 3. D3 - показывается состояние курка светового пистолета. D4 - состояние фототранзистора светового пистолета. Регистр игрового порта 2 Адрес: 4017h. Тип: запись/чтение. Назначение разрядов: D0 - определяется состояние пультов 2 и 4. D3 - показывается состояние курка светового пистолета. D4 - отражается состояние фототранзистора светового пистолета. Далее>>