stringtranslate.com

МДЦ 65С02

Микропроцессор Western Design Center (WDC) 65C02 представляет собой усовершенствованную версию CMOS популярной 8-битной технологии MOS 6502 на основе nMOS . Он потребляет меньше энергии, чем оригинальный 6502, устраняет несколько проблем и добавляет новые инструкции. Потребление энергии примерно в 10-20 раз меньше, чем у оригинального 6502, работающего на той же скорости; [1] его сниженное энергопотребление сделало его полезным в портативных компьютерных ролях и промышленных микроконтроллерных системах. 65C02 также использовался в некоторых домашних компьютерах , а также во встраиваемых приложениях, включая имплантированные устройства медицинского класса.

Разработка WDC 65C02 началась в 1981 году [a] с образцами, выпущенными в начале 1983 года . [b] 65C02 был официально выпущен вскоре после этого. [2] WDC лицензировала дизайн Synertek , NCR , GTE Microcircuits и Rockwell Semiconductor . Основной интерес Rockwell был на рынке встраиваемых систем, и он попросил добавить несколько новых команд для помощи в этой роли. Позже они были скопированы обратно в базовую версию, после чего WDC добавили две собственные новые команды для создания W65C02 . Sanyo позже также лицензировала дизайн, а Seiko Epson выпустила еще одну модифицированную версию как HuC6280 .

Ранние версии использовали 40-контактный DIP-корпус и были доступны в версиях 1, 2 и 4 МГц, что соответствовало скоростям оригинальных версий nMOS. Более поздние версии выпускались в корпусах PLCC и QFP , а также PDIP и с гораздо более высокими тактовыми частотами. Текущая версия от WDC, W65C02S-14, имеет полностью статическое ядро ​​и официально работает на скоростях до 14 МГц при питании от 5 вольт.

Введение и особенности

65C02 — это недорогой, универсальный 8-битный микропроцессор (8-битные регистры и шина данных ) с 16-битным счетчиком программ и адресной шиной . Набор регистров небольшой, с одним 8-битным аккумулятором (A), двумя 8-битными индексными регистрами (X и Y), 8-битным регистром состояния (P) и 16-битным счетчиком программ (PC). В дополнение к одному аккумулятору, первые 256 байт ОЗУ, «нулевая страница» ( $0000по $00FF), обеспечивают более быстрый доступ через режимы адресации, которые используют 8-битный адрес памяти вместо 16-битного адреса. Стек находится в следующих 256 байтах, на первой странице (от $0100 до $01FF), и не может быть перемещен или расширен. Стек растет в обратном направлении с указателем стека (S), начинающимся с $01FF и уменьшающимся по мере роста стека. [3] Он имеет набор инструкций переменной длины , длина каждой инструкции варьируется от одного до трех байтов. [1]

Базовая архитектура 65C02 идентична оригинальной 6502 и может считаться маломощной реализацией этой конструкции. На частоте 1 МГц, самой популярной скорости для оригинальной 6502, 65C02 требует всего 20 мВт, в то время как оригинал использует 450 мВт, что меньше более чем в двадцать раз. [4] Вручную оптимизированное ядро ​​и низкое энергопотребление призваны сделать 65C02 хорошо подходящим для маломощных систем на кристалле (SoC). [1]

Модель описания оборудования Verilog доступна для проектирования ядра W65C02S в специализированную интегральную схему (ASIC) или программируемую пользователем вентильную матрицу (FPGA). [5] Как это принято в полупроводниковой промышленности, WDC предлагает систему разработки, которая включает плату разработчика , внутрисхемный эмулятор (ICE) и систему разработки программного обеспечения. [6]

W65C02S –14 является производственной версией по состоянию на 2023 год и доступна в корпусах PDIP , PLCC и QFP . Максимальная официально поддерживаемая тактовая частота Ø2 (первичная) составляет 14  МГц при работе от 5 вольт, на что указывает суффикс –14 номера детали (любители разработали домашние системы 65C02, которые работают быстрее официального рейтинга). Обозначение «S» указывает на то, что деталь имеет полностью статическое ядро , функцию, которая позволяет замедлять Ø2 или полностью останавливать его как в высоком, так и в низком состоянии без потери данных. [7] Типичные микропроцессоры, не реализованные в КМОП, имеют динамические ядра и будут терять содержимое своих внутренних регистров (и, таким образом, выходить из строя), если они не будут непрерывно тактироваться со скоростью между некоторыми минимальными и максимальными указанными значениями.

Общие логические особенности

Фотография кристалла микроконтроллера Sitronix ST2064B, на которой в правом верхнем углу показано встроенное ядро ​​W65C02S

Логические особенности

Электрические характеристики

Особенности тактирования

W65C02S может работать при любом удобном напряжении питания (V DD ) от 1,8 до 5 вольт (±5%). Таблица характеристик переменного тока в техническом паспорте содержит рабочие характеристики при 5 В на частоте 14 МГц, 3,3 В или 3 В на частоте 8 МГц, 2,5 В на частоте 4 МГц и 1,8 В на частоте 2 МГц. Эта информация может быть артефактом более раннего технического паспорта, поскольку график показывает, что типичные устройства способны работать на более высоких скоростях, чем указано в таблице характеристик переменного тока, и что надежная работа на частоте 20 МГц должна быть легко достижима при V DD на частоте 5 вольт, если поддерживающее оборудование это позволит.

Поддержка W65C02S произвольных тактовых частот позволяет использовать тактовый сигнал, работающий на частоте, идеальной для какой-либо другой части системы, например, 13,5 МГц (частота дискретизации яркости цифрового SDTV), 14,31818 МГц (частота несущей цвета NTSC × 4), 14,75 МГц (квадратные пиксели PAL), 14,7456 (скорость передачи данных кристалла) и т. д., при условии, что V DD достаточно для поддержки частоты. Конструктор Билл Менш указал, что на F MAX влияют факторы, не входящие в состав кристалла, такие как емкостная нагрузка на выводы микропроцессора. Минимизация нагрузки за счет использования коротких сигнальных дорожек и наименьшего количества устройств помогает повысить F MAX . Корпуса PLCC и QFP имеют меньшую емкость между выводами, чем корпус PDIP, и более экономичны в использовании пространства на печатной плате .

WDC сообщил, что реализации FPGA W65C02S успешно работают на частоте 200 МГц. [ необходима цитата ]

Сравнение с NMOS 6502

Базовая архитектура

Хотя 65C02 можно в основном рассматривать как маломощный 6502, он также исправляет несколько ошибок, обнаруженных в оригинале, и добавляет новые инструкции, режимы адресации и функции, которые могут помочь программисту писать более мелкие и быстро выполняющиеся программы. Предполагается, что средняя программа на языке ассемблера 6502 может быть сделана на 10-15 процентов меньше на 65C02 и увидеть аналогичное улучшение производительности, в основном за счет избегания доступа к памяти за счет использования меньшего количества инструкций для выполнения заданной задачи. [1]

Недокументированные инструкции удалены

Оригинальный 6502 имеет 56 инструкций, которые в сочетании с различными режимами адресации производят в общей сложности 151 опкод из возможных 256 8-битных шаблонов опкодов. Оставшиеся 105 неиспользуемых опкодов не определены, причем набор кодов с младшими 4-битами с 3, 7, B или F остается полностью неиспользованным, код с младшими 2 имеет только один опкод. [8]

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

65C02 добавляет новые опкоды, которые используют некоторые из этих ранее недокументированных слотов инструкций. Например, $FF используется для новой BBSинструкции. Те, которые остаются действительно неиспользованными, эквивалентны NOPs. Программы 6502, использующие эти опкоды, не будут работать на 65C02. [1]

Исправления ошибок

Оригинальный процессор 6502 при первоначальном запуске имел несколько ошибок.

В ранних версиях процессора 1975 года не было RORинструкции (вращать вправо), хотя она у них была ROL(вращать влево). Это был преднамеренный выбор дизайна MOS Technology, поскольку считалось, что реализация RORбыла слишком затратной в области чипа для тех преимуществ, которые она давала. [10] Однако клиенты жаловались на отсутствие инструкции ROR, и она была реализована в деталях, выпускаемых с июня 1976 года. Отсутствие RORособенно повлияло на производительность нормализации мантиссы в математических процедурах с плавающей точкой. [11] Подавляющее большинство машин, использующих процессор, поддерживают эту инструкцию. [12]

Ошибка, присутствующая во всех вариантах NMOS 6502, касается инструкции перехода при использовании косвенной адресации . В этом режиме адресации целевой адрес инструкции JMPизвлекается из памяти, вектора перехода, а не является операндом инструкции JMP. Например, JMP ($1234)извлечет значение в ячейках памяти $1234 (младший байт) и $1235 (старший байт) и загрузит эти значения в счетчик программ , что затем заставит процессор продолжить выполнение по адресу, сохраненному в векторе.

Ошибка появляется, когда адрес вектора заканчивается на $FF , что является границей страницы памяти . В этом случае будет извлечен самый старший байт целевого адреса из $00 исходной страницы, а не из $00 новой страницы. Следовательно, будет получен самый младший байт целевого адреса в $12FF и самый старший байт целевого адреса из $1200 , а не из $1300 . 65C02 исправил эту проблему. [1]JMPJMP ($12FF)

Скорее недосмотр, чем ошибка, состояние флага (D)ecimal в регистре состояния NMOS 6502 не определено после сброса или прерывания . Это означает, что программисты должны устанавливать флаг на известное значение, чтобы избежать любых ошибок, связанных с арифметическими операциями. В результате можно найти CLDинструкцию (CLear Decimal) почти во всех обработчиках прерываний 6502 , а также в начале кода сброса. 65C02 автоматически очищает этот флаг после помещения регистра состояния в стек в ответ на любое прерывание или в ответ на аппаратный сброс, тем самым возвращая процессор в двоичный арифметический режим. [13]

Во время арифметики в десятичном режиме NMOS 6502 обновит флаги (N)egative, o(V)erflow и (Z)ero, чтобы отразить результат базовой двоичной арифметики, то есть флаги отражают результат, вычисленный до того, как процессор выполнит десятичную коррекцию. Напротив, 65C02 устанавливает эти флаги в соответствии с результатом десятичной арифметики, за счет дополнительного такта на арифметическую инструкцию. [13]

При выполнении инструкции чтения-изменения-записи (RMW), такой как , все варианты NMOS будут выполнять двойную запись в addr , сначала перезаписывая текущее значение, найденное в addr , а затем записывая измененное значение. Такое поведение может привести к трудноразрешимым ошибкам, если addr является аппаратным регистром. Это может произойти, если оборудование отслеживает изменения значения в регистре, а затем выполняет действие; в этом случае оно выполнит два действия, одно с исходным значением, а затем снова с новым значением. 65C02 вместо этого выполняет двойное чтение addr , за которым следует одна запись.INC addr

При выполнении индексированной адресации, если индексация пересекает границу страницы, все варианты NMOS будут считывать с недопустимого адреса перед доступом к правильному адресу. Как и в случае с инструкцией RMW, такое поведение может вызвать проблемы при доступе к аппаратным регистрам через индексацию. 65C02 исправил эту проблему, выполнив фиктивное чтение кода операции инструкции, когда индексация пересекает границу страницы. Однако это исправление внесло новую ошибку [ необходима цитата ] , которая возникает, когда базовый адрес находится на четной границе страницы (что означает, что индексация никогда не перейдет на следующую страницу). С новой ошибкой фиктивное чтение выполняется по базовому адресу перед индексацией, так что LDA $1200,Xбудет выполнено фиктивное чтение по $1200 до того, как значение X будет добавлено к $1200 . Опять же, если индексация по адресам аппаратных регистров, эта ошибка может привести к неопределенному поведению.

Если NMOS 6502 извлекает код операции BRK (программное прерывание) в то же время, когда происходит аппаратное прерывание, BRK будет проигнорирован, поскольку процессор реагирует на аппаратное прерывание. 65C02 правильно обрабатывает эту ситуацию, обслуживая прерывание и затем выполняя BRK.

Новые режимы адресации

6502 имеет два режима косвенной адресации, которые разыменовываются через 16-битные адреса, хранящиеся на нулевой странице:

Недостатком этой модели является то, что если индексация не нужна, но адрес находится на нулевой странице, один из индексных регистров все равно должен быть установлен в ноль и использоваться в одной из этих инструкций. 65C02 добавил неиндексированный косвенный режим адресации LDA ($10)ко всем инструкциям, которые использовали индексированный косвенный и косвенный индексированный режимы, освободив индексные регистры. [14]

Инструкция 6502 JMPимела уникальный (среди инструкций 6502) режим адресации, известный как «абсолютная косвенная», который считывал 16-битное значение из заданного адреса памяти, а затем переходил к адресу в этом 16-битном значении. Например, если ячейка памяти $A000 содержит $34, а $A001 содержит $12, считывал эти два байта, создавал значение $1234 и переходил к этой ячейке.JMP ($A000)

Одним из распространенных вариантов использования косвенной адресации является построение таблиц ветвлений , списка точек входа для подпрограмм , к которым можно получить доступ с помощью индекса. Например, драйвер устройства может перечислить точки входа для OPEN, CLOSE, READ, и т. д. в таблице по адресу $A000 . — это третья запись, индексированная нулем, и каждый адрес требует 16 бит, поэтому для вызова одного из них нужно использовать что-то похожее на . Если драйвер обновлен и код подпрограммы перемещен в память, любой существующий код будет работать до тех пор, пока таблица указателей остается по адресу $A000 .READREADJMP ($A004)

В 65C02 был добавлен новый режим «индексированного абсолютного косвенного доступа», который упростил использование таблиц ветвлений. Этот режим добавлял значение регистра X к абсолютному адресу и брал 16-битный адрес из полученного местоположения. Например, чтобы получить доступ к функции READиз таблицы выше, нужно было бы сохранить 4 в X, затем JMP ($A000,X). Этот стиль доступа упрощает доступ к таблицам ветвлений, поскольку используется один базовый адрес в сочетании с 8-битным смещением. [14] Того же самого можно было достичь в версии NMOS с использованием индексированного косвенного режима, но только если таблица находилась на нулевой странице, ограниченном ресурсе. Разрешение их построения за пределами нулевой страницы не только уменьшило спрос на этот ресурс, но и позволило строить таблицы в ПЗУ.

Новые и измененные инструкции

В дополнение к новым режимам адресации, «базовая модель» 65C02 также добавила набор новых инструкций. [15]

Инструкции по манипуляции битами

И WDC, и Rockwell внесли улучшения в функции тестирования и манипуляции битами в 65C02. WDC добавила новые режимы адресации к инструкции BIT, которая присутствовала в 6502, а также две новые инструкции для удобной манипуляции битовыми полями, что является обычным действием в драйверах устройств.

BITв 65C02 добавлен немедленный режим, нулевая страница, индексированная по X, и абсолютная индексированная по X адресация. [15] Немедленный режим адресации особенно удобен тем, что он полностью неразрушающий. Например:

LDA $1234
BIT #%00010000

может использоваться вместо:

LDA $1234
AND #%00010000

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

В дополнение к усовершенствованиям инструкции BITWDC добавила две инструкции, предназначенные для удобной манипуляции битовыми полями:

Маска в аккумуляторе ( .A) логически И сопоставляется с памятью по адресу addr , местоположение которой может быть нулевой страницей или абсолютным. Флаг Z в регистре состояния обусловлен в соответствии с результатом логического И — никакие другие флаги регистра состояния не затрагиваются. Кроме того, биты в addr устанавливаются (TSB) или очищаются (TRB) в соответствии с маской в .A​​. TSB выполняет логическое ORпосле логического ANDи сохраняет результат логического ORв addr , тогда как TRB сохраняет результаты логического ANDв addr . В обоих случаях флаг Z в регистре состояния указывает результат до того, как содержимое addr было изменено. Таким образом, TRB и TSB заменяют последовательность инструкций, по сути, объединяя инструкцию с дополнительными шагами для сохранения вычислительных изменений, но таким образом, чтобы сообщать о состоянии затронутого значения до его изменения. [1].A AND addrBIT

Изменения Rockwell добавили больше инструкций по манипуляции битами для прямой установки и проверки любого бита и объединения проверки, очистки и перехода в один опкод. Новые инструкции были доступны с самого начала в семействе Rockwell R65C00, [19] но не были частью оригинальной спецификации 65C02 и не встречались в версиях, созданных WDC или другими ее лицензиатами. Позднее они были скопированы обратно в базовую конструкцию и были доступны в более поздних версиях WDC.

Инструкции, специфичные для Rockwell, следующие:

RMB и SMB используются для очистки (RMB) или установки (SMB) отдельных битов в битовом поле, каждая из которых заменяет последовательность из трех инструкций. Поскольку RMB и SMB являются адресацией только нулевой страницы, эти инструкции ограничены в полезности и в первую очередь представляют ценность в системах, в которых регистры устройств присутствуют на нулевой странице. [ необходима цитата ] Компонент bit# инструкции часто записывается как часть мнемоники, например, SMB1 $12которая устанавливает бит 1 в адресе нулевой страницы $12. Некоторые ассемблеры рассматривают bit# как часть операнда инструкции, например, , что имеет преимущество в том, что позволяет заменить его именем переменной или вычисляемым числом. [16]SMB 1,$12
Применяются те же адресация нулевой страницы и ограничения, что и у RMB и SMB, но переходы на addr, если выбранный бит байта нулевой страницы zp очищен (BBR) или установлен (BBS). Как и в случае с RMB и SMB выше, компонент bit# инструкции часто записывается как часть мнемоники, например, который переходит на адресную метку addr, если установлен бит 1 байта по адресу нулевой страницы $12. Некоторые ассемблеры рассматривают bit# как часть операнда инструкции, например, , что имеет то преимущество, что позволяет заменить его именем переменной или вычисляемым числом. Как и в случае с RMB и SMB, BBR и BBS заменяют последовательность из трех инструкций. [16]BBS1 $12,addrBBS 1,$12,addr

Режимы пониженного энергопотребления

В дополнение к новым командам, указанным выше, WDC также добавила инструкции STPи WAIдля поддержки режимов пониженного энергопотребления.

STP, STop the Processor, останавливал всю обработку до тех пор, пока не будет выполнен аппаратный сброс. Это можно было использовать для перевода системы в «спящий» режим, а затем быстро разбудить ее сбросом. Обычно для этого требовалась внешняя система для поддержания основной памяти, и это не использовалось широко.

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

Напротив, в 65C02 код прерывания можно было написать, поместив WAIсразу за ним JSRили JMPв обработчик. Когда WAIвстречалось , обработка останавливалась, и процессор переходил в режим пониженного энергопотребления. Когда прерывание было получено, он немедленно обрабатывал JSRи обрабатывал запрос.

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

65SC02

65 SC 02 — это вариант WDC 65C02 без битовых инструкций. [20] [21]

Известные применения 65C02

Домашние компьютеры

Игровые приставки

Другие продукты

Смотрите также

Примечания

  1. ^ Некоторые источники, включая предыдущие версии этой статьи, указывают на 1978 год. Это была дата, когда Билл Менш, главный конструктор, основал WDC. В статье 1984 года Менш конкретно указывает 1981 год как дату начала.
  2. ^ В статье Вагнера от июня 1983 года упоминается, что она была доступна в течение «нескольких месяцев». Учитывая типичные задержки публикаций в то время, это может датировать ее концом 1982 года. Другой источник указывает на 1980 год, см. страницу обсуждения.

Ссылки

Цитаты

  1. ^ abcdefg Вагнер 1983, с. 204.
  2. ^ "Softalk". Softalk Publishing . Том 3, № 10. Июнь 1983. С. 199. Получено 24 мая 2022 .
  3. ^ Кён, Филипп (2 марта 2018 г.). «6502 Stack» (PDF) .
  4. Тейлор и Уотфорд 1984, стр. 174.
  5. ^ «Проекты ЦП 6502 на языке HDL (для ПЛИС)».
  6. ^ «Плата разработчика W65C02DB».
  7. ^ "W65C02S-14".
  8. ^ Паркер, Нил. «Расшифрованный набор инструкций 6502/65C02/65C816». Страница Нила Паркера на Apple II .
  9. Варди, Адам (22 августа 1995 г.). «Дополнительные инструкции ЦП серии 65XX».
  10. ^ Миф о повороте вправо 6502
  11. ^ "ROR" в Microsoft BASIC для 6502
  12. ^ Файл:MCS650x Instruction Set.jpg
  13. ^ ab "Различия между NMOS 6502 и CMOS 65c02" . Получено 27 февраля 2018 г. Флаги N, V ​​и Z были неверными после десятичной операции (но C был в порядке).
  14. ^ ab Кларк, Брюс. «Операционные коды 65C02».
  15. ^ abc Вагнер 1983, стр. 200.
  16. ^ abcd Вагнер 1983, стр. 203.
  17. Вагнер 1983, стр. 200–201.
  18. ^ "Техническое описание W65C02S" (PDF) .
  19. ^ Вагнер 1983, стр. 199.
  20. ^ GTE Microcircuits Date Book. GTE Microcircuits. 1984. стр. 1-3 . Получено 2024-05-02 .
  21. ^ Закс, Родней (1983). Программирование 6502. Sybex. п. 348. ИСБН 0895881357.
  22. ^ "8-The Apple IIc". История Apple II . 2010-06-23 . Получено 2023-10-31 .
  23. ^ "BBC Master Acorn Computer". www.old-computers.com . Получено 2023-10-31 .
  24. ^ "LASER 128 / 128EX / 128EX2 Video Technology". www.old-computers.com . Получено 2023-10-31 .
  25. ^ «HuC6280 — архаичные пиксели».

Библиография

Дальнейшее чтение

Внешние ссылки