Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




Джойстики.

 

Нажатие на клавиши джойстиков не вызывает в приставке никаких событий. Опрос джойстиков чисто программный, его частота должна выбираться программистом, исходя из необходимой точности и скорости реакции пользователя на события системы. Естественно, что очень частый опрос может замедлить работу системы, да и не стоит забывать, что джойстик это механическое устройство, а пользователь не может работать со скоростью ЭВМ (пусть даже такой как NES).

И так – как было сказано выше, для опроса состояния джойстиков используются два порта из адресного пространства CPU - $4016 и $4017. Алгоритм следующий: сначала необходимо «зафиксировать» состояние кнопок в сдвиговом регистре джойстиков (обоих сразу, если оба подключены). Для этого формируется строб, «защелкивающий» этот регистр – т.е. по адресу $4016 младший бит сначала устанавливается в единицу а затем в ноль (строб). Далее можно прочесть состояние кнопок джойстика на момент «защелкивания». Информация считывается в последовательном коде (из сдвигового регистра джойстика по синхросигналу CPU). Младший бит порта $4016 – первый джойстик (Порт A), порта $4017 – второй джойстик (Порт B). Информация считывается в следующей последовательности:

 

1 = A 9 = Ignored 17 = +--+

2 = B 10 = Ignored 18 = +-- Идентификатор устройства

3 = SELECT 11 = Ignored 19 = |

4 = START 12 = Ignored 20 = +--+

5 = UP 13 = Ignored 21 = 0

6 = DOWN 14 = Ignored 22 = 0

7 = LEFT 15 = Ignored 23 = 0

8 = RIGHT 16 = Ignored 24 = 0

 

Нажатой кнопке соответствует единица, не нажатой – ноль.

 

 

Ок.

 


Приложение №1. Система команд 6502.

 

Рассмотрим систему команд архитектуры 6502. В Денди используется именно эта модель, за исключением блока десятичной арифметики.

Процессор оперирует целыми восьмиразрядными числами. Содержит 6 программно-доступных регистров. Из них 5 – восьмиразрядных, и 1 – шестнадцатиразрядный программный счетчик.

 

· A – регистр - аккумулятор. Как и большинство «простых» архитектур – 6502 является «аккумуляторной», то есть во всех, или почти во всех, операциях явно или неявно участвует аккумулятор.

· PC – программный счетчик. Единственный 16-ти разрядный регистр – указатель выполняемой команды (классически).

· S – регистр - указатель вершины стека (первой свободной ячейки). Стек находится в пространстве адресов 0100h – 01FFh и «растёт» от старшего к младшему.

· P – регистр флагов.

o P[0] - “C” – “ Carry” – флаг переноса из старшего разряда (классически).

o P[1] - “Z” – “Zero” – признак нулевого результата (классически).

o P[2] - “I” – “Interrupt” – флаг маскирования прерывания аппаратного прерывания на линии IRQ – варьируется командами SEI/CLI.

o P[3] - “D” – “Decimal” – флаг режима десятичной арифметики. Так как в Денди этот режим отсутствует, то этот флаг не используется процессором, может использоваться программистом. Варьируется командами SED/CLD.

o P[4] - “B” – “Break” – флаг программного прерывания (команда BRK).

o P[5] - “1”

o P[6] - “V” – “” – флаг переноса в знаковый разряд (из 6-ого в 7-ой - классически).

o P[7] - “N” – “” – флаг знака результата операции – дублирует седьмой разряд (классически).

· X, Y – регистры индексной адресации.

Напомним, что система команд процессора оперирует или с перечисленными выше регистрами, или с адресным пространством памяти (64кб) – все устройства, управляемые процессором, должны отображаться своими регистрами на память.

И так – о способах адресации памяти.

 

ABS - прямая, указывается полный 16-разрядный адрес операнда:

ABS, X - индексированная по X, указывается базовый 16-разрядный адрес, к которому прибавляется смещение из регистра X;

ABS, Y - индексированная по Y, указывается базовый 16-разрядный адрес, к которому прибавляется смещение из регистра Y.

АСС - аккумуляторная, операнд в регистре A процессора.

IMM - непосредственная, 8-разрядный операнд расположен сразу за кодом команды (в мнемонической записи перед непосредственным операндом ставится символ «#»).

IMPL - неявная, операнды не указываются – жесткая логика работы инструкции.

IND - косвенная, задается адрес ячейки памяти, в которой хранится адрес операнда:

IND, X – индексно-косвенная, указывается 8-разрядный адрес в нулевой странице, к которому прибав­ляется содержимое регистра X, после чего из ячейки памяти с вычисленным адресом извлекается полный 16-разрядный адрес операнда;

IND, Y - косвенно-индексная, в нулевой странице указывается 8-разрядный адрес, после чего из задан­ной ячейки памяти считывается 16-разрядный базовый адрес, к которому прибавляется содержимое регис­тра Y, и из ячейки с вычисленным адресом извлекается операнд;

REL - относительная, в команде указывается 8-разрядное смещение относительно содержимого счетчи­ка команд PC;

ZP - адресация нулевой страницы, в команде задается 8-разрядный адрес, определяющий ячейку памя­ти нулевой страницы, где хранится операнд;

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

ZP, Y - индексированная по Y адресация нулевой страницы, в нулевой странице указывается 8-разряд­ный базовый адрес, к которому прибавляется содержимое регистра Y, и из ячейки памяти с вычисленным адресом извлекается операнд.

 

Ниже приведем саму систему команд (Всего 56 мнемоник инструкций).


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Мнемоника Краткое описание Методы адресации Запись на языке ассемблера Код команды Число байтов Изменяемые флаги
ADC Сложение с учетом переноса: А + d8 + С. Результат в аккумуляторе А и флаге переноса C IMM ADC #d8 69 d8   V, N, Z, С
ZP ADC 08 65 a8  
ZP, X ADC а8, X 75 a8  
ABS ADC а16 6D a16l a16h  
ABS, X ADC а16, Х 7D a16l a16h  
ABS, Y ADC a16, Y 79 a16l a16h  
IND, X ADC (a8, X) 61 a8  
IND, Y ADC (a8), Y 71 a8  
AND Поразрядное логическое И аккумулятора и операнда IMM AND #d8 29 d8   N, Z
ZP AND a8 25 a8  
ZP, X AND a8, X 35 a8  
ABS AND a16 2D a16l a16h  
ABS, X AND a16, X 3D a16l a16h  
ABS, Y AND a16, Y 39 a16l a16h  
IND, X AND (a8, X) 21 a8  
IND, Y AND (a8), Y 31 a8  
ASL Арифметический сдвиг операнда влево (умножение на 2) ACC ASL A 0A   N, Z, C
ZP ASL a8 06 a8    
ZP, X ASL a8, X 16 a8    
ABS ASL a16 0E a16l a16h    
ABS, X ASL a16, X 1E a16l a16h    
BEC Переход, если флаг C = 0 REL BCC i8 90 18    
BCS Переход, если флаг C = 1 REL BCS 18 B0 18    
BEQ Переход, если флаг Z = 1 REL BEQ 18 F018    
BIT Установка флагов в соответствии с результатом выполнения поразрядного логического И над содержимым аккумулятора и операнда. Бит 6 результата копируется во флаг V, а бит 7 - во флаг N ZP BIT a8 24 a8   N, V, Z
ABS BIT a16 2C a16l a16h  
       
BMI Переход, если флаг N = 1 REL BMI 18      
BNE Переход, если флаг 7 = 0 REL BNE 18 D0 18    
BPL Переход, если флаг N = 0 REL BPL 18      
BRK Программное прерывание IMPL BRK      
BVC Переход, если флаг V = 0 REL BVC 18      
BVS Переход, если флаг V = 1 REL BVS 18      
CLC Сброс флага C IMPL CLC     С
CLD Сброс флага D IMPL CLD D8   D
CLI Сброс флага I (разрешение прерываний) IMPL CLI     I
CLV Сброс флага V IMPL CLV B8   V
CMP Установка флагов в соответствии с результатом вычитания операнда из содержимого аккумулятора IMM CMP #d8 C9 d8   N, Z, C
ZP CMP a8 C5 a8  
ZP, X CMP a8, X D5 a8  
ABS CMP a16 CD a16l a16h  
ABS, X CMP a16, X DD a16l a16h  
ABS, Y CMP a16, Y D9 a16l a16h  
IND, X CMP (a8, X) C1 a8  
IND, Y CMP (a8), Y D1 a8  
CPX Установка флагов в соответствии с результатом вычитания операнда из содержимого регистра X IMM CPX #d8 E0 d8   N, Z, C
ZP CPX a8 E4d8  

 

ABS CPX a16 EC a16l a16h  

 

CPY Установка флагов в соответствии с результатом вычитания операнда из содержимого аккумулятора IMM CPY #d8 C0 d8   N, Z, C

 

 

ZP CPY a8 C4 a8  

 

 

 

ABS CPY a16 CC a16l a16h  

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Мнемоника Краткое описание Методы адресации Запись на языке ассемблера Код команды Число байтов Изменяемые флаги
DEC Уменьшение операнда на 1 ZP DEC a8 C6 a8   N, Z
ZP, X DEC a8, X D6 a8  
ABS DEC а16 CE a16l a16h  
ABS, X DEC a16, X DE a16l a16h  
DEX Х = Х-1 IMPL DEX CA   N, Z
DEY Y = Y-1 IMPL DEY     N, Z
EOR Поразрядное Исключающее ИЛИ содержимого аккумулятора и операнда IMM EOR #d8 49 d8   N, Z
ZP EOR a8 45 a8  
ZP, X EOR a8, X 55 a8  
ABS EOR a16 4D a16l a16h  
ABS, X EOR a16, X 5D a16l a16h  
ABS, Y EOR a16, Y 59 a16l a16h  
IND, X EOR (a8, X) 41 a8  
IND, Y EOR (a8), Y 51 a8  
INC Увеличение операнда на 1 ZP INC a8 E6 a8   N, Z
ZP, X INC a8, X F6 a8  
ABS INC a16 EE a16l a16h  
ABS, X INC a16, X FE a16l a16h  
INX Х = X+1 IMPL INX E8   N, Z
INY Y = Y+1 IMPL INY C8   N, Z
JMP Переход по указанному адресу ABS JMP a16 4C a16l a16h    
IND JMP (a 16) 6C a16l a16h  
JSR Вызов подпрограммы с указанным адресом. В стеке сохраняется адрес возврата ABS JSR a16 20 a16l a16h    
IDA Загрузка операнда в аккумулятор IMM LDA #d8 A9d8   N, Z
ZP LDA a8 A5a8  
ZP, X LDA a8, X B5a8  
ABS LDA a16 AD a16l a16h  
ABS, X LDA a16, X BD a16l a16h  
ABS, Y LDA a16, Y B9 a16l a16h  
IND, X LDA (a8, X) A1 a8  
IND, Y LDA (a8), Y B1 a8  
LDX Загрузка операнда в регистр X IMM LDX #d8 A2 d8   H, Z
ZP LDX a8 A6a8  
ZP, Y LDX a8, Y B6a8  
ABS LDX a16 AE a16l a16h  
ABS, Y LDX a16, Y BE a16l a16h  
LDY Загрузка операнда в регистр Y IMM LDY #d8 A0 d8   N, Z
ZP LDY a8 A4 a8  
ZP, Y LDY a8, Y B4 a8  
ABS LDY a16 AC a16l a16h  
ABS, Y LDY a16, Y BC a16l a16h  
LSR Логический сдвиг операнда вправо (деление на 2) ACC LSR A 4A   N, Z, C
ZP LSR a8 46 a8  
ZP, X LSR a8, X 56 a8  
ABS LSR a16 4E a16l a16h  
ABS, X LSR a16, X 5E a16l a16h  
NOP Нет операции IMPL NOP EA    
ORA Поразрядное логическое ИЛИ содержимого аккумулятора и операнда IMM ORA #d8 09 d8   N, Z
ZP ORA a8 05 a8  
ZP, X ORA a8, X 15 a8  
ABS ORA a16 0D a16l a16h  
ABS, X ORA a16, X 1D a16l a16h  
ABS, Y ORA a16, Y 19 a16l a16h  
IND, X ORA (a8, X) 01 a8  
IND, Y ORA (a8), Y 11 a8  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Мнемоника Краткое описание Методы адресации Запись на языке ассемблера Код команды Число байтов Изменяемые флаги
PHA Помещение содержимого аккумулятора в стек IMPL PHA      
PHP Помещение регистра состояния в стек IMPL PHP      
PLA Помещение байта с вершины стека в аккумулятор IMPL PLA      
PLP Помещение байта с вершины стека в регистр состояния IMPL PLP     Все флаги
ROL Циклический сдвиг операнда влево АСС ROL A 2A   N, Z, C
ZP ROL a8 26 a8  
ZP, X ROL a8, X 36 a8  
ABS ROL a16 2E a16l a16h  
ABS, X ROL a16, X 3E a16l a16h  
ROR Циклический сдвиг операнда вправо АСС ROR A 6A   N, Z, C
ZP ROR a8 66 a8  
ZP, X ROR a8, X 76 a8  
ABS ROR a16 6E a16l a16h  
ABS, X ROR a16, X 7E a16l a16h  
RTI Возврат из прерывания IMPL RTI     Все флаги
RTS Возврат из подпрограммы IMPL RTS      
SBC Вычитание операнда из содержимого аккумулятора с учетом переноса IMM SBC #d8 E9 d8   N, V, Z, C
ZP SBC a8 E5 a8  
ZP, X SBC a8, X F5 a8  
ABS SBC a16 ED a16l a16h  
ABS, X SBC a16, X FD a16l a16h  
ABS, Y SBC a16, Y F9 a16l a16h  
IND, X SBC (a8, X) E1 a8  
IND, Y SBC (a8), Y F1 a8  
SEC Установка флага C IMPL SEC     С
SED Установка флага D IMPL SED F8   D
SEI Установка флага 1 (запрещение прерываний) IMPL SEI      
STA Запись содержимого аккумулятора в память ZP STA a8 85 a8    
ZP, X STA a8, X 95 a8  
ABS STA a16 8D a16l a16h  
ABS, X STA a16, X 9D a16l a16h  
ABS, Y STA a16; Y 99 a16l a16h  
IND, X STA (a8, X) 81 a8  
IND, Y STA (a8) 91 a8  
SIX Запись содержимого регистра X в память ZP STX a8 86 a8    
ZP, Y STX a8, Y 96 a8  
ABS STX a16 8E a16l a16h  
STY Запись содержимого регистра Y в память ZP STY a8 84 a8    
ZP, X STY a8, X 94 a8  
ABS STY a16 8C a16l a16h  
TAX Пересылка содержимого аккумулятора в регистр X IMPL TAX AA   N, Z
TAY Пересылка содержимого аккумулятора в регистр Y IMPL TAY A8   N, Z
TSX Пересылка содержимого указателя стека в регистр X IMPL TSX BA   N, Z
TXA Пересылка содержимого регистра X в аккумулятор IMPL TXA 8A   N, Z
TXS Пересылка содержимого регистра X в указатель стека IMPL TXS 9A    
TYA Пересылка содержимого регистра Y в аккумулятор IMPL TYA     N, Z

Условные обозначения:

а16 - 16-разрядный адрес

a16h - старший байт 16-разрядного адреса

а16l - младший байт 16-разрядного адреса

а8 - 8-разрядный адрес в нулевой странице

d8 - непосредственный 8-разрядный операнд

i8 - 8-разрядное смещение в диапазоне от -128 до 127

 

Также приведем матрицу системы команд (красным цветом отмечены недокументированные инструкции –в базовой архитектуре 6502 они отсутствуют, но контроллером 6561 поддерживаются).

 

╔════════╤════════╤════════╤════════╤════════╤════════╤════════╤════════╤════════╗

║76543210│xxx000xx│xxx010xx│xxx100xx│xxx110xx│xxx001xx│xxx011xx│xxx101xx│xxx111xx║

╟────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────╢

║000xxx00│BRK IMM │PHP │BPL REL │CLC │DOP ZP │TOP ABS │DOP ZPX │TOP ABX ║

║001xxx00│JSR ABS │PLP │BMI REL │SEC │BIT ZP │BIT ABS │DOP ZPX │TOP ABX ║

║010xxx00│RTI │PHA │BVC REL │CLI │DOP ZP │JMP ABS │DOP ZPX │TOP ABX ║

║011xxx00│RTS │PLA │BVS REL │SEI │DOP ZP │JMP IND │DOP ZPX │TOP ABX ║

║100xxx00│DOP IMM │DEY │BCC REL │TYA │STY ZP │STY ABS │STY ZPX │SYA ABX ║

║101xxx00│LDY IMM │TAY │BCS REL │CLV │LDY ZP │LDY ABS │LDY ZPX │LDY ABX ║

║110xxx00│CPY IMM │INY │BNE REL │CLD │CPY ZP │CPY ABS │DOP ZPX │TOP ABX ║

║111xxx00│CPX IMM │INX │BEQ REL │SED │CPX ZP │CPX ABS │DOP ZPX │TOP ABX ║

║000xxx01│ORA NDX │ORA IMM │ORA NDY │ORA ABY │ORA ZP │ORA ABS │ORA ZPX │ORA ABX ║

║001xxx01│AND NDX │AND IMM │AND NDY │AND ABY │AND ZP │AND ABS │AND ZPX │AND ABX ║

║010xxx01│EOR NDX │EOR IMM │EOR NDY │EOR ABY │EOR ZP │EOR ABS │EOR ZPX │EOR ABX ║

║011xxx01│ADC NDX │ADC IMM │ADC NDY │ADC ABY │ADC ZP │ADC ABS │ADC ZPX │ADC ABX ║

║100xxx01│STA NDX │DOP IMM │STA NDY │STA ABY │STA ZP │STA ABS │STA ZPX │STA ABX ║

║101xxx01│LDA NDX │LDA IMM │LDA NDY │LDA ABY │LDA ZP │LDA ABS │LDA ZPX │LDA ABX ║

║110xxx01│CMP NDX │CMP IMM │CMP NDY │CMP ABY │CMP ZP │CMP ABS │CMP ZPX │CMP ABX ║

║111xxx01│SBC NDX │SBC IMM │SBC NDY │SBC ABY │SBC ZP │SBC ABS │SBC ZPX │SBC ABX ║

║000xxx10│KIL │ASL A │KIL │NOP │ASL ZP │ASL ABS │ASL ZPX │ASL ABX ║

║001xxx10│KIL │ROL A │KIL │NOP │ROL ZP │ROL ABS │ROL ZPX │ROL ABX ║

║010xxx10│KIL │LSR A │KIL │NOP │LSR ZP │LSR ABS │LSR ZPX │LSR ABX ║

║011xxx10│KIL │ROR A │KIL │NOP │ROR ZP │ROR ABS │ROR ZPX │ROR ABX ║

║100xxx10│DOP IMM │TXA │KIL │TXS │STX ZP │STX ABS │STX ZPY │SXA ABY ║

║101xxx10│LDX IMM │TAX │KIL │TSX │LDX ZP │LDX ABS │LDX ZPY │LDX ABY ║

║110xxx10│DOP IMM │DEX │KIL │NOP │DEC ZP │DEC ABS │DEC ZPX │DEC ABX ║

║111xxx10│DOP IMM │NOP │KIL │NOP │INC ZP │INC ABS │INC ZPX │INC ABX ║

║000xxx11│SLO NDX │AAC IMM │SLO NDY │SLO ABY │SLO ZP │SLO ABS │SLO ZPX │SLO ABX ║

║001xxx11│RLA NDX │AAC IMM │RLA NDY │RLA ABY │RLA ZP │RLA ABS │RLA ZPX │RLA ABX ║

║010xxx11│SRE NDX │ASR IMM │SRE NDY │SRE ABY │SRE ZP │SRE ABS │SRE ZPX │SRE ABX ║

║011xxx11│RRA NDX │ARR IMM │RRA NDY │RRA ABY │RRA ZP │RRA ABS │RRA ZPX │RRA ABX ║

║100xxx11│AAX NDX │XAA IMM │AXA NDY │XAS ABY │AAX ZP │AAX ABS │AAX ZPY │AXA ABY ║

║101xxx11│LAX NDX │ATX IMM │LAX NDY │LAR ABY │LAX ZP │LAX ABS │LAX ZPY │LAX ABY ║

║110xxx11│DCP NDX │AXS IMM │DCP NDY │DCP ABY │DCP ZP │DCP ABS │DCP ZPX │DCP ABX ║

║111xxx11│ISC NDX │SBC IMM │ISC NDY │ISC ABY │ISC ZP │ISC ABS │ISC ZPX │ISC ABX ║

╚════════╧════════╧════════╧════════╧════════╧════════╧════════╧════════╧════════╝

 

 


Приложение №2. Палитра в RGB.

 

В палитре Денди содержится 64 ячейки (некоторые содержат одинаковые цвета). Соответствие цветов формату RGB приведено ниже.

 




Поделиться с друзьями:


Дата добавления: 2014-11-16; Просмотров: 594; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.214 сек.