W65C816S (также 65C816 или 65816 ) — 16-разрядный микропроцессор ( MPU ), разработанный и продаваемый Western Design Center (WDC). Представленный в 1983 году [4] , W65C816S является улучшенной версией 8-разрядного MPU WDC 65C02 , который сам по себе является CMOS- улучшением почтенного MPU MOS Technology 6502 NMOS . 65C816 — это центральный процессор для Apple IIGS и, в модифицированной форме, для Super Nintendo Entertainment System .
65 в обозначении детали происходит от режима совместимости 65C02, а 816 означает, что MPU имеет выбираемые размеры регистров 8 и 16 бит . В дополнение к наличию 16-битных регистров, W65C816S расширяет адресацию памяти до 24 бит , поддерживая до 16 мегабайт памяти с произвольным доступом . Он имеет улучшенный набор инструкций и 16-битный указатель стека , а также несколько новых электрических сигналов для улучшенного управления аппаратным обеспечением системы .
При сбросе W65C816S запускается в «режиме эмуляции», то есть он ведет себя по существу как 65C02. После этого W65C816S может быть переключен в «родной режим» с помощью двух инструкций, что позволяет включить все расширенные функции, но при этом сохранить значительную степень обратной совместимости с большинством программного обеспечения 65C02. Однако, в отличие от версии PDIP40 65C02, которая является совместимой по выводам заменой своего предка NMOS, PDIP40 W65C816S несовместим по выводам ни с одним другим микропроцессором семейства 6502.
W65C802 или 65802 полностью программно совместим с 65C816, но электрически совместим с 6502 и 65C02. Таким образом, 65C802 может использоваться в качестве замены в большинстве систем , оснащенных 6502 или 65C02. Однако 65C802 не может выдавать 24-битный адрес, что ограничивает его адресное пространство 64 КБ. 65C802 больше не производится.
В 1981 году Билл Менш , основатель и генеральный директор WDC, начал разработку 65C02 со своими производственными партнерами, в первую очередь Rockwell Semiconductor и Synertek . Основной целью усилий по 65C02 был переход от оригинального процесса NMOS 6502 к процессу CMOS, что позволило бы ему работать на гораздо более низких уровнях мощности, где-то между 1 ⁄ 10 и 1 ⁄ 20 при любой заданной тактовой частоте. Также желательно было повысить максимальную поддерживаемую тактовую частоту. Конструкция 65C02 исправила ошибки чипа, присутствующие в NMOS 6502 (например, печально известная ошибка), и ввела новые инструкции и новые режимы адресации для некоторых существующих инструкций. [5]JMP (<addr>)
Разработка W65C816S началась в 1982 году после того, как Менш консультировался с Apple Computer по поводу новой версии серии персональных компьютеров Apple II , которая, помимо прочего, имела бы улучшенную графику и звук. Apple хотел микропроцессор, который был бы программно совместим с 6502, использовавшимся тогда в Apple II, но с возможностью адресации большего объема памяти, а также загрузки и хранения 16-битных слов. Результатом стал 65C816, завершенный в марте 1984 года, образцы которого были предоставлены как Apple, так и Atari во второй половине года, а полный выпуск состоялся в 1985 году. [6] В процессе проектирования Меншу помогала его сестра Кэтрин, которая отвечала за часть макета устройства.
Тот же процесс привел к появлению 65C802, который был идентичен внутри 65C816. Оба производились на одних и тех же производственных линиях и расходились только на последних этапах металлизации, когда чип подключался к внешним контактам. В 65C802 эти контакты имели ту же компоновку, что и у оригинального 6502, что позволяло использовать его в качестве замены, при этом по-прежнему позволяя использовать 16-битную обработку ЦП. Однако, поскольку он использовал оригинальную схему расположения контактов, у него было только 16 адресных контактов, и поэтому он мог получить доступ только к 64 КБ внешней памяти. [7] Обычно, когда производители оборудования разрабатывали проект с нуля, они использовали 65C816, а не 65C802, в результате чего последний был снят с производства.
Apple впоследствии интегрировала 65C816 в компьютер Apple IIGS . Базовая конструкция 65C816 была получена от VLSI Technology , [8] GTE , Sanyo и других с середины-конца 1980-х до начала 1990-х годов.
В 1990-х годах и 65C816, и 65C02 были преобразованы в полностью статическое ядро , что позволило полностью остановить тактовую частоту процессора Ø2 без потери содержимого регистров. Эта функция, наряду с использованием асинхронной статической оперативной памяти , позволила производить конструкции, которые потребляли минимальное количество энергии в режиме ожидания.
По состоянию на апрель 2024 года [обновлять]W65C816S доступен от WDC в 40-контактном корпусе PDIP , PLCC44 или 44-контактном корпусе TQFP , как микроконтроллер через W65C265 [9] и как IP-ядра для интеграции ASIC [10] [11] (например, серия ИС для развлекательно-образовательных ТВ-приложений Winbond W55V9x [12] ).
Характеристики WDC 65c816:
C
), указатель стека ( SP
) и индексные регистры ( X
и Y
).DP
).DB
) и программный банк ( PB
) регистры, генерирующие биты 16–23 24-битного кода и адресов данных. Отдельные регистры программ и банков данных позволяют сегментировать программы и адресовать линейные данные объемом 16 МБ.VDA
) и действительный адрес программы ( VPA
) управляют выходами для квалификации памяти, двойного кэша и реализации DMA с захватом цикла .VPB
) указывает на выборку вектора прерывания .ABORTB
) и связанный с ним вектор поддерживают исправление процессором ошибок шины, таких как сбои страниц и нарушения доступа к памяти.MVN
и MVP
), позволяющие быстро копировать структуры данных из одной области оперативной памяти в другую с минимальным кодом.WAI
) и Stop-the-Clock ( ) еще больше снижают энергопотребление , уменьшают задержку прерывания и обеспечивают синхронизацию с внешними событиями.STP
COP
) с соответствующим вектором поддерживает конфигурации сопроцессора, например, процессоры с плавающей точкой .WDM
) для будущих двухбайтовых кодов операций и ссылка на будущие разработки (WDM — это инициалы разработчика W65C816S Уильяма Д. Менша ).65C816 имеет два режима работы: «режим эмуляции», в котором 16-битные операции невидимы — индексные регистры принудительно устанавливаются в восемь бит — и чип выглядит очень похожим на 6502, с теми же временными циклами для кодов операций; и «собственный режим», который раскрывает все новые функции. Процессор автоматически переходит в режим эмуляции при включении или сбросе, что позволяет ему заменить 65(C)02, предполагая, что кто-то вносит необходимые изменения в схему для размещения другой компоновки выводов. [5]
Наиболее очевидным изменением в 65C816 при работе в собственном режиме является расширение различных регистров с 8-битных до 16-битных размеров. Это улучшение затрагивает аккумулятор ( A
), X
и Y
индексные регистры , а также указатель стека ( SP
). Оно не затрагивает счетчик программ ( PC
), который всегда был 16-битным. [13]
При работе в собственном режиме два бита в регистре состояния меняют свое значение. В оригинальном 6502 биты 4 и 5 не использовались, хотя бит 4 упоминается как b
флаг прерывания ( ). В собственном режиме бит 4 становится флагом x
, а бит 5 становится m
флагом. Эти биты контролируют, являются ли индексные регистры ( x
) и аккумулятор/память ( m
) 8-битными или 16-битными по размеру. Нули в этих битах устанавливают 16-битные размеры, единицы устанавливают 8-битные размеры. Эти биты блокируются на единицах, когда процессор включается или сбрасывается, но становятся изменяемыми, когда процессор переключается в собственный режим. [13]
В режиме работы в собственном режиме аккумулятор и индексные регистры могут быть установлены на 16- или 8-битные размеры по усмотрению программиста с помощью инструкций REP
и SEP
для управления битами регистра состояния m
и x
. Эта функция дает программисту возможность выполнять операции с данными как размером слова, так и размером байта. Поскольку размеры аккумулятора и индексного регистра настраиваются независимо, можно, например, установить аккумулятор на восемь бит, а индексные регистры — на 16 бит, что дает программисту возможность манипулировать отдельными байтами в диапазоне 64 КБ без необходимости выполнять арифметику указателей.
Когда размеры регистров установлены на 16 бит, доступ к памяти будет извлекать или сохранять два смежных байта со скоростью один байт за такт. Следовательно, инструкция чтения-изменения-записи, такая как ROR <addr>
, при использовании, когда аккумулятор установлен на 16 бит, повлияет на два смежных байта памяти, а не на один, и будет потреблять больше тактов, чем когда аккумулятор установлен на восемь бит. Аналогично, все арифметические и логические операции будут 16-битными операциями. [14]
Другим важным изменением в системе при работе в собственном режиме является то, что модель памяти расширена до 24-битного формата с исходного 16-битного формата 6502. 65c816 использует два 8-битных регистра, регистр банка данных ( DB
) и регистр банка программ ( PB
), для установки бит 16-23 адреса, эффективно генерируя 24-битные адреса. В обоих случаях «банк» относится к непрерывному сегменту памяти размером 64 КБ, который ограничен диапазоном адресов $xx0000-$xxFFFF
, где xx
— адрес банка, то есть биты 16-23 эффективного адреса. Оба DB
и PB
инициализируются при $00
включении питания или сбросе. [15]
Во время цикла выборки кода операции или операндаPB
добавляется к счетчику программы ( PC
) для формирования 24-битного эффективного адреса. Если PC
«перевернуть» (вернуться к нулю), PB
не будет увеличиваться. Следовательно, программа ограничена пределами банка, в котором она выполняется. Подразумевается, что эта модель памяти заключается в том, что цели ветвления и подпрограммы должны находиться в том же банке, что и инструкция, выполняющая ветвление или вызов, если только «длинные» переходы или вызовы подпрограмм не используются для выполнения кода в другом банке. Не существует программных средств, с помощью которых PB
можно было бы напрямую изменить. [16]
Во время цикла выборки или сохранения данных DB
добавляется к 16-битному адресу данных для формирования 24-битного эффективного адреса, по которому будет осуществляться доступ к данным. Эта характеристика процессора позволяет разумно выполнять код 6502 или 65c02, который использует 16-битные адреса для ссылки на элементы данных. В отличие от PB
, DB
может быть изменен под управлением программы, что может быть сделано для доступа к данным за пределами 16-битной адресации. Кроме того, DB
будет временно увеличиваться, если адрес индексируется за пределами банка, который в данный момент находится в DB
. DB
игнорируется, если 24-битный адрес указан в качестве операнда для инструкции выборки/сохранения данных или если эффективный адрес находится на прямой (нулевой) странице или в аппаратном стеке$00
. В последнем случае для генерации эффективного адреса используется подразумеваемый банк . [17]
Еще одним дополнением к набору регистров является 16-битный прямой страничный регистр ( DP
), который устанавливает базовый адрес для того, что раньше называлось нулевой страницей , но теперь называется прямой страницей . Прямая страничная адресация использует 8-битный адрес, что приводит к более быстрому доступу, чем при использовании 16- или 24-битного адреса. Кроме того, некоторые режимы адресации, которые предлагают косвенную адресацию, возможны только на прямой странице. В 65(c)02 прямая страница всегда является первыми 256 байтами памяти, отсюда «нулевая страница». В собственном режиме 65c816 может перемещать прямую (нулевую) страницу в любое место в банке $00
(первые 64 КБ памяти), записывая 16-битный начальный адрес в DP
. Существует штраф за доступ в один цикл, если DP
не установлена точная граница страницы, то есть если значение в DP
не равно $xx00
, где xx
— старший байт. [18]
Текущий режим работы хранится в e
бите эмуляции ( ). Поскольку новые биты x
и уже были добавлены m
к предыдущему набору из шести флагов в регистре состояния ( SR
), осталось недостаточно бит для хранения нового бита режима. Вместо этого было использовано уникальное решение, в котором бит режима оставался «невидимым», не допуская прямого доступа. Инструкция XCE
(e X change C arry with Emulation ) обменивает значение бита эмуляции с битом переноса ( c
), битом 0 в SR
. Например, если требуется войти в собственный режим после запуска процессора, можно использовать CLC
для очистки бита переноса, а затем XCE
записать его в бит эмуляции. [19] Возвращаясь к режиму эмуляции 65c02, используются , SEC
за которыми следует XCE
. [20]
Внутри 65c816 представляет собой полностью 16-битную конструкцию. Биты m
и определяют, как регистры пользователя (аккумулятор и индекс) отображаются в остальной части системы. После сброса 65c816 запускается в режиме эмуляции 6502, в котором и заблокированы на . Следовательно, регистры заблокированы на восьмибитном размере. Самый старший байт (MSB) аккумулятора (-аккумулятора ) недоступен напрямую, но может быть заменен на самый младший байт (LSB) аккумулятора ( -аккумулятора) с помощью инструкции. Соответствующей операции для индексных регистров ( и ), чьи MSB заблокированы на , нет .x
SR
m
x
1
B
A
XBA
X
Y
$00
При переключении в собственный режим старший бит X
и Y
будет равен нулю, а B
-аккумулятор останется неизменным. Если m
бит in SR
очищен, B
-аккумулятор будет "связан" с A
-аккумулятором, чтобы сформировать 16-битный регистр (называемый C
-аккумулятором). Операция загрузки/сохранения или арифметико-логическая операция с участием аккумулятора или памяти будет 16-битной операцией — для извлечения/сохранения 16-битного значения требуется два цикла шины.
Если x
бит in SR
очищен, оба индексных регистра будут установлены в 16 бит. Если используется для индексации адреса, например, LDA SOMEWHERE,X
, 16-битное значение в индексном регистре будет добавлено к базовому адресу для формирования эффективного адреса.
Если m
бит в SR
установлен, аккумулятор вернется к 8-битному регистру, и последующие операции с аккумулятором, за некоторыми исключениями, будут 8-битными операциями. -аккумулятор B
сохранит значение, которое у него было, когда аккумулятор был установлен на 16 бит. Исключениями являются инструкции, которые передают прямой страничный регистр ( DP
) и указатель стека ( SP
) в/из аккумулятора. Эти операции всегда имеют ширину 16 бит в собственном режиме, независимо от состояния бита m
в SR
.
Если x
бит in SR
установлен, то не только индексные регистры вернутся к 8-битному разряду, но и все, что было в старшем бите, когда они были 16-битными, будет потеряно, а программист на языке ассемблера не может позволить себе забыть об этом. [21]
Системы на базе вариантов 65c816: