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

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

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

Как один из первых широко доступных процессоров с 32-битным набором инструкций, работавший на относительно высоких для того времени скоростях, 68k был популярным дизайном в 1980-х годах. Он широко использовался в новом поколении персональных компьютеров с графическим пользовательским интерфейсом , включая Apple Macintosh , Commodore Amiga , Atari ST и многие другие. Он конкурировал в первую очередь с Intel 8088 , установленным в персональном компьютере IBM (IBM PC), который легко превзошел. 68k и 8088 вытеснили другие конструкции, такие как Zilog Z8000 и National Semiconductor 32016., заняв нишевые рынки, и сделала Motorola крупным игроком на рынке процессоров.

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

Предварительный выпуск чипа XC68000 1979 года выпуска
Die Motorola 68000

История [ править ]

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 [ ссылка ] active по сравнению с 20 000 активными в 8086), 32-битные макрокоманды и признанная простота использования.

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

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

В 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 МГц, [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, для предотвращения пиратства и нелегальных пиратских игр. [8]

Версии CMOS [ править ]

Motorola MC68HC000LC8

68HC000, первая КМОП- версия 68000, была разработана Hitachi и совместно представлена ​​в 1985 году. [9] Версия 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 году. [10] Этот чип напоминает 68HC000 во многих отношениях, но его шина данных может работать в 16-битном или 8-битном режиме, в зависимости от значения входного вывода при сбросе. Таким образом, как и 68008, он может использоваться в системах с более дешевой 8-битной памятью.

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

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

Как ядро ​​микроконтроллера [ править ]

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

Приложения [ править ]

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

На момент своего появления 68000 впервые использовался в дорогих системах, включая многопользовательские микрокомпьютеры, такие как WICAT 150, [16] ранние компьютеры Alpha Microsystems , Sage II / IV , Tandy 6000 / TRS-80 Model 16 и Fortune 32:16. ; однопользовательские рабочие станции , такие как Hewlett-Packard 'с HP 9000 серии 200 систем, первыми Apollo / Domain системы, Sun Microsystems ' Sun-1 , и Corvus Concept ; и графические терминалы, такие какDigital Equipment Corporation «s VAXstation 100 и Silicon Graphics » Радужная оболочка 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 (штат Миссури, США) разработала расширение шины SSTPC 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, а также приставку Sega CD для нее (система Sega CD имеет три процессора, два из них 68000). Мультипроцессор 1993 годаКонсоль Atari Jaguar использовала 68000 в качестве вспомогательного чипа, хотя некоторые разработчики использовали его в качестве основного процессора из-за знакомства. Многопроцессорная консоль Sega Saturn 1994 года использовала 68000 в качестве звукового сопроцессора (так же, как Mega Drive / Genesis использует Z80 как сопроцессор для звука и / или других целей).

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

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-х годов [21] 68000 использовался как процессор отображения формы сигнала; некоторые модели, включая LeCroy 9400 / 9400A [22], также используют 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 иВояж 200 . В ранних версиях использовался специализированный микроконтроллер со статическим ядром 68EC000; в более поздних версиях используется стандартный процессор MC68SEC000.

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

Архитектура [ править ]

Адресная шина [ править ]

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

Однако это не мешало программистам писать несовместимое ПО. «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 делает это обычно ненужным, за исключением когда переключение задач выполняется в многозадачной системе.)

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

Регистр состояния [ править ]

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

Набор инструкций [ править ]

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

Уровни привилегий [ править ]

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

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

Прерывания [ править ]

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

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

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

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

68000 не отвечает требованиям виртуализации Popek и Goldberg для полной виртуализации процессора, потому что у него есть одна непривилегированная инструкция «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» равно количеству битов, установленному в операнде. [24] Чтобы создать функцию, которая берет фиксированное количество циклов, потребовалось добавление дополнительного кода после инструкции умножения. Обычно это требует дополнительных циклов для каждого бита, который не был установлен в исходном операнде умножения.

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

  • Арифметика: 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-битную шину данных , переключаемую при сбросе. [25]

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

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

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

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

Пример кода [ править ]

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

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

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

; ; WDN, адрес - для хранения результата d0 ; ФЛАГ, 0 или 2 - выбор юлианского или григорианского соответственно ; DATE, year0mda - отметка даты в виде двоичного слова и байта и байта в базовом ISO-формате ; (ГОД, год ~ ГОД = ДАТА из-за большого - [[Endianness # Current_architectures | endianness]]) ;  move.l  ДАТА , d0  move.l  d0 , d1 ; ; Примените шаг 1 - [[SuperBASIC # Example |  Сравнение  Лахмана]] andi.l # $ f00 , d0  divu  # 100 , d0  addi.w  # 193 , d0  andi.l  # $ff , d0  divu  # 100 , d0  ; d0 имеет индекс месяца i в верхнем слове (mod 100) ; ; Примените шаг 2 - Использование spqr в качестве юлианского года високосного дня, предшествующего  обмену  ДАТА d0  andi.l  # $ ffff , d0  add.b  d1 , d0  add.w  YEAR , d0  subi.l  # 300 $ , d1 lsr # 2 , d1 поменять местами d1 доп. w d1 , d0 ; spqr / 4 + год + i + da}} ;       ; (Применить шаг 0 - корректировка по григорианскому  календарю  ) mulu FLAG , d1  divu  # 50 , d1  mulu  # 25 , d1  lsr  # 2 , d1  add.w  d1 , d0  add.w  FLAG , d0  ; (sp32div16) + spqr / 4 + год + i + da ;  divu  # 7 , d0  поменять местами  d0  ; d0.w становится номером дня ;  move.w  d0 , WDN  ; возвращает номер дня для адреса WDN  rts ;; Дни недели соответствуют номерам дней недели как :; Вс = 0 пн = 1 вт = 2 ср = 3 чт = 4 пт = 5 сб = 6 ;

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

  • Motorola 68000 серии
  • Motorola 6800 - 8-битный предшественник
  • DTACK Gounded - ранний информационный бюллетень 68000

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

  1. ^ Хит, Стив (1995). Архитектуры и системы микропроцессоров: RISC, CISC и DSP (второе изд.). п. 13. ISBN 0-7506-2303-9. Проверено 12 октября 2019 .
  2. ^ a b c Старнс, Томас У. (апрель 1983 г.). «Философия дизайна Motorola MC68000» . Байт . Vol. 8 нет. 4 . Проверено 19 июня 2018 .
  3. ^ Справочное руководство программиста семейства Motorola M68000 (PDF) . Феникс, Аризона: Motorola . 1992. стр. 1-1. ISBN  0-13-723289-6.
  4. ^ Кен Полссон. «Хронология микропроцессоров» . Processortimeline.info . Проверено 27 сентября 2013 .
  5. ^ a b c DTACK GROUNDED, Журнал простых систем 68000/16081 , март 1984 г., стр. 9.
  6. ^ Райнс, Walden C. (2017-06-22). «Внутренняя история самой большой ошибки Texas Instruments: микропроцессор TMS9900» . IEEE Spectrum . Проверено 16 июня 2020 .
  7. ^ Руд, Эндрю Л .; Клайн, Роберт С .; Брюстер, Джон А. (сентябрь 1986 г.). «UNIX и MC68000» . Байт . п. 179.
  8. ^ «FD1094 - Sega Retro» . segaretro.org .
  9. «Краткие сведения о компании» , The New York Times, 21 сентября 1985 г., доступно в TimesSelect (подписка).
  10. ^ "68HC001 отменяет 68008". Отчет микропроцессора . 20 июня 1990 г.
  11. ^ "Motorola оптимизирует семейство 68000;" EC "версии 68000, '020,' 030 и '040, плюс младший чип 68300 " ". Отчет микропроцессора . 17 апреля 1991 г.
  12. ^ «Motorola представляет процессор MC68SEC000 для встраиваемых приложений с низким энергопотреблением» (пресс-релиз). Motorola. 18 ноября, 1996. Архивировано из оригинала 28 марта 1997 года.
  13. ^ comp.sys.m68k публикация в Usenet , 16 мая 1995 г .; также смотрите другие сообщения в ветке. Объявление об окончании срока службы было сделано в конце 1994 года; согласно стандартной практике Motorola по окончании срока службы, окончательные заказы должны были быть в 1995 году, а окончательные поставки - в 1996 году.
  14. ^ «Снятие с производства Freescale 150mm Sendai Fab Closure - General Product Closure-General» . 24 ноября 2010 г.
  15. ^ "Многопротокольный процессор сочетает 68000 и RISC" . ESD: журнал о проектировании электронных систем . 1 ноября 1989 г. - через AccessMyLibrary.
  16. ^ "музей ~ WICAT 150" . Old-computers.com . Проверено 27 сентября 2013 .
  17. ^ «Архив Google Code - Долгосрочное хранилище для хостинга проектов Google Code» . code.google.com . Проверено 15 января 2016 .
  18. ^ "openlase-mame / segaybd.c на главном сервере - jv4779 / openlase-mame" . GitHub . Проверено 15 января 2016 .
  19. ^ «Архив Google Code - Долгосрочное хранилище для хостинга проектов Google Code» . code.google.com . Проверено 15 января 2016 .
  20. ^ "исторический беспорядок / cischeat.c на главном - mamedev / исторический беспорядок" . GitHub . Проверено 15 января 2016 .
  21. ^ Руководство по обслуживанию двухканального цифрового запоминающего осциллографа Philips PM3320 250 MS / s, раздел 8.6, код заказа 4822 872 05315.
  22. ^ LeCroy 9400 / 9400A цифровой осциллограф Руководствообслуживанию, раздел 1.1.1.3 Микропроцессор, август 1990.
  23. ^ a b M68000 8- / 16- / 32-разрядные микропроцессоры Руководство пользователя, девятое издание (PDF) . Motorola. 1993. стр. 6-2.
  24. ^ «Стандартное время выполнения инструкций» . oldwww.nvg.ntnu.no .
  25. Мальчики, Роберт (6 января 1996 г.). «Часто задаваемые вопросы о M68k (FAQ), comp.sys.m68k» .
  26. ^ Спецификации Soundscape Elite. из Факс-листа , Группы Google, 25 апреля 1995 г.

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

Даташиты и руководства
  • Руководство пользователя микропроцессора M68000 (9-е издание) ; Motorola (Freescale); 224 страницы; 1996 г.
  • Дополнение к Руководству пользователя M68000 (Rev 0) ; Motorola (Freescale); 26 страниц; 1997 г.
  • Справочное руководство программиста семейства M68000 ; Motorola (Freescale); 646 страниц; 1991; ISBN 978-0137232895 . 
Книги
  • 68000, 68010, 68020 Грунтовка ; 1-е изд; Стэн Келли-Бутл и Боб Фаулер; Ховард Сэмс и Ко; 370 страниц; 1985; ISBN 978-0672224058 . (архив) 
  • Освоение микропроцессора 68000 ; 1-е изд; Филипп Робинсон; Вкладки Книги; 244 страницы; 1985; ISBN 978-0830608867 . (архив) 
  • Карманный справочник по языку сборки для серии 68000 ; 1-е изд; Роберт Эрскин; Pitman Publishing; 70 страниц; 1984; ISBN 978-0273021520 . (архив) 

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

  • comp.sys.m68k Часто задаваемые вопросы
  • Описание инструкций ассемблера
  • 68000 изображений и описаний на cpu-collection.de
  • EASy68K , 68k ассемблер с открытым исходным кодом для Windows
  • Ресурсы 68k и m88k - с информацией о платах Motorola 68k на базе VME