Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

CSG 65CE02 является 8/16-битный микропроцессор , разработанный Commodore Semiconductor Group в 1988 году [1] Он является членом в 6502 MOS Technology семейства, разработанная с CMOS WDC 65C02 выпущенному Design Center Western в 1983 году.

Как и 65C02, 65CE02 был построен по технологии CMOS 2 мкм вместо технологии NMOS 8 мкм в оригинальном 6502 , что сделало чип меньше (и, следовательно, дешевле), а также потребляло гораздо меньше энергии. В дополнение к изменениям, внесенным в 65C02, 65CE02 также включает улучшения конвейера процессора, позволяющие выполнять однобайтовые инструкции за 1 цикл, а не как минимум за 2 цикла 6502 (и большинство вариантов). Также были устранены задержки на 1 цикл при пересечении границ страницы . Эти изменения улучшили производительность на 25% при той же тактовой частоте.

Другие изменения включали добавление третьего индексного регистра Z, а также добавление и изменение ряда инструкций по использованию этого регистра. Нулевая страница, первые 256 байтов памяти, которые использовались как псевдорегистры, теперь могла быть перемещена на любую страницу в основной памяти с помощью регистра B (ase page). Регистр стека был расширен от 8 до 16 битов с использованием аналогичного регистр страницы, SPH (высокий указатель стека), позволяя стек быть перемещены из страницы одной и расти до больших размеров.

65CE02 послужил основой для системы на микросхеме CSG 4510 , разработанной для еще не выпущенного Commodore 65 . Позднее 65CE02 использовался для платы последовательного порта A2232 для компьютера Amiga . Похоже, он не нашел другого применения.

Описание [ править ]

Распиновка CSG 65CE02

Фон [ править ]

К концу 1970-х годов команда разработчиков MOS Technology , разработавшая 6502, распалась. Билл Менш переехал в Аризону и основал Western Design Center (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, используя гораздо менее дорогую и более плотную динамическую RAM . Преимущества в скорости режима адресации нулевой страницы остались, но теперь существуют в области памяти, которая была значительно больше. Точно так же одностраничный стек вызовов теперь представлял собой жалкие гроши в общей памяти, и языки высокого уровня, которые в огромной степени использовали пространство стека, не могли легко работать на 6502.

Новые возможности [ править ]

65CE02 - это еще одна улучшенная версия 65C02, которая расширяет модель памяти, чтобы сделать ее более подходящей для системы с большим объемом оперативной памяти. Для этого он добавляет следующие новые функции:

  • 65CE02 добавляет 8-битный регистр B для базовой страницы, который смещает нулевую страницу в любое место в памяти. B устанавливается в ноль при включении или сбросе, поэтому 65CE02 изначально работает точно так же, как 6502. Если значение помещается в регистр B с помощью TAB(Transfer A to B), нулевая страница затем перемещается в новое место. Значительное использование этой функции заключается в том, чтобы позволить небольшим подпрограммам, которые могут уместиться в пределах 256 байтов страницы, использовать адресацию нулевой страницы (теперь известную как адресация базовой страницы), что делает код меньше, потому что адреса больше не имеют второго байта, который также ускоряет выполнение кода, поскольку второй байт не нужно извлекать из памяти. [1]
  • 65CE02 также расширяет стек из исходных 256 байтов первой страницы до, теоретически, всего адресного пространства. Для этого он добавляет еще один 8-битный регистр SPH для Stack Pointer High. Обычно это работает как B, смещая базовый адрес стека со страницы один на любую выбранную страницу. В остальном он продолжает работать, как и раньше, имея максимальный размер одной страницы, 256 байт. Как и B, при запуске или сбросе SPH устанавливается на 01, поэтому он работает точно так же, как 65C02. [1]
Когда новый бит «расширения стека» в регистре состояния установлен с использованием новых CLE/SEEинструкций, указатель стека становится истинным 16-битным значением. Значение в SPH добавляется к значению в исходном SP, теперь известном как SPL для Stack Pointer Low, чтобы создать 16-битный указатель на нижнюю часть стека. Это позволяет стеку вырасти намного больше, чем исходные 256 байтов, которые были слишком малы для языков высокого уровня. [1]
Это означает, что существует два типа стеков: 256-байтовый, который может быть где угодно, и 16-битный, охватывающий память. Хотя последний является более гибким, это означает, что доступ к стеку должен формировать 16-битный адрес из двух регистров, что требует дополнительного цикла и, таким образом, снижает общую производительность. Использование меньшего стека там, где это возможно, обеспечивает лучшую производительность. [1]
  • 65CE02 также добавляет новый индексный регистр Z. Он устанавливается в ноль при запуске или сбросе, что означает, что его инструкция сохранения Z в память STZработает так же, как и в 65C02, где та же инструкция означает сохранение нуля. -в память. Это позволяет запускать неизмененный код 65C02 на 65CE02. Ряд других инструкций добавлен или изменен, чтобы разрешить доступ к регистру Z. Среди них - LDZзагрузка значения из памяти, TZA/TAZпередача значения в аккумулятор или из аккумулятора, PHZ/PLZотправка и извлечение Z в стек, INZ/DEZувеличение и уменьшение, а CPZтакже сравнение значения в Z со значением в памяти. [1]
  • В 65C02 добавлена ​​функция BRABranch Always, которая, по сути JMP, использовала 8-битный относительный адрес в стиле ветвления вместо абсолютного 16-битного адреса. Это можно было смоделировать на исходном 6502 с помощью BVC(Переход, если oVerflow is Clear), который, по другим причинам, почти всегда был ясен в 6502. Это больше не действовало в 65C02, где некоторые операции теперь правильно устанавливают этот флаг. По неизвестным причинам 65CE02 изменил мнемонику на BRU. Они также добавили BSRинструкцию Branch to SubRoutine, которая использует тот же режим относительной адресации, что JSRи Jump to SubRoutine. [1]
  • Кроме того, CE добавил 16-битную адресацию, или «относительную слово», ко всем существующим инструкциям ветвления. Раньше ветви могли перемещаться только назад на 128 позиций или вперед на 127, в зависимости от 8-битного значения со знаком, «относительного адреса». В 65CE02 это может быть -32768 или +32767 местоположений, если следовать ветви с 16-битным значением. Раньше для выполнения «длинного перехода» обычно приходилось использовать a JMPдля 16-битной цели, а затем переходить по этим трем байтам, когда вы не хотели этого делать. Например, если кто-то хочет перейти к адресу $ 1234, если аккумулятор равен нулю, можно сделать a CMP #$00/BNE +3/JMP $1234, что означает, что вы хотите пропустить 3-байтовый, если аккумулятор не равен нулю. В 65CE02 это можно свести к чему-то вродеJMP addrCMP #$00/BEQ $0123, тем самым делая код более очевидным, удаляя два байта инструкций и устраняя необходимость в потерянных циклах выборки и запуска ветки. Однако, поскольку он по-прежнему использует относительную адресацию, относительный адрес должен вычисляться по метке программистом или ассемблером при преобразовании в машинный код. [1]
  • Еще одним дополнением к системе был ряд «словарных» инструкций, которые выполняли операции с 16-битными данными. Это включало INW/DEWв себя увеличение и уменьшение значения в памяти, а ASW/ROWтакже выполнение слова арифметического сдвига (слева) или слова ROtate (слева). [1]
  • Более мелкие изменения включают добавление ASRбитового сдвига вправо (у 6502 был только сдвиг влево), NEG Aинструкции, которая выполняет отрицание дополнения до двух в аккумуляторе, и RTNвариант RTS(ReTurn from Subroutine), который возвращается к смещению адреса в стек, а не вверху, что позволяет избежать явного POPотключения чего-либо, добавляемого подпрограммой во время ее выполнения. В систему также добавлен новый режим адресации, в котором базовый адрес в стеке используется в качестве основы для косвенной адресации. [1]
  • Наконец, AUGбыла добавлена новая четырехбайтовая инструкция для будущего расширения. Хотя в таблице данных неясно его конечное назначение, похоже, что это заполнитель, предназначенный для передачи инструкций в блоки сопроцессора, такие как блок управления памятью . [1]

Улучшения конвейера [ править ]

Основная странность оригинального 6502 заключалась в том, что однобайтовые инструкции, как и INXпрежде, занимали два цикла. Это позволило упростить трубопроводную систему; следующий байт из памяти был извлечен во время декодирования операции, что означает, что следующий байт был извлечен несмотря ни на что. Для большинства инструкций этот байт будет частью (или целым) операнда, который затем может быть немедленно передан в теперь декодированную инструкцию. [2]

Если инструкции требуется только один байт, процессор все равно читает следующий байт, как он декодирует первый. В этом случае следующим байтом была следующая инструкция, но у нее не было возможности передать ее обратно в первую стадию конвейера для ее декодирования. Вместо этого извлеченная инструкция была отброшена и перечитана, чтобы передать ее в декодер. Это напрасная трата цикла. Хотя это привело к тому, что ряд инструкций стал медленнее, чем они могли бы быть, эта «особенность» была сохранена в 65C02, хотя было ли это сделано для того, чтобы сохранить простоту конвейера или время его цикла, не объясняется в доступных источниках. [2]

Поддержание совместимости циклов не было требованием для 65CE02, и новые производственные процессы сделали дополнительную схему в конвейере не проблемой, поэтому конвейер был перестроен, чтобы правильно обрабатывать однобайтовые инструкции в одном цикле. [2] Эти улучшения позволяют 65CE02 выполнять код на 25% быстрее, чем предыдущие модели 65xx. [1]

Дальнейшее улучшение касается проблемы, связанной с инструкциями адресации, которые добавляют значения для создания окончательного адреса. Примеры включают «индексированный косвенный», когда значение в одном из индексных регистров добавляется к базовому адресу, а затем применяется инструкция к полученному адресу. В исходном 6502, если сложение двух значений пересекало границу страницы, каждые 256 ячеек, требовался дополнительный цикл для получения окончательного значения адреса. 65CE02 снял это ограничение, тем самым улучшив производительность этих часто используемых режимов. [1]

Физические данные [ править ]

Он изготовлен с использованием технологии CMOS 2 мкм , что позволяет снизить энергопотребление по сравнению с предыдущими версиями NMOS и HMOS семейства 65xx. Он размещен в 40-контактном DIP - корпусе , совместимом по выводам с 6502. [3]

CSG 4510 [ править ]

CSG 4510

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]

См. Также [ править ]

  • Прерывания в процессорах 65xx
  • Список 6502 ассемблеров
  • Миф о мегагерцах

Ссылки [ править ]

  1. ^ a b c d e f g h i j k l m "MOS 65CE02 Microprocessor Data Sheet" (PDF) .
  2. ^ a b c «Патент США 5088035: Система для ускорения выполнения программных инструкций микропроцессором» .
  3. ^ "Commodore Semiconductor Group CSG65CE02 Технический справочник" . zimmers.net. 2009-08-18 . Проверено 21 июня 2013 .
  4. ^ "Amiga Stuff: 4510 Информация об оборудовании" .
  5. ^ a b «База знаний коммодора: Коммодор 65» .
  6. ^ "База данных оборудования Amiga: CDTV II" .
  7. ^ "Amiga Stuff: 65CE02 Hardware Info" .
  8. ^ "Большая книга оборудования Amiga: Commodore A2232" .

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

  • Commodore Semiconductor Group CSG65CE02 Технический справочник
  • 65CE02 Микропроцессор (предварительная версия) (ноябрь 1988 г.)
  • 65CE02 изображения корпуса и кристалла
  • Профиль Виктора Ф. Андраде (главного инженера 65CE02 LSI)