Mostek MK5065 был 8-битным микропроцессором, представленным Mostek в начале 1974 года. Первоначально конструкция была разработана Motorola для использования в электронном калькуляторе Olivetti и была лицензирована Mostek для использования в некалькуляторных ролях. Он имел три набора регистров процессора, что позволяло ему переключаться на обработчик прерываний за один цикл, и режим ожидания данных, который помогал прямому доступу к памяти .
Несмотря на относительно низкую стоимость (для того времени) в 58 долларов за партию в 100 штук, 5065, похоже, не пользовался особой популярностью. Fairchild F8 был представлен примерно в то же время и был нацелен на те же рынки. F8 имел ряд преимуществ перед 5065 благодаря более современному дизайну. В июне 1975 года Mostek лицензировал F8 по соглашению со вторым источником . 5065 исчез из каталога Mostek 1975 года, в котором упоминается только их F8, MK3850.
По-прежнему убежденная в необходимости микропроцессора и извлекая уроки из опыта работы с 5065, компания Motorola приступила к проектированию Motorola 6800 почти сразу после выдачи лицензии на 5065 компании Mostek.
5065 начинался как заказной PMOS CPU дизайн Motorola для настольного калькулятора , создаваемого Olivetti . Проектированием руководили Род Оргилл и Билл Менш , создавшие 5065. Существующие фабрики Motorola оказались неспособны производить дизайн, и они были вынуждены лицензировать его Mostek [1] при условии, что они не будут продавать его на рынке калькуляторов. Mostek запустил свою версию в феврале 1974 года. К началу 1975 года он был запущен в массовое производство и продавался по 58 долларов партиями от 100 до 499. [2]
В сентябре 1974 года Fairchild Semiconductor запустила Fairchild F8 с поставками образцов, начавшимися в апреле следующего года, и полным производством в конце того же года. F8 был почти идентичен 5065 по своему назначению, изначально разработанный как ЦП калькулятора для Olympia-Werke , немецкого конкурента Olivetti. F8 имел ряд конструктивных особенностей, которые делали его очень простым в реализации, с типичными конструкциями, требующими всего двух чипов для обеспечения всей необходимой ПЗУ, ОЗУ, часов и ввода-вывода. Он также был улучшен по сравнению с 5065 тем, что это был чип на основе NMOS , что позволяло изготавливать его с меньшим размером элемента, что снижало его стоимость и позволяло ему работать намного быстрее. [3]
В июне 1975 года Mostek лицензировала дизайн F8 у Fairchild и использовала его в своей новой линейке NMOS . Упоминания о 5065 исчезают к тому времени, когда в их каталоге 1975 года упоминается только их версия F8, MK3850. [4] Mostek агрессивно снижала цену на свой F8 в течение следующего года, достигнув $10 в пластиковой упаковке [a] к 1976 году. [5]
В начале 1970-х годов идея использования микропроцессора в качестве основы для автономного компьютера все еще не была распространена, и проекты той эпохи, как правило, включали функции, предназначенные для облегчения их использования в том, что сегодня известно как область микроконтроллеров , процессоров, которые используются для управления устройством, таким как кассовый аппарат или бензоколонка . Эти системы должны быстро реагировать на различные входные данные, что обычно достигается с помощью прерываний . Поскольку это обычная операция в этих условиях, многие проекты были сосредоточены на способах улучшения производительности прерываний или их реализации. [6] [7]
В случае 5065 это было достигнуто путем предоставления трех отдельных наборов регистров для аккумулятора , счетчика программ и внутреннего регистра «главной ссылки», а также флага переноса . При получении прерывания процессор завершал текущую инструкцию и затем указывал на выбранный набор этих регистров, или, как они их называли, «уровней». Это позволяло системе отслеживать три отдельных раздела кода, соответствующих нормальной работе и двум уровням прерываний. Внешние устройства могли вызывать прерывание на двух контактах, INT 1
и INT 2
, оба из которых могли быть включены или выключены программно. Так, например, если INT 2
был включен и запущен, процессор реагировал завершением текущей инструкции, переключением на регистры уровня 2 и продолжением. Нормальной работой был уровень 3, на который он возвращался при вызове инструкции возврата из прерывания. [8] Это делает обслуживание прерываний очень быстрым, поскольку информация о состоянии сохраняется автоматически в одном цикле, тогда как многие конструкции требуют, чтобы эта информация сохранялась с использованием написанного пользователем кода, для завершения которого может потребоваться несколько циклов. [9]
Эту же систему можно было использовать для быстрых вызовов подпрограмм вместо необходимости сохранять содержимое регистра. [8] Поскольку состояние процессора сохранялось отдельно, в коде должен был быть явно записан только адрес возврата. В этом случае первые 256 ячеек памяти, нулевая страница , использовались как стек вызовов . Чтобы это работало, эта область должна была быть реализована в какой-то форме перезаписываемой памяти. Страница могла содержать до 128 16-битных адресов, при этом текущее значение указывалось «регистром указателя», который в других конструкциях назывался бы указателем стека . [9]
Для реализации прямого доступа к памяти (DMA) система включала WAIT
штифт, который поднимался внешним устройством, которому требовался доступ к памяти. Когда этот сигнал был получен, процессор продолжал текущую инструкцию, включая любые необходимые чтения и записи из памяти. Когда инструкция была завершена, он поднимал штифт, DMA
чтобы указать, что он готов, а затем переходил в состояние паузы. Затем внешнее устройство выполняло свои операции DMA, а затем опускало , WAIT
когда они заканчивались. Затем процессор опускал DMA
штифт, возобновлял работу и продолжал с того места, на котором остановился. [10]
Всего было 51 инструкция и 81 код операции. Инструкции представлены во многих форматах, но большинство из них в двухбайтовых парах код операции - операнд . Небольшое количество однобайтовых инструкций использовалось для таких вещей, как возврат из подпрограммы или сдвиг влево , которые не требуют никакой дополнительной информации. [8]
Инструкции, которые использовали память (в отличие от регистров), использовали двухбайтовый формат с кодом операции в верхних 6 битах первого байта. Нижние 2 бита управляли типом доступа к памяти. Первый (бит 1) указывал, был ли следующий 8-битный операнд прямым или косвенным адресом. Второй (бит 0) управлял тем, было ли 8-битное значение смещено относительно текущей страницы памяти, определенной счетчиком программ, или на нулевой странице. Следующий байт операнда содержит 8-битный адрес. Это означает, что при использовании прямой адресации данные должны находиться в пределах 256 байт текущей инструкции или в пределах первых 256 байт памяти. Если необходим доступ к большей основной памяти , необходимо использовать косвенную адресацию. [8]
Косвенные адреса использовали двухшаговый шаблон доступа. Сначала процессор считывает нижние 8 бит инструкции и смотрит на бит 0, чтобы определить, какое смещение использовать. Затем он считывает байт в этом месте и следующий байт, создавая 16-битное значение, хранящееся в специальном буфере. Затем он считывал или записывал данные в это 16-битное место. [9] Этот шаблон часто встречался на мини-компьютерах той эпохи, поскольку он позволял легко реализовать определенные формы циклического перебора данных. [11] [b]
Самый старший бит каждого адреса, хранящегося в памяти, использовался для указания того, был ли это прямой или косвенный адрес, это оставляло 15 бит для фактического адреса, позволяя использовать до 32 КБ памяти. [10] Поскольку адрес, на который указывает косвенный адрес, может также иметь свой старший установленный бит, косвенные адреса могут образовывать цепочки. [2] Этот стиль цепочечного доступа также наблюдался в мини-компьютерных системах, таких как IBM 1620 , HP 2100 и Data General Nova , но был необычен для микропроцессоров. [2]
Для ветвлений, вызовов подпрограмм и переходов использовался второй формат, в котором опкод использовал верхние 4 бита, а нижние 4 бита вместе с 8-битным операндом формировали 12-битный адрес. Это означало, что код мог вызывать другой код только в пределах 4-килобайтного «блока». [8] Было много других форматов инструкций для специальных целей. [12]
Ввод/вывод не отображался в памяти и обрабатывался с помощью специальных инструкций. Верхние 4 бита кода операции содержали инструкцию ввода/вывода (ввод, вывод, статус и т. д.), в то время как нижние 4 бита были «свободным полем». Программа могла поместить любое значение в эти 4 бита и использовать его в качестве специального поля данных для отправки инструкций устройству. Запуск инструкции приводил к четырехтактному процессу. В первом цикле нижние 6 бит инструкции, включая 4-битное свободное поле, помещались на шину H, а значение аккумулятора помещалось на шину L. Затем устройство могло считывать оба, чтобы декодировать свою инструкцию. Во втором цикле, если ЦП должен был отправить данные устройству для вывода, 8-битное значение помещалось на шину. В третьем цикле любые данные, отправляемые ЦП, возвращались на шину. Четвертый цикл указывал на конец цикла ввода/вывода. [8]
Основная шина была мультиплексирована, и для адресации и данных использовалось в общей сложности 16 контактов. Шина была разделена на «высокую» (H) и «низкую» (L) стороны, обе 8-битные. Во время доступа к памяти 15-битный адрес размещался на высокой и низкой сторонах, а затем данные в этом месте считывались или записывались с использованием только шины L. Это означало, что доступ к памяти требовал двух циклов, что делало его медленнее, чем конструкции с отдельными (немультиплексированными) шинами адреса и данных. [8]
Построенный на основе процесса PMOS , который был распространен в начале 1970-х годов, 5065 требовал трех уровней напряжения питания, -12 В (V GG ), +5 В (V SS ), -5 В (V DD ) и заземление. Он был упакован в 40-контактный DIP , как это было принято для большинства процессоров той эпохи. Использование мультиплексной шины сократило использование контактов до такой степени, что пять контактов остались неподключенными. [10] Как и в случае с большинством конструкций PMOS, требовался внешний тактовый чип , в данном случае MK5009. Также планировалось выпустить адаптер периферийного интерфейса (PIA) в конце 1975 года. [2]
Система была выпущена с оценочной системой, двухплатной GEMS-8, сокращенно от General Evaluation Microprocessor System. Она включала в себя драйвер часов, 512 байт ПЗУ, от 1 до 12 КБ ОЗУ и UART для использования с компьютерным терминалом . ПЗУ содержало «Program Aid Routine», небольшой инструмент разработки системы и утилиту отладчика. Плата процессора и PAR ROM стоили 597 долларов, карта ОЗУ 12 КБ — еще 597 долларов, или обе вместе — 995 долларов. Также был доступен кросс-ассемблер для неуказанного «16-битного миникомпьютера». [2]
Тактовые частоты для 5065 не указаны ни в одной из сохранившихся ссылок. Время выполнения инструкций указано от 3 до 16 мкс. [2] Хотя время выполнения инструкций указано от 3 до 16 мкс, можно использовать тактовую частоту 1 МГц. [13]