Ранние микропроцессоры линии Интел.

May 03, 2020 13:52

Тоска, настроение плохое.
Надо развеяться, напишу-ка я об истории электроники, о ранних микропроцессорах.

Встречаются утверждения, что первые микропроцессоры были созданы до Интел 4004. Например, бортовой процессор истребителя F-14.
Однако, я полагаю, у этих утверждений нет достаточный оснований - процессор на более чем двух десятках специализированных ИС вряд ли следует называть микропроцессором.
Желающим подробнее ознакомиться - вот статья на Хабре https://habr.com/ru/post/397579/

Что собой представлял процессор на ранних ИС - можно понять из этой статьи
https://ru.m.wikipedia.org/wiki/Бортовой_управляющий_компьютер_«Аполлона»
Ранние ИС были малой степени интеграции, и первая версия этого компьютера была на 4100 микросхемах, каждая содержала один трехвходовый элемент ИЛИ-НЕ. Следующая версия (летавшая к Луне) была на более продвинутых ИС - 2800 сдвоенных элементов 3ИЛИ-НЕ.
Мы видим, что число логических элементов увеличилось, но за счет технологического прогресса они поместились в меньшем числе микросхем.

Дальше развитие шло в том же направлении - число микросхем в компьютерах (тех, что попроще) сокращалось при росте числа логических элементов в микросхеме.
Вполне логичным было бы сделать процессор на 25, потом 15 и т.д. ИС, на 3, 2 и наконец одной.
Но люди, видимо, не слишком логичные существа, и первый процессор на одной ИС получился после процессоров на более чем 20 ИС, и получился он случайно. Фирма Бусиком заказала фирме Интел набор микросхем для калькулятора, и кто-то из разработчиков прикинул, что неплохо получится если ядром системы будет программируемый процессор (до того калькуляторы процессора не содержали, создавались нужные функци непосредственно на логических элементах).
Вот так, фактически случайно, и был создан первый (по крайней мере, я его таковым считаю) микропроцессор Интел 4004.

Интел 4004.
Этот микропроцессор был частью из набора из четырех микросхем:
4001 - масочное ПЗУ на 256х8 бит (2 килобита) плюс 4-разрядный регистр ввода-вывода.
4002 - ОЗУ на 320 бит плюс 4-разрядный регистр вывода.
4003 - регистр сдвига на 10 бит с последовательным входом и параллельным выходом.
4004 - собственно микропроцессор, герой нашего повествования.
Все микросхемы в стандартных 16-выходных корпусах ДИП.
Применять эти микросхемы можно было только совместно, поскольку стыковались они по 4-разрядкой шине, по которой передавались как 4-битые значения, так и порциями по 4 бита более длинные.
По логическим уровням эти микросхемы стыковались только между собой, но не с распространенными тогда стандартными микросхемами ТТЛ или КМОП. Логика работы у них была не вполне тривиальная, рассчитанная исключительно на соединение этих микросхем между собой. Схема присоединения других устройств была бы слишком навороченной и особого смысла не имела.

Основой и ведущим элементом является процессор, все остальные элементы лишь реагируют на поступающих от него информационные и управляющие сигналы.

Процессор 4004:
Корпус 16 выводов, 4 бит информационная шина и управляющие сигналы.
Питание 15 вольт.
Технология Р-МОП.
Степень интеграции - около 2250 элементов.
Тактовый сигнал с минимальным периодом 1.35 мксек.
Команды длиной 8 и 16 бит (8 бит передаются из ПЗУ 4001 в два приема).
Командный цикл 8 тактов (10.8 мксек) для 8-битной команды и вдвое больше для 16-битной.
В командном цикле первые 3 такта процессор выдает 12-битной адрес команды, 2 такта принимает 8-бинтую команду, еще 3 такта выполняет команду (в том числе может читать данные из ОЗУ или писать в ОЗУ).
Внутренние регистры процессора:
Счетчик команд 12 бит и три 12-битных регистра стека, обеспечивающих до 3 уровней вызова подпрограмм.
Регистр А 4 бита, в командах с двумя операндами содержит первый операнд, в него де записывается результат.
Шестнадцать 4-битных регистров общего назначения (РОН), могут использоваться также как восемь регистровых пар по 8 бит. Регистровая пара содержит адрес ОЗУ, и использование регистровых пар весьма удобно при работе с многоразрядными числами, каждое из которых хранится в последовательных ячейках ОЗУ.
Система команд состоит из 40 восьмибитных команд и 5 шестнадцатибитных.
Команды могут находиться только в ПЗУ.
Форматы 8-битых команд:
4 бита код операции и 4 бита номер РОН.
5 бит код операции и 3 бита номер регистров ой пары.
8 бит код операции.
16-битых команд всего пять:
Безусловный переход и вызов подпрограммы - 4 бита код операции и 12 бит адрес.
Условный переход - 4 бита код операции, 4 бита код условия, 8 бит младшие 8 бит адреса, старшие 4 бита адреса не меняются, то есть если надо сделать переход на адрес с другими старшими битами, надо делать переход на команду безусловного перехода.
"Конец цикла" - 4 бита код операции, 4 бита номер регистра, 8 бит адрес перехода. Из регистра вычитается 1, если он после этого не равен 0, то переход по адресу (старшие 4 бита адреса не меняются), иначе нет перехода, то есть выход из цикла.
Загрузка 8-разрядного значения в регистровых пару - 5 бит код операции, за бита номер регистровой пары, 8 бит загружаемая информация.

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

Система с процессором 4004 включает:
- сам процессор
- до 16 ПЗУ 4001 (всего до 4096 восьмибитных командных слов)
- до 16 ОЗУ 4002 (до 5120 бит или 1280 десятичными цифр)
- если имеющихся в ОЗУ и ПЗУ линий вывода не хватает, несколько регистров 4003, в каждом из них 10 линий вывода.

Более подробное описание см. http://datasheets.chipdb.org/Intel/MCS-4/datashts/MCS4_Data_Sheet_Nov71.pdf

Выпущен этот набор в 1971 году, снят с эксплуатации и поддержки в 1981 году.
Использовался в основном в калькуляторах, также в игровых автоматов.
Особого впечатления он не произвел, ну мало ли как может быть устроен внутри себя калькулятор, а универсальности ему явно не хватало.

Тем не менее он имел продолжение в виде набора MCS-40, выпущенного в 1974 году (прекращен выпуск и поддержка в 1981 году), состоящего из процессора 4040 и довольно многочисленных вспомогательных ИС.
Процессор 4040 представлял собой расширение 4004 - корпус с 24 выводами, больше адресуемой памяти ПЗУ команд и ОЗУ данных, больше регистров процессора, добавлены логические команды. Та же длительность такта 1.35 мксек и командных цикл 8 тактов.
Подробнее http://bitsavers.trailing-edge.com/components/intel/MCS40/MCS-40_Users_Manual_Nov74.pdf

Интел 8008.

Появлении процессора 4004 не вызвало ни большого интереса, ни энтузиазма в разработке новых микропроцессоров. И следующий процессор 8008 появился также случайно.
Фирме Интел был заказан набор управляющих микросхем для алфавитно-цифрового терминала. И было предложено сделать ядром этого набора программируемый процессор. Далее что-то не срослось (подробнее см. хотя бы в Википедии) и права на этот процессор отошли к Интелу, который и стал его продвигать и продавать.
Насколько эта разработка считалась "не ключевой" - видно хотя бы из того, что процессор 8008 поместили в подвернувшийся корпус с 18 выводами от микросхемы памяти, и это число выводов было резко недостаточным - несмотря на все меры по сокрашхщению числа выводов, не удалось выделить отдельный вывод для сигнала сброса (reset), и он был совмещен со входом запроса прерывания.

Процессор 8008 уникален из всех процессоров Интел тем, что, в отличие от всех остальных процессоров Интел (сопровождавшихся более или менее многочисленными вспомогательными микросхемами) он единственный - нет связанных с ним вспомогательных микросхем.

Поскольку это процессор начинает линию 8008-8080-8086 и далее до современных процессоров, он заслуживает довольно подробного описания.

Технология - Р-МОП, проектные нормы 10 мкм.
Степень интеграции около 3500 элементов.
Корпус 18 выводов.
Напряжение питания +5 и -9 вольт (вывода, подключенного к "земле", нет, но именно при таких напряжениях питания обеспечивается совместимость с ТТЛШ).
Тактовая частота минимальная 0.2 МГц, максимальная 0.5 МГц у первоначального варианта, позже был выпущен также вариант с тактовой частотой 0.8 МГц.
Время выполнения короткой команды 20 мксек при 0.5 МГц или 12,5 мксек при 0.8 МГц.
Разрядность - 8 бит данные, 14 бит адрес (адресует до 16384 байт).
Все входы и выходы (в том числе тактовых сигналов) совместимы с ТТЛШ серии 74LS (выходной ток слишком мал для того, чтобы подключать входы стандартной серии 74).
Выпущен в 1972 году, выпуск и поддержка прекращены в 1983 году.

Выводы микросхемы:
2 вывода питания.
8 выводов шины адреса-данных, входы-выходы.
2 вывода тактовых сигналов, входы.
1 вывод SYNC (каждый такт процессора состоит из двух периодов тактового сигнала, выходной сигнал SYNC нужен чтобы отличать эти периоды), выход.
3 вывода S2-S0, нужны, чтобы отличать такты процессора, выходы.
1 вывод Ready, вход готовности, позволяет выставлять такты ожидания, что дает возможность работать с медленными устройствами, вход.
1 вывод Int (прерывание), используется как вход прерывания и при старте после включения питания. Вход.

Такт процессора состоит из двух периодов тактового сигнала.

Цикл процессора - от трех до пяти тактов процессора.
В первом такте на шину адреса-данных выдаются 8 младших бит адреса (их запоминают в регистре).
Во втором такие выдаются 6 старших бит адреса и два бита, определяющих тип обмена данными:
Д6 Д7
0 0 - цикл выборки первого байта команды
0 1 - чтение данных или не первого байта команды
1 0 - ввод или вывод (ввод если у номера порта ввода-вывода старшие 2 бита нули, иначе вывод)
1 1 - запись в память.

Таким образом, внешняя логика должна воспринимать 8 сигналов - SYNC, S2-S0, два старших бита адреса во втором цикле команды, два старших бита номера порта ввода-вывода, чтобы правильно совершать действия. По этой причине она оказывается довольно сложной.

За вторым тактом могут следовать такты ожидания (определяется сигналом готовности).
Затем - третий такт, в котором процессор выдает записываемые данные или воспринимает считываемые.
Далее может быть до двух тактов, в которых процессор выполняет свои внутренние операции, нужные для реализации команды.

Регистры процессора.

8-разрядные регистры данных.
А - регистр аккумулятора, один из двух операндов в операциях с двумя операндами, в него же пишется результат.
Шесть РОН - B, C, D, E, H, L. Н и L могут образовывать регистровую пару, остальные четыре РОН абсолютно эквивалентны.

14-разрядный счетчик команд и 7 14-разрядных регистров стека, позволяющие до 7 уровней вложения подпрограмм.

Признаки:
C - перенос
Z - признак того, что все биты результата равны нулю
S - знак, равен старшему биту результата
P - четность, равен 1 если число единиц в результате четное.
Признаки устанавливаются по результату операции обработки данных, используются в командах условного перехода, а признак C - также в командах сложения и вычитания с переносом и командах сдвига.
Однако программно (в смысле вощможности их почесть и записать) они не доступны, что создает Раях неудобств, особенно при реализации прерываний.

Система команд:
Команды могут иметь длину 1, 2, 3 байта и выполняться за время от 5 до 11 тактов.

В командах часто используется 3-битное поле регистра. 6 из 8 его значений означают один из шести РОН, седьмое регистр А, восьмое - операнд в памяти, находящийся по адресу в регистровой паре HL (обозначается M).

Для каждой команды указывается длина в байтах и время выполнения в тактах (без состояний ожидания).

MOV rd, rs - пересылка из rs в rd. Допустимы все комбинации регисров, кроме M,M.
1 байт, 5 тактов если пересылка между регистрами, если же MOV M,r - 7 тактов, MOV r,M - 8 тактов.
MVI r - загрузка в регистр непосредственного операнда (второй байт команды).
2 байта, 8 тактов если в регистр, 9 тактов если в M.

Команды обработки данных:
ADD r - сложение (прибавление r к регистру А).
1 байт, 5 тактов или 8 тактов если Add M.
ADI - сложение с непосредственным операндом.
2 байта, 8 тактов.
Еще 7 команд имеют те же разновидности (обычную и с непосредственным операндом) и то же время выполнения, что ADD и ADI.
ADC - сложение с использованием бита переноса, позволяет складывать длинные (несколько байт) числа.
SUB - вычитание
SBB - вычитание использованием бита переноса
CMP - сравнение, отличается от вычитания только тем, что устанавливает лишь биты признаков, а результат никуда не записывается.
ANA - поразрядное логическое И.
ORA - то же ИЛИ.
XRA - то же Исключающее Или.

Команды сдвига регистра А.
RLC - циклический сдвиг влево
RRC - циклический сдвиг вправо
RAL - циклический сдвиг влево с битом переноса
RAR - циклический сдвиг вправо с битом переноса.
1 байт, 5 тактов.

Инкремент-декремент.
INC r - инкремент (прибавление единицы) регистра r, работает только с РОН, но не A или M.
DEC r - аналогично предыдущей, но декремент (вычитание единицы).
1 байт, 5 тактов.

Команды перехода.
JMP - переход по адресу в команде.
3 байта, 11 тактов.
Jcc - восемь команд условного перехода по различным условиям.
3 байта, 11 тактов если переход есть, 9 тактов если его нет.
CALL и Ccc - переходы к подпрограмме, безусловный и условные, аналогично JMP и Jcc.
RET и Rcc - возврата из подпрограммы, безусловный и условные. 1 байт, 3 такта если условие не выполнено, 5 если выполнено и возврат происходит.
RST nnn - переход к подпрограммы по одному из восьми фиксированных адресов.
1 байт, 5 тактов.

Команды ввода-вывода.
IN nnn - ввод в регистр А из одного из восьми портов ввода.
1 байт, 8 тактов.
OUT nnnnn - вывод из регистра А в один из 24 портов вывода, номер порта задается битами nnnnn, где два старших бита не равны 00.
1 байт, 8 тактов.

HLT - стоп, прекращается выборка и выполнение команд. Вновь исполнение команд начинается с приходом прерывания.
1 байт, 4 такта.

Этот процессор имеет достаточно полный набор арифихметических и логических команд.
Единственный способ обращения к данным в памяти (и по чтению, и по записи) - это через M, адрес, заданный в регистровой паре HL. Произвольных адрес в эту регистровую пару можно загрузить двумя командами MVI, но это несколько громоздко, да и регистры H и L обычно не удается использовать как РОН для хранения часто используемых данных, в них все время приходится загружать значения для обращения к переменным в памяти. Это, конечно, неудобно.

Старт после включения питания.
После включения питания процессор 8008 оказывается в состоянии"стоп". Для пуска надо подать сигнал прерывания, а затем на шину данных команду RST. Будет выполнен переход к команде по адресу, указанному в команде RST (обычно используется нулевой адрес) и начато выполнение программы.

Прерывание.
В ответ на сигнал на входе прерывания процессор выполняет цикл подтверждения прерывания, в ходе которого на шину данных должна быть подана команда RST, происходит переход к подпрограмме по одному из восьми адресов, указанному в этой команде.
Очень большим неудобством является то, что нельзя сохранить ни биты признаков, ни значения регистров без достаточно нетривиальных и громоздких действий и (весьма желательно) аппаратной поддержки. Описывать, как это сделать, я не буду, отмечу лишь что это не слишком просто.
Так что в процессоре 8008 войти в прерывание не проблема, а вот вернуться и корректно продолжить прерванную программу нетривиально.

Подробная информация об этом процессоре
http://datasheets.chipdb.org/upload/wepwawet/8008_(1978)%20Datasheet.pdf
http://www.classiccmp.org/8008/8008UM.pdf

Тем не менее, несмотря на ряд очевидных недостатков (низкое быстродействие, большое количество логики в "обвязке", серьезные проблемы в реализации прерываний) процессор 8008 был замечен, идея создания процессора в кристалле (очень дешевого по сравнению с обычными мини-ЭВМ) нашла отклик и целый ряд фирм начал разработку микропроцессоров.
В их числе была и фирма Интел, начавшая разработку процессора 8080A.

Интел 8080A.

Этот процессор представляет собой значительно улучшенную версию 8008. Сохранены все команды 8008 (хотя коды операций стали другие, то есть совместимости о кодам нет), большинство без изменений логики работы, и дополнены целым рядом других команд, устранены все основные недостатки.
Время выполнения короткой команды уменьшилось в 10 раз, а с учетом более совершенной системы команд быстродействие на большинстве задач возросло в 15 и более раз.
Процессор стал ядром довольно многочисленного семейства микросхем, выполняющих функции различных периферийных и вспомогательных устройств.

Технология N-МОП, проектные нормы 6 мкм.
Степень интеграции около 4750 элементов.
Корпус 40 выводов двойной ширины (15 мм между центрами рядов выводов), на довольно долгое время ставший стандартным для микропроцессоров.
Напряжения питания +5, +12, -5 вольт, три номинала (это стандартно для ранних N-МоОП микросхем).
Тактовая частота первоначально 2 МГц, потом добавлены 2.5 и 3 МГц.
Время выполнения короткой команды 2 мксек (при 2 МГц).
Данные 8 бит, адрес 16 бит.
Входы и выходы совместимы с ТТЛ, кроме тактовых сигналов.
Адрес и данные между собой не мультиплексированы, но в начале цикла на шину данных выдается интфромация от типе цикла.
Выпущен в 1974 году, выпуск и поддержка прекращены в 1990 году.

Цикл обращения к памяти или каналу ввода или вывода - 3 такта. Но цикл М1 (чтение кода операции) - не менее 4 тактов.

Внутренние регистры процессора, отличия от 8008.
Счетчик команд имеет разрядность 16, а не 14 бит.
Отсутствует аппаратный стек в процессоре, вместо него регист SP (указатель стека в памяти) 16 бит.
Кроме четырех признаков C N Z P имеется пятый AC - перенос из 3 разряда, нужен для осуществления десятичной коррекции (для десятичной арифметики), появилась возможность сохранения их встеке и восстановления из стека.
Регистры B и C, а также D и E образуют регистровые пары.

Все команды 8008, описанные выше, реализованы в 8080А.
Имеются следующие отличия:
1. Команды перехода к подпрограммам (включая RST) и возврата из программ работают со стеком в памяти (переходы к подпрограмме записывают адрес возврата в стек, а возврата читают адрес возврата из стека, выполняя дополнительно два обращения к памяти и соответственно корректируя указатель стека SP).
2. Команды INC и DEC работают со всеми регистрами, включая А, а также с М (ячейка памяти, адресуемая парой HL).
3. Команды IN и OUT стали двухбайтовыми, второй байт - адрес порта ввода или вывода, теперь портов ввода и вывода стало по 256.

Логика остальных команд 8008 не изменилась.

Добавлены многочисленные новые команды.

Команды загрузки в регистр А и записи из регистра А в память.
LDA - трехбайтная команда загрузки из памяти, второй третий байты - адрес памяти.
LDAX В и LDAX D - однобайтные команды загрузки из памяти, адрес в регистровых парах BC и DE соответственно.
STA, STAX B, STAX D - аналогично, только запись из А в память.

Команды работы с регистром А и битом переноса.
DAA - десятичная коррекция, делает правильное двоично-десятичной значение результата после сложения двух двоично-десятичными чисел.
CMA - побитная инверсия (операция НЕ) регистра А.
STC - установка признака С в единицу.
CMC - инверсия признака С.

16-разрядные команды.
Их довольно много, но поскольку процессор восьмиразрядный, выполняется они в два этапа и, соответственно, относительно медленно.

Стековые команды.
PUSH rp и POP rp - запись в стек и восстановление из стека регистровой пары. Работают с четырьмя регистровыми парами - BC, DE, HL, AF. где AF - пара из регистра А и флагов (5 бит в этом байте соответствуют пяти флагам).

Команды работы с регистровыми парами.
LXI rr - трехбайтная команда загрузки (второго и третьего байт команды) в пару rr.
INX rr и DCX rr - однобайтные команды инкремента и декремента регистровой пары.
DAD rr - однобайтная, прибавление содержимого регистровой пары к содержимому пары HL.
Во всех этих командах rr означает одну из четырех пар BC, DE, HL, SP.

Команды работы с парой HL. Эта пара играет особую роль (поскольку ее содержимое - адрес ячейки памяти М, но не только) и есть ряд команд, связанных с этой парой.
LHLD - трехбайтная команда загрузки пары HL из памяти по адресу, заданному во втором и третьем байте команды.
SHLD - то же, только запись HL в память.
XCHG - однобайтная команда обмена содержимого DE и HL. Это позволяет чередовать в адресе М два разных значения.
XTHL - однобайтная команда обмена содержимого HL и верхушки стека, это позволяет иметь два разных значения HL, как и с командой XCHG. Обмен более медленный, но зато пара DE остается свободной доя других целей.

SPHL - загрузка SP из HL.
PCHL - загрузка счетчика команд из HL.
Эти две команды позволяют вычислить адрес (с использованием команды сложения DAD в том числе), а затем загрузить его в указатель стека или счетчик команд.

EI - разрешить прерывания,прерывание разрешается не сразу, а после следующей за EI команды. Обычно EI ставится перед командой выхода из подпрограммы обработки прерывания, и задержка разрешения прерываний позволяет избежать нового прерывания до того, как вышли из подпрограммы обработки предыдущего.
DI - запретить прерывания. Также прерывания запрещается автоматически при входе в подпрограмму обработки прерывания. Вход в подпрограмму обработки прерывания может в процессоре 8080А делается не только командой RST, но и командой CALL. Это дает следующие преимущества: прерываний может быть не 8, а практически неограниченное количество, вход в прерывание делается сразу на первую команду обработки, а в случае RST как правило переход делается на команду безусловного перехода, так что с CALL получается несколько быстрее.

NOP - нет операции, эта команда не делает ничего, но занимает 4 такта времени, может использоваться для подгонки времени при программном формировании временных последовательностей.

В заключение следует отметить, что процессор 8080А оказался весьма удачным, повторен в довольно многих странах, где по лицензии, а где (КР580ВМ80А в СССР) без. Правда, его высокая популярность длилась не очень долго, поскольку вскоре появились усовершенствованные 8085 и Z80.

Интел 8085A

Этот процессор выпущен как модернизированый вариант 8080А, более удобный в применении и с несколько более высоким быстродействием.

Технология N-МОП, с нагрузочными транзисторами с обеднением, проектные нормы 3 мкм (второй вариант).
Степень интеграции 6500 элементов.
Корпус 40 выводов.
Напряжение питания 5 вольт.
Тактовая частота 3 и 5 МГц (первый вариант), во втором добавились также 6 МГц.
Данные 8 бит, адрес 16 бит.
Входы и выходы совместимы с ТТЛ.
Поскольку для дополнительных функций понадобились выводы, шина данных мультиплексирована с младшим байтом адреса.

Процессор 8085А включает генератор тактовых сигналов (кварцевый кристалл подключается непосредственно к выводам микросхемы) и формирователь управляющих сигналов шины. Поэтому можно сказать, что 8085А включает в себя три микросхемы - 8080А, тактовый генератор 8224 и формирователь сигналов шины 8238.
Также у него имеется четыре дополнительных входа прерываний (в том числе немаскируемое прерывание) и два вывода - программно управляемым выход и программно считываемый вход.

Так же, как у 8080А, цикл шины составляет 3 такта, и цикл М1 не менее 4 тактов. Количество тактов команды может незначительно отличаться от 8080А, в основном часто выполняемые команды могут выполняться на 1 такт быстрее 8080А, а более редкие команды могут выполняться на 1 такт дольше.

Состав команд совпадает с составом команд 8080А, только добавлены две команды:
SIM - установка маски прерываний, установка значения на последовательном выходе.
RIM - чтение маски прерываний, чтение значения на последовательном входе.

В состав микропроцессорного комплекта MCS-85 входят микросхемы, непосредственно стыкуемые с процессором 8085А.
8155/8156 - ОЗУ 256 байт, таймер 14 бит, три параллельным порта 8, 8 и 6 бит.
8355/8755 - ПЗУ 2048 байт (8355 - масочное, 8755 - программируемое стираемое ультрафиолетом) и два 8-битных параллельным порта.

На трех микросхемах (8055, 8155, 8355 или 8755) можно собрать небольшую вычислительную систему, превосходящую по возможностям однокристальные микроконтроллеры тех времен.

Техническая информация на 8080 и 8085 http://www.bitsavers.org/components/intel/MCS80/MCS80_85_Users_Manual_Jan83.pdf

Zilog Z80

Этот процессор выпущен не фирмой Интел, но относится к той же линии.
Своим появлением он обязан тому, что сколько инженеров из числа разработчиков 8080 не сошлись с руководством фирмы Интел во мнениях, как развивать эту разработку дальше. Будучи уважаемыми людьми (как разработчики очень хорошего процессора 8080) они нашли финансирование (несколько банков сочли перспективным вложить деньги) и основали фирму Zilog, где и реализовали свои идеи.
Помимо самого процессора, были выпущены вспомогательные микросхемы для работы в вычислительных системах с этим процессором, в основном периферийных устройств - счетчик-таймер, контролем прямого доступа в память, устройства параллельного и последовательного ввода-вывода.
См. http://www.z80.info/zip/um0081.pdf

(Здесь приведены данные первоначального варианта, были и последующие модернизации)
Технология N-МОП с обедненными нагрузками, квазистатическая схемотехника.
Степень интеграции около 8500 элементов.
Корпус 40 выводов.
Напряжение питания +5 вольт.
Тактовая частота 2.5 МГц (Z80) и 4 МГц (Z80A) максимальная, минимальная не ограничена.
Время выполнения короткой команды 1 мксек (при частоте 4 МГц).
Данные 8 бит, адрес 16 бит.
Входы и выходы совместимы с ТТЛ, кроме единственного тактового сигнала простой формы (меандр с равной длительностью импульса и паузы), да и повышенное напряжение высокого уровня для тактового сигнала реализуется добавлением резистора 470 Ом между выходом ТТЛ элемента и плюсом питания.
Никакие сигналы не мультиплексированы, простая и удобная система управляющих сигналов.
Выпущен в 1976 году, практически одновременно с 8085. До сих пор применяется.

Впоследствии выпущены Z80B, 6.17 МГц и Z80Н, 8 МГц.
Перепроектированный вариант на динамической схемотехнике известен как Z8400, имеет минимальную рабочую частоту 250 КГц и максимальную 4, 6.17 и 8 МГц.

Был выпущен также маломощный N-МОП вариант, Z8300, также на динамической схемотехнике, минимальная частота 250 КГц, максимальная:
Z8300-1 1 МГц при потребляемом токе 15 мА (типовое значение) 25 мА максимум.
Z8300-3 2.5 МГц при поребляемом токе 25 мА (типовое значение) 40 мА максимум.
У стандартного варианта максимальное значение потребляемого тока 200 мА, хотя на практике у 8-МГц типовое значение 120 мА, а у более медленных и того меньше, экземпляр Z80A, с которым я имел дело, потреблял 40 мА.
Впрочем, Z8300 выпускался недолго и широкого распространения не получил, так как был выпущен КМОП вариант, более экономичный.
Даташит Z8300 https://datasheet.datasheetarchive.com/originals/distributors/Datasheets-110/DSAP007352.pdf

КМОП вариант Z80 - Z84C00, полностью статический, нижнее значение тактовой частоты не ограничено, верхнее 6.17, 8, 10 и 20 МГц. Выпускался и 4 МГц вариант, но был снят с производства, что не создало проблем - любой более быстрый работает и на 4 МГц.

Даташит Z8400 и Z84C00 https://datasheet.datasheetarchive.com/originals/distributors/Datasheets-6/DSA-104254.pdf

Все описанные варианты Z80, а также многочисленные клоны, выпущенные разными фирмами в самых разных странах, имеют идентичную логику работы. Могут отличаться лишь в особенностях выполнения недокументированных команд (такие есть и их применение может иметь смысл, давая дополнительные возможности, например, доступ к половинкам 16-разрядных регистров IX и IY как к 8-разрядным регистрам).

Основная идея Z80 - удобство использования и дополнительные возможности при сохранении совместимости с 8080.

Как и у 8080, цикл М1 (выборки кода операции) у Z80 состоит из 4 тактов (или более), а остальные циклы чтения или записи памяти - из 3 тактов (это если без состояний ожидания).
Цикл М1 у Z80 состоит из двух частей - 2.5 такта чтение из памяти, и 1.5 такта регенерация динамической памяти, для чего на 7 младших бит шины адреса подается адрес регенерации, а также соответствующие управляющие сигналы. Хотя, надо сказать, при частоте тактового сигнала выше 4 МГц временные соотношения цикла регенерации, генерируемые процессором, оказываются не слишком благоприятными.

Система команд Z80 значительно расширена по сравнению с 8080 - кроме 78 команд 8080 он выполняет еще 80 команд, а всего 158. При этом обеспечивается почти полная совместимость с 8080 при выполнение команд 8080 - это достигается за счет того, что все коды операций 8080 выполняется так же, как в 8080 (есть небольшие отличия в некоторых командах, они будут указаны далее).
А новые возможности достигнуть за счет добавления новых регистров, а также использования кодов операций, не используемых 8080. Поскольку не используемых 8080 кодов операций немного (всего 12 из 256 восьмибитных значений), основная масса новых команд использует байт префикса (один из четырех), за которым следует байт кода операции.

Отличия в битах признаков.

В Z80 добавлен шестой бит признака N - он устанавливается в 1 если выполняется операция "типа вычитания" (например, вычитание или декремент) и в 0, если "типа сложения" (не пример, сложение или инкремент). Используется в команде DAA (десятичная коррекция), что позволяет корректно выполнять десятичную коррекцию и при сложении, и при вычитании, и упрощает реализацию десятичной арифметики.

Вместо бита P (четность) - бит P/V (четность/переполнение), который в логических операциях и операциях сдвига является битом четности (как и в 8080), а в арифметических операциях - битом переполнения при операциях в дополнительном коде. Это позволяет упростить обнаружение переполнения при арифметических операциях, а также может быть использовано программой, чтобы определить - выполняется она на 8080 или Z80 (после операции сложения, в которой бит четности в 8080 и бит переполнения в Z80 имеют разные значения, значение этого бита дает информацию, на 8080 или Z80 выполняется программа, что может быть использовано, например, для того чтобы на 8080 использовать совместимую с ним версию программы, а на Z80 более быструю, с имя пользованием всех команд Z80).

И это все отличия в выполнении команд на 8080 и Z80.

Даже без отличий в выполнении команд в Z80 могут быть дополнительные возможности.
Так, при выполнении команд IN и OUT, так же как в 8080, на младший байт шины адреса выводится номер порта. Но на старший байт - значение регистра А. Это мало что дает для команды вывода (одно и то же значение на старшем байте шины адреса и на шине данных), но дает дополнительные возможности при команде ввода - номер порта ввода может быть 16-разрядным (если всю шину адреса трактовать как номер порта) или одной командой производится и вывод (значения регистра А на старший байт адреса) и ввод (с шины данных в регистр А). Данная возможность использована в известной домашней ЭВМ Синклер ZX-80 и ее последующих версиях.

Дополнительные регистры Z80.

Двойной комплект AF (регистр А и флаги) и РОН (регистры B, C, D, E, H, L).
Команда Ex AF, AF' меняет местами регистры AF первого и второго комплектов, а команда ExX - РОН первого и второго комплекта. Никакой индикации того, первый или второй комплект используется, нет - это надо отслеживать программно.
Зачем это может использоваться:
- прерывания, можно не сохранять регистры в стеке, а быстро заменить их всем комплектом,
- компьютер без ОЗУ, можно использовать второй комплект как дополнительную память (тут понятно, зачем AF и РОН меняются разными командами, можно записать из одного комплекта РОН в А и переключиться на другой комплект РОН, имея в А значение из регистра первого комплекта).

16-разрядные индекс-регистры IX и IY, используются для адресации переменным в памяти, обеспечивая доступ к по адресу IX+d или IY+d, где IX или IY - значение 16-разрядного регистра, а d - 8-разрядное значение (один байт в команде).

8-разрядные регистры I и R. Регистр I используется в одном из режимов (режим 2) работы с прерываниями, если этот режим не используется, регистр I может использоваться для данных (есть команды чтения его в регистр А и записи в него из регистра А). Регистр R - регистр регенерации, младшие его 7 бит меняются постоянно (каждый цикл М1 - прибавление к этим 7 битам единицы), но старший бит не меняется и может быть использован в программе как признак (регистр I также может читать тысяч врегистр А и писаться из регистра А).

Дополнительные команды Z80.

12 не используемых в 8080 кодов операций используются следующим образом:
Два из них как коды команд ExX и Ex AF, AF'.
Четыре префикса новых команд.
Шесть команд относительного перехода, команды эти двухбайтные, во втором байте смещение на которое надо изменить счетчик команд (смещение трактуются как число со знаком, перейти можно как вперед, так назад). Эти команды - 4 условных перехода по наиболее часто используемых условиям, безусловный переход и DJNZ (декремент регистра В и переход если не ноль - позволяет организовывать цикл по счетчику, находящемуся в регистре В).

Многочисленные новые команды с префиксами включают:
Команды работы с битами, каждый бит в байте (РОН или байт в памяти) может быть установлен в 1, в 0 или протестирован (с последующим условным переходом в зависимости от его значения). Это обеспечивает возможность хранить до 8 признаков в одном байте, что особенно полезно, если этот байт в РОН, поскольку РОН немного.
Команды с обращением к памяти по адресам IX+d и IY+d. Такой вариант имеется для всех команд, могущих обращаться к помяты М (по адресу в регистровой паре HL).
Дополнительные команды 16-разрядной арифметики (вычитание 16-разрядных значений с переносом, сложение 16-разрядных значений с переносом, также варианты с использованием в 16-разрядной арифметике регистров IX и IY вместо HL).
Групповые операции (пересылка группы байт, поиск в строке, ввод или вывод группы байт).
Работа с новыми регистрами.
Еще некоторые операции.

Надо сказать, что поскольку в основе своей Z80 остался процессором, работающим с 8-битыми данными, да и наличие префикса увеличивает время выполнения команды на 4 такта (время выборки байта префикса), почти все новые команды требуют довольно много тактов для выполнения.
Так, загрузка 8-битого регистра из памяти по адресу в HL (mov r, M) выполняется за 7 тактов, а загрузка из памяти по адресу IX+d (или IY+d) 19 тактов.

Прерывания Z80.
У процессора Z80 есть два входа прерывания - INT (обычное прерывание) и NMI (немаскируемое прерывание).
NMI вызывает прерывание безусловно, поэтому аппаратура должна обеспечивать, чтобы прерывания NMI не шли слишком часто, не давая корректно из обработать. Обычно на NMI заводится прерывание по наиболее важным, но не частым событиям. NMI вызывает переход к подпрограмме по адресу 66 шестнадцатеричное.
Прерывание по входу INT может быть замаскировано (аналогично 8080).
Есть три режима работы с прерыванием INT:
Режим 0 - такой же как в 8080, процессор в цикле подтверждения прерывания принимает команду RST или CALL.
Режим 1 - единственное прерывание, никакой информации в цикле подтверждения прерывания не воспринимается, происходит переход к подпрограмме по адресу 38 шестнадцатеричное.
Режим 2 - основной режим, поддержваемый периферийными микросхемами из комплекта Z80. В цикле подтверждения прерывания процессор получает один байт, являющийся младшим байтом адреса вектора прерывания, старший байт берется из регистра I. По этому и следующему адресам считываются два байта, являющиеся адресом начала подпрограммы обработки прерывания. Этот режим позволяет обеспечить до 128 векторов прерываний.

Подробное описание работы Z80 http://map.grauw.nl/resources/cpu/z80.pdf
Описание Z80 на русском, также данные самого раннего варианта Z80 и Z80A https://www.igorkov.org/pdf/Z80-Central-Processor-Unit.pdf

Благодаря удобству применения, расширенный возможностям, а также агрессивной маркетинговой политике (первые несколько лет фирма Zilog работала в убыток, богатые банки, финансировавшие ее могли себе это позволить, и цена на процессоры была невысокой - потом, конечно, когда объемы продаж стали очень большими, была получены прибыль, скомпенсировавшая эти убытки) процессор Z80 был весьма популярен.
Согласно публикации в журнале Electronics начала 1980-х годов, Z80 был на первом месте, занимая 40% рынка, вторым был 8085 с 11%.
Со временем он, конечно, устарел.
Были выпущены его усовершенствованные варианты (Z180 - максимальная тактовая частота 33 МГц, а за счет меньшего числа тактов выполнения команд выигрыш еще раза в полтора, то есть примерно как 50 МГц Z80, eZ80 - тактовая частота 50 МГц, втрое меньше тактов выполнение команд, то есть соответствует 150 МГц Z80), но поскольку 8-разрядные процессоры вообще устарели, у них не было и малой доли того успеха, который достался на долю Z80.

Конец статьи.

электроника

Previous post Next post
Up