Motorola 68000 (иногда сокращается до Motorola 68k или m68k и обычно произносится как «шестьдесят восемь тысяч») [2] [3] — 16/32-разрядный микропроцессор с комплексным набором команд (CISC) , представленный в 1979 году подразделением Motorola Semiconductor Products Sector.
В конструкции реализован 32-битный набор инструкций с 32-битными регистрами и 16-битной внутренней шиной данных . [4] Адресная шина имеет разрядность 24 бита и не использует сегментацию памяти , что упрощает программирование. Внутри он использует 16-битное арифметико -логическое устройство (АЛУ) и еще два 16-битных АЛУ, используемых в основном для адресов, [4] и имеет 16-битную внешнюю шину данных . [5] По этой причине Motorola назвала его 16/32-битным процессором.
Как один из первых широко доступных процессоров с 32-битным набором инструкций, большим несегментированным адресным пространством и относительно высокой скоростью для своей эпохи, 68k был популярным дизайном в 1980-х годах. Он широко использовался в новом поколении персональных компьютеров с графическим пользовательским интерфейсом , включая Macintosh 128K , Amiga , Atari ST и X68000 . Консоль Sega Genesis/Mega Drive , выпущенная в 1988 году, также работала на 68000.
Более поздние процессоры серии Motorola 68000 , начиная с Motorola 68020 , используют полные 32-битные АЛУ и имеют полные 32-битные шины адреса и данных, ускоряя 32-битные операции и позволяя использовать 32-битную адресацию, а не 24-битную адресацию 68000 и 68010 или 31-битную адресацию Motorola 68012. Оригинальный 68k, как правило, программно совместим с остальной частью линейки, несмотря на ограничение внешней шиной шириной 16 бит. [4]
После 45 лет производства архитектура 68000 все еще используется. [6] [7]
Первым широко производимым микропроцессором Motorola был 6800 , представленный в начале 1974 года и доступный в большом количестве в конце того же года. [8] Компания поставила себе цель продать 25 000 единиц к сентябрю 1976 года, и эта цель была достигнута. Несмотря на то, что это была способная конструкция, ее затмили более мощные конструкции, такие как Zilog Z80 , и менее дорогие конструкции, такие как MOS Technology 6502. [ 9] К концу 1976 года продажи были на низком уровне, и подразделение спас только проект для General Motors , который превратился в огромную линейку продуктов для управления двигателем и других задач. [10]
К моменту появления 6800 на рынок вышло небольшое количество 16-битных разработок. Они, как правило, были смоделированы на платформах мини-компьютеров , таких как Data General Nova или PDP-8 . Основываясь на процессах производства полупроводников той эпохи, это часто были многочиповые решения, такие как National Semiconductor IMP-16 или одночиповый PACE, у которого были проблемы со скоростью. [11]
С перспективами продаж 6800, которые становились все менее значимыми, но все еще приносили прибыль от продаж систем управления двигателем, в конце 1976 года Колин Крук, операционный менеджер, начал думать, как успешно выиграть будущие продажи. Они знали, что Intel работает над 16-битным расширением своей серии 8080 , которое должно было появиться как Intel 8086 , и слышали слухи о 16-битном Zilog Z80 , который стал Z8000 . Они использовали бы новые методы проектирования, которые устранили бы проблемы, наблюдавшиеся в более ранних 16-битных системах. [12]
Motorola знала, что если они выпустят продукт, похожий на 8086, в пределах 10% его возможностей, Intel превзойдет их на рынке. Чтобы конкурировать, они поставили себе цель быть в два раза мощнее при той же стоимости или в два раза дешевле при той же производительности. Крук решил, что они будут атаковать верхний сегмент рынка с самым мощным процессором на рынке. [12] Еще один 16-битный процессор не подойдет, их дизайн должен быть больше, а это означало наличие некоторых 32-битных функций. [13] Крук принял решение об этом подходе к концу 1976 года. [12]
Крук сформировал проект Motorola Advanced Computer System on Silicon (MACSS) для создания дизайна и нанял Тома Гантера в качестве его главного архитектора. Гантер начал формировать свою команду в январе 1977 года. [14] Цель производительности была установлена на уровне 1 миллиона инструкций в секунду (MIPS). Они хотели, чтобы дизайн не только отвоевал поставщиков микрокомпьютеров, таких как Apple Computer и Tandy , но и компании-производители миникомпьютеров, такие как NCR и AT&T . [14]
Команда решила отказаться от попытки обратной совместимости с 6800, поскольку они посчитали, что 8-битные конструкции были слишком ограниченными, чтобы стать основой для новых конструкций. Новая система была создана под влиянием PDP-11 , самого популярного дизайна мини-компьютера той эпохи. [15] В то время ключевой концепцией в мини была концепция ортогонального набора инструкций , в котором каждая операция могла работать с любым видом данных. Чтобы подавать правильные данные во внутренние блоки, MACSS широко использовала микрокод , по сути небольшие программы в постоянной памяти , которые собирали требуемые данные, выполняли операции и записывали результаты. MACSS была одной из первых, кто использовал эту технику в микропроцессоре. [16] [17]
Существовало большое количество аппаратного обеспечения для 6800, которое оставалось полезным, например, UART и подобные интерфейсные системы. По этой причине новый дизайн сохранил режим совместимости протокола шины для существующих периферийных устройств 6800. [18] [17]
Чип с 32 контактами данных и 32 контактами адресации потребовал бы 64 контакта, плюс еще больше для питания и других функций. В то время 64-контактные двухрядные корпуса (DIP) были «большими, дорогостоящими» системами и «просто ужасными», что делало их самыми большими, которые они могли рассмотреть. Чтобы сделать его подходящим, Крук выбрал гибридную конструкцию с 32-битной архитектурой набора команд (ISA), но 16-битными компонентами, реализующими ее, такими как арифметико-логическое устройство (ALU). [14] Внешний интерфейс был сокращен до 16 контактов данных и 24 для адресов, что позволило всему этому поместиться в 64-контактном корпусе. Это стало известно как «Техасский таракан». [13] [a]
К середине 1970-х годов методы проектирования MOS Motorola стали менее продвинутыми, чем у их конкурентов, и их производственные линии временами боролись с низким выходом продукции . К концу 1970-х годов компания вступила в программу обмена технологиями с Hitachi , что значительно улучшило их производственные возможности. В рамках этого была построена новая фабрика под названием MOS-8 с использованием новейших размеров пластин 5 дюймов и процесса HMOS от Intel с размером элемента 3,5 мкм . [19] Это была инвестиция, направленная на то, чтобы догнать конкурентов: даже начинающие полупроводниковые компании, такие как Zilog и MOS Technology, представили процессоры, изготовленные на логике NMOS в режиме обеднения, до того, как это сделала Motorola. Фактически, Motorola, возможно, существенно отставала от современников в поэтапном отказе от режима улучшения и металлического затвора, и Гюнтер вспоминал, что сам 68000 должен был добиться успеха, несмотря на первоначальное принятие конструкции с металлическим затвором. [20] Хотя момент с игрой в догонялки ясен, это не могло быть полностью точным резюме, поскольку технические описания Motorola 1976 года, предшествовавшие началу проекта MACCS, обозначают большинство ее семейства 6800 как имеющие кремниевый затвор. [21] Действительно, собственная статья Гантера 1979 года, представляющая 68000, описывала его как конструкцию HMOS с режимом истощения кремниевого затвора. [22] Какова бы ни была степень дефицита процесса и производства Motorola в первые дни, команда была непреклонна и не шла на компромиссы в своем стремлении к микропроцессору с лидирующей в отрасли производительностью. [23]
Официально представленный в сентябре 1979 года, [24] первые образцы были выпущены в феврале 1980 года, а серийные чипы стали доступны в продаже в ноябре. [25] Первоначальные градации скорости были 4, 6 и 8 МГц . Чипы с частотой 10 МГц стали доступны в течение 1981 года, [26] а чипы с частотой 12,5 МГц — к июню 1982 года. [25] Версия MC68000 с частотой 16,67 МГц «12F», самая быстрая версия оригинального чипа HMOS, не производилась до конца 1980-х годов.
К началу 1981 года 68k выигрывал заказы в верхнем сегменте, и Гюнтер начал обращаться в Apple, чтобы заполучить их бизнес. В то время 68k продавался по цене около 125 долларов в партии. На встречах со Стивом Джобсом Джобс говорил об использовании 68k в Apple Lisa , но заявил: «Настоящее будущее в этом продукте, который я делаю лично. Если вы хотите этот бизнес, вы должны пообещать, что будете продавать его за 15 долларов». [27] Motorola ответила, предложив продавать его сначала по 55 долларов, затем снизить до 35 долларов и так далее. Джобс согласился, и Macintosh перешел с 6809 на 68k. Средняя цена в конечном итоге достигла 14,76 долларов. [27]
В 1982 году 68000 получил небольшое обновление своей архитектуры набора инструкций (ISA) для поддержки виртуальной памяти и соответствия требованиям виртуализации Попека и Голдберга . Обновленный чип называется 68010. [ 28] Он также добавляет новый «циклический режим», который ускоряет небольшие циклы и увеличивает общую производительность примерно на 10% при тех же тактовых частотах. Дальнейшая расширенная версия , которая выставляет 31 бит адресной шины, также производилась в небольших количествах как 68012 .
Для поддержки недорогих систем и управления приложениями с меньшим объемом памяти Motorola представила 8-битный совместимый MC68008 , также в 1982 году. Это 68000 с 8-битной шиной данных и меньшей (20-битной) адресной шиной. После 1982 года Motorola уделила больше внимания проектам 68020 и 88000 .
Несколько других компаний были производителями второго источника HMOS 68000. Среди них были Hitachi (HD68000), которая уменьшила размер элемента до 2,7 мкм для своей версии 12,5 МГц, [25] Mostek (MK68000), Rockwell (R68000), Signetics (SCN68000), Thomson / SGS-Thomson (первоначально EF68000 и позже TS68000) и Toshiba (TMP68000). Toshiba также была производителем второго источника CMOS 68HC000 (TMP68HC000).
Зашифрованные варианты 68000, такие как Hitachi FD1089 и FD1094, хранят ключи дешифрования для кодов операций и данные кодов операций в памяти с батарейным питанием и использовались в некоторых аркадных системах Sega, включая System 16, для предотвращения пиратства и нелегальных пиратских игр. [29]
68HC000, первая версия CMOS 68000, была разработана Hitachi и совместно представлена в 1985 году. [30] Версия Motorola называется MC68HC000, в то время как версия Hitachi — HD68HC000. 68HC000 предлагает скорости 8–20 МГц. За исключением использования схемы CMOS, она вела себя идентично HMOS MC68000, но переход на CMOS значительно снизил ее энергопотребление. Оригинальный HMOS MC68000 потреблял около 1,35 Вт при температуре окружающей среды 25 °C , независимо от тактовой частоты, в то время как MC68HC000 потреблял всего 0,13 Вт при 8 МГц и 0,38 Вт при 20 МГц. (В отличие от схем КМОП, HMOS по-прежнему потребляет энергию в режиме ожидания, поэтому энергопотребление мало зависит от тактовой частоты.) Apple выбрала 68HC000 для использования в Macintosh Portable .
Motorola заменила MC68008 на MC68HC001 в 1990 году. [31] Этот чип во многом напоминает 68HC000, но его шина данных может работать как в 16-битном, так и в 8-битном режиме, в зависимости от значения входного пина при сбросе. Таким образом, как и 68008, его можно использовать в системах с более дешевой 8-битной памятью.
Более поздняя эволюция 68000 была сосредоточена на более современных встроенных приложениях управления и периферийных устройствах на кристалле. Чип 68EC000 и ядро SCM68000 удаляют периферийную шину M6800 и исключают инструкцию MOVE из SR из программ пользовательского режима, что делает 68EC000 и 68SEC000 единственными процессорами 68000, не на 100% совместимыми по объектному коду с предыдущими процессорами 68000 при работе в пользовательском режиме. При работе в режиме супервизора разницы нет. [32] В 1996 году Motorola обновила автономное ядро полностью статической схемой, потребляющей всего 2 мкВт в режиме низкого энергопотребления, назвав его MC68SEC000. [33]
Motorola прекратила производство HMOS MC68000, а также MC68008, MC68010, MC68330 и MC68340 1 июня 1996 года, [34] [35] но ее дочерняя компания Freescale Semiconductor все еще производила MC68HC000, MC68HC001, MC68EC000 и MC68SEC000, а также микроконтроллеры MC68302 и MC68306 и более поздние версии семейства DragonBall . Архитектурные потомки 68000, семейства 680x0 , CPU32 и Coldfire , также все еще производились. Совсем недавно, с закрытием завода в Сендае, все детали 68HC000, 68020, 68030 и 68882 были сняты с производства, осталась только 68SEC000. [36]
С тех пор, как на смену ему пришли «истинные» 32-битные микропроцессоры, 68000 используется в качестве ядра многих микроконтроллеров . В 1989 году Motorola представила коммуникационный процессор MC68302 . [37]
IBM рассматривала 68000 для IBM PC, но выбрала Intel 8088 ; однако IBM Instruments недолгое время продавала лабораторные компьютерные системы IBM System 9000 на базе 68000. Набор инструкций 68k особенно хорошо подходит для реализации Unix, [38] и 68000 и его последователи стали доминирующими процессорами для рабочих станций на базе Unix, включая рабочие станции Sun и рабочие станции Apollo/Domain .
В 1981 году Motorola представила образовательную компьютерную плату Motorola 68000 , одноплатный компьютер для образовательных и учебных целей, который в дополнение к самой 68000 содержал память, устройства ввода-вывода, программируемый таймер и область накрутки проводов для пользовательских схем. Плата использовалась в колледжах США в качестве инструмента для изучения программирования на ассемблере до начала 1990-х годов. [39]
На момент своего появления 68000 впервые использовался в дорогостоящих системах, включая многопользовательские микрокомпьютеры , такие как WICAT 150, [40] ранние компьютеры Alpha Microsystems , Sage II / IV , Tandy 6000 / TRS-80 Model 16 и Fortune 32:16 ; однопользовательские рабочие станции , такие как системы HP 9000 Series 200 компании Hewlett-Packard , первые системы Apollo/Domain , Sun-1 компании Sun Microsystems и Corvus Concept ; и графические терминалы, такие как VAXstation 100 компании Digital Equipment Corporation и IRIS 1000 и 1200 компании Silicon Graphics . Системы Unix быстро перешли на более производительные более поздние поколения линейки 68k, которые оставались популярными на этом рынке на протяжении 1980-х годов.
К середине 1980-х годов снижение себестоимости производства сделало 68000 пригодным для использования в персональных компьютерах , начиная с Apple Lisa и Macintosh , а затем Amiga , Atari ST и X68000 .
Микрокомпьютер Sinclair QL , а также его производные, такие как бизнес-терминал ICL One Per Desk , были наиболее коммерчески важным применением 68008. Компания Helix Systems (штат Миссури, США) разработала расширение шины SWTPC SS-50 , SS-64, и выпустила системы, построенные на базе процессора 68008.
В то время как принятие RISC и x86 вытеснило серию 68000 как настольный/рабочий ЦП, процессор нашел существенное применение во встроенных приложениях. К началу 1990-х годов партии ЦП 68000 можно было купить менее чем за 30 долларов США за часть. [ необходима цитата ]
68000 также имел большой успех в качестве встроенного контроллера. Еще в 1981 году лазерные принтеры, такие как Imagen Imprint-10, управлялись внешними платами, оснащенными 68000. Первый HP LaserJet , представленный в 1984 году, поставлялся со встроенным 8 МГц 68000. Другие производители принтеров приняли 68000, включая Apple, представившую LaserWriter в 1985 году, первый лазерный принтер PostScript . 68000 продолжал широко использоваться в принтерах на протяжении оставшейся части 1980-х годов, сохраняясь и в 1990-х годах в принтерах низкого класса.
68000 был успешным в области промышленных систем управления. Среди систем, получивших выгоду от использования 68000 или производных в качестве микропроцессора, были семейства программируемых логических контроллеров (ПЛК), производимых Allen-Bradley , Texas Instruments и впоследствии, после приобретения этого подразделения TI, Siemens . Пользователи таких систем не принимают устаревание продукции с той же скоростью, что и домашние пользователи, и вполне вероятно, что, несмотря на то, что они были установлены более 20 лет назад, многие контроллеры на базе 68000 продолжат надежно работать и в 21 веке.
В ряде цифровых осциллографов 80-х годов [41] 68000 использовался в качестве процессора отображения формы сигнала; некоторые модели, включая LeCroy 9400/9400A [42], также используют 68000 в качестве математического процессора формы сигнала (включая сложение, вычитание, умножение и деление двух форм сигнала/эталонных значений/памятей форм сигнала), а некоторые цифровые осциллографы, использующие 68000 (включая 9400/9400A), также могут выполнять функции быстрого преобразования Фурье для формы сигнала.
Микроконтроллеры 683XX , основанные на архитектуре 68000, используются в сетевом и телекоммуникационном оборудовании, телевизионных приставках, лабораторных и медицинских приборах и даже карманных калькуляторах. MC68302 и его производные использовались во многих телекоммуникационных продуктах от Cisco, 3com, Ascend, Marconi, Cyclades и других. Прошлые модели КПК Palm и Handspring Visor использовали DragonBall , производную от 68000. AlphaSmart использовала семейство DragonBall в более поздних версиях своих портативных текстовых процессоров. Texas Instruments использовала 68000 в своих высокопроизводительных графических калькуляторах серий TI-89 и TI-92 и Voyage 200 .
Модифицированная версия 68000 легла в основу аппаратного эмулятора IBM XT/370 процессора System 370.
Производители видеоигр использовали 68000 в качестве основы многих аркадных игр и домашних игровых консолей : Food Fight от Atari , выпущенная в 1982 году, была одной из первых аркадных игр на базе 68000. Среди других были System 16 от Sega , CP System и CPS-2 от Capcom и Neo Geo от SNK . К концу 1980-х годов 68000 был достаточно недорогим для питания домашних игровых консолей, таких как консоль Genesis от Sega , а также приставки Sega CD для нее (система Sega CD имеет три ЦП, два из которых 68000). 68000 также является ЦП Sega Pico , образовательной игровой консоли для маленьких детей. Многопроцессорная консоль Atari Jaguar, выпущенная в 1993 году, использовала 68000 в качестве вспомогательного чипа, хотя из-за известности некоторые разработчики использовали его в качестве основного процессора. Консоль Sega Saturn 1994 года использовала 68000 в качестве звукового сопроцессора. В октябре 1995 года 68000 был использован в портативной игровой консоли Genesis Nomad от Sega в качестве центрального процессора. [43]
Некоторые аркадные игры (такие как Steel Gunner и другие, основанные на Namco System 2 ) используют конфигурацию с двумя процессорами 68000, [44] а также существуют системы с конфигурацией с тремя процессорами 68000 (такие как Galaxy Force и другие, основанные на Sega Y Board), [45] наряду с конфигурацией с четырьмя процессорами 68000, которая использовалась Jaleco (один 68000 для звука имеет более низкую тактовую частоту по сравнению с другими процессорами 68000) [46] для таких игр, как Big Run и Cisco Heat ; другой, пятый 68000 (с другой тактовой частотой, чем другие процессоры 68000) использовался в аркадной игре Jaleco Wild Pilot для обработки ввода-вывода (I/O). [47]
68000 имеет 24-битную внешнюю адресную шину и два сигнала байтового выбора, «заменившие» A0. Таким образом, эти 24 линии могут адресовать 16 МБ физической памяти с байтовым разрешением. Хранение и вычисление адресов использует 32 бита внутри; однако 8 старших бит адреса игнорируются из-за физического отсутствия выводов устройства. Это позволяет запускать программное обеспечение, написанное для логически плоского 32-битного адресного пространства , при этом получая доступ только к 24-битному физическому адресному пространству. Намерением Motorola с внутренним 32-битным адресным пространством была прямая совместимость, что делает возможным написание программного обеспечения 68000, которое будет в полной мере использовать преимущества более поздних 32-битных реализаций набора инструкций 68000. [4]
Однако это не мешало программистам писать несовместимое с прямыми задачами программное обеспечение. «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 адресных регистров. Однако конструкция 68000 с двойным указателем стека (A7 и режим супервизора A7') делает это обычно ненужным, за исключением случаев, когда переключение задач выполняется в многозадачной системе.)
Наличие двух типов регистров позволяет одновременно выполнять один 32-битный адрес и один 16-битный расчет данных. Это приводит к сокращению времени выполнения инструкций, поскольку адреса и данные могут обрабатываться параллельно. [4]
68000 имеет 16-битный регистр состояния. Верхние 8 бит — это системный байт, и его изменение является привилегированным. Нижние 8 бит — это пользовательский байт, также известный как регистр кода условия (CCR), и его изменение не является привилегированным. Операции сравнения, арифметики и логики 68000 изменяют коды условий, чтобы записывать их результаты для использования в последующих условных переходах. Биты кода условия — это «перенос» (C), «переполнение» (V), «ноль» (Z), «отрицательный» (N) и «расширение» (X). Флаг «расширения» (X) заслуживает особого упоминания, поскольку он отделен от флага переноса . Это позволяет отделить дополнительный бит из арифметических, логических и сдвиговых операций от арифметики переноса с множественной точностью . [48]
Разработчики попытались сделать язык ассемблера ортогональным . То есть инструкции делятся на операции и режимы адресации , и почти все режимы адресации доступны для почти всех инструкций. Существует 56 инструкций и минимальный размер инструкции составляет 16 бит. Многие инструкции и режимы адресации длиннее, чтобы включать больше бит адреса или режима.
Центральный процессор, а позже и все семейство, реализуют два уровня привилегий. Пользовательский режим дает доступ ко всему, кроме привилегированных инструкций, таких как управление уровнем прерываний. [49] Привилегия супервизора дает доступ ко всему. Прерывание всегда становится супервизорным. Бит супервизора хранится в регистре состояния и виден пользовательским программам. [49]
Преимущество этой системы в том, что уровень супервизора имеет отдельный указатель стека. Это позволяет многозадачной системе использовать очень маленькие стеки для задач, поскольку проектировщикам не нужно выделять память, необходимую для хранения стековых кадров максимального стека прерываний.
Процессор распознает семь уровней прерываний . Уровни с 1 по 5 имеют строгий приоритет. То есть прерывание с более высоким номером всегда может прервать прерывание с более низким номером. В регистре состояния привилегированная инструкция позволяет устанавливать текущий минимальный уровень прерывания, блокируя прерывания с более низким или равным приоритетом. Например, если уровень прерывания в регистре состояния установлен на 3, более высокие уровни от 4 до 7 могут вызвать исключение. Уровень 7 — это немаскируемое прерывание (NMI), запускаемое уровнем. Уровень 1 может быть прерван любым более высоким уровнем. Уровень 0 означает отсутствие прерывания. Уровень хранится в регистре состояния и виден программам уровня пользователя.
Аппаратные прерывания передаются в ЦП с помощью трех входов, которые кодируют наивысший приоритет ожидающего прерывания. Для кодирования прерываний обычно требуется отдельный кодер, хотя для систем, которым не требуется более трех аппаратных прерываний, можно напрямую подключать сигналы прерываний к кодированным входам за счет большей сложности программного обеспечения. Контроллер прерываний может быть таким же простым, как приоритетный кодер 74LS148 , или может быть частью периферийной микросхемы с очень большой интеграцией (VLSI), такой как многофункциональное периферийное устройство MC68901 (используется в компьютерах Atari ST и X68000 ), которое также обеспечивает UART , таймер и параллельный ввод-вывод.
«Таблица исключений» ( таблица векторов прерываний, адреса векторов прерываний) зафиксирована на адресах от 0 до 1023, что позволяет использовать 256 32-битных векторов. Первый вектор (RESET) состоит из двух векторов, а именно начального адреса стека и начального адреса кода. Векторы с 3 по 15 используются для сообщения о различных ошибках: ошибка шины , ошибка адреса, недопустимая инструкция , деление на ноль , вектор CHK и CHK2, нарушение привилегий (для блокировки повышения привилегий ) и некоторые зарезервированные векторы, которые стали эмулятором строки 1010, эмулятором строки 1111 и аппаратной точкой останова . Вектор 24 запускает настоящие прерывания: ложное прерывание (без аппаратного подтверждения) и автовекторы уровня 1–7, затем 16 векторов TRAP, затем еще несколько зарезервированных векторов, затем определяемые пользователем векторы.
Поскольку начальный адресный вектор кода всегда должен быть действительным при сбросе, системы обычно включали некоторую энергонезависимую память (например, ROM ), начинающуюся с адреса ноль, чтобы содержать векторы и код начальной загрузки . Однако для системы общего назначения желательно, чтобы операционная система могла изменять векторы во время выполнения. Это часто достигалось либо указанием векторов в ROM на таблицу переходов в RAM , либо использованием переключения банков , чтобы позволить заменять ROM на RAM во время выполнения.
68000 не соответствует требованиям виртуализации Попека и Голдберга для полной виртуализации процессора, поскольку имеет одну непривилегированную инструкцию "MOVE from SR", которая позволяет программному обеспечению пользовательского режима получать доступ только для чтения к небольшому количеству привилегированного состояния. 68EC000 и 68SEC000, которые являются более поздними производными от 68000, соответствуют требованиям, поскольку инструкция "MOVE from SR" является привилегированной. Такое же изменение было введено в 68010 и более поздних процессорах.
68000 также не может легко поддерживать виртуальную память , что требует возможности перехвата и восстановления после неудачного доступа к памяти. 68000 предоставляет исключение ошибки шины, которое может использоваться для перехвата, но оно не сохраняет достаточного состояния процессора для возобновления ошибочной инструкции после того, как операционная система обработает исключение. Несколько компаний преуспели в создании рабочих станций Unix на базе 68000 с виртуальной памятью, которая работала с использованием двух микросхем 68000, работающих параллельно на разных фазовых тактовых частотах. Когда «ведущий» 68000 сталкивался с плохим доступом к памяти, дополнительное оборудование прерывало «главный» 68000, чтобы предотвратить его от того, чтобы он также столкнулся с плохим доступом к памяти. Эта процедура прерывания обрабатывала функции виртуальной памяти и перезапускала «ведущий» 68000 в правильном состоянии для продолжения правильно синхронизированной работы, когда «главный» 68000 возвращался из прерывания.
Эти проблемы были исправлены в следующей крупной ревизии архитектуры 68k с выпуском MC68010. Исключения Bus Error и Address Error помещают большой объем внутреннего состояния в стек супервизора для облегчения восстановления, а инструкция "MOVE from SR" была сделана привилегированной. Новая непривилегированная инструкция "MOVE from CCR" предоставляется для использования вместо нее программным обеспечением пользовательского режима; операционная система может перехватывать и эмулировать инструкции пользовательского режима "MOVE from SR", если это необходимо.
Стандартные режимы адресации :
Плюс: доступ к регистру состояния , а в более поздних моделях и к другим специальным регистрам.
Большинство инструкций имеют варианты, которые работают с 8-битными байтами, 16-битными словами и 32-битными числами; в языках ассемблера для обозначения варианта используются суффиксы с точками «.b», «.w» и «.l» после мнемоники инструкции.
Как и во многих процессорах той эпохи, тактовая частота некоторых инструкций различалась в зависимости от исходного операнда(ов). Например, инструкция беззнакового умножения занимает (38+2n) тактов для завершения, где 'n' равно количеству битов, установленных в операнде. [50] Для создания функции, которая требовала фиксированного количества циклов, требовалось добавление дополнительного кода после инструкции умножения. Обычно это потребляло дополнительные циклы для каждого бита, который не был установлен в исходном операнде умножения.
Большинство инструкций являются диадическими , то есть операция имеет источник и пункт назначения, а пункт назначения изменяется. Известные инструкции:
68EC000 — это недорогая версия 68000 с немного другой распиновкой, разработанная для встроенных контроллеров. 68EC000 может иметь либо 8-битную , либо 16-битную шину данных , переключаемую при сбросе. [51]
Процессоры доступны в различных скоростях, включая конфигурации 8 и 16 МГц , производя 2100 и 4376 Dhrystones каждый. Эти процессоры не имеют блока с плавающей точкой , и с ним сложно реализовать сопроцессор FPU ( MC68881/2 ), поскольку в серии EC отсутствуют необходимые инструкции сопроцессора.
68EC000 использовался в качестве контроллера во многих аудиоприложениях, включая музыкальные инструменты и звуковые карты Ensoniq , где он был частью MIDI- синтезатора. [52] На звуковых платах Ensoniq контроллер обеспечивал несколько преимуществ по сравнению с конкурентами без ЦП на борту. Процессор позволял настраивать плату для выполнения различных аудиозадач, таких как синтез MIDI MPU-401 или эмуляция MT-32 , без использования резидентной программы terminate-and-stay-resident . Это улучшило совместимость программного обеспечения, снизило использование ЦП и исключило использование памяти хост-системы.
Ядро Motorola 68EC000 позднее использовалось в процессорах DragonBall на базе m68k от Motorola/ Freescale .
Он также использовался в качестве звукового контроллера в игровой консоли Sega Saturn и в качестве контроллера для плат контроллера HP JetDirect Ethernet для принтеров HP 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 - для выбора между юлианским или григорианским летоисчислением соответственно; ДАТА, год0мда - отметка даты в виде двоичного слова&байт&байт в базовом формате ISO;(ГОД, год ~ ГОД=ДАТА из-за обратного порядка байтов );move.l DATE,d0
move.l d0,d1
;; Применить шаг 1 - сравнение Лахмана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)
;; Применить шаг 2 — Нахождение spqr как года юлианского високосного дня, предшествующего ДАТЕ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
;; (Применить шаг 0 - Григорианская корректировка)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
;; Дни недели соответствуют номерам дней недели следующим образом:; Вс=0 Пн=1 Вт=2 Ср=3 Чт=4 Пт=5 Сб=6;
{{cite web}}
: CS1 maint: неподходящий URL ( ссылка )