| На главную страницу |
Центрaльный процессорРегистры процессораCпособы адресацииCистема командСистема прерыванийВ данном разделе рассматриваются архитектура процессора, его внутренние регистры, способы адресации, система команд и прерывания. Здесь приводитcя лишь справочная информация, более полные сведения о программировании на языке ассемблера для процессора 6502 можно найти в изданиях, указанных в конце книги, и в сети Internet. Как отмечалось ранее в игровых приставках, совместимых со стандартом NES, используется
центральный процессор, который аналогичен известному микропроцессору 6502 фирмы MOS
TECHNOLOGY. От оригинала он отличается отсутствием десятичного режима выполнения
арифметических команд. В PAL-версии приставки тактовая частота процессора составляет -
1,773447 МГц, а в NTSC-версии - 1,7897725 МГц.Микропроцессор обменивается информацией с другими устройствами посредством 16-разрядной шины адреса, 8-разрядной шины данных и шины управления. 16 разрядов шины адреса позволяют процессору обращаться к 64 Кб памяти (65535 байт). Регистры внешних устройств адресуются процессором так же, как и ячейки памяти, и находятся в общем адресном пространстве микропроцессора. Структурная схема центрального процессора
Центральный процессор игровой приставки DENDY содержит пять 8-разрядных регистров и один 16-разрядный. Каждый регистр имеет свое имя и отличается по способам использования. Аккумулятор является наиболее часто применяемым регистром микропроцессора. Он служит для загрузки данных в другие регистры, проведения любых математических и логических операций, а также для иных целей. Фактически это 8-разрядный регистр, который в программах на языке ассемблера обозначается буквой “А”. Индексный регистр X задействуете я микропроцессором для доступа к ячейкам памяти посредством индексного метода адресации, о котором рассказывается ниже. Этот 8-разрядный регистр необходим при обработке таблиц, хранящихся в памяти. Индексный регистр Y по своему назначению и использованию аналогичен индексному регистру X. Однако в их функционировании есть некоторые различия, которые будут рассмотрены при описании методов адресации микропроцессора. Регистр состояния процессора Р хранит информацию о режиме работы процессора и о результатах проведенных вычислений. Каждый бит этого 8-разрядного регистра является флагом, то есть изменяет свое состояние при определенных условиях. На работу процессора можно влиять путем модификации содержимого этого регистра. Структура регистра состояния центрального процессора игровой приставки DENDY приведена ниже:
Рассмотрим назначение отдельных разрядов регистра Флаг С играет роль флага переноса, который используется при выполнении сложения или вычитания. Разряд С регистра состояния процессора становится равным 1, если результат выполнения команды сложения больше 255 (0FFh) или если результат выполнения команды вычитания меньше 0. Таким образом, этот флаг представляет собой как бы дополнительный разряд аккумулятора, позволяющей проводить арифметические операции с числами, разрядность которых превышает 8 бит. Флаг Z-флаг нулевого результата, который равен 1, если результатом выполнения команды является 0. Флаг I -флаг прерываний, устанавливаемый и сбрасываемый командами процессора SEI и CLI. 1 в этом разряде запрещает процессору обрабатывать запросы прерывания, поступающее по линии IRQ. Более подробно эта тема рассматривается при описании системы прерываний процессора. Флаг D - флаг десятичного режима. Микропроцессор игровой приставки не поддерживает работу арифметических команд в двоично-десятичном коде, поэтому состояние данного флага не влияет на функционирование процессора. Программист может использовать этот бит регистра состояния по своему усмотрению. Состояние флага изменяется программно командами SED и CLD. Оригинальный микропроцессор 6502 позволяет складывать и вычитать числа как в двоичном, так и в двоично-десятичном коде. Если флаг D равен 0, то операнды команд сложения и вычитания рассматриваются как двоичные числа, а если установлен в 1 - как двоично-десятичные Флаг В -флаг программного прерывания, устанавливается при выполнении команды BRK Флаг V -флаг переполнения. Равен 1, если результат арифметической операции над числами со знаком выходит за допустимые пределы или если при выполнении арифметической операции осуществлялся перенос из шестого разряда в седьмой. Флаг N -флаг знака, который равен седьмому разряду результата арифметической операции. Указатель стека S содержит младший байт адреса первой свободной ячейки в специальной структуре данных, называемой стеком. В стек можно записывать данные, а при обработке прерываний или при вызове подпрограммы здесь сохраняется адрес возврата. В рассматриваемом микропроцессоре стек всегда располагается в первой странице памяти, которая находится в диапазоне 0100h-0IFFh, таким образом, для указания адреса вершины стека достаточно 8-разрядного регистра. Стек растет вниз, то есть от адреса 01ffh к адресу 0100h. Счетчик команд PC представляет собой единственный 16-разрядный регистр центрального процессора игровой приставки DENDY. Его назначение - указывать адрес команды, которая выполняется микропроцессором. ( Центральный процессор приставки регулярно извлекает команду, размешанную в памяти по адресу, на который указывает счетчик команд, увеличивает значение счетчика, обрабатывает команду и повторяет этот цикл снова. Команды перехода позволяют изменить содержимое программного счетчика и задать необходимый порядок выполнения команд, размешанных в памяти. Способы адресацииБольшинство команд процессора обеспечивают выполнение действий с какими-либо данными. Например, для сложения нужны два числа. Один из операндов микропроцессора приставки всегда размешается в аккумуляторе, куда после выполнения команды помешается результат. Второй операнд содержится в памяти по исполнительному адресу. Исполнительный адрес - это фактический номер ячейки памяти, начиная с которой располагаются необходимые для процессора команды или данные. Возможные приемы формирования процессором исполнительного адреса называются способами адресации. Описываемый процессор насчитывает тринадцать различных способов адресации. Аккумуляторная адресация. При использовании этого способа операция производится над содержимым аккумулятора Например : LSR А , Логический сдвиг байта , из аккумулятора вправо Неявная адресация. Для команд, применяющих такой метод, расположение данных строго фиксировано и дополнительных указаний не требуется. Например : TAX , Переслать данные из А в X Непосредственная адресация. В этом случае 8-разрядный операнд хранится в памяти сразу
за кодом команды, то есть по адресу РС+1. В программах на языке ассемблера непосредственная адресация
обозначается знаком ft перед операндом | ||||||||||||||||||||||||||||||||||||||||||||||||||
Прямая адресация. При работе с данным алгоритмом адресации в команде указывается
адрес расположения операнда в памяти компьютера. | ||||||||||||||||||||||||||||||||||||||||||||||||||
Прямая адресация нулевой страницы. Если операнд расположен в нулевой странице
памяти (адреса 0000h-00FFh), можно задействовать команды с прямой адресацией нулевой
страницы, которые занимают меньше места в памяти и быстрее выполняются. Первый байт
адреса всегда равен 0 и подставляется процессором автоматически. | ||||||||||||||||||||||||||||||||||||||||||||||||||
Индексированная по X адресация. Все команды, применяющее этот метод, занимают в
памяти компьютера три байта. Первый байт содержит код команды, второй и третий
базовый адрес. Исполнительный адрес операнда получается суммированием базового адреса
с содержимым регистра X. | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
Индексированная по Y адресация. Аналогична рассмотренной выше, только вместо
регистра X используется регистр Y. | ||||||||||||||||||||||||||||||||||||||||||||||||||
Индексированная по X
адресация нулевой страницы. В данном
случае команды занимают
два байта, первый содержит код команды, а
второй - базовый адрес в нулевой странице
памяти. Исполнительный адрес операнда
образуется путем сложения базового адреса с
содержимым регистра X микропроцессора.
При попытке адресоваться за пределы нулевой
страницы (если сумма
базового адреса и содержимого индексного
регистра больше 00FFh)
формируется исполнительный адрес
0000h | ||||||||||||||||||||||||||||||||||||||||||||||||||
Индексированная по Y адресация нулевой страницы.
Аналогична рассмотренному выше
способу, только вместо регистра X применяется регистр
Y микропроцессора. Индексно-косвенная
адресация. Команды с таким методом адресации всегда
двухбайтные. Первый байт включает в себя код команды, а
второй-базовый адрес в нулевой странице памяти. Исполнительный
адрес вычисляется по следующему алгоритму:
| ||||||||||||||||||||||||||||||||||||||||||||||||||
Косвенно-индексная
адресация. Команды, использующее данный метод, также
занимают в памяти компьютера два байта. Первый байт содержит код
операции, а второй-адрес в нулевой странице.
Исполнительный адрес операнда вычисляется по следующему алгоритму
| ||||||||||||||||||||||||||||||||||||||||||||||||||
|
Относительная адресация. Этот метод адресации применяется в командах перехода.
Первый байт команды содержит код операции, а второй-смешение в диапазоне от-128 до
127. Отрицательное смешение указывается в дополнительном коде. При выполнении команд
перехода смешение прибавляется к содержимому программного счетчика для получения
адреса следующей выполняемой команды. Не забывайте, что смешение складывается с
содержимым программного счетчика, когда тот указывает на команду, идущую за командой
перехода. | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
Косвенная адресация. С данным методом способна работать только команда безусловного перехода JMP. При этом в команде задается адрес ячейки памяти, содержащей адрес
перехода. Обратите внимание, выхода за пределы страницы при извлечении адреса перехода
из памяти не будет, то есть старший байт адреса не изменится. Например, при выполнении
команды JMP ($C0FF) , младший байт адреса извлекается из ячейки памяти с адресом C0FFh,
старший байт - из ячейки с адресом C000h, а не C100h, как можно было бы ожидать. | ||||||||||||||||||||||||||||||||||||||||||||||||||
Система команд
Установка флагов в соответствии с результатом выполнения поразрядного логического И Методы адресации : ABS-прямая, указывается полный 16-разрядный адрес операнда ABS.X-индексированная по X, указывается базовый 16-разрядный адрес, к которому прибавляется смешение из регистра X, ABS.Y-индексированная по Y, указывается базовый 16-разрядный адрес, к которому прибавляется смешение из регистра Y АСС-аккумуляторная, операнд в регистре А процессора. IMM-непосредственна я, 8-разрядный операнд расположен сразу за кодом команды. IMPL-неявная, операнды не указываются. IND-косвенная, задается адрес ячейки памяти, в которой хранится адрес операнда. IND.X-индексно-косвенная, указывается 8-разрядный адрес в нулевой странице, к которому прибавляется содержимое регистра X,, после чего из ячейки памяти с вычисленным адресом извлекается полный 16-разрядный адрес операнда, IND,Y - косвенно-индексная, в нулевой странице указывается 8-разрядный адрес, после чего из заданной ячейки памяти считывается 16-разрядный базовый адрес, к которому прибавляется содержимое регистра Y, и из ячейки с вычисленным адресом извлекается операнд, REL-относительна я, в команде указывается 8-разрядное смешение относительно содержимого счетчика команд PC, ZP - адресация нулевой страницы, в команде задается 8-разрядный адрес, определяющей ячейку памяти нулевой страницы, где хранится операнд, ZP,X-индексированная по X адресация нулевой страницы, указывается 8-разрядный базовый адрес в нулевой странице, к которому прибавляется содержимое регистра X, и из ячейки памяти с вычисленным адресом извлекается операнд, ZР,Y-индексированная по Y адресация нулевой страницы, в нулевой странице указывается 8-разрядный базовый адрес, к которому прибавляется содержимое регистра Y, и из ячейки памяти с вычисленным адресом извлекается операнд Условные обозначения а16 -16-разрядный адрес а16h - старший байт 16-разрядного адреса а16i - младший байт 16-разрядного адреса а8-8-разрядный адрес в нулевой странице d8- непосредственный 8-разрядный операнд i8-8-разрядное смешение в диапазоне от-128 до 127 Cистема прерыванииЦентральный процессор игровой приставки DENDY может обрабатывать три независимых запроса ма прерывание. В таком случае выполнение программы приостанавливается, в стеke сохраняется регистр состояния процессора и текущее значение программного счетчика, а затем из памяти считывается вектор прерывания. Вектор прерывания - это адрес программы, которая должна выполняться каждый раз, когда центральный процессор получает запрос на прерывания от внешних устройств. Прочитав из памяти вектор прерывания, процессор записывает его в программный счетчик запускает процедуру обработки прерывания. Рассмотрим возможные типы прерываний и процедуры их обработки. Маскируемое прерывание IRQ. Процедуру обработки данного прерывания центральный процессор выполняет каждый раз, когда получает сигнал низкого уровня по шине IRQ, если флаг I в регистре состояния сброшен. Эту процедуру также можно вызвать, выполнив команду процессора BRK.В случае программного прерывания перед началом его обработки в регистрe состояния процессора устанавливается флаг В При обслуживании запроса на прерывание в стеке сохраняются состояния программного счетчика и регистра состояния процессора, после чего выполняется программа, адрес начала которой записан в ячейках памяти FFFEh и FFFFh . Для возврата из прерывания применяют команду RTI. При этом из стека считываются сохраненные значения регистра состояния микропроцессора и программного счетчика, а затем продолжается исполнение прерванной программы. В стандартной конфигурации игровой приставки сигнал запроса маскируемого прерывания IRQ выведен на разъемы расширения и подключения картриджа, однако игровые программы используют только возможность программного прерывания при выполнении команды BRK. Немаскируемое прерывание NMI. Это самый важный запрос на прерывание в игровой приставке. Любая программа обязательно содержит процедуру его обработки. Каждый раз, когда заканчивается формирование очередного кадра (50 раз в секунду для стандарта PAL и 60 раз в секунду для стандарта NTSC), по переднему фронту кадрового гасящего импульса видеопроцессор приставки формирует сигнал запроса немаскируемого прерывания и посылает его центральному процессору. Процессор прерывает исполнение программы, сохраняет в стеке значения программного счетчика и регистра состояния, после чего запускает процедуру обслуживания немаскируемого прерывания, адрес которой записан в ячейках памяти FFFAh и FFFBh. Возврат из процедуры обработки осуществляется также командой RTI Особая важность этого прерывания для игровой приставки объясняется тем, что центральный процессор может обмениваться данными с видеопамятью только в те моменты, когда формируется кадровый гасящий импульс, начало которого и вызывает запрос на прерывание. Таким образом, программа обработки немаскируемого прерывания в любой видеоигре осуществляет запись в регистры видеопроцессора и пересылку заранее подготовленных данных в видеопамять. Сброс макропроцессора. Данное прерывание происходит при включении питания приставки и при поступлении сигнала низкого уровня на вход RESET. При этом центральный процессор копирует в программный счетчик содержимое ячеек памяти с адресами FFFCh, FFFDh и начинает выполнение программы. Состояние регистров процессора не изменяется. Вверх |