CSG 65CE02 — это 8/16-битный микропроцессор, разработанный Commodore Semiconductor Group в 1988 году. [1] Он принадлежит к семейству MOS Technology 6502 , разработанному на основе CMOS WDC 65C02, выпущенного Western Design Center в 1983 году.
Как и 65C02, 65CE02 был построен по 2-мкм CMOS-процессу вместо 8-мкм NMOS -технологии оригинального 6502, что делает чип меньшего размера (и, следовательно, менее дорогим), а также потребляет гораздо меньше энергии. В дополнение к изменениям, внесенным в 65C02, 65CE02 также включал улучшения в конвейер процессора , позволяющие выполнять однобайтовые инструкции за 1 цикл, а не за 6502 (и большинство вариантов) минимум за 2 цикла. Также были удалены задержки в 1 цикл при пересечении границ страницы . Эти изменения повысили производительность на целых 25% при той же тактовой частоте.
Другие изменения включали добавление третьего индексного регистра Z, а также добавление и модификацию ряда инструкций для использования этого регистра. Нулевая страница, первые 256 байт памяти, которые использовались в качестве псевдорегистров, теперь можно было переместить на любую страницу основной памяти с помощью регистра B (ase page). Регистр стека был расширен с 8 до 16 бит с использованием аналогичного страничного регистра SPH (высокий указатель стека), что позволило перемещать стек за пределы первой страницы и увеличивать его размеры.
65CE02 послужил основой для системы на чипе CSG 4510 , разработанной для неизданного Commodore 65 . Позже 65CE02 использовался для карты последовательного порта A2232 для компьютера Amiga . Другого применения он, похоже, не нашел.
К концу 1970-х годов первоначальная команда MOS Technology , разрабатывавшая 6502, распалась. Билл Менш переехал в Аризону и основал Западный центр дизайна (WDC), чтобы предоставлять услуги проектирования на базе 6502. Примерно в 1981 году основные лицензиаты конструкции 6502, Rockwell Semiconductor , GTE и Signetics , вместе с Mensch начали работу по модернизации, которая привела к созданию WDC 65C02 . В основном это была CMOS - реализация исходного NMOS 6502, которая потребляла в 10–20 раз меньше энергии, но она также включала ряд новых инструкций, помогающих улучшить плотность кода в некоторых приложениях. Включены новые инструкции INA/DEA
для увеличения и уменьшения аккумулятора , STZ
записи нуля в ячейку памяти, а также BRA
переход с 1-байтовым относительным адресом в стиле ветвления . В 65C02 также исправлен ряд мелких ошибок в исходной конструкции 6502.
Оригинальный 6502 был разработан в эпоху, когда еще не существовало микрокомпьютеров , когда микропроцессоры использовались в качестве основы для более простых систем, таких как интеллектуальные терминалы , настольные калькуляторы и множество различных промышленных систем контроллеров. Это была также эпоха, когда устройства памяти обычно основывались на статической оперативной памяти , которая была очень дорогой и имела низкую плотность памяти . По обеим этим причинам способность обрабатывать «большие» объемы памяти не требовалась, и многие процессоры имели режимы работы, которые работали с небольшими частями большего адресного пространства , чтобы обеспечить более высокую производительность. Так было в 6502, где первая страница памяти , или «нулевая страница», использовалась для обеспечения более быстрого доступа, а вторая страница, «первая страница», — для хранения 256-байтового стека .
К 1980-м годам эти предположения уже не были верны, многие машины на базе этих процессоров теперь поставлялись с максимальными 64 КБ, которые мог адресовать 6502, используя гораздо менее дорогую и более плотную динамическую память . Преимущества в скорости режима адресации с нулевой страницей остались, но теперь существовали в значительно большем пространстве памяти. Аналогичным образом, одностраничный стек вызовов теперь представлял собой жалкую мишуру в общем объеме памяти, а языки высокого уровня , которые широко использовали пространство стека, не могли легко работать на 6502.
65CE02 — это улучшенная версия 65C02, в которой модель памяти расширена, чтобы сделать ее более подходящей для систем с большим объемом основной памяти. Для этого в него добавлены следующие новые функции:
TAB
(Передача A в B), нулевая страница затем перемещается в новое место. Важным применением этой функции является разрешение небольшим программам, которые могут уместиться в пределах 256 байт страницы, использовать адресацию нулевой страницы (теперь известную как адресация базовой страницы), что уменьшает размер кода, поскольку адреса больше не имеют второго байта, что также ускоряет выполнение кода, поскольку второй байт не нужно выбирать из памяти. [1]CLE/SEE
инструкций указатель стека становится истинным 16-битным значением. Значение в SPH добавляется к значению в исходном SP, теперь известном как SPL (что означает «низкий указатель стека»), чтобы создать 16-битный указатель на нижнюю часть стека. Это позволяет стеку вырасти намного больше исходных 256 байт, которые были слишком малы для языков высокого уровня. [1]STZ
работает так же, как и в 65C02, где та же инструкция означает сохранение нуля. -в память. Это позволяет запускать немодифицированный код 65C02 на 65CE02. Ряд других инструкций добавлен или изменен для обеспечения доступа к регистру Z. К ним относятся LDZ
загрузка значения из памяти, TZA/TAZ
передача значения в аккумулятор или из аккумулятора, PHZ/PLZ
загрузка и извлечение Z в стек, INZ/DEZ
увеличение и уменьшение, а также CPZ
сравнение значения в Z со значением в памяти. [1]BRA
функция Branch Always, которая, по сути, JMP
использовала 8-битный относительный адрес в стиле ветвления вместо абсолютного 16-битного адреса. По неизвестным причинам 65CE02 изменил мнемонику на BRU
(Безусловное ветвление). Они также добавили BSR
инструкцию перехода к подпрограмме, которая использует тот же режим относительной адресации JSR
, что и команда перехода к подпрограмме. [1]JMP
для 16-битной цели, а затем переходить по этим трем байтам, когда вы не хотели этого делать. Например, если кто-то хочет перейти к адресу $1234, если аккумулятор равен нулю, нужно сделать CMP #$00/BNE +3/JMP $1234
, что означает, что вы хотите пропустить 3 байта, если аккумулятор не равен нулю. В 65CE02 это можно свести к чему-то вроде , тем самым сделав код более очевидным, удалив два байта инструкций и устранив необходимость в потерянных циклах выборки и запуска ветки. Однако, поскольку он по-прежнему использует относительную адресацию, относительный адрес должен быть рассчитан по метке программистом или ассемблером при преобразовании в машинный код. [1]JMP addr
CMP #$00/BEQ $0123
INW/DEW
увеличение и уменьшение значения в памяти, а также ASW/ROW
выполнение слова арифметического сдвига (влево) или слова ROtate (влево). [1]ASR
выполнения арифметического (знакового) сдвига вправо (у 6502 был только логический или беззнаковый сдвиг вправо), инструкции, NEG A
которая выполняет отрицание аккумулятора до двухRTN
, и вариации RTS
(ReTurn из Subroutine ), который возвращается к смещению адреса в стеке, а не вверху, что позволяет избежать необходимости явно POP
отключать что-либо, добавленное процедурой во время ее выполнения. В систему также добавлен новый режим адресации, в котором базовый адрес в стеке используется в качестве основы для косвенной адресации. [1]AUG
Наконец, для будущего расширения была добавлена новая четырехбайтовая инструкция. Хотя в технических характеристиках неясно его конечная цель, похоже, что это заполнитель, предназначенный для передачи инструкций в сопроцессорные блоки, такие как блок управления памятью . [1]INX
Главной странностью оригинального 6502 было то, что выполнение однобайтовых инструкций типа « все еще» занимало два цикла. Это позволило упростить трубопроводную систему ; следующий байт из памяти был извлечен во время декодирования операции, то есть следующий байт был извлечен несмотря ни на что. Для большинства инструкций этот байт будет частью (или целым) операнда, который затем можно будет немедленно ввести в декодированную инструкцию. [2]
Если инструкции требовался только один байт, процессор все равно считывал следующий байт, декодируя первый. В этом случае следующим байтом была следующая инструкция, но у него не было возможности передать ее обратно на первый этап конвейера для ее декодирования. Вместо этого полученная инструкция отбрасывалась и перечитывалась для подачи в декодер. Это приводит к потере цикла. Хотя это привело к тому, что ряд инструкций выполнялись медленнее, чем могли бы, эта «функция» была сохранена в 65C02, хотя в доступных источниках не объясняется, было ли это сделано для того, чтобы сохранить простоту конвейера или время цикла. [2]
Поддержание совместимости циклов не было требованием для 65CE02, а новые производственные процессы сделали дополнительные схемы в конвейере не проблемой, поэтому конвейер был переорганизован для правильной обработки однобайтовых инструкций за один цикл. [2] Эти улучшения позволяют 65CE02 выполнять код до 25% быстрее, чем предыдущие модели 65xx. [1]
Дальнейшее улучшение решает проблему, связанную с инструкциями адресации, которые добавляют значения для получения окончательного адреса. Примеры включают «индексированную косвенную обработку», когда значение в одном из индексных регистров добавляется к базовому адресу, а затем инструкция применяется к полученному адресу. В оригинальном 6502, если сложение двух значений пересекало границу страницы, каждые 256 позиций требовался дополнительный цикл для получения окончательного значения адреса. Модель 65CE02 устранила это ограничение, тем самым улучшив производительность этих часто используемых режимов. [1]
Он изготовлен с использованием CMOS -технологии 2 мкм, что позволяет снизить энергопотребление по сравнению с предыдущими версиями NMOS и HMOS семейства 65xx. Он размещен в 40-контактном DIP-разъёме , совместимом по выводам с 6502. [3]
4510 представляет собой вариант системы в корпусе (SiP) 65CE02, который включает в себя два контроллера портов ввода-вывода 6526 CIA и специальный MMU для расширения адресного пространства до 20 бит (1 мегабайт). Он размещен в 84-контактном PLCC . [4]
Модель 4510 использовалась в неизданном домашнем компьютере Commodore 65 [5] и в неизданной недорогой версии Commodore CDTV . [5] [6]
65CE02 использовался в карте последовательного порта Commodore A2232 для компьютера Amiga . [7] [8]