В данной статье рассматриваются архитектура процессора, его внутренние регистры, способы адресации, система команд и прерывания. Здесь приводится лишь справочная информация; более полные сведения о программировании на языке ассемблера для процессора 6502 можно найти в сети Internet.

Как отмечалось выше, в игровых приставках, совместимых со стандартом NES, используется центральный процессор, который аналогичен известному микропроцессору 6502 фирмы MOS TECHNOLOGY. От оригинала он отличается отсутствием десятичного режима выполнения арифметических команд. В PAL-версии приставки тактовая частота процессора составляет 1,773447 МГц, а в NTSC-версии – 1,7897725 МГц.

Микропроцессор обменивается информацией с другими устройствами посредством 16-разрядной шины адреса, 8-разрядной шины данных и шины управления. 16 разрядов шины адреса позволяют процессору обращаться к 64 Кб памяти (65535 байт).

Регистры внешних устройств адресуются процессором так же, как и ячейки памяти, и находятся в общем адресном пространстве микропроцессора.

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

Регистры процессора

Центральный процессор игровой приставки DENDY содержит пять 8-разрядных регистров и один 16-разрядный. Каждый регистр имеет свое имя и отличается по способам использования.

Аккумулятор является наиболее часто применяемым регистром микропроцессора. Он служит для загрузки данных в другие регистры, проведения любых математических, и логических операций, а также для иных целей. Фактически это 8-разрядный регистр, который в программах на языке ассемблера обозначается буквой «А».

Индексный регистр X задействуется микропроцессором для доступа к ячейкам памяти посредством индексного метода адресации, о котором рассказывается ниже. Этот 8-разрядный регистр необходим при обработке таблиц, хранящихся в памяти.

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

Регистр состояния процессора Р хранит информацию о режиме работы процессора и о результатах проведенных вычислений. Каждый бит этого 8-разрядного регистра является флагом, то есть изменяет свое состояние при определенных условиях. На работу процессора можно влиять путем модификации содержимого этого регистра.

Структура регистра состояния центрального процессора игровой приставки 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 представлены на рисунке.

Аккумуляторная адресация. При использовании этого способа операция производится над содержимым аккумулятора.

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

Непосредственная адресация. В этом случае 8-разрядный операнд хранится в памяти сразу за кодом команды, то есть по адресу РС+1. В программах на языке ассемблера непосредственная адресация обозначается знаком # перед операндом.

Прямая адресация. При работе с данным алгоритмом адресации в команде указывается адрес расположения операнда в памяти компьютера.

Прямая адресация нулевой страницы. Если операнд расположен в нулевой странице памяти (адреса 00 00h – 00FFh), можно задействовать команды с прямой адресацией нулевой страницы, которые занимают меньше места в памяти и быстрее выполняются. Первый байт адреса всегда равен 0 Неявная адресация. Для команд, применяющих такой метод, расположение данных строго фиксировано и дополнительных указаний не требуется.

Индексированная по X адресация. Все команды, применяющие этот метод, занимают в памяти компьютера три байта. Первый байт содержит код команды, второй и третий – базовый адрес. -Исполнительный адрес операнда получается суммированием базового адреса с содержимым регистра X.

Индексированная по Y адресация. Аналогична рассмотренной выше, только вместо регистра X используется регистр Y.

Индексированная по X адресация нулевой страницы. В данном случае команды занимают два байта: первый содержит код команды, а второй – базовый адрес в нулевой странице памяти. Исполнительный адрес операнда образуется путем сложения базового адреса с содержимым регистра X микропроцессора. При попытке адресоваться за пределы нулевой страницы (если сумма базового адреса и содержимого индексного регистра больше 0FFh) формируется исполнительный адрес 0000h.

Индексированная по Y адресация нулевой страницы. Аналогична рассмотренному выше способу, только вместо регистра X применяется регистр Y микропроцессора.

Индексно-косвенная адресация. Команды с таким методом адресации всегда двухбайтные. Первый байт включает в себя код команды, а второй -базовый адрес в нулевой странице памяти. Исполнительный адрес вычисляется по следующему алгоритму:

  1. Базовый адрес суммируется с содержимым регистра X. При этом старший байт полученного адреса всегда равен 00h (то есть FFh + 02h = 01h), а не 0101h.
  2. Из ячейки с вычисленным адресом считывается младший байт адреса операнда.
  3. Адрес ячейки памяти увеличивается на 1. Если адрес был OFFh, то следующий адрес будет 00h, то есть адресации за пределы нулевой страницы не происходит.
  4. Из ячейки памяти с полученным адресом считывается старший байт адреса операнда.
  5. Из ячейки памяти с вычисленным адресом извлекается операнд.

Косвенно-индексная адресация. Команды, использующие данный метод, также занимают в памяти компьютера два байта. Первый байт содержит код операции, а второй – адрес в нулевой странице. Исполнительный адрес операнда вычисляется по следующему алгоритму:

  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, I NX, 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 приведена в литературе.

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

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

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

Прочитав из памяти вектор прерывания, процессор записывает его в программный счетчик и запускает процедуру обработки прерывания.

Рассмотрим возможные типы прерываний и процедуры их обработки.

Маскируемое прерывание IRQ. Процедуру обработки данного прерывания центральный процессор выполняет каждый раз, когда получает сигнал низкого уровня по шине IRQ, если флаг I в регистре состояния сброшен. Эту процедуру также можно вызвать, выполнив команду процессора BRK. В случае программного прерывания перед началом его обработки в регистре состояния процессора устанавливается флаг В.

При обслуживании запроса на прерывание в стеке сохраняются состояния программного счетчика и регистра состояния процессора, после чего выполняется программа, адрес начала которой записан в ячейках памяти FFFEh и FFFFh. Для возврата из прерывания применяют команду RTI. При этом из стека считываются сохраненные значения регистра состояния микропроцессора и программного счетчика, а затем продолжается исполнение прерванной программы.

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

Немаскируемое прерывание NMI. Это самый важный запрос на прерывание в игровой приставке. Любая программа обязательно содержит процедуру его обработки.

Каждый раз, когда заканчивается формирование очередного кадра (50 раз в секунду для стандарта PAL и 60 раз в секунду для стандарта NTSC), по переднему фронту кадрового гасящего импульса видеопроцессор приставки формирует сигнал запроса немаскируемого прерывания и посылает его центральному процессору.

Процессор прерывает исполнение программы, сохраняет в стеке значения программного счетчика и регистра состояния, после чего запускает процедуру обслуживания немаскируемого прерывания, адрес которой записан в ячейках памяти FFFAh и FFFBh. Возврат из процедуры обработки осуществляется также командой RTI.

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

Сброс микропроцессора. Данное прерывание происходит при включении питания приставки и при поступлении сигнала низкого уровня на вход RESET. При этом центральный процессор копирует в программный счетчик содержимое ячеек памяти с адресами FFFCh, FFFDh и начинает выполнение программы. Состояние регистров процессора не изменяется.

Многочисленные владельцы телефонов от Apple, найдут возможность, в случае необходимости, произвести ремонт айфона в сервисном центре по ссылке. Там же можно продать сломанный аппарат или провести диагностику работающего.




Дополнительные материалы:

  • Игровая приставка DENDY Игровая приставка NES (NINTENDO ENTERTAINMENT SYSTEM), более известная в нашей стране под именем DENDY (а также КЕНГА, FAMICOM и еще под несколькими псевдонимами), одной из первых […]
  • Структурная схема игровой приставки DENDY В этом разделе архитектура игровой приставки DENDY рассматривается с точки зрения программирования, подробно описываются центральный процессор, способы формирования изображения, работа […]
  • Microsoft Xbox One Среди всех аспектов, освещенных во время церемонии презентации  Microsoft Xbox One, одна деталь осталось нераскрытой - это цене консоли. Тем не менее, некоторые источники за пределами […]
  • Обновления для Xbox One Большое обновление для Xbox One  от Microsoft, выпущенное в сентябре становится доступно на консолях обычных пользователей, как раз через месяц после того как компания сделала его […]
Share This

Поделитесь!

Если статья показалась Вам полезной.