Motorola 68000

редактировать
Эта статья о первом микропроцессоре в серии. Для получения информации о семействе микропроцессоров, разработанных на его основе, см. Motorola 68000 series. О 8-битном микропроцессоре, представленном в 1974 году, см. Motorola 6800.
Архитектура Motorola 68000
Дизайнер Motorola
Биты 16/32-бит
Введено 1979 ; 42 года назад ( 1979)
Дизайн CISC
Разветвление Код состояния
Порядок байтов Большой
Регистры
Процессор Motorola 68000
Общая информация
Запущен 1979 г.
Разработано Motorola
Представление
Ширина данных 16 бит
Ширина адреса 24 бит
Архитектура и классификация
Набор инструкций Motorola серии 68000
Физические характеристики
Транзисторы
Пакет (ы)
История
Преемник Motorola 68010

Motorola 68000 ( шестьдесят восемь тысяч, также называется m68k, Motorola 68k, шестьдесят-восемь-кай) является 16/32-укусил комплекс набором команд (CISC) микропроцессор, введенный в 1979 году Motorola Semiconductor Products Sector.

В конструкции реализован 32-битный набор команд с 32-битными регистрами и 16-битной внутренней шиной данных. Шина адреса 24 бита и не использует сегментацию памяти, что сделало его легче программу. Внутри она использует 16-битные данные арифметико - логическое устройство (АЛУ) и еще два 16-разрядные АЛУ используются в основном для адресов, и имеют внешнюю 16-битную шину данных. По этой причине Motorola назвала его 16/32-битным процессором.

Как один из первых широко доступных процессоров с 32-битным набором инструкций, работающий на относительно высоких для того времени скоростях, 68k был популярным дизайном в 80-е годы. Он широко использовался в новом поколении персональных компьютеров с графическим пользовательским интерфейсом, включая Macintosh, Amiga, Atari ST и X68000. Консоль Mega Drive 1988 года также оснащена 68000.

Вскоре 68k был расширен за счет дополнительных членов семейства, в которых были реализованы полноценные 32-битные ALU как часть растущей серии Motorola 68000. Исходный 68k, как правило, программно совместим с остальной линейкой, несмотря на то, что он ограничен внешней шиной шириной 16 бит.

Предварительный выпуск микросхемы XC68000 1979 года выпуска Матрица Motorola 68000

После 42 лет производства архитектура 68000 все еще используется.

СОДЕРЖАНИЕ
  • 1 История
    • 1.1 Второй источник
    • 1.2 версии CMOS
    • 1.3 Как ядро ​​микроконтроллера
  • 2 Приложения
  • 3 Архитектура
    • 3.1 Адресная шина
    • 3.2 Внутренние регистры
    • 3.3 Регистр состояния
    • 3.4 Набор инструкций
    • 3.5 Уровни привилегий
    • 3.6 Прерывания
  • 4 Детали набора инструкций
  • 5 68EC000
  • 6 Пример кода
  • 7 См. Также
  • 8 ссылки
  • 9 Дальнейшее чтение
  • 10 Внешние ссылки
История
Motorola MC68000 ( корпус безвыводного держателя микросхемы (CLCC)) Motorola MC68000 ( корпус с пластиковым держателем микросхемы (PLCC))

Первым массовым процессором Motorola был Motorola 6800. Несмотря на удачный дизайн, его затмили более мощные конструкции, такие как Zilog Z80, и менее дорогие конструкции, такие как MOS Technology 6502 (MOS 6502). По мере того, как перспективы продаж 6800 становились неясными, Motorola разработала новый дизайн, чтобы заменить его. Это стало проектом Motorola Advanced Computer System on Silicon или MACSS, начатым в 1976 году.

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

В середине 1970-х производители 8-битных микропроцессоров поспешили представить 16-битное поколение. Компания National Semiconductor первой выпустила свои процессоры IMP-16 и PACE в 1973–1975 годах, но у них были проблемы со скоростью. Intel работала над своим усовершенствованным 16/32-битным Intel iAPX 432 (псевдоним 8800) с 1975 года и своим Intel 8086 с 1976 года (он был представлен в 1978 году, но через несколько лет получил широкое распространение в виде почти идентичного 8088 в IBM PC. потом). Опоздание на 16-битную арену дает новому процессору больше транзисторов (примерно 40 000 активных против 20 000 активных в 8086), 32-битные макрокоманды и признанную простоту использования.

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

IBM рассматривала 68000 для IBM PC, но выбрала Intel 8088, потому что 68000 не был готов; Уолден С. Райнс писал, что таким образом «Motorola с ее передовой технологией проиграла самый важный конкурс дизайна за последние 50 лет». (IBM Instruments на короткое время продала лабораторные компьютерные системы IBM System 9000 на базе 68000.) Набор инструкций 68k особенно хорошо подходит для реализации Unix, и 68000 и его преемники стали доминирующими процессорами для рабочих станций на базе Unix, включая рабочие станции Sun и Apollo / Доменные рабочие станции. 68000 также используется для компьютеров массового потребления, таких как Apple Lisa, Macintosh, Amiga и Atari ST. 68000 используется в системах Microsoft Xenix, а также в раннем сервере NetWare на базе Unix. 68000 используется в первом поколении настольных лазерных принтеров, включая оригинальные LaserWriter от Apple Inc. и HP LaserJet.

В 1981 году Motorola представила образовательную компьютерную плату Motorola 68000, одноплатный компьютер для образовательных и тренировочных целей, который в дополнение к самому 68000 содержал память, устройства ввода-вывода, программируемый таймер и область для подключения проводов для пользовательских схем. Доска использовалась в колледжах США в качестве инструмента для обучения программированию на ассемблере до начала 1990-х годов.

В 1982 году 68000 получил незначительное обновление своей архитектуры набора команд (ISA) для поддержки виртуальной памяти и соответствия требованиям виртуализации Попека и Голдберга. Обновленный чип получил название 68010. Он также добавляет новый «режим цикла», который ускоряет небольшие циклы и увеличивает общую производительность примерно на 10% при тех же тактовых частотах. Дальнейшая расширенная версия, которая предоставляет 31 бит адресной шины, также производилась в небольших количествах как 68012.

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

Второй источник

Hitachi HD68000 Томсон TS68000

Несколько других компаний были вторыми производителями HMOS 68000. К ним относятся Hitachi (HD68000), уменьшившая размер элемента до 2,7 мкм для своей версии 12,5 МГц, Mostek (MK68000), Rockwell (R68000), Signetics (SCN68000), Thomson. / SGS-Thomson (первоначально EF68000, а затем TS68000) и Toshiba (TMP68000). Toshiba также была вторым производителем CMOS 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, он вёл себя идентично HMOS MC68000, но переход на CMOS значительно снизил его энергопотребление. Исходный HMOS MC68000 потреблял около 1,35  Вт при температуре окружающей среды 25  ° C, независимо от тактовой частоты, в то время как MC68HC000 потреблял всего 0,13 Вт на 8 МГц и 0,38 Вт на 20 МГц. (В отличие от схем CMOS, HMOS по-прежнему потребляет энергию в режиме ожидания, поэтому энергопотребление мало зависит от тактовой частоты.) Apple выбрала 68HC000 для использования в Macintosh Portable.

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

Позднее развитие 68000 было сосредоточено на более современных встроенных управляющих приложениях и периферийных устройствах на кристалле. 68EC000 чипа и ядро SCM68000 удалить M6800 периферийную шину и исключить переход от SR инструкции от программ пользовательского режима, что делают 68EC000 и 68SEC000 единственных 68000 процессоров не на 100% объектный код, совместимые с предыдущими процессорами 68000, когда выполняются в пользовательском режиме. При запуске в режиме супервизора разницы нет. В 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 используются на плате аркадной игры

На момент своего появления 68000 впервые использовался в дорогих системах, включая многопользовательские микрокомпьютеры, такие как WICAT 150, ранние компьютеры Alpha Microsystems, Sage II / IV, Tandy 6000 / TRS-80 Model 16 и Fortune 32:16 ; однопользовательские рабочие станции, такие как Hewlett-PackardHP 9000 серии 200 систем, первыми Apollo / Domain системы, 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. Компания Helix Systems (штат Миссури, США) разработала расширение для шины SWTPC SS-50, SS-64, и произвела системы, построенные на базе процессора 68008.

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

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

В некоторых аркадных играх (таких как Steel Gunner и другие, основанные на Namco System 2 ) используется конфигурация с двумя процессорами 68000, также существуют системы с конфигурацией с тремя процессорами 68000 (например, Galaxy Force и другие, основанные на Sega Y Board), а также конфигурация четырехъядерного процессора 68000, которая использовалась Jaleco (один 68000 для звука имеет более низкую тактовую частоту по сравнению с другими процессорами 68000) для таких игр, как Big Run и Cisco Heat ; другой, пятый процессор 68000 (с другой тактовой частотой, чем остальные 68000 ЦП) использовался в аркадной игре Jaleco Wild Pilot для обработки ввода / вывода (I / O).

68000 также имел большой успех в качестве встроенного контроллера. Еще в 1981 году лазерные принтеры, такие как Imagen Imprint-10, управлялись внешними платами, оснащенными 68000. Первый HP LaserJet, представленный в 1984 году, имел встроенный 8 МГц 68000. Другие производители принтеров использовали 68000, включая Apple, которая представила в 1985 году LaserWriter, первый лазерный принтер 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, Ascend, Marconi, Cyclades и других. В прошлых моделях КПК Palm и Visor Handspring использовался DragonBall, производный от 68000. AlphaSmart использовал семейство DragonBall в более поздних версиях своих портативных текстовых процессоров. Texas Instruments использовала 68000 в своих высокопроизводительных графических калькуляторах, сериях TI-89 и TI-92, а также в Voyage 200.

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

Архитектура
Регистры Motorola 68000
31 ... 23 ... 15 ... 07 ... 00 (битовая позиция)
Регистры данных
D0 Данные 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                        Указатель стека (руководитель)
Счетчик команд
ПК                           Счетчик команд
Регистр кода состояния
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 (битовая позиция)
Т S M 0 я 0 0 0 Икс N Z V C CCR

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

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

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

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

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

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

Наличие двух типов регистров позволяет одновременно выполнять один 32-битный адрес и одно 16-битное вычисление данных. Это приводит к сокращению времени выполнения инструкций, поскольку адреса и данные могут обрабатываться параллельно.

Регистр статуса

68000 имеет 16-битный регистр состояния. Старшие 8 бит - это системный байт, и его модификация является привилегированной. Младшие 8 бит - это пользовательский байт, также известный как регистр кода состояния (CCR), и его изменение не является привилегированным. Операции сравнения, арифметические и логические операции 68000 изменяют коды условий, чтобы записывать их результаты для использования в последующих условных переходах. Биты кода состояния - это «ноль» (Z), «перенос» (C), «переполнение» (V), «расширение» (X) и «отрицательный» (N). Флаг «extend» (X) заслуживает особого упоминания, потому что он отделен от флага переноса. Это позволяет отделить дополнительный бит арифметических, логических операций и операций сдвига от переноса для потока управления и связывания.

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

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

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

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

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

Прерывания

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

Аппаратные прерывания передаются в ЦП с помощью трех входов, которые кодируют наивысший приоритет ожидающих прерываний. Для кодирования прерываний обычно требуется отдельный кодировщик, хотя для систем, не требующих более трех аппаратных прерываний, можно подключить сигналы прерывания непосредственно к закодированным входам за счет большей сложности программного обеспечения. Контроллер прерываний может быть таким же простым, как кодировщик приоритета 74LS148, или может быть частью периферийного чипа очень крупномасштабной интеграции (VLSI), такого как многофункциональное периферийное устройство MC68901 (используется в компьютерах Atari ST и Sharp X68000 ), который также обеспечивал UART, таймер и параллельный ввод / вывод.

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

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

68000 не отвечает требованиям виртуализации Попека и Голдберга для полной виртуализации процессора, потому что у него есть одна непривилегированная инструкция «MOVE from SR», которая позволяет программному обеспечению в пользовательском режиме доступ только для чтения к небольшому количеству привилегированных состояний. 68EC000 и 68SEC000, которые являются более поздними производными 68000, действительно удовлетворяют требованиям, однако, поскольку инструкция «MOVE from SR» является привилегированной. Такое же изменение было внесено в процессоры 68010 и более поздних версий.

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

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

Детали набора инструкций

Стандартные режимы адресации :

  • Зарегистрируйтесь прямо
    • регистр данных, например "D0"
    • адресный регистр, например "A0"
  • Зарегистрировать косвенный
    • Простой адрес, например (A0)
    • Адрес с постинкрементом, например (A0) +
    • Адрес с предварительным декрементом, например - (A0)
    • Адрес с 16-битным смещением со знаком, например 16 (A0)
    • Косвенный регистр с индексным регистром и 8-битным смещением со знаком, например 8 (A0, D0) или 8 (A0, A1)
    Обратите внимание, что для (A0) + и - (A0) фактическое значение приращения или уменьшения зависит от размера операнда: байтовый доступ изменяет адресный регистр на 1, слово на 2 и длинное на 4.
  • ПК (счетчик программ) относительный со смещением
    • Относительное 16-битное смещение со знаком, например 16 (ПК). Этот режим был очень полезен для независимого от позиции кода.
    • Относительное с 8-битным смещением со знаком с индексом, например 8 (PC, 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) тактов, где «n» равно количеству битов, установленному в операнде. Чтобы создать функцию, которая берет фиксированное количество циклов, потребовалось добавление дополнительного кода после инструкции умножения. Обычно это требует дополнительных циклов для каждого бита, который не был установлен в исходном операнде умножения.

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

  • Арифметика: ADD, SUB, MULU (беззнаковое умножение), MULS (знаковое умножение), DIVU, DIVS, NEG (аддитивное отрицание) и CMP (своего рода сравнение, выполняемое путем вычитания аргументов и установки битов состояния, но не сохраняет результат)
  • Десятичная арифметика с двоичным кодом : ABCD, NBCD и SBCD
  • Логика: EOR (исключающее ИЛИ), И, НЕ (логическое НЕ), ИЛИ (включающее ИЛИ)
  • Сдвиг: (логический, т.е. сдвиг вправо помещает ноль в самый старший бит) LSL, LSR, ( арифметический сдвиг, то есть знаковое расширение самого старшего бита) ASR, ASL, (вращается через eXtend, а не через eXtend) ROXL, ROXR, ROL, ROR
  • Битовый тест и манипуляции с памятью или регистром данных: BSET (установлен в 1), BCLR (очищен в 0), BCHG (инвертировать) и BTST (без изменений). Все эти инструкции сначала проверяют бит назначения и устанавливают (очищают) бит CCR Z, если бит назначения равен 0 (1), соответственно.
  • Управление многопроцессорностью : TAS, test-and-set, выполняет операцию неделимой шины, позволяя использовать семафоры для синхронизации нескольких процессоров, совместно использующих одну память
  • Поток управления: JMP (переход), JSR (переход к подпрограмме), BSR (переход относительного адреса к подпрограмме), RTS (возврат из подпрограммы ), RTE (возврат из исключения, т. Е. Прерывание), TRAP (запуск программного исключения, аналогичный к программному прерыванию), CHK (условное программное исключение)
  • Ветвь: Bcc (где «cc» задает один из 14 тестов кодов условий в регистре состояния: равно, больше, меньше, перенос и большинство комбинаций и логических инверсий, доступных из регистра состояния). Остальные два возможных условия (всегда истинно и всегда ложно) имеют отдельную мнемонику инструкций: BRA (всегда переходить) и BSR (переход к подпрограмме).
  • Decrement-and-branch: DBcc (где «cc» было как для инструкций ветвления), который, при условии, что условие было ложным, уменьшает младшее слово D-регистра и, если результат не был -1 ($ FFFF), с разветвлением до пункта назначения. Такое использование -1 вместо 0 в качестве конечного значения позволило легко кодировать циклы, которые не должны были ничего делать, если счет был равен 0 в начале, без необходимости дополнительной проверки перед входом в цикл. Это также облегчило вложение DBcc.
68EC000
Контроллер Motorola 68EC000

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

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

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

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

Он также использовался в качестве звукового контроллера в игровой консоли Sega Saturn и в качестве контроллера для плат контроллера HP JetDirect Ethernet для принтеров HP LaserJet середины 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 lt; 'A', blo  copy   ;skip cmpi #'Z',d0   ;If D0 gt; '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 lt;gt; NUL unlk a6    ;Restore stack frame rts      ;Return end

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

Напротив, приведенный ниже код предназначен для автономной функции даже в самой строгой версии AMS для калькуляторов серии TI-89, не зависящей от ядра, без поиска значений в таблицах, файлах или библиотеках при выполнении, никаких системных вызовов, никакой обработки исключений, минимального использования регистров и необходимости их сохранять. Он действителен для исторических юлианских дат с 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 wordamp;byteamp;byte in basic ISO-format ;(YEAR, year ~ YEAR=DATE due to big-[[Endianness#Current_architectures|endianness]]) ; move.l DATE,d0 move.l d0,d1 ; ; Apply step 1 - [[SuperBASIC#Example|Lachman's congruence]] andi.l #$f00,d0 divu #100,d0 addi.w #193,d0 andi.l #$ff,d0 divu #100,d0 ; d0 has the month index i in the upper word (mod 100) ; ; Apply step 2 - Using spqr as the Julian year of the leap day preceding DATE 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 + i + 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 + i + 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 ;
Смотрите также
использованная литература
дальнейшее чтение
Даташиты и руководства
Книги
  • 68000, 68010, 68020 Грунтовка ; 1-е изд; Стэн Келли-Бутл и Боб Фаулер; Howard Sams amp; Co; 370 страниц; 1985; ISBN   978-0672224058. (архив)
  • Освоение микропроцессора 68000 ; 1-е изд; Филипп Робинсон; Вкладки Книги; 244 страницы; 1985; ISBN   978-0830608867. (архив)
  • Карманный справочник по языку сборки для серии 68000 ; 1-е изд; Роберт Эрскин; Pitman Publishing; 70 страниц; 1984; ISBN   978-0273021520. (архив)
  • Схема кристалла Motorola M68000 [1]
  • Программирование машинного кода 68000 (процессоры 68000, 68008, 68010 и 68020); 1-е изд; Дэвид Барроу; Профессиональные и технические книги Коллинза; 234 страницы; 1985; ISBN   0-00-383163-9.
внешние ссылки
Последняя правка сделана 2023-03-31 04:19:54
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте