Перейти к содержимому

Какой процессор в денди

  • автор:

Какой процессор в денди

Как отмечалось ранее, первая (многокорпусная) модель NES/ Famicom строилась на базе процессора Ricoh RP 2 A 03 (архитектура 6502) или его аналога. Все последующие модели сверху вниз совместимы с ней. Не исключено, что SoC UM6561 более совершенен, имеет расширенную систему команд, а возможно и другие «фичи» (которые, надо понимать, в дань совместимости, как правило, не используются). Поэтому, говоря о процессоре Денди, – опираемся на базовую архитектуру 6502, реализованную в «классическом» RP 2 A 03 (универсальном), или RP 2 A 07 — только для варианта PAL .

Итак — CPU 6502 имеет:

  • Шина Адреса – 16 бит (адресное пространство 64k);
  • Шина Данных – 8 бит;
  • Частота (для версии PAL) – 1.79 МГц;
  • Встроенный звуковой сопроцессор «pAPU» (пятиканальный: 4 «аналоговых» + 1 «цифровой» DMC-канал);
  • Контроллер DMA;

Подробнее о системе команд 6502 можно прочитать в приложении 1. Примеры принципиальных схем и их описания — в приложении 5.

Здесь же мы рассмотрим, как этот процессор используется именно в Денди.

Распределение адресного пространства.

Модель 6502 предусматривает единое адресное пространство кода и данных (принстонская архитектура). Также в процессоре отсутствуют инструкции обращения к портам ввода/вывода (типа in/out) – порты должны отражаться на адресное пространство памяти. Т.е. адресное пространство процессора делится между портами и памятью. В архитектуре Денди это происходит так (кстати, по-моему, не очень рационально):

Registers Video

$1FF8 = 8184 байта

Registers Video Mirror (x1023)

Registers Audio & DMA & I/O

$0FE8 = 4072 байта

Expansion ROM\RAM (etc. in MMC5)

SRAM (aka WRAM) (etc. in MMC3)

RAM – Оперативная память (на плате приставки или внутри SoC ) объемом 2 k – её распределение следующее:

  • $0000-$00FF – “Нулевая страница” (Zero Page) – используется для системных целей (для пользовательских программ предпочтительны адреса $10-$9F, прочие лучше не трогать). Процессор имеет отдельные инструкции, обеспечивающие быстрый доступ к нулевой странице. Таким образом, с учетом малого количества регистров в самом процессоре, нулевая страница может выполнять роль «регистрового банка».
  • $0100-$01FF – Аппаратный стек от старших адресов (размер, понятно, 256 байт).
  • $0200-$07FF – Пользовательская область оперативной памяти.

Начиная с адреса $0800 из-за неполной дешифрации адреса, идут три «зеркала» RAM. Т.е. обращение к ячейке $0000 эквивалентно обращению к $0800 или к $1000 или к $1800. (Интересно, что мешало разработчикам установить еще 6 килобайт памяти – лишнего наверняка бы не было).

Registers Video [8 шт.] – через эти регистры видеопроцессора (и только через эти регистры) осуществляется связь центрального процессора с видеопроцессором, а через него и с видеопамятью. Подробнее см. главу «Видеопроцессор Денди (PPU)». Далее с адреса $2008 идут «зеркала» регистров видеопроцессора.

Registers Audio & DMA & I / O [24 шт.] – регистры звукового сопроцессора, контроллера DMA и портов ввода/вывода. Подробнее см. соответствующие главы. Назначение остальных ($0FE8=4072 шт.) адресов не определено, но может использоваться внешними звуковыми процессорами, располагающимися на картридже.

Expansion ROM \ RAM [4k] – расширение ПЗУ\ОЗУ (или любое другое, располагающееся на картридже) – используется, например, маппером MMC5 (см. главу «Картридж Денди»)

SRAM (она же WRAM) [8 k ] – статическое ОЗУ, которое также может находиться на картридже. Являясь полноценным ОЗУ для процессора, может использоваться для любых целей, в том числе и для хранения (исполнения) программы. Как правило, в этой области игры хранят данные состояния текущей игровой локации в процессе игры (маппер MMC3). При необходимости сохранения игровых ситуаций, эта микросхема питается от батарейки, расположенной на картридже (сохранение игры на время выключения питания, с возможностью последующего продолжения).

PRG-ROM [32 k ] – зачастую представлено 2 окнами по 16 k (иногда 4 по 8 k или другой вариант логического разбиения — в зависимости от маппера, для более гибкого варьирования страничной адресацией памяти картриджа, см. главу «Картридж Денди»). Чтобы подробно рассмотреть механизмы эффективного использования этого участка памяти – необходимо иметь представление об архитектуре конкретного картриджа (а вариантов тут много), речь о них пойдет позже. Самая простая архитектура картриджа маппера не содержит, в картридже есть лишь две ПЗУ размером 32k и 8 k , подключаются они к шинам процессора (CPU) и видеопроцессора (PPU) соответственно (см. рис.1). Первая (в нашем примере 32 k ) микросхема ПЗУ функционально называется PRG-ROM, и содержит в себе программу и возможно данные. Первые 16 k ПЗУ отображаются в окне 1 ($8000-$BFFF), последние 16 k в окне 0 ($C000-$FFFF). Организовано это на схемотехническом уровне. В конце нулевого окна располагаются вектора прерываний процессора.

Система прерываний.

Архитектура 6502 предусматривает всего 3 прерывания. Рассмотрим подробнее случаи их возникновения, предварительно указав адреса в таблице векторов прерываний.

$FFFA – NMI (VBlink)

Немаскируемое прерывание. Поступает с видеопроцессора и сигнализирует о том, что PPU закончил прорисовку очередного кадра и «луч пошел обратно» (в начало экрана). Обработчик NMI должен производить в этот момент (ограниченное время) необходимые по программе обновления данных видеопамяти, т.к. во время прорисовки строк кадра видеопамять недоступна (из нее осуществляет чтение PPU). Существует возможность программного отключения видеопроцессора – в этом режиме доступна запись в видеопамять (неограниченное время) прерывание NMI формироваться не будет, но также будет отсутствовать и картинка на экране (используется при начальной инициализации).

$FFFC – RESET

Происходит по факту включения питания или при нажатии на клавишу «Reset». Стоит помнить, что в последнем случае изменяется только программный счетчик, все регистры, а тем более память сохраняют свои значения.

$FFFE — IRQ/BRK

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

Соответственно по указанным адресам (в «таблице векторов прерываний») должны находиться инструкции перехода к обработчикам соответствующих прерываний. Приоритет прерываний следующий (от более приоритетного к менее): RESET, NMI, IRQ/BRK.

Какой процессор в денди

Этому разделу, несомненно, можно посвятить отдельный труд. Ибо нестандартных решений в этом направлении очень много, хотя они и не сильно распространены. Возможности синтеза звуков средствами самой приставки достаточно скудны, и пригодны пожалуй лишь для генерации спецэффектов, но не музыки (речь идет о pAPU сопроцессоре). Но сэкономив (в очередной раз) на синтезаторе, разработчики NES всёже реализовали возможность расширения аппаратных средств генерации звука. Как и в предыдущих случаях, это расширение должно находится на картридже (а где же еще). Т.е. как альтернативу встроенному pAPU, картридж может содержать свой звуковой процессор (чип-синтезатор). Вписывающийся своими регистрами управления в адресное пространство процессора приставки (как правило в свободные ячейки диапазона $4000-$4FFF), на выходе же имеющий аналоговый сигнал сформированного звука. На разъёме картриджа для этого предусмотрено два контакта (см. приложение 4) – один из них – аналоговый выход с pAPU (встроенного в процессор Денди), второй разведен на звуковой выход с приставки. В случае, если картридж не содержит своего звукового процессора, то эти контакты просто замкнуты. Возможно использование микшера для объединения сигнала pAPU и синтезатора на картридже, возможен и вариант установки двух звуковых процессоров на картридже … но это уже все зависит от разработчиков картриджа. Увы, но картридж содержит ограниченное число игр, а покупать для каждой игры одно и тоже оборудование (хотябы даже один и тот же синтезатор) удовольствие дорогое, и как следствие мало распространенное. Можно отметить, что картридж со всеми возможными расширениями (большое ПЗУ (PRG-ROM, CHR-ROM), дополнительное ОЗУ, видео ОЗУ (экранных страниц), ОЗУ для сохранения игр, звуковой(ые) процессор) намного сложнее и «интеллектуальнее» самой приставки – и соответственно в несколько раз ее дороже (и покупать ради новой игры еще один такой картридж стали бы не многие). Поэтому большинство производителей игр не гнались за качеством а брали дешевизной, используя лишь необходимый минимум (память программ и знакогенераторов, ну и маппер, как вынужденную необходимость). Ну а для звука – что есть – встроенный pAPU, который мы и рассмотрим чуть подробнее ниже.

Сопроцессор pAPU.

Звуковой сопроцессор pAPU является именно той «изюминкой», наличие которой отличает базовый процессор архитектуры MSC6502 и CPU , примененный в NES / Famicom / Dendy . А так как первым «официальным» процессором был (видимо) Ricoh RP 2 A 03, то и звуковой сопроцессор pAPU получил уже как нарицательное имя 2A03 (хотя входит в состав и других совместимых процессоров и SoC).

И так, pAPU 2A03 представляет собой пятиканальный синтезатор. Причем первые два канала генерируют сигнал прямоугольной формы, третий – треугольной (пила), четвертый – «шум», пятый – «цифровой канал» (дельта-модуляция, DMC ). В некоторых «китайских» вариациях Денди (на неизвестной бескорпусной SoC) цифровой канал мог отсутствовать.

Подробное рассмотрение всех особенностей программирования 2A03 достаточно объёмно, даже про нюансы программирования цифрового канала (DMC) писались отдельные статьи. Здесь же (ниже) дадим лишь краткие сведения о pAPU – т.к. в англоязычной документации информация исчерпывающая, а заниматься чисто ее переводом я не стал (да и не думаю, что сегодня кого-либо всерьез заинтересует программирование звука в Денди с нуля или портированием с других источников). По-любому, если я займусь этой темой глобально, эта глава, несомненно, будет дополнена. А пока для общей картины, помимо изложенного выше, приведем таблицу с описанием регистров pAPU (более подробно можно прочитать в англоязычной документации см. приложение 6 ) .

Регистры pAPU выполняют следующие функции:

Регистр
(адресация по CPU)

Какой процессор в денди

Игровая приставка NES (NINTENDO ENTERTAINMENT SYSTEM), более известная в нашей стране под именем DENDY (а также КЕНГА, FAMICOM и еще под несколькими псевдонимами), одной из первых появилась на российском рынке и познакомила тысячи людей с увлекательным миром компьютерных игр.
Она подключается к обычному телевизору через антенный или НЧ вход. К приставке можно подсоединить два игровых пульта GAMEPAD или один пульт GAMEPAD и световой пистолет ZAPPER. На корпусе устройства располагаются клавиши включения питания и перезапуска системы. Назначение кнопок на игровом пульте будет понятно даже тем, кто не знает английского языка и потому не в состоянии перевести надписи.
Внутри устройства располагаются центральный процессор, являющийся аналогом известного микропроцессора 6502, аудио- и видеопроцессоры. Имеется также оперативное запоминающее устройство объемом 2 Кб.
В игровом картридже находится ПЗУ с записанным в нем программным обеспечением и дополнительной видеопамятью. В некоторых модификациях содержится дополнительная память, позволяющая сохранять текущую игровую ситуацию.
Модели отличаются друг от друга размером встроенного ОЗУ и звуковым процессором. По этой причине картриджи, нормально функционирующие на одних приставках, не работают с другими.
Кроме того, приставки в зависимости от модификации формируют видеосигнал либо в системе PAL, либо в системе NTSC. Параметры этих устройств неодинаковы, и картридж, помеченный как «NTSC only», не сможет корректно работать с игровой приставкой системы PAL.

1.1. Технические характеристики

Центральный процессор
Тип аналог 6502
Разрядность шины данных 8 бит
Разрядность шины адреса 16 бит
Тактовая частота 1,773447 МГц

Память
ОЗУ 2 Кб ПЗУ отсутствует
Видеопамять 2 Кб

Видеопроцессор
Тип графики спрайтовая
Разрядность шины адреса 14 бит
Разрядность шины данных 8 бит
Количество спрайтов 64
Размер спрайтов 8×8 или 8×16
Разрешение 256×240 точек
Количество цветов всего 52
одновременно на экране 16

1.2. Архитектура и принцип работы

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

1.2.1. Структурная схема

Структурная схема игровой приставки DENDY приведена па рис. 1.1.
Основой приставки является центральный процессор (CPU). Во всех приставках, совместимых со стандартом NES, используется процессор, аналогичный известному микропроцессору 6502.
На одном кристалле с центральным размещен и музыкальный сопроцессор. В оригинальной приставке, производимой фирмой NINTENDO, применяется аудиопроцессор, реализующий четыре

аналоговых и один цифровой канал звука. Однако большинство приставок, поставляемых в Россию, являются корейскими аналогами, в них встроен звуковой сопроцессор без цифрового канала.
Контроллер прямого доступа к памяти (Direct Memory Access, DMA) также располагается на кристалле центрального процессора.
Игровые пульты и другие устройства подключаются к шине данных через модуль ввода/вывода, представляющий собой два буферных регистра.
В самостоятельный блок выделено также ОЗУ объемом 2 Кб, которое предназначено для хранения переменных, игровых данных, стека процессора и т.д.
Формирование картинки на экране телевизора обеспечивает видеопроцессор приставки (PPU). Информация об изображении хранится в видеопамяти (VRAM) объемом 2 Кб. Эта память не связана с основной памятью приставки, доступ к ней осуществляется только через регистры PPU. Видеопроцессор формирует стандартный видеосигнал, который подается на выходной разъем приставки. .
Находящийся в корпусе модулятор преобразует сигналы изображения и звука в ВЧ сигнал, предназначенный для подачи на антенный вход телевизора.
В пультах установлены кнопки управления и микросхема интерфейса, осуществляющая передачу байта данных центральному процессору приставки.
В картридже, который подключается к приставке через 60-контактный (или 72-контактный в модели NES) разъем, располагаются постоянное запоминающее устройство объемом от 16 до 256 Кб, в котором записана игровая программа, и память видеопроцессора.
Оперативная память с питанием от батарейки (SRAM), куда записывается игровая ситуация на время выключения приставки, также может находиться в картридже. Чтобы задействовать все ресурсы графического процессора, некоторые картриджи содержат дополнительное ПЗУ или ОЗУ для видеопроцессора (VRAM/VROM).
Если объем ПЗУ картриджа превышает 32 Кб, то его обязательной частью является контроллер страниц памяти (МВС), который осуществляет переключение страниц, используемых центральным процессором.
Питающее напряжение (+5 В) для приставки поступает от сетевого адаптера через встроенный стабилизатор.

1.2.2. Центральный процессор

В данном разделе рассматриваются архитектура процессора, его внутренние регистры, способы адресации, система команд и прерывания. Здесь приводится лишь справочная информация; более полные сведения о программировании на языке ассемблера для процессора 6502 можно найти в изданиях, указанных в конце книги, и в сети Internet.
Как отмечалось выше, в игровых приставках, совместимых со стандартом NES, используется центральный процессор, который аналогичен известному микропроцессору 6502 фирмы MOS TECHNOLOGY. От оригинала он отличается отсутствием десятичного режима выполнения арифметических команд. В PAL-версии приставки тактовая частота процессора составляет 1,773447 МГц,. а в NTSC-версии — 1,7897725 МГц.
Микропроцессор обменивается информацией с другими устройствами посредством 16-разрядной шины адреса, 8-разрядной шины данных и шины управления. 16 разрядов шины адреса позволяют процессору обращаться к 64 Кб памяти (65535 байт).
Регистры внешних устройств адресуются процессором так же, как и ячейки памяти, и находятся в общем адресном пространстве микропроцессора.
Структурная схема центрального процессора игровой приставки DENDY приведена на рис. 1.2.

Рис. 1.2. Структурная схема центрального процессора игровой приставки DENDY

Регистры процессора
Центральный процессор игровой приставки DENDY содержит пять 8-разрядных регистров и один 16-разрядный. Каждый регистр имеет свое имя и отличается по способам использования.
Аккумулятор является наиболее часто применяемым регистром микропроцессора. Он служит для загрузки данных в другие регистры, проведения любых математических, и логических операций, а также для иных целей. Фактически это 8-разрядный регистр, который в программах на языке ассемблера обозначается буквой «А».
Индексный регистр X задействуется микропроцессором для доступа к ячейкам памяти посредством индексного метода адресации, о котором рассказывается ниже. Этот 8-разрядный регистр необходим при обработке таблиц, хранящихся в памяти.
Индексный регистр Y по своему назначению и использованию аналогичен индексному регистру X. Однако в их функционировании есть некоторые различия, которые будут рассмотрены при описании методов адресации микропроцессора.
Регистр состояния процессора Р хранит информацию о режиме работы процессора и о результатах проведенных вычислений. Каждый бит этого 8-разрядного регистра является флагом, то есть изменяет свое состояние при определенных условиях. На работу процессора можно влиять путем модификации содержимого этого регистра.
Структура регистра состояния центрального процессора игровой приставки DENDY приведена на рис. 1.3.

Рис. 1.3. Структура регистра состояния центрального процессора игровой приставки DENDY

Рассмотрим назначение отдельных разрядов регистра.
Флаг С играет роль флага переноса, который используется при выполнении сложения или вычитания. Разряд С регистра состояния процессора становится равным 1, если результат выполнения команды сложения больше 255 (OFFh) или если результат выполнения команды вычитания меньше 0. Таким образом, этот флаг представляет собой как бы дополнительный разряд аккумулятора, позволяющий проводить арифметические операции с числами, разрядность которых превышает 8 бит.
Флаг Z — флаг нулевого результата, который равен 1, если результатом выполнения команды является 0.
Флаг I — флаг прерываний, устанавливаемый и сбрасываемый командами процессора SEI и CLI. 1 в этом разряде запрещает процессору обрабатывать запросы прерывания, поступающие по линии IRQ. Более подробно эта тема рассматривается при описании системы прерываний процессора.
Флаг D — флаг десятичного режима. Микропроцессор игровой приставки не поддерживает работу арифметических команд в двоично-десятичном коде, поэтому состояние данного флага не влияет на функционирование процессора. Программист может использовать этот бит регистра состояния по своему усмотрению. Состояние флага изменяется программно командами SED и CLD. Оригинальный микропроцессор 6502 позволяет складывать и вычитать числа как в двоичном, так и в двоично-десятичном коде. Если флаг D равен 0, то операнды команд сложения и вычитания рассматриваются как двоичные числа, а если установлен в 1 — как двоично-десятичные.
Флаг В — флаг программного прерывания, устанавливается при выполнении команды BRK.
Флаг V — флаг переполнения. Равен 1, если результат арифметической операции над числами со знаком выходит за допустимые пределы или если при выполнении арифметической операции осуществлялся перенос из шестого разряда в седьмой.
Флаг N — флаг знака, который равен седьмому разряду результата арифметической операции.
Указатель стека S содержит младший байт адреса первой свободной ячейки в специальной структуре данных, называемой стеком. В стек можно записывать данные, а при обработке прерываний или при вызове подпрограммы здесь сохраняется адрес возврата. В рассматриваемом микропроцессоре стек всегда располагается в первой странице памяти, которая находится в диапазоне 0100h — 01FFh, таким образом, для указания адреса вершины стека достаточно 8-разрядного регистра. Стек растет вниз, то есть от адреса 01FFh к адресу 0100h.
Счетчик команд PC представляет собой единственный 16-разрядный регистр центрального процессора игровой приставки DENDY. Его назначение — указывать адрес команды, которая выполняется микропроцессором. Центральный процессор приставки регулярно извлекает команду, размещенную в памяти по адресу, на который указывает счетчик команд, увеличивает значение счетчика, обрабатывает команду и повторяет этот цикл снова. Команды перехода позволяют изменить содержимое программного счетчика и задать необходимый порядок выполнения команд, размещенных в памяти.

Способы адресации
Большинство команд процессора обеспечивают выполнение действий с какими-либо данными.
Например, для сложения нужны два числа. Один из операндов микропроцессора приставки всегда размещается в аккумуляторе, куда после выполнения команды помещается результат. Второй операнд содержится в памяти по исполнительному адресу.
Исполнительный адрес — это фактический номер ячейки памяти, начиная с которой располагаются необходимые для процессора команды или данные.
Возможные приемы формирования процессором исполнительного адреса называются способами адресации. Описываемый процессор насчитывает тринадцать различных способов адресации (см. ниже).
Некоторые методы формирования исполнительного адреса в процессоре игровой приставки DENDY представлены на рис. 1.4.
Аккумуляторная адресация. При использовании этого способа операция производится над содержимым аккумулятора.

Рис. 1.4. Методы формирования исполнительного адреса в процессоре игровой приставки DENDY

Например:

LSR А ; Логический сдвиг байта
; из аккумулятора вправо.

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

TAX ; Переслать данные из А в X.

Непосредственная адресация. В этом случае 8-разрядный операнд хранится в памяти сразу за кодом команды, то есть по адресу РС+1 (рис. 1.4а). В программах на языке ассемблера непосредственная адресация обозначается знаком # перед операндом.
Прямая адресация. При работе с данным алгоритмом адресации в команде указывается адрес расположения операнда в памяти компьютера (рис. 1.46).
Прямая адресация нулевой страницы. Если операнд расположен в нулевой странице памяти (адреса 0000h — 00FFh), можно задействовать команды с прямой адресацией нулевой страницы, которые занимают меньше места в памяти и быстрее выполняются. Первый байт адреса всегда равен 0 и подставляется процессором автоматически. Этапы формирования исполнительного адреса представлены на рис. 1.4в.
Индексированная по X адресация. Все команды, применяющие этот метод, занимают в памяти компьютера три байта. Первый байт содержит код команды, второй и третий — базовый адрес. Исполнительный адрес операнда получается суммированием базового адреса с содержимым регистра X, как показано на рис. 1.4г.
Индексированная по Y адресация. Аналогична рассмотренной выше, только вместо регистра X используется регистр Y.
Индексированная по X адресация нулевой страницы. В данном случае команды занимают два байта: первый содержит код команды, а второй — базовый адрес в нулевой странице памяти. Исполнительный адрес операнда образуется путем сложения базового адреса с содержимым регистра X микропроцессора, как показано на рис. 1.4д. При попытке адресоваться за пределы нулевой страницы (если сумма базового адреса и содержимого индексного регистра больше 0FFh) формируется исполнительный адрес 0000h.
Индексированная по Y адресация нулевой страницы. Аналогична рассмотренному выше способу, только вместо регистра X применяется регистр Y микропроцессора.
Индексно-косвенная адресация. Команды с таким методом адресации всегда двухбайтные. Первый байт включает в себя код команды, а второй -базовый адрес в нулевой странице памяти. Исполнительный адрес вычисляется по следующему алгоритму (рис. 1.4е):
1. Базовый адрес суммируется с содержимым регистра X. При этом старший байт полученного адреса всегда равен 00h (то есть FFh + 02h = 01h), а не 0101h.
2. Из ячейки с вычисленным адресом считывается младший байт адреса операнда.
3. Адрес ячейки памяти увеличивается на 1. Если адрес был 0FFh, то следующий адрес будет 00h, то есть адресации за пределы нулевой страницы не происходит.
4. Из ячейки памяти с полученным адресом считывается старший байт адреса операнда.
5. Из ячейки памяти с вычисленным адресом извлекается операнд.
Косвенно-индексная адресация. Команды, использующие данный метод, также занимают в памяти компьютера два байта. Первый байт содержит код операции, а второй — адрес в нулевой странице. Исполнительный адрес операнда вычисляется по следующему алгоритму (рис. 1.4ж):
1. Из ячейки памяти, расположенной в нулевой странице по указанному в команде адресу, извлекается младший байт базового адреса.
2. Адрес ячейки памяти увеличивается на 1. Если адрес был 0FFh, то следующий адрес будет 00h, то
уесть адресации за пределы нулевой страницы не происходит.
3. Из ячейки памяти с полученным адресом считывается старший байт базового адреса.
4. К базовому адресу прибавляется содержимое регистра Y.
5. Из ячейки памяти с вычисленным адресом извлекается операнд.
Относительная адресация. Этот метод адресации применяется в командах перехода. Первый байт команды содержит код операции, а второй — смещение в диапазоне от -128 до 127. Отрицательное смещение указывается в дополнительном коде. При выполнении команды перехода смещение прибавляется к содержимому программного счетчика для получения адреса следующей выполняемой команды. Не забывайте, что смещение складывается с содержимым программного счетчика, когда тот указывает на команду, идущую за командой перехода.
Косвенная адресация. С данным методом способна работать только команда безусловного перехода JMP. При этом в команде задается адрес ячейки памяти, содержащей адрес перехода. Обратите внимание: выхода за пределы страницы при извлечении адреса перехода из памяти не будет, то есть старший байт адреса не изменится. Например, при выполнении команды JMP ($C0FF) младший байт адреса извлекается из ячейки памяти с адресом с 0FFh, а старший байт — из ячейки с адресом С000h, а не С100h, как можно было бы ожидать.

Система команд
Центральный процессор игровой приставки DENDY способен выполнять 56 различных команд. Все команды процессора делятся на следующие основные группы:
* команды пересылки данных: LDA, STA, LDX, STX, LDY, STY, TAX, TAY, ТХА, TYA, TSX, TXS;
* команды арифметических операций: INC, DEC, INX, I NY, DEX, DEY, ADC, SBC;
* команды логических операций: AND, ORA, EOR;
* команды сравнения: CMP, CPX, CPY, BIT;
* команды сдвига: ASL, ASR, ROL, ROR;
* команды перехода: BCC, BCS, BEQ, BNE, BMI, BPL, BVC, BVS, JMP;
* команды работы с подпрограммами: JSR, RTS;
* команды управления процессором: CLC, SEC, CLD, SED, CLV, CLI, SEI, RTI, BRK, NOP;
* команды работы со стеком: РHА, PHP, PLA, PLP.
Полная информация о системе команд центрального процессора игровой приставки DENDY приведена в приложении 1.

Система прерываний
Центральный процессор игровой приставки DENDY может обрабатывать три независимых запроса на прерывание. В таком случае выполнение программы приостанавливается, в стеке сохраняется регистр состояния процессора и текущее значение программного счетчика, а затем из памяти считывается вектор прерывания.
Вектор прерывания — это адрес программы, которая должна выполняться каждый раз, когда центральный процессор получает запрос на прерывания от внешних устройств.
Прочитав из памяти вектор прерывания, процессор записывает его в программный счетчик и запускает процедуру обработки прерывания.
Рассмотрим возможные типы прерываний и процедуры их обработки.
Маскируемое прерывание IRQ. Процедуру обработки данного прерывания центральный процессор выполняет каждый раз, когда получает сигнал низкого уровня по шине IRQ, если флаг I в регистре состояния сброшен. Эту процедуру также можно вызвать, выполнив команду процессора BRK. В случае программного прерывания перед началом его обработки в регистре состояния процессора устанавливается флаг В.
При обслуживании запроса на прерывание в стеке сохраняются состояния программного счетчика и регистра состояния процессора, после чего выполняется программа, адрес начала которой записан в ячейках памяти FFFEh и FFFFh. Для возврата из прерывания применяют команду RTI. При’ этом из стека считываются сохраненные значения регистра состояния микропроцессора и программного счетчика, а затем продолжается исполнение прерванной программы.
В стандартной конфигурации игровой приставки сигнал запроса маскируемого прерывания IRQ выведен на разъемы расширения и подключения картриджа, однако игровые программы используют только возможность программного прерывания при выполнении команды BRK.
Немаскируемое прерывание NMI. Это самый важный запрос на прерывание в игровой приставке. Любая программа обязательно содержит процедуру его обработки.
Каждый раз, когда заканчивается формирование очередного кадра (50 раз в секунду для стандарта PAL и 60 раз в секунду для стандарта NTSC), по переднему фронту кадрового гасящего импульса видеопроцессор приставки формирует сигнал запроса немаскируемого прерывания и посылает его центральному процессору.
Процессор прерывает исполнение программы, сохраняет в стеке значения программного счетчика и регистра состояния, после чего запускает процедуру обслуживания немаскируемого прерывания, адрес которой записан в ячейках памяти FFFAh и FFFBh. Возврат из процедуры обработки осуществляется также командой RTI.
Особая важность этого прерывания для игровой приставки объясняется тем, что центральный процессор может обмениваться данными с видеопамятью только в те моменты, когда формируется кадровый гасящий импульс, начало которого и вызывает запрос на прерывание. Таким образом, программа обработки немаскируемого прерывания в любой видеоигре осуществляет запись в регистры видеопроцессора и пересылку заранее подготовленных данных в видеопамять.
Сброс микропроцессора. Данное прерывание происходит при включении питания приставки и при поступлении сигнала низкого уровня на вход RESET. При этом центральный процессор копирует в программный счетчик содержимое ячеек памяти с адресами FFFCh, FFFDh и начинает выполнение программы. Состояние регистров процессора не изменяется.

  • Игровая система GameBoy (Часть 1)
  • Игровая приставка Sega MegaDrive (Часть 1)
  • Игровая приставка Sony PlayStation (Часть 1)
  • Игровая приставка Dendy (Часть 2)
  • 1942
  • Alien Syndrome
  • Arkanoid
  • Краткая история игровых приставок
  • Игровая система GameBoy (Часть 2)
  • Игровая система GameBoy (Часть 3)
  • Игровая система GameBoy (Часть 4)
  • Игровая приставка Sega MegaDrive (Часть 2)
  • Игровая приставка Sega MegaDrive (Часть 3)
  • Игровая приставка Sega MegaDrive (Часть 4)
  • Игровая приставка Sony PlayStation (Часть 2)
  • Игровая приставка Sony PlayStation (Часть 3)
  • Игровая приставка Sony PlayStation (Часть 4)
  • Программирование для приставок
  • Написание программ-эмуляторов
  • Система команд центрального процессора игровой приставки DENDY

Статья «Как составить программу для «DENDY»»

Итак, предположим, что пользователь внимательно прочитал статьи в журнале “Радио” [1], [10] и изготовил самодельный картридж ГИТС с двумя микросхемами РПЗУ. После их прошивки и установки картриджа в слот “Dendy”, на экране телевизора должны появиться картинки испытательных тестов. В принципе, на этом можно остановиться, используя ГИТС для ремонта и покупки телевизоров, формирования тестовых заставок кабельного телевидения, настройки декодеров PAL, проверки работоспособности “Dendy”. Однако, никто не мешает пользователю пойти дальше и попытаться дополнить уже существующие тесты новыми, добавляя в них свою уникальную графику, меню, звуковые треки и даже русифицированные надписи.

Все это получится, если хорошо разобраться во внутреннем устройстве “Dendy” и освоить программирование в среде микропроцессора МСS6502. Предлагаемый материал не требует от читателя узкопрофильной технической подготовки или многолетней практики программирования. Дорогу осилит идущий!

2 ВНУТРЕННЕЕ УСТРОЙСТВО “DENDY”

Первые восьмибитные ИВП появились в середине 80-х годов, благодаря стараниям японской фирмы “Nintendo Co. Ltd.”. Задуманная, как дешевая альтернатива персональным домашним компьютерам, приставка “Nintendo Entertainment System” (сокращенно NES) очень быстро завоевала поклонников во всех уголках земного шара. В Японии она называлась “Famicom” и отличалась конструкцией картриджа. Вскоре клонированные сестры “Famicom” появились на просторах одной шестой части суши под торговой маркой “Dendy”. В начале 90-х годов удачная телевизионная реклама фирмы “Steepler Trade Ltd.” помогла “Dendy” стать нарицательным именем и прочно войти в лексикон миллионов людей, как синоним всех восьмибитных игровых консолей.

Так сложилось, что анализом внутренней структуры “Dendy” первыми стали заниматься радиолюбители, к которым по традиции несли на ремонт всю неисправную импортную электронику. Логично, что и первая публикация на техническую тематику о “Dendy” появились именно в радиолюбительской литературе [2]. Далее последовали углубленные анализы внутреннего устройства с точки зрения программиста [3, 4] и электронщика [5, 6].

Базовой опорой приставки “Dendy” служит связка центрального процессора (ЦП) и видеопроцессора (ВП). Дополняет картину отдельный музыкальный сопроцессор (МС), обменивающийся информацией с ЦП при помощи портов ввода-вывода. Ванглоязычной литературе ЦП называют CPU (Central Processing Unit), ВП — PPU (Picture Processing Unit), MC — APU (Audio Processing Unit).

Адресное пространство ЦП занимает 64 Кб, внутри которого располагается ОЗУ и часть ПЗУ картриджа. Адресное пространство ВП в 8 раз меньше, чем у ЦП. Оно физически не пересекается с адресным пространством ЦП, имея отдельную область ОЗУ и часть ПЗУ картриджа. Чтобы различать, какие компоненты относятся к ЦП, а какие – к ВП, в обозначении первых вводится буква “S”, а последних – “V”. Например, S-ROM и V-ROM – это соответственно ПЗУ в адресном пространстве ЦП и ВП.

Архитектура “Dendy” построена по схеме, ставшей в дальнейшем классической для ИВП следующих поколений. В системе обязательно присутствует ЦП (один или несколько), под руководством которого работают ВП и МС. Каждая из этих частей имеет свою оперативную память. Связь с периферийными устройствами (джойстиками, световым пистолетом) происходит через специализированный контроллер, обрабатывающий по определенному алгоритму поступающую информацию и выставляющий ее для доступа ЦП через порты ввода-вывода. Картридж “Dendy” содержит два отдельных ПЗУ, обслуживающих ЦП (S-ROM) и ВП (V-ROM). Иногда в картридже располагаются микросхемы ОЗУ с литиевой батарейкой для сохранения игровых ситуаций, а также стандартные логические микросхемы.

Рассмотрим подробнее составные части архитектуры “Dendy”.

3 ЦЕНТРАЛЬНЫЙ ПРОЦЕССОР

3.1 СЕМЕЙСТВО МИКРОПРОЦЕССОРОВ MCS65xx

ЦП “Dendy” принадлежит к семейству восьмиразрядных микропроцессоров, программно совместимых с серией MCS65хх разработки фирмы MOS Technology. В свою очередь это семейство представляет собой усовершенствованный вариант процессоров МС68хх фирмы Motorola. Сходства и различия у них примерно такие же, как у микропроцессоров i8080 (Intel) и Z80А (Zilog). Тем не менее, совместимость по машинному коду между MCS65xx и MC68xx отсутствует, хотя архитектуры их аналогичны.

В семейство MCS65xx входит более десяти разновидностей микропроцессоров, но особой популярностью пользуется MCS6502, применявшийся в начале 80-х годов в составе домашних и конторских компьютеров: Commodore-64, Apple-II, BBC Model2, Acorn Atom. Из отечественных машин наиболее близкой по устройству является ПЭВМ “Агат” с производительностью 700 тысяч операций в секунду, которую в свое время предполагали сделать базовой для комплектования компьютерных классов в учебных заведениях. Ее прототипом был компьютер “Apple-II” (1977 год, фирма “Apple Computer”, США).

Совместимые с семейством MCS65xx лицензионные процессоры выпускались параллельно несколькими фирмами: Synertec, UMC, Rockwell International. Последняя известна своими попытками разработки универсального однокристального микрокомпьютера R6531 на базе архитектуры MCS65xx, добавляя на кристалл ОЗУ, ПЗУ и периферийные схемы. Именно такой подход был выбран разработчиками “Dendy”.

Первыми появились так называемые многокристальные модели “Dendy”, в которых применялись две БИС: микросхема ВП серии 6538 (MCS6538, HA6538) и микросхема серии 6527 (MCS6527, HA6527), содержащая вычислительное ядро ЦП и МС. Позднее появились однокристальные модели “Dendy” на основе СБИС серии 6561 (UM6561A), содержащей внутри: ЦП, МС, ВП, ОЗУ, а также контроллер периферийных устройств.

Система команд микропроцесоров многокристальных и однокристальных приставок “Dendy” идентична. Однако, фирмы-изготовители СБИС, в целом придерживаясь принципа сохранения программной совместимости “снизу-вверх”, часто добавляли в систему команд свои собственные новые операции. Например, более десяти новых команд, отсутствующих у MCS6502, выполняют процессоры фирмы Rockwell R65C00/21, R65C02.

Поскольку разработчики СБИС “Dendy” не спешат раскрывать подробности внесенные ими программных новшеств, то предлагается наиболее простое решение – за постулат принимается предположение, что система команд ЦП совместима со “старейшиной” семейства – микропроцессором MCS6502. Практика программирования в кодах MCS6502 показывает полную состоятельность выдвинутой гипотезы.

3.2 РАСПРЕДЕЛЕНИЕ АДРЕСНОГО ПРОСТРАНСТВА ЦП

Микропроцессор MCS6502 имеет несколько необычную структуру, определяющую изначальную разорванность его адресного пространства. Традиционно принято всю доступную ЦП память 64 Кб разбивать на страницы, каждая емкостью 256 байт. Можно образно представить все адресное пространство ЦП в виде книги, состоящей из 256 таких страниц. Распределение адресного пространства ЦП приведено на рисунке 3.1.

Рисунок 3.1 – Распределение адресного пространства ЦП “Dendy”

Некоторые страницы памяти имеют устоявшиеся названия и выполняют строго определенные функции. Так, например, на нулевой странице (Zero Page) по адресам 0000h. 00FFh размещается системная область, ячейки которой использует ЦП при работе с МС, ВП и периферийными устройствами. Считается, что в “Dendy” программист может без риска использовать “серединку” нулевой страницы по адресам 0010h. 009Fh. Это выгодно с точки зрения экономии размера программы и быстродействия, поскольку система команд MCS6502 содержит специальные короткие обращения к нулевой странице.

Однако при разработке нового программного продукта лучше не искушать судьбу и вначале использовать другие области памяти, которые недоступны системе. В дальнейшем, после первичной отладки программы, можно будет без труда ассемблером переназначить ячейки для работы на нулевой странице.

Страница под номером 1 находится по адресам 0100h. 01FFh. Она зарезервирована под стек, длина которого аппаратно ограничена 256 байтами. Стек “растет” вниз (в форме сталактита) в сторону младших адресов. Далее идет ОЗУ пользователя 0200h. 07FFh. Нулевая страница, область стека и основное ОЗУ вследствие неполной дешифрации адресов отображается на карту памяти еще три раза.

Часть пространства 2000h. 3FFFh отводится для связи ЦП с ВП. Основной интерес в этой области представляют 8 портов ввода-вывода, расположенные по адресам 2000h. 2007h. Общение ЦП с МС и периферийными устройствами также производится через порты, но имеющие адреса в диапазоне 4000h. 401Fh.

Верхнюю половину памяти 8000h. FFFFh занимает ПЗУ картриджа S-ROM. Здесь располагаются коды игровых программ, а также три важные точки входа. Каждая из этих точек занимает два байта в области FFFAh. FFFFh. В частности, ячейкиFFFAh, FFFBh содержат адрес программы обработки немаскируемого прерывания NMI; FFFCh, FFFDh – “холодного” старта RESET; FFFEh, FFFFh – маскируемого прерывания IRQ. Объем ПЗУ картриджа может быть меньше или больше 32 Кб. В первом случае ячейки ПЗУ должны обязательно занимать область FFFAh. FFFFh, во втором случае требуется аппаратное переключение страниц памяти в картридже.

Информация в ОЗУ и ПЗУ размещается по принципу “младший байт в младшем адресе”, как у КР580ВМ80A и Z80A. Это означает, что, например, младшая часть адреса, с которого запускается игровая программа при включении питания “Dendy”, находится в ячейке FFFCh, а старшая – в FFFDh. Образец: FFFCh = DCh, FFFDh = 84h, адрес начального запуска 84DCh.

Приоритет прерываний (от высшего к низшему): RESET, NMI, IRQ. Важное следствие наличия трех точек входа на вершине карты памяти ЦП заключается в необходимости заполнения 6 старших ячеек в любой микросхеме РПЗУ, в которой будет размещена запускаемая программа. Этим объясняется факт прошивки в ГИТС [1] 6 дополнительных ячеек при замене РПЗУ емкостью 2 Кб (К573РФ5) на РПЗУ емкостью 8 Кб (КР573РФ6А).

4.1 РАСПРЕДЕЛЕНИЕ АДРЕСНОГО ПРОСТРАНСТВА ВП

Адресное пространство ВП занимает 8 Кб (рисунок 4.1). Начальные адреса 0000h. 1FFFh отводятся под видео-ПЗУ картриджа V-ROM. В нем хранятся образы графических блоков, из которых строится изображение на экране телевизора. По адресам 2000h. 23FFh, 2400h. 27FFh, 2800h. 2BFFh, 2C00h. 2FFFh располагаются четыре экранные области с номерами соответственно 0, 1, 2, 3. Физически их ячейки памяти находятся во внутреннем видео-ОЗУ ВП общей емкостью 2 Кб. Поскольку на каждую экранную область отводится 1 Кб, то в “Dendy” оказываются доступными лишь первые две области из четырех.

Рисунок 4.1 – Распределение адресного пространства ВП “Dendy”

ВП содержит 32 восьмиразрядных регистра цвета, условно называемые RG00. RG1F, запись в которые возможна по адресам соответственно 3000h. 301Fh. Кроме того, ВП имеет внутренний буфер емкостью 256 байт. Особенностью буфера является то, что он не отображается на адресное пространство ВП и не имеет конкретного места на карте памяти. Данный нюанс становится понятным, если учесть, что обращение к буферу происходит через канал прямого доступа в память (ПДП).

4.2 СТРУКТУРА ВП

ГИТС формирует статические изображения, принцип построения которых невозможно уяснить без глубокого знания возможностей ВП. Рассмотрим организацию экранной области “Dendy” с акцентом на малоизвестные факты. Материал достаточно сложный, поэтому потребуется определенная внимательность. Фактически речь пойдет о прямом программировании функций ВП, что в более сложных вычислительных системах скрыто от пользователя посредством микропрограммного управления.

ВП, содержащийся в «Dendy», формирует телевизионный сигнал стандарта PAL (256х240) с частотой кадровой развертки 50 Гц. Для справки, американские (NES) и японские (“Famicom”) версии приставки имеют ВП стандарта NTSC (256×224) с частотой кадровой развертки 60 Гц.

На любом изображении, формируемом в “Dendy”, можно выделить три составляющие: фон, пейзаж и спрайты. Чтобы уяснить различия между этими терминами, удобно воспользоваться понятием “план изображения”.

На экранной картинке “Dendy” различают 4 плана изображения. Самым глубоким (план 4) является фон или, по-другому, холст однотонного цвета. План 2 – это пейзаж, представляющий собой рисунок декорации, на которой происходят игровые действия. Спрайты (фигурки игровых персонажей) могут перемещаться как между холстом и пейзажем (план 3), так и поверх пейзажа (план 1). Часть пикселов, входящих в пейзаж и спрайты, могут задаваться прозрачными, через них будет просвечиваться фон изображения. В итоге получается картинка, похожая на съемку мультипликационного фильма.

ВП автономно формирует телевизионный растр с прогрессивной разверткой размером 256 х 240 пикселов (256 точек изображения в каждой из 240 строк). Сравнение с разрешающей способностью телевизора, имеющего 625 строк разложения в кадре, явно не в пользу “Dendy”. Это понятно, ведь вычислительная мощность у ВП не так велика. Тем не менее, изображение занимает всю площадь экрана, правда, за счет увеличения размеров пикселов и увеличения «зернистости» картинок.

Фон может окрашивать сразу весь экран на выбор одним из 56 оттенков цвета. Пейзаж также строится во весь экран, но разбивается на 960 (32 х 30) блоков. Совокупность из 16 (4 х 4) блоков называется окном. Каждый блок имеет размер 8 х 8 пикселов. Внутри блока может быть создан любой точечный рисунок, содержащий палитру максимум из четырех разных цветов.

То, что в “Dendy” принято называть спрайтом [4], занимает один блок размером 8 х 8 пикселов. Одновременно на экране могут присутствовать 64 независимых спрайта, из которых строятся фигурки персонажей. “Лишними” спрайтами заполняют “бреши” в пейзаже. Как видно, в “Dendy” фигурка персонажа и спрайт – это не одно и то же.

На рисунке 4.2 показана привязка блоков к абсолютным адресам экранной области ВП. Здесь и далее речь идет об экранной области 2400h. 27FFh, которая выбрана основной в ГИТС. Структура области 2000h…23FFh – аналогична.

Итого, на экранной области можно выделить следующие элементы:

— блок = 8 х 8 пикселов;

— кластер = 4 блока = 16 х 16 пикселов;

— окно = 4 кластера = 16 блоков = 32 х 32 пикселов;

— экран = 56 полных + 8 неполных окон = 240 кластеров = 960 блоков = 256 х 240 пикселов.

4.3 ФОРМИРОВАНИЕ ИЗОБРАЖЕНИЙ

В каждой ячейке памяти 2400h. 27BF адресного пространства ВП содержится байт, указывающий на координату местонахождения графического образа блока в V-ROM, который будет выведен на конкретное место экрана согласно рисунку 4.2. Байт, хранящийся в ячейке памяти, определяет условный код блока (УКБ), выраженный шестнадцатиричным числом от 00h до FFh.

Каждому УКБ поставлены в соответствие определенные 16 байтов в памяти видео-ПЗУ V-ROM по адресам 0000h. 1FFFh. Поскольку объем видео-ПЗУ составляет 8 Кб, то в нем помещается информация о 512 УКБ. Важное следствие — если в картридже ГИТС в роли РПЗУ DS2 будет установлена микросхема К573РФ5, то количество разновидностей УКБ уменьшится до 128. Чтобы не запутаться, первые 256 УКБ считают относящимися к фонту 0, они занимают ячейки 0000h. 0FFFh, вторые – к фонту 1, они занимают ячейки 1000h. 1FFFh.

Рисунок 4.2 — Раскладка экранной области “Dendy” по адресам 2400h. 27FFh

Пример. По адресу 252Eh записан код 23h. Номер УКБ равен 23h, следовательно, на экран телевизора в блок, имеющий координаты “столбец 15 – строка 10”, будет выведено графическое изображение, содержащееся в видео-ПЗУ по адресам 0230h. 023Fh для фонта 0 или 1230h. 123Fh для фонта 1. Номер фонта определяет программист, предварительно записывая определенное число в один из регистров связи с ВП (более точно – соответственно “0” или “1” в разряд 4 регистра 2000h).

Графическое изображение любого блока формируется из двух шаблонов, сложенных “стопкой”. В памяти видео-ПЗУ они располагаются последовательно друг за другом, сначала нижний, затем верхний шаблон, по 8 байт каждый. На рисунке 4.3 показан пример построения буквы “Н” для УКБ с номером F7h из фонта 1. Подобным образом можно сформировать буквы кириллицы и цифры от 0 до 9.

Рисунок 4.3 — Графический образ буквы “Н”

Каркас буквы определяется нижним шаблоном с байтами 1F70h. 1F77h. Наличие “1” в конкретном разряде каждого байта указывает на обязательную засветку одной точки (пиксела) на экране телевизора, наличие “0” – засветка может как присутствовать, так и отсутствовать, что зависит от кода верхнего шаблона.

Следующие 8 байтов 1F78h…1F7Fh относятся к верхнему шаблону, определяющему код цвета (КЦ) каждого пиксела блока. Общий контур цветного изображения получается наложением верхнего шаблона на нижний, при этом теоретически можно использовать любые 4 цветовых оттенка из 56, а в пределах всего экрана – не более 13. Если все байты верхнего шаблона имеют одинаковое значение, то контур изображения будет определяться только нижним шаблоном, причем максимум в двухцветной раскраске.

Некоторые пояснения. Как определить номер КЦ? Вначале следует мысленно переместить верхний шаблон на нижний, причем так, чтобы байты 1F70h и 1F78h совпадали друг с другом. Теперь каждый из получившихся 64 пикселов можно охарактеризовать двумя цифрами, первой записывается цифра “0” или ”1” верхнего, а затем — нижнего шаблонов. Например, крайний слева вверху пиксел на рисунке 4.3 – это разряд 7 ячейки 1F70h нижнего шаблона и разряд 7 ячейки 1F78h верхнего шаблона. Поскольку в обоих разрядах присутствует цифра “0”, то общий код равен “00”, следовательно, КЦ=0. Аналогично, пикселы центральной дужки буквы “Н” имеют КЦ=2 (код “10”), “боковинок” – КЦ=1 (код “01”), а их верхних частей – КЦ=3 (код “11”). Каждый КЦ входит в формулу, которая однозначно определяет номер регистра цвета, которым подсвечиваются пикселы.

Случай КЦ=0 означает “прозрачный” цвет пиксела, то есть через него в случае раскраски пейзажа или спрайта будет просвечиваться низлежащий план изображения. Графический рисунок целого блока может совсем исчезнуть, если регистры цвета, участвующие в его формировании, будут настроены на вывод одинакового цветового оттенка. Если же все 16 (32) регистра цвета будут иметь одинаковый код, тогда весь экран автоматически окрасится одним цветом. К примеру, таким приемом в ГИТС осуществляется формирование сигналов однотонного цвета “равномерно светящееся поле”.

Адреса 27С0h. 27FFh в области памяти ВП отводятся под атрибуты пейзажа. Каждый из этих 64 байтов задает параметры окна, состоящего из четырех кластеров (см. рисунок 4.2). Под кластером понимается совокупность из 4 рядом расположенных блоков пейзажа. Итого, каждый байт атрибутов пейзажа отвечает за параметры своего строго определенного квадратного окна размером 4 х 4 блока. Исключение составляют байты 27F8h…27FFh, которым “достались” нижние половинки окон экрана размером 2 х 4 блока.

Для блоков, входящих в один кластер, атрибуты пейзажа одинаковы, что задается кодом кластера (КК) по образцу таблицы 4.1. В качестве примера на рисунке 4.2 было показано, какие разряды байта атрибутов пейзажа ячейки 27E9h определяют коды близлежащих кластеров.

Таблица 4.1 — Назначение разрядов байта атрибута пейзажа

Разряды байта атрибутов пейзажа

Пример байта данных 63h

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *