Сейчас сделаю
-- 11 июн 2013, 12:21 --
Описание внутренней архитектуры процессора 6502:Процессор делится на 2 части : верхняя и нижняя.
В верхней части находится управляющая часть, которая выдает ряд контрольных линий ("команд") для управления нижней частью.
В нижней части находится контекст процессора : внутренние шины и регистры, с одним исключением - регистр флагов (P) находится в верхней части в "размазанном" виде.
Работа процессора тактируется тактовым импульсом PHI0, при этом используются оба полутакта.
Во время первого полутакта (PHI1) процессор находится в режиме "говорю". В это время процессор выдает наружу данные.
Во время второго полутакта (PHI2) процессор находится в режиме "слушаю", во время этого полутакта внешние устройства могут помещать данные на шину данных, чтобы процессор их "обработал".
РегистрыX, Y : индексные регистры
S: указатель стека
AI, BI : входные значения для АЛУ
ADD : промежуточные результат операции на АЛУ
AC : аккумулятор
PCH/PCL : program counter, состоящий из 2-х половинок
ABH/ABL : регистры для вывода на внешнюю шину адреса
DL : data latch, хранит последнее прочитанное значение внешней шины данных
DOR : data output register, содержит значение которое будет записано в шину данных
Внешние шиныВнешних шин всего две : 16-разрядная адресная (ADDR) и 8-разрядная шина данных (DATA). Адресная шина односторонняя - писать в неё может только процессор. Шина данных двунаправленная.
Внутренние шиныADH/ADL : шина адреса
SB : special bus, шина для обмена регистрами
DB : внутренняя шина данных
Во время второго полутакта (PHI2) все внутренние шины подзаряжаются и имеют значение 0xff.
Соединения регистров с шинамиX, Y, S <=> SB
S => ADL
ADH => ABH
ADL => ABL
SB => AI
DB, ADL => BI
ADD => ADL, SB
AC <=> SB
SB <=> DB
SB <=> ADH
ADH <=> PCH
ADL <=> PCL
PCH, PCL => DB
DL <=> ADH, ADL, DB
Дополнительно внутрення шина данных может быть специальным образом соединена с разрядами регистра флагов (P).
Последовательно соединяя шины и регистры процессор выполняет разнообразные инструкции. Многообразие соединений обеспечивает разнообразие команд процессора, а разделение команд на такты позволяет выполнять сложные действия. Дополнительно производится управление АЛУ (сложение, логическое-И и пр.)
Управляющие командыУправление адресной шиной и адресными регистрами:
ADH/ABH : ADH => ABH
ADL/ABL : ADL => ABL
0/ADL0, 0/ADL1, 0/ADL2 : используется для установки вектора прерываний, путем управления младшими 3 разрядами шины ADL. Например 0/ADL0 означает что 0-й разряд шины ADL устанавливается в 0.
Значение с адресных регистров выводится на внешнюю шину адреса.
Управление индексными регистрами и указателем стека:
X/SB : X => SB
Y/SB : Y => SB
SB/X : SB => X
SB/Y : SB => Y
S/SB : S => SB
S/ADL : S => ADL
SB/S : SB => S
S/S : если не выполняется команда SB/S, то выполняется эта. Она просто "рефрешит" регистр S.
Управление АЛУ:
NDB/ADD : #DB => BI
DB/ADD : DB => BI
0/ADD : 0 => AI
SB/ADD : SB => AI
ADL/ADD : ADL => BI
1/ADDC : входной перенос = 1 (carry in)
ANDS, EORS, ORS, SRS, SUMS : команды АЛУ
#DAA : десятичная коррекция после сложения
#DSA : десятичная коррекция после вычитания
ADD/SB06, ADD/SB7 : ADD => SB
ADD/ADL : ADD => ADL
SB/AC : SB => AC
AC/SB : AC => SB
AC/DB : AC => DB
Управление внутренними шинами:
SB/DB : SB <=> DB, соединить две шины
SB/ADH : SB <=> ADH
0/ADH0, 0/ADH17 : 0 => ADH
Управление program counter:
1/PC : сделать инкремент program counter
ADH/PCH : ADH => PCH
PCH/PCH : Если не выполняется ADH/PCH, то выполняется эта команда (рефрешить PCH)
PCH/ADH : PCH => ADH
PCH/DB : PCH => DB
ADL/PCL : ADL => PCL
PCL/PCL : Если не выполняется ADL/PCL, то выполняется эта команда (рефрешить PCL)
PCL/ADL : PCL => ADL
PCL/DB : PCL => DB
Управление data latch:
DL/ADH : DL <=> ADH
DL/ADL : DL <=> ADL
DL/DB : DL <=> DB
При этом если процессор выводит наружу данные, то например команда DL/DB помещает значение находящееся на шине DB в регистр DOR, а с него значение попадает на внешнюю шину. А если процессор находится в режиме чтения, то в этом случае значение с внешней шины данных вначале попадает на data latch (DL), а с него поступает на внутренние шины.
-- 11 июн 2013, 12:30 --
Небольшое замечание : нужно помнить, что регистры постоянно "хранят" свои значения, в то время как шины просто соединяют 2 точки, то есть значение на них может быть : 0, 1 и "Z" (не соединено).
Также необходимо помнить о "конфликте шин" : 2 устройства не должны пихать одновременно на шину свои данные. Должно быть 2 точки : источник и потребитель(и).