Глава 1: Шестьдесят пять ноль два — КиберПедия 

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Глава 1: Шестьдесят пять ноль два

2023-02-03 19
Глава 1: Шестьдесят пять ноль два 0.00 из 5.00 0 оценок
Заказать работу

6502 - это 8-битный микропроцессор, разработанный Чаком Педдлом и его командой для MOS Technology, впервые представленный в 1975 году.

Из-за его низкой стоимости по сравнению с конкурирующими разработками таких компаний, как Intel и Motorola, в 1980-х годах он привел к серии проектов домашних компьютеров. Наиболее примечательными из них являются первые компьютеры Apple, разработанные и построенные Стивом Возняком.

Популярность увеличилась, и 6502 и его варианты использовались во многих ранних домашних компьютерах и игровых консолях, таких как семейство 8-бит Atari, Apple II, Nintendo Entertainment System, Commodore 64, Atari Lynx и BBC Micro.

 

Архитектура

Commodore 64 использует микропроцессор 6510, который является вариантом 6502 с дополнительными 6-ю доступными пинами ввода-вывода (P0-P5). Они используются для управления набором данных и для переключения банков карты памяти компьютера, позволяя использовать все 64 КБ ОЗУ (см. Главу 4).

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

 

 

Шина (Bus) - это набор электрических сигналов, сгруппированных вместе для передачи связанных данных от одной части компьютера к другой. Двоичное представление числа помещается на шину путем установки каждого отдельного вывода числа 1 (5 вольт) или 0 (0 вольт).

 

 

16-разрядная адресная шина состоит из контактов A0-A15 и используется для определения местоположения 1 из 65 536 (64 КБ) отдельных ячеек памяти.

8-битная шина данных состоит из контактов D0-D7 и используется для передачи байта за раз между 6510 и памятью или вводом-выводом (I/O) с использованием ячейки памяти, указанной на адресной шине.

Шина управления (Control Bus) содержит чтение/запись (R/W) пин, который определяет направление шины данных, и вывод 0in (CLKIN), который принимает прямоугольный сигнал от 0 до 5 вольт со скоростью 1022727 циклов в секунду (NTSC) или 985248 циклов в секунду. второй (PAL) для синхронизации 6510 и операций с памятью или вводом-выводом.

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

 

 


A = аккумулятор (8 бит)
X = индексный регистр X (8 бит)
Y = индексный регистр Y (8 бит)
PC = Программный счетчик (16 бит)
S = указатель стека (9-битный, 9-й бит зафиксирован на 1)
P = регистр состояния процессора (8 бит, 1 бит не используется):
           N = отрицательный (1 = отрицательный)
           V = переполнение (1 = переполнение)
           B = команда прерывания (1 = прерывание, вызванное прерыванием)
           D = десятичный режим (1 = десятичный режим)
           I = IRQ отключено (1 = IRQ отключено)
           Z = ноль (1 = нулевой результат)
           C = переносить (1 = переносить)

 

Аккумулятор (A) - это 8-битный регистр, используемый для выполнения арифметических и логических операций.

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

Регистр программного счетчика (PC) - это 16-разрядный указатель на следующую команду машинного кода, которую нужно выполнить.

Регистр указателя стека (S) - это 8-битный указатель на область стека памяти между $ 0100 и $ 01FF (9-й бит предполагается равным 1).

Регистр состояния процессора (P) - это 8-битный регистр, используемый для отслеживания результатов операций с использованием 7 отдельных битовых флагов (1 бит не используется).

 

Обзор сборки

6510 работает путем последовательной обработки 8-битных команд машинного кода, также известных как коды операций или опкоды.

Данные, которые используются в операции, называются операндом. Например: 1 + 2. «+» - это операция (код операции), а «1» и «2» - операнды.

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

В зависимости от конкретного кода операции и режима адресации дополнительные 1 или 2 байта данных могут следовать за 8-битным кодом операции в памяти, чтобы представить 8 или 16-битный операнд. Таким образом, полная инструкция машинного кода может иметь длину 1, 2 или 3 байта.

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

 

Обратите внимание, что для 3-байтовых инструкций операнд составляет 2 байта (или 16 бит), но, как это ни парадоксально, младший байт предшествует старшему байту в памяти.

Например, шестнадцатеричный адрес $ 9023 будет помещен в память как $ 23 в качестве младшего байта, за которым следует $ 90 в качестве старшего байта. Это связано с тем, что 6510 имеет архитектуру с обратным порядком байтов из соображений производительности. Аппаратное обеспечение с прямым порядком байтов хранит 9023 доллара как 90 долларов, за которыми следуют 23 доллара в памяти.

6510 считывает коды операций и операнды в двоичном формате. По мере их последовательной обработки программный счетчик (PC) увеличивается каждый раз, чтобы указать на следующий байт данных, которые необходимо прочитать.

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

Этот «язык ассемблера» используется для написания кода в более удобочитаемой форме, и программа, называемая ассемблером, затем преобразует исходный код на языке ассемблера в его двоичный эквивалентный машинный код для запуска на микропроцессоре.

Ассемблер 6510 имеет 56 различных мнемоник, многие из которых работают с несколькими режимами адресации (см. Следующий раздел), в результате чего общее количество официальных кодов операций составляет 151. Поскольку каждый код операции имеет длину байта, есть место для максимум 256 кодов операции, что означает 105 неофициальных кодов операции (256–151). Иногда они становятся доступными в зависимости от ассемблера.

Вот мнемоника ассемблерного кода LDA с его шестнадцатеричным и двоичным представлениями машинного кода и режимами адресации для иллюстрации:


Здесь мы видим 8 машинных кодов операций для мнемоники языка ассемблера "lda". Ассемблер решает, какой код операции использовать, в зависимости от используемого режима адресации, который определяется форматом операнда в инструкции.

ВАЖНО! Формат мнемоники + операнда выбирает актуальную версию кода операции.

 

Откройте chapter1.cbmprj в CBM prg Studio.

 

Каждый раздел в главе 1 имеет свой собственный файл сборки, содержащийся в одном проекте, чтобы продемонстрировать затронутые темы.

Чтобы создать и запустить эти отдельные файлы в CBM prg Studio, вы должны переключиться на соответствующий файл и использовать Build-> Program-> And Run (или F5).

Build-> Project-> And Run (или Ctrl + F5) используется вместо этого, когда мы хотим собрать все файлы в проекте в одну программу. Это используется в следующих главах.

ВНИМАНИЕ! Есть 2 разных метода создания файлов.

 

Переключитесь на файл Assembly Overview.asm.

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

Когда программа Commodore 64 загружается с помощью BASIC через команду «LOAD« * », 8,1», а затем запускается с помощью BASIC командой «RUN» (обратите внимание, что этот процесс автоматизирован при запуске через CBM prg Studio). Процессор 6510 сначала смотрит на адрес памяти $ 0801 для запуска программы BASIC.

Чтобы выполнить программу с машинным кодом из BASIC, необходимо ввести команду «SYS», а затем указать место в памяти программы в десятичном формате (например, SYS 2061).

Поэтому, чтобы автоматизировать процесс выполнения команды «SYS», мы вставляем короткую программу BASIC в ячейку памяти $ 0801, чтобы при загрузке программы она автоматически запускала нашу программу машинного кода.

 

Assembly Overview.asm

#region BASIC Loader

*=$0801 ; 10 SYS2061 ($080D)
          
byte $0B         ; Next BASIC line low byte($080B)
           byte $08          ; Next BASIC line high byte
          
byte $0A         ; Line number low byte (10)
          
byte $00          ; Line number high byte
          
byte $9E          ; SYS BASIC token
          
byte $32          ; ASCII 2
          
byte $30          ; ASCII 0
          
byte $36          ; ASCII 6
          
byte $31          ; ASCII 1
           byte $00          ; End of line
          
byte $00          ; Next BASIC line low byte(0=end)
          
byte $00          ; Next BASIC line high byte

; Our code starts at $080D (2061 decimal)
; after the 12 bytes for the BASIC loader

#endregion

 

CBM prg Studio предоставляет возможность вставить этот код с помощью Tools-> Generate SYS () Call.

#region и #endregion - это команды CBM prg Studio, которые позволяют сворачивать разделы кода в редакторе (аналогично Microsoft Visual Studio) и игнорируются ассемблером.

Чтобы продемонстрировать разницу между машинным кодом и языком ассемблера, в Assembly Overview.asm есть 2 версии простой программы. Первая программа размещает каждый байт в двоичном формате в памяти, начиная с адреса $ 080D (12 байтов после $ 0801 для загрузчика BASIC).

 

Assembly Overview.asm

           byte %10101001          ; $A9 = lda(immediate mode)
           byte %00000010          ; $02 = red
           byte %10001101          ; $8D = sta(absolute mode)
          
byte %00100000          ; $20 = EXTCOL low byte
           byte %11010000          ; $D0 = EXTCOL high byte
          
byte %01100000          ; $60 = rts(ret. to BASIC)

 

Существует 2-байтовая инструкция, состоящая из 1 байта для кода операции lda и 1 байта для цвета (красный = 2).

Затем есть 3-байтовая инструкция, состоящая из 1 байта для кода операции «sta» и 2 байтов для 16-битного адреса памяти $ D020 (помните, что младший байт, за которым следует старший байт для младшего байта).

Последний байт программы - это код операции «rts» (возврат из подпрограммы), который возвращается в BASIC после выполнения программы.

Вся программа составляет 6 байт (без загрузчика BASIC). Он загружает значение «2» для красного цвета в регистр аккумулятора (A), затем копирует это значение из аккумулятора в адрес памяти $ D020, по которому графический чип VIC-II ищет цвет границы.

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

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

 

Assembly Overview.asm

           LDA #$02       ; load A (# = immediate mode)
           STA $D020      ; store A to $D020 memory
           RTS                    ; return to BASIC

 

Чтобы деактивировать предыдущий код, добавьте символ «;» перед каждой строкой кода (это называется закомментированием). Чтобы сделать этот новый код активным, удалите символы «;» перед каждой строкой кода. Новый код можно затем собрать и запустить с помощью Build-> Program-> And Run (или F5).

Попробуйте комментировать машинный код и комментировать код сборки ассемблера.

Для отладки программы сборки в CBM prg Studio, которая имеет загрузчик для BASIC в начале, байты загрузчика BASIC необходимо игнорировать. Это можно сделать двумя способами. Либо закомментируйте байты загрузчика для BASIC. (После этого вы можете отладить правильно, но программа больше не будет работать в эмуляторе VICE, поэтому не забудьте снять знаки комментариев позже).

Или пропустите байты загрузчика BASIC в отладчике следующим образом:

• Выберите Debugger-> Debug Program (или F8), чтобы скомпилировать программу в машинный код и открыть инструмент отладчика. (Debugger-> Debug Project (или Ctrl + F8) можно использовать для последующих глав, где несколько файлов собираются вместе).

• Выберите Registers->Set и измените значение программного счетчика с $ 0801 на $ 080D.

Установив программный счетчик на $ 080D, мы можем теперь пройти по программе и увидеть изменение значений регистра и памяти.

• Выберите Debug-> Step Program, чтобы увидеть изменение значения регистра (аккумулятора) AC на 02.

• Выберите Memory-> View…, чтобы открыть окно памяти и установить адрес $ D020.

• Снова выберите Debug-> Step Program, и значение памяти в $ D020 изменится на 02.

• Закройте отладчик и выберите Build-> Program-> And Run (или F5) для запуска в эмуляторе VICE.

Попробуйте изменить значение $ 02 для другого цвета границы.

 


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

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.049 с.