stringtranslate.com

ВДК 65C02

Микропроцессор 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 и 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 байт ОЗУ, «нулевая страница» ( $0000to $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] Типичные микропроцессоры, не реализованные в CMOS, имеют динамические ядра и потеряют содержимое своих внутренних регистров (и, следовательно, выйдет из строя), если они не будут постоянно тактироваться со скоростью между некоторыми минимальными и максимальными указанными значениями.

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

Фотография кристалла микроконтроллера Sitronix ST2064B со встроенным ядром W65C02S в правом верхнем углу.

Логические функции

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

Функции синхронизации

W65C02S может работать при любом удобном напряжении питания (VDD ) от 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 сообщила, что реализации W65C02S на FPGA успешно работают на частоте 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 при первом выпуске имел несколько ошибок. Ранние версии процессора не имели RORинструкций (поворот вправо), и в руководствах по технологии MOS это также не документировалось. RORбыла реализована на очень ранней стадии производства, и подавляющее большинство машин, использующих процессор, поддерживают эту инструкцию. [10]

Ошибка, присутствующая во всех вариантах 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 автоматически очищает этот флаг после помещения регистра состояния в стек в ответ на любое прерывание или в ответ на аппаратный сброс, тем самым переводя процессор обратно в режим двоичной арифметики. [11]

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

При выполнении инструкции чтения-изменения-записи (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)ко всем инструкциям, которые использовали индексированный косвенный и непрямой индексированный режимы, освобождая индексные регистры. [12]

Инструкция 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-битным смещением. [12] То же самое можно было достичь в версии NMOS с использованием индексированного косвенного режима, но только если таблица находилась на нулевой странице, а это ограниченный ресурс. Разрешение их создания за пределами нулевой страницы не только уменьшило потребность в этом ресурсе, но также позволило создавать таблицы в ПЗУ.

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

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

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

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

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

LDA $1234
BIT #%00010000

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

LDA $1234
AND #%00010000

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

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

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

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

Специальные инструкции Rockwell:

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

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

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

STP, ОСТАНОВИТЬ процессор, остановить всю обработку до тех пор, пока не будет выполнен аппаратный сброс. Это можно использовать, чтобы перевести систему в «спящий режим», а затем быстро вывести ее из строя с помощью перезагрузки. Обычно для этого требовалась внешняя система для обслуживания основной памяти, и она не получила широкого распространения.

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

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

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

65SC02

65 SC 02 представляет собой вариант WDC 65C02 без битовых инструкций. [18]

Известные варианты использования 65C02

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

Игровые консоли

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

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

Примечания

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

Рекомендации

Цитаты

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

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

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

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