Motorola 68000 - Motorola 68000


Из Википедии, свободной энциклопедии
Motorola 68000 архитектура
дизайнер Motorola
Биты 16/32-битный
Введенный 1979 ; 40 лет назад ( 1979 )
дизайн CISC
разветвление код условия
Порядок байтов большой
Регистры
Общее назначение 8 × 32-бит + 7 адресные регистры также можно использовать для большинства операций + указатель стека
Motorola 68000 CPU
инструкции 56
ширина данных 16
ширина Адрес 24

Motorola 68000 ( «'шестьдесят-восемь тысяч», которая также называется m68k или Motorola 68k , « шестьдесят-восемь-кай ») представляет собой 16/32-разрядный CISC микропроцессор , который реализует 32-битный набор инструкций , с 32-разрядные регистры и 32-битная внутренняя шина данных , но с 16-битным данных АЛУ и два 16-битной арифметической АЛУ и 16-разрядной внешней шиной данных , спроектированного и выпускаемого фирмой Motorola Semiconductor Products сектора. Введенная в 1979 году с HMOS технологией в качестве первого члена успешной 32-битной Motorola серии 68000 , как правило , программное обеспечение вперед совместимо с остальной частью линии , несмотря на ограничения в 16-битную внешнюю шину. После 39 лет в производстве , 68000 архитектуры до сих пор используются.

Pre-релиз XC68000 чип изготовлен в 1979 году
Die Моторола 68000

история

Motorola MC68000 ( CLCC пакет)
Motorola MC68000 ( PLCC пакет)

68000 вырос из MACSS (Motorola Advanced Computer System на Silicon) проект, начатый в 1976 году разработать совершенно новую архитектуру без обратной совместимости . Было бы больше мощности родственной дополняет существующую 8-битный 6800. линию , а не совместимый преемника. В конце концов, 68000 сделали сохранить протокол шины режима совместимости для существующих 6800 периферийных устройств, а также версию с шиной данных 8-бита была произведена. Тем не менее, дизайнеры в основном сосредоточены на будущее, или прямой совместимости , который дал 68000 дизайну фору против поздних 32-разрядных архитектур наборов инструкций . Так , например, регистры процессора 32 бита, хотя несколько автономных структур в процессоре сами работать на 32 бита за один раз. Команда MACSS в значительной степени опиралась от влияния миникомпьютер конструкции процессора, таких как PDP-11 и VAX систем, которые были так же микрокода -На.

В середине 1970 - х, 8-битовые производители микропроцессоров мчались ввести поколения в 16-битные. National Semiconductor была первой с его ИМП-16 и PACE процессоров в 1973-1975, но это были проблемы со скоростью. Intel работал на их передовой 16/32-битным Intel iAPX 432 (псевдоним 8800) с 1975 года и их Intel 8086 с 1976 года (он был введен в 1978 году , но стал очень распространен в виде почти идентичных 8088 в IBM PC некоторые из них годы спустя). Прибытие поздно к 16-битной арене , получают новый процессор больше транзисторов (примерно 40000 по сравнению с активным 20000 активен в 8086), 32-разрядные макрокоманды, и известный вообще простота использования.

Оригинальный MC68000 был изготовлен с использованием ОПЗ процесса с 3,5  мкм размера элемента. Формально введен в сентябре 1979 года , первоначальные образцы были выпущены в феврале 1980 года с производства чипов , доступных по прилавку в ноябре. Начальные классы скорости были 4, 6 и 8  МГц . 10 фишек МГц стали доступны в течение 1981 года, и 12,5 МГц чипы по июнь 1982 года 16,67 МГц «12F» версия MC68000, самая быстрая версия оригинального чипа HMOS, не было произведено до конца 1980 - х годов.

Набор 68k инструкция была особенно хорошо подходит для реализации Unix, а 68000 и его преемники стали доминирующими процессорами для Unix на базе рабочих станций , включая Sun рабочих станций и Apollo / Domain рабочих станций. 68000 также был использован для массового рынка компьютеров , таких как Apple Lisa , Macintosh , Amiga и Atari ST . 68000 было использован в Microsoft Xenix систем, а также ранней NetWare Unix-сервере. 68000 был использован в первом поколении настольных лазерных принтеров , в том числе оригинальной Apple Inc. LaserWriter и HP LaserJet . В 1982 году 68000 получил обновление до его ISA позволяет ему поддерживать виртуальную память и соответствовать требованиям виртуализации Popek и Голдберг . Обновленный чип был назван 68010 . Еще одна расширенная версия, которая подвергается 31 бит адресной шины, также производится в небольших количествах , как 68012 .

Для поддержки систем более дешевых и приложений управления с меньшими размерами памяти, Motorola представила 8-битовый совместимый MC68008 , а также в 1982 г. Это было 68000 с 8-битной шиной данных и меньшим (20-битной адресной шиной). После 1982 года, Motorola , посвященный больше внимания 68020 и 88000 проектов.

Во-вторых-источников

Hitachi HD68000
Thomson TS68000

Несколько других компаний были вторым кодом производители ОПЗ 68000. Они включали Hitachi (HD68000), который сократился размер функции до 2,7 мкм для их версии 12.5 МГц, Mostek (MK68000), Роквелла (R68000), Signetics (SCN68000), Thomson / SGS-Thomson (первоначально EF68000 , а затем TS68000) и Toshiba (TMP68000). Toshiba также является вторым источником производитель КМОП 68HC000 (TMP68HC000).

Зашифрованные варианты 68000, будучи Hitachi FD1089 и FD1094, магазин дешифрование ключи для опкодов и данных коды операции в памяти с батарейной поддержкой и были использованы в некоторых игровых системах , включая Sega System 16 для предотвращения пиратства и незаконной бутлегли игры.

версии CMOS

Motorola MC68HC000LC8

68HC000, первая CMOS версия 68000, была разработана Hitachi и совместно введены в 1985 году версии Motorola, называлась MC68HC000, в то время как компании Hitachi была HD68HC000. 68HC000 в конце концов предложил на скорости 8-20 МГц. Для использования CMOS схемы Кроме этого , она вела себя идентично MC68000 HMOS, но изменение CMOS значительно снижается потребление энергии. Оригинальный HMOS MC68000 потребляется около 1,35  Вт при температуре окружающей среды от 25  ° C , независимо от тактовой частоты, в то время как MC68HC000 потребляется только 0,13 Вт на частоте 8 МГц и 0,38 Вт на частоте 20 МГц. ( В отличие от КМОП - схем, HMOS по- прежнему потребляет энергию в режиме ожидания, поэтому потребляемая мощность мало изменяется с тактовой частотой.) Apple выбрала 68HC000 для использования в Macintosh Portable .

Motorola заменил MC68008 с MC68HC001 в 1990 году Этот чип напоминал 68HC000 во многих отношениях, но его шина данных может работать в любом режиме 16-битного или 8-битного, в зависимости от величины входного штифта при сбросе. Таким образом, как и 68008, он может быть использован в системах с более дешевыми 8-битными воспоминаниями.

Поздняя эволюция 68000 сосредоточена на более современных встраиваемых управляющих приложениях и на чипе периферийных устройств. 68EC000 чипа и ядро SCM68000 расширили адресную шину до 32 бит, удаляют периферийную шину M6800, а также исключить переход от SR инструкции от программ пользовательского режима. В 1996 году Motorola обновила автономный ядро с полностью статической схемой, используя только 2  мкВт в режиме пониженного энергопотребления, назвав его MC68SEC000.

Motorola прекратила производство HMOS MC68000 и MC68008 в 1996 году, но его спин-офф компания Freescale Semiconductor еще производить MC68HC000, MC68HC001, MC68EC000 и MC68SEC000, а также микроконтроллеры MC68302 и MC68306 и более поздних версий DragonBall семьи. 68000 в архитектурные потомки, в 680x0 , CPU32 и Coldfire семьи, были также еще в производстве. Совсем недавно, с ФАБ закрытия Сендай, все 68HC000, 68020, 68030 и 68882 части были прекращены, оставляя только 68SEC000 в производстве.

В качестве ядра микроконтроллера

После того , как на смену «истинные» 32-разрядных микропроцессоров 68000 была использована в качестве основы многих микроконтроллерах . В 1989 году Motorola представила MC68302 коммуникационный процессор.

Приложения

Два Hitachi 68HC000 процессоров используются на аркадных играх PCB

На своем введении, 68000 впервые был использован в дорогостоящих системах, в том числе многопользовательских микрокомпьютеров , как WICAT 150, ранние Альфа Microsystems компьютеров, шалфей II / IV , Тэнди ТРС-80 Model 16 , и Фортуна 32:16 ; однопользовательские рабочие станции , такие как Hewlett-PackardHP 9000 200 систем серии, первыми / Domain Apollo системы, Sun Microsystems ' Sun-1 , и Corvus Concept ; и графические терминалы , такие как Digital Equipment Corporation «s VAXstation 100 и Silicon Graphics » IRIS 1000 и 1200. Unix систем быстро перешли к более способным последующим поколениям 68k линии, которые оставались популярными на этом рынке в течение 1980 - х лет.

К середине 1980-х годов, падение себестоимости производства сделало 68000 жизнеспособными для использования в личных и домашних компьютеров , начиная с Apple Lisa и Macintosh , а затем Commodore Amiga , Atari ST и Sharp X68000 . С другой стороны, Sinclair QL микрокомпьютер был наиболее коммерчески важным утилизация 68008, наряду с его производными, такими как ICL One Per Desk бизнес - терминал. Спиральные системы (в Миссури, США) разработали расширение для SWTPC шины SS-50 , SS-64, и произведенные системы , построенные вокруг 68008 процессора.

Хотя принятие RISC и x86 смещена серия 68000 в качестве рабочего стола / рабочей станции CPU, процессор нашел значительное применение в встроенных приложениях. К началу 1980 - х годов, количество 68000 процессоров можно приобрести менее чем за 30  долларов США на каждую часть.

Видео игры производители использовали 68000 в качестве основы многих аркадных игр и домашних игровых консолей : Атари Food Fight , с 1982 года, было одним из первых 68000 на базе аркадных игр. Другие включены Sega 's System 16 , Capcom ' s CP System и КПА-2 и SNK «s Neo Geo . К концу 1980-х годов 68000 был достаточно дешевы для питания домашних игровых консолей, таких как Сеги Mega Drive (Genesis) консоли , а также на компакт - Сега крепления для него (система CD Sega имеет три процессора, два из них 68000s). 1993 многопроцессорной Atari Jaguar консоль использовала 68000 в качестве чипа поддержки, хотя некоторые разработчики использовали его в качестве основного процессора из - за фамильярности. 1994 многопроцессорные Sega Saturn консоли использовал 68000 в качестве звукового сопроцессора (много как Mega Drive / Genesis использует Z80 в качестве сопроцессора для звука и / или других целей).

Некоторые аркадные игры (такие как Steel Gunner и другие основанные на Namco System 2 также существуют) использовать двойную 68000 конфигурацию процессора и системы с тройной конфигурации 68000 CPU (например, Galaxy Force и другие на основе Y совета Сега), наряду с конфигурация процессора Quad 68000, который был использован Jaleco (один 68000 для звука имеет более низкую частоту по сравнению с другими процессорами 68000) для игр , таких как Big Run и Cisco Heat ; пятый 68000 (с разной тактовой частотой по сравнению с другими процессорами 68000) дополнительно используется в аркаде Jaleco Дикий Pilot для ввода / вывода обработки.

68000 также видели большой успех в качестве встроенного контроллера. Уже в 1981 году, лазерные принтеры , такие как Imagen Выходные данные-10 находились под контролем внешних плат , оснащенных 68000. Первый HP LaserJet -introduced в 1984-пришел с встроенным 8 МГц 68000. Другие производители принтеров приняли 68000, в том числе Apple , с введением LaserWriter в 1985 году, первый PostScript лазерный принтер. 68000 по- прежнему широко используется в принтерах на протяжении всего 1980 - х годов, сохраняющиеся также в 1990 - е годы в странах с низким уровнем конца принтеров.

68000 также видел успех в области промышленных систем управления. Среди систем , воспользовавшихся имеющие 68000 или производное , как их микропроцессор были семейства программируемых логических контроллеров (ПЛК) , изготовленных Allen-Bradley , Texas Instruments , а впоследствии, после приобретения этого подразделения TI, по Siemens . Пользователи таких систем не принимают устаревание продукта с такой же скоростью , как домашние пользователи, и это вполне вероятно , что несмотря на то , были установлены более 20 лет назад, многие 68000 на базе контроллеров будут продолжаться в надежной службе в 21 - м века.

В ряде цифровых осциллографов с 80 - х годов, 68000 был использован в качестве процессора отображения формы сигнала; некоторые модели , включая LeCroy 9400 / 9400A также использовать 68000 в качестве сигнала математического процессора (включая сложение, вычитание, умножение и деление двух форм волны / ссылки / осциллограмм памяти), а также некоторые цифровые осциллографы с использованием 68000 ( в том числе 9400 / 9400A ) может также выполнять БПФ функции на сигнале.

В 683XX микроконтроллеры, основанные на 68000 архитектуры, используются в сети и телекоммуникационного оборудования, телевизионных приставках, лабораторных и медицинских инструментов, и даже карманных калькуляторов. MC68302 и его производные были использованы во многих телекоммуникационных продуктов от Cisco, 3com, всплыть, Marconi, Киклады и другие. Прошлые модели Паой КПК и Handspring Visor используются DragonBall , производные от 68000. AlphaSmart использует семейство Драконьего в более поздних версиях своих портативных текстовых процессоров. Texas Instruments использует 68000 в своих высокопроизводительных графических калькуляторах, на TI-89 и TI-92 серию и Voyage 200 . Ранние версии этих использовали специализированный микроконтроллер со статическим 68EC000 ядра; более поздние версии используют стандартный процессор MC68SEC000.

Модифицированная версия 68000 сформировала основу IBM XT / 370 аппаратного эмулятора процессора System 370.

Архитектура

Motorola 68000 регистры
3 1 ... 2 3 ... 1 5 ... 0 7 ... 0 0 (Битовая позиция)
регистры данных
Д0 0 данных
D1 1 Данные
D2 2 Данные
D3 3 Данные
D4 4 Данные
D5 5 Данные
D6 6 данных
D7 7 Данные
регистры адреса
  A0                           Адрес 0
  A1                           адрес 1
  A2                           Адрес 2
  A3                           Адрес 3
  A4                           Адрес 4
  A5                           Адрес 5
  A6                           Адрес 6
Стек указатели
  A7 / USP                        Указатель стека (пользователь)
  A7' / SSP                        Указатель стека (руководитель)
Счетчик команд
  ПК                           Счетчик команд
Код состояния Регистрация
  1 5 1 4 1 3 1 2 1 1 1 0 0 9 0 8 0 7 0 6 0 5 0 4 0 3 0 2 0 1 0 0 (Битовая позиция)
  T S M 0 я 0 0 0 Икс N Z В С CCR

адресная шина

68000 имеет 24-битовую внешнюю шину адреса и два байта-сигналы выбора «заменить» А0. Таким образом , эти линии 24 могут адресовать 16 Мб физической памяти с разрешением байт. Адрес хранение и вычисление используют 32 бит внутри; однако, 8 адресных битов высокого порядка игнорируются из - за физического отсутствия штифтов устройств. Это позволяет запускать программное обеспечение , написанное для логически плоского 32-битного адресного пространства , в то время как доступ только 24-битное физическое адресное пространство. Намерение компании Motorola с внутренней 32-битного адресного пространства была прямой совместимости, что делает возможным написать 68000 программное обеспечение , которое бы в полной мере воспользоваться более поздних 32-битных реализаций набора в 68000 команд.

Тем не менее, это не помешало программистам писать вперед несовместимое программное обеспечение. «24-бит» программное обеспечение , которое отбрасывают верхние байты адреса, или использовать его для других целей , чем решения, может не на 32-битные 68000 реализаций. Например, ранняя (предварительно 7,0) версия Apple, Mac OS используется старших байтами основных указателей памяти блока держать флаги , такие как запертые и purgeable . В более поздние версии ОС переместили флаги в близлежащее место, и компании Apple начала поставки компьютеров , которые имели « 32-битное » ПЗУ , начиная с выпуском 1989 Mac IIci.

68000 семьи хранит многобайтовые целые числа в памяти в большой Endian порядка.

Внутренние регистры

Процессор имеет восемь 32-битных общего назначения данных регистров (D0-D7), и восемь регистров адреса (A0-A7). Последний адрес регистр является указателем стека , а монтажники принимают метку SP как эквивалент A7. Это было хорошее количество регистров в то время во многих отношениях. Он был достаточно мал , чтобы позволить 68000 быстро реагировать на прерывания достаточно (даже в самом худшем случае , когда все 8 регистров данных D0-D7 и 7 адреса регистров A0-A6 нужно быть сохранены, 15 регистров в общей сложности), и все же большой , чтобы сделать большинство расчетов быстро, потому что они могли бы быть сделаны полностью в процессоре без сохранения каких - либо частичных результатов в памяти. (Обратите внимание , что процедура исключения в режиме супервизора может также сохранить пользовательский стек указатель A7, который будет всего 8 регистров адреса. Однако указатель двойного стека (A7 и супервизора режим A7' ) дизайн 68000 делает это обычно не требуется, за исключением когда переключение задачи выполняются в многозадачной системе.)

Наличие двух типов регистров было слегка раздражает в разы, но не трудно использовать на практике. Как сообщалось, это позволило конструкторам CPU для достижения более высокой степени параллелизма, с помощью вспомогательного исполнительного блока для адресных регистров.

регистр состояния

В 68000 сравнения, арифметические и логические операции , установленные битовые флаги в регистре состояния , чтобы записать их результаты для использования позже условных переходов. Битовые флаги "ноль" (Z), "перенос" (С), "переполнение" (V), "расширить" (Х), и "отрицательное" (N). Флаг «расширение» (X) заслуживает особого упоминания, так как она отделена от флага переноса . Это позволяет дополнительный бит из арифметических, логики, и операций сдвига , чтобы отделить от переноса для потока из- под контроля и связи.

Набор инструкций

Разработчики попытались сделать на ассемблере ортогональную . То есть, инструкции разделяются на операцию и режимы адреса , и почти все режимы адреса доступны практически для всех инструкций. Есть 56 инструкции и минимальный размер инструкции 16 бит. Многие инструкции и режимы адресации больше , чтобы включать в себя дополнительные адреса или битов режима.

уровни привилегий

CPU, а затем вся семья, реализуют два уровня привилегий. Пользовательский режим предоставляет доступ ко всему, за исключением привилегированных инструкций, такие, как контроль прерываний уровня. Супервайзер привилегия дает доступ ко всему. Прерывание всегда становится наблюдательным. Надзорный бит хранится в регистре состояния, и виден пользовательские программы.

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

Прерывания

Процессор распознает семь прерываний уровней. Уровни 1 по 5 строго по приоритетам. То есть, с более высоким номером прерывания всегда может прервать с более низким номером прерывания. В регистре состояния, привилегированная инструкция позволяет установить текущий минимальный уровень прерывания, блокировку ниже или равны приоритет прерываний. Например, если уровень прерываний в регистре состояния устанавливается равным 3, более высокие уровни от 4 до 7 может вызвать исключение. Уровень 7 -го уровня срабатывает немаскируемое прерывание (NMI). Уровень 1 может быть прерван любым более высокого уровня. Уровень 0 означает отсутствие прерываний. Уровень сохраняется в регистре состояния, и видна программы пользовательского уровня.

Аппаратные прерывания сигнализируется CPU , используя три входа , которые кодируют наивысший приоритет в ожидании прерывания. Отдельный кодер обычно требуется для кодирования прерываний, хотя для систем , которые не требуют более трех аппаратных прерываний можно подключить сигналы прерываний непосредственно закодированных входы за счет дополнительной сложности программного обеспечения. Контроллер прерываний может быть как простой , как 74LS148 приоритетного кодера , или может быть частью периферийной микросхемы СБИС , таких как MC68901 Multi-Function Peripheral (используемый в Atari ST диапазоне компьютеров и Sharp X68000 ), который также предложен UART , таймер и параллельный ввод / вывод.

«Исключение таблица» ( вектор прерывания таблицы векторов прерываний адрес) фиксируются по адресам от 0 до 1023, что позволяет 256 32-битных векторов. Первый вектор (RESET) состоит из двух векторов, а именно : начальный адрес стека, и начальный адрес кода. Векторы с 3 по 15 используются для сообщения различных ошибок: ошибка шины , адрес ошибки, запрещенная команда , нулевое деления , CHK и СНК2 вектора, нарушение привилегий (блокировать повышение привилегий ), и некоторые зарезервированные векторы , которые стали линией 1010 эмулятора, линия 1111 эмулятора и аппаратные точки останова . Вектор 24 запускает реальные прерывания: паразитные прерывания (без подтверждения приема аппаратных средств), а также уровень от 1 до уровня 7 autovectors, то 16 TRAP векторов, то некоторые более зарезервированных векторы, то определенного пользователя векторы.

Так как минимум исходный код адрес вектора всегда должен быть действительным при сбросе системы обычно включают некоторые энергонезависимую память (например , ПЗУ ) , начиная с нулевого адреса , чтобы содержать векторы и загрузочный код. Однако, для системы общего назначения, желательно для операционной системы , чтобы иметь возможность изменить векторы во время выполнения. Это часто достигается либо указывая векторы в ПЗУ в таблице переходов в ОЗУ , или за счет использования банковского переключения , чтобы позволить ПЗУ быть заменен RAM во время выполнения.

68000 не отвечает требованиям виртуализации Popek и Goldberg для полной виртуализации процессоров , поскольку она имеет одну непривилегированных команд «MOVE от SR», что позволяет программное обеспечение в пользовательском режиме только для чтения доступ к небольшому количеству привилегированного государства.

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

Эти проблемы были исправлены в следующем крупном пересмотре 68k архитектуры, с выпуском MC68010. Исключения Шины ошибок и адрес ошибки толкать большое количество внутреннего состояния в стек супервизора для того, чтобы облегчить восстановление, и переход от SR инструкции был сделан привилегированным. Новые непривилегированных «MOVE из CCR» инструкции предусмотрена для использования на своем месте с помощью программного обеспечения пользовательского режима; операционная система может эмулировать ловушку и пользовательский режим MOVE от SR инструкции, если это желательно.

Набор команд подробнее

Стандартные режимы адресации являются:

  • Регистрация прямой
    • регистр данных, например, «D0»
    • адрес регистра, например «A0»
  • Регистрация непрямого
    • Простой адрес, например, (A0)
    • Адрес с постинкрементом, например, (A0) +
    • Адрес с предекрементом, например - (A0)
    • Адрес с 16-разрядным смещением, например, 16 (A0)
    • Регистрация непрямым с индексом регистра и 8-битового смещения, например, 8 (A0, D0) или 8 (А0, А1)
    Заметим, что для (А0) + и - (A0), фактический увеличивать или уменьшать значение зависит от размера операнда: с шагом доступа байт адресного регистра на 1, слова на 2 и длиной 4.
  • ПК (счетчик команд) по сравнению со смещением
    • Относительный 16-разрядное смещение, например, 16 (PC). Этот режим очень полезен для позиционно-независимого кода.
    • Относительный с 8-разрядным смещением с индексом, например, 8 (ПК, D2),
  • Абсолютное расположение памяти
    • Либо номер, например «$ 4000», или символическое имя переводится ассемблером
    • Большинство 68000 монтажников используются символ «$» для шестнадцатеричного , вместо «0x» или косой H.
    • Были 16 и 32-битные версии этого режима адресации
  • Немедленный режим
    • Данные, хранящиеся в инструкции, например, «# 400»
  • Быстрый непосредственный режим
    • 3-битовое беззнаковое (или 8-разрядное целое с moveq) со значением хранится в опкода
    • В addq и SubQ, 0 является эквивалентом 8
    • например moveq # 0, d0 был быстрее, чем clr.l d0 (хотя оба сделали d0 равен 0)

Плюс: доступ к регистру состоянию , и, в более поздних моделях, других специальных регистры.

Большинство команд имеют дот-буквенные суффиксы, позволяя операции происходит на 8-битовых байтов ( ".b "), 16-разрядные слова (" .w "), и 32-разрядные лонги (" .L").

Как и многих других процессоры своей эры время цикла некоторых команд изменяется в зависимости от исходного операнда (ов). Например, команда умножения без знака принимает (38 + 2n) тактовых циклов, чтобы закончить, где «п» равно числу битов в операнде. Чтобы создать функцию, которая приняла фиксированное количество циклов требуется добавление дополнительного кода после умножения инструкции. Это, как правило, потребляет дополнительные циклы для каждого бита, который не был установлен в первоначальном умножении операнда.

Большинство инструкций являются диадическими , то есть операция имеет источник и пункт назначение, и назначение изменяется. Заметные инструкции были:

  • Арифметика: ADD, SUB, Мал (без знака умножения), MULS (подписано многократно), диву, DIVS, NEG (присадка отрицания) и CMP (своего рода сравнение делается путем вычитания аргументов и установок бит состояния, но не хранить результат)
  • Двоично-десятичном арифметика: ABCD и SBCD
  • Логика: ПНП (исключающее или), AND, NOT (логическое не), OR (включительно или)
  • Перемена: (логическое, то есть правые сдвиги поставил ноль в наиболее значащий бит) LSL, LSR, ( арифметические сдвиги , то есть знак , расширьте наиболее значащий бит) ASR, ASL (вращает через выдвигания и нет) ROXL, ROXR, ROL, ROR
  • Тест бита и манипуляции в памяти: BSET (1), BCLR (0), BCHG (инвертированный бит) и BTST (установить нулевой бит , если протестирован бит равен 0)
  • Многопроцессорная контроль: TAS, тест-и-набор , выполненный неделимую операцию шины, что позволяет семафоры , которые будут использоваться для синхронизации нескольких процессоров , совместно использующих единую память
  • Поток управления: СПЙ (скачок), JSR (переход к подпрограмме), РБЙ (относительный адрес переход к подпрограмме), РТС (возврат из подпрограммы ), РОТ (возврат из исключения , т.е. прерывания), TRAP (вызвать программное исключение подобного для программного прерывания), КИ (условное исключение программного обеспечения)
  • Отрасль: BCC (где «куб.см» указан один из 16 испытаний состояния кодов в регистре состояния: равно, больше, меньше, чем, носить с собой, и большинством комбинаций и логические инверсии, доступные из регистра состояния).
  • Декремент-и-ветвь: DBCC (где «куб.см» был для команд перехода), что уменьшенных Д-регистр и разветвленных к пункту назначения при условии , что состояние было все еще верно и регистр не был уменьшен до -1. Это использование -1 вместо 0 в качестве значения завершающего позволило легко кодирование петель , которые должны были не делать ничего , если граф был 0 , чтобы начать с, без необходимости дополнительной проверки перед входом в цикл. Это также способствовало вложенность DBCC.

68EC000

Контроллер Motorola 68EC000

68EC000 представляет собой версию недорогой 68000, предназначенная для встроенных приложений контроллера. 68EC000 может иметь либо 8-битный или 16-разрядную шину данных , переключаемую при сбросе.

Процессоры доступны в различных скоростях , включая 8 и 16  МГц конфигураций, производя 2,100 и 4,376  Dhrystones каждый. Эти процессоры не имеют блока с плавающей точкой , и это трудно реализовать FPU сопроцессор ( MC68881 / 2 ) с одной , так как серии EC отсутствуют необходимые инструкции сопроцессора.

68EC000 был использован в качестве контроллера во многих аудио - приложений, в том числе Ensoniq музыкальных инструментов и звуковых карт, где она была частью MIDI - синтезатора. На Ensoniq звуковых плат, контроллер предоставил ряд преимуществ по сравнению с конкурентами без процессора на борту. Процессор позволила плате быть сконфигурирован для выполнения различных звуковых задач, таких как MPU-401 синтез MIDI или МТ-32 эмуляция, без использования TSR программы. Эта улучшенная совместимость программного обеспечения, снизила загрузку процессора, и устранить использование памяти хоста.

Ядро Motorola 68EC000 позже было использовано в m68k основе Драконьих процессоров от Motorola / Freescale .

Он также был использован в качестве контроллера звука в Sega Saturn игровой консоли и в качестве контроллера для HP JetDirect Ethernet контроллера плата для середины 1990-х лазерных принтеров.

Пример кода

68000 ассемблере код ниже для подпрограммы с именем strtolower, которое копирует завершающим нулем строка 8-битных символов в строку назначения, превращая все буквенные символы в нижнем регистре.

                     
                     
                     
                     
        
             
                     
                     
                     
00100000          
00100000  4E56 0000
00100004  306E 0008
00100008  326E 000C
0010000C  1018
0010000E  0C40 0041
00100012  6500 000E
00100016  0C40 005A
0010001A  6200 0006
0010001E  0640 0020
00100022  12C0
00100024  66E6
00100026  4E5E
00100028  4E75
0010002A
; strtolower:
; Copy a null-terminated ASCII string, converting
; all alphabetic characters to lower case.
;
; Entry parameters:
;   (SP+0): Source string address
;   (SP+4): Target string address

                org     $00100000       ;Start at 00100000
strtolower      public
                link    a6,#0           ;Set up stack frame
                movea   8(a6),a0        ;A0 = src, from stack
                movea   12(a6),a1       ;A1 = dst, from stack
loop            move.b  (a0)+,d0        ;Load D0 from (src), incr src
                cmpi    #'A',d0         ;If D0 < 'A',
                blo     copy            ;skip
                cmpi    #'Z',d0         ;If D0 > 'Z',
                bhi     copy            ;skip
                addi    #'a'-'A',d0     ;D0 = lowercase(D0)
copy            move.b  d0,(a1)+        ;Store D0 to (dst), incr dst
                bne     loop            ;Repeat while D0 <> NUL
                unlk    a6              ;Restore stack frame
                rts                     ;Return
                end

Подпрограмма устанавливает кадр вызова с помощью регистра А6 в качестве указателя кадра. Такого рода соглашение о вызове поддерживает реентерабельные и рекурсивный код и обычно используется в языках , как C и C ++ . Подпрограмма затем извлекает параметры , передаваемые к нему ( srcи dst) из стека. Затем петли, чтение ASCII символ (один байт) из srcстроки, проверяя , является ли это буквенный символ, и если да, превращая его в строчной характер, то написание символа в dstстроке. Наконец, он проверяет , является ли характер а нулевой символ ; если нет, то он повторяет цикл, в противном случае он восстанавливает предыдущий кадр стека (и A6 регистр) и возвращается. Обратите внимание , что строка указатели (регистры A0 и A1) являются автоинкрементными в каждой итерации цикла.

В противоположность этому , код ниже для автономной функции, даже на самой ограничительной версии AMS для серии TI-89 калькуляторов, будучи ядром-независимым, значения не посмотрел в виде таблиц, файлов или библиотек при выполнении, нет системных вызовов, без обработки исключений, минимальные регистров , которые будут использоваться, ни необходимость сохранения любого. Он действителен в течение исторического Julian даты с 1 март 1 г. н.э., или для григорианских них. В менее чем двух десятков операций он вычисляет номер дня , совместимый с ISO 8601 при вызове с тремя входами , хранящимися в их соответствующих местах:

;
;  WDN, an address - for storing result d0
; FLAG, 0 or 2 - to choose between Julian or Gregorian, respectively
; DATE, year0mda - date stamp as binary word&byte&byte in basic ISO-format
;(YEAR, year ~ YEAR=DATE due to big-endianness)
;
     move.l DATE,d0
     move.l d0,d1
;
; Apply step 1 - Lachman's method of congruence
     andi.l #$f00,d0
     divu #100,d0
     addi.w #193,d0
     andi.l #$ff,d0
     divu #100,d0 ; d0 contains the month index in the upper word
;
; Apply step 2 - Using spqr as the Julian year of the last leap day
     swap d0
     andi.l #$ffff,d0
     add.b d1,d0
     add.w YEAR,d0
     subi.l #$300,d1
     lsr  #2,d1
     swap d1
     add.w d1,d0 ; spqr/4 + year + mi + da
;
; (Apply step 0 - Gregorian adjustment)
     mulu FLAG,d1
     divu #50,d1
     mulu #25,d1
     lsr  #2,d1
     add.w d1,d0
     add.w FLAG,d0 ; (sp32div16) + spqr/4 + year + mi + da
;
     divu #7,d0
     swap d0  ;  d0.w becomes the day number
;
     move.w d0,WDN ; returns the day number to address WDN
     rts
;
; Days of the week correspond to day numbers of the week as:
; Sun=0  Mon=1  Tue=2  Wed=3  Thu=4  Fri=5  Sat=6
;

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

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

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

внешняя ссылка