Z80, произведенный в июне 1976 года в соответствии с датой | |
Общая информация | |
---|---|
Запущен | Март 1976 г. |
Обычный производитель (-ы) | |
Производительность | |
Макс. CPU тактовая частота | 2,5, 4, 6, 8 МГц до 10 МГц с увеличением CMOS до 20 МГц и двоично-совместимыми производными (от Zilog) до 33 и 50 МГц. |
Z80 - это 8-битный микропроцессор, представленный Zilog как первый продукт начинающей компании. Z80 был разработан Федерико Фаггин в конце 1974 года и разработан им и его 11 сотрудниками с начала 1975 года. Первые образцы были доставлены в марте 1976 года.. За доход от Z80 компания построила свои собственные фабрики по производству микросхем и за следующие два года выросла до более тысячи сотрудников.
Zilog Z80 - это программное обеспечение. совместное расширение и усовершенствование Intel 8080 и, как и оно, было в основном нацелено на встроенные системы. Несмотря на то, что Z80 использовался в этой роли, он также стал одним из наиболее широко используемых ЦП в настольных компьютеров и домашних компьютеров с 1970-х до середины. 1980-х годов. Это также было распространено в военных приложениях, музыкальном оборудовании, таком как синтезаторы (например, Roland Jupiter-8 ) и монетные автоматы аркады. игры конца 1970-х и начала 1980-х годов, включая Pac-Man.
Zilog, предоставили лицензию на Z80 американским компаниям Synertek и Mostek, которые помогли им в начальном производстве, а также европейскому второму источнику производителю SGS. Дизайн также копировался японскими, восточноевропейскими и советскими производителями. Это завоевало признание Z80 на мировом рынке как крупные компании, такие как NEC, Toshiba, Sharp и Hitachi, начали производство устройств. (или их собственные Z80-совместимые клоны или разработки).
В последние десятилетия Zilog переориентировался на новейшее семейство Z80-совместимых микроконтроллеров, полностью конвейерных 24-бит eZ80 с линейным 16 MB диапазоном адресов был успешно представлен наряду с более простыми продуктами Z80 и Z180.
Z80 появился, когда физик Федерико Фаггин оставил Intel в конце 1974 года основал Zilog с [it ]. В Fairchild Semiconductor, а затем в Intel, Фаггин работал над фундаментальной технологией производства транзисторов и полупроводников. Он также разработал базовую методологию проектирования, используемую для памяти и микропроцессоров в Intel, и руководил работой над Intel 4004, 8080 и другими другими ИС. Масатоши Шима, главный разработчик логических и транзисторных уровней 4004 и 8080 под руководством Фаггина, присоединился к команде Zilog.
По мнению разработчиков, продукты целями ЦП Z80 (и его дополнительная поддержка и периферийных ИС) были такие, как интеллектуальные терминалы, принтеры высокого класса и продвинутые кассовые аппараты, а также телекоммуникационное оборудование, промышленные роботы и другие виды оборудования автоматизации.
К марту 1976 года Zilog разработал Z80, а также сопутствующую систему на ассемблере для своих клиентов, и к июлю 1976 года она была официально запущена на магазин. Некоторые из микросхем поддержки Z80 и периферийных микросхем на этом этапе находились в стадии разработки.
Ранние модели Z80 производились Synertek и Mostek до того, как у Zilog была готова собственная производственная фабрика в конце 1976 года. Эти компании были выбраны, потому что они могли выполнять ионную имплантацию, функции для создания режим истощения полевые МОП-транзисторы, которые конструкция Z80 использовалась в качестве нагрузочных транзисторов, чтобы справиться с одним источником питания 5 В.
Фэггин разработал набор команд , чтобы быть двоично-совместимым с Intel 8080, чтобы большая часть кода 8080, особенно CP / M операционная система и Intel PL / M компилятор для 8080 (а также его сгенерированный код) будет работать без изменений на новом ЦП Z80. Масатоши Шима спроектировал большую часть микроархитектуры, а также уровни затвора и транзистора ЦП Z80 с помощью небольшого числа инженеров и специалистов по компоновке. Генеральный директор Федерико Фаггин действительно участвовал в работе над компоновкой микросхемы вместе с двумя преданными компоновщиками. По словам Фаггина, он работал 80 часов в неделю, чтобы уложиться в плотный график, установленный финансовыми инвесторами.
Z80 предлагал много улучшений по сравнению с 8080:
Z80 пришел на смену 8080 и его потомку, 8085 на рынке процессоров, и стал одним из самых популярных 8-битных процессоров. на несколько лет, чем Intel (с ее 8 0C85) для производства КМОП-процессора с низким энергопотреблением, впервые появился Intel с портативными компьютерами с батарейным питанием, такими как ноутбук Tandy / Radio Shack TRS -80 Модель 100 с апреля 1983 г. года. Однако в последующие годы CMOS Z80 будет доминировать на этом рынке.
Некоторые организации, такие как British Telecom, остались верны 8085 для встраиваемых приложений благодаря их знакомству с ним, а также его встроенной поддержке последовательного интерфейса и многоуровневой архитектуры прерывания. Возможно, ключом к исходному успеху Z80 было встроено обновление DRAM и другие функции, которые позволили создать системы с меньшим поддерживаемым микросхемом (Z80 встроенные системы обычно использовать статическую RAM и, следовательно, не нужно это обновление).
Для исходной конструкции NMOS используя верхний предел тактовой частоты, увеличивался с вводных 2,5 МГц через хорошо известные 4 МГц (Z80A) до 6 (Z80B) и 8 МГц (Z80H). Версия NMOS производилась как часть 10 МГц с конца 1980-х годов. CMOS были разработаны версии с указанными верхними пределами частоты в диапазоне от 4 МГц до 20 МГц для версии, продаваемой сегодня. Версии CMOS допускает режим сна с низким энергопотреблением с сохранением внутреннего состояния, не имея нижнего предела частоты. Полностью совместимые производные HD64180 / Z180 и eZ80 в настоящее время установленных для частот до 33 и 50 МГц соответственно.
Модель программирования и набор регистров Z80 довольно обычны., в конечном итоге на основе структур регистров Datapoint 2200. Z80 был разработан как расширение Intel 8080, в свою очередь, было расширением 8008. 8008 был в основном реализацией PMOS ЦП на основе TTL Datapoint 2200.
Конструкция 2200 позволяла объединять 8-битные регистры H и L (High и Low) в пары. 16-битный адресный регистр HL. В 8080 эта пара была добавлена также парам BC и DE, в то время как HL был обобщен для использования в качестве 16-разрядного аккумулятора, а не только в качестве регистратора. 8080 также представил важный 8-битный режим немедленных данных для операций с аккумулятором и немедленные 16-битные данные для нагрузок HL, BC и DE. Более того, теперь стало возможным прямое 16-битное копирование между HL и памятью с использованием прямого адреса.
Z80 ортогонализировал это тоже, сделав все 16-битные пары регистров, включая IX и IY, более общего назначения, а также разрешив 16-битное копирование непосредственно в и из памяти для всех этих пар. 16-битные регистры IX и IY в Z80 в первую очередь предназначена для использования в качестве базовых адресных регистров, где конкретная инструкция обеспечивает постоянное смещение, которое добавляется к предыдущим значениям, но они также используются в качестве 16-битных аккумуляторов, среди прочего.. Z80 также представил новый подписанный флаг переполнения и дополнил довольно простую 16-битную арифметику 8080 специальными инструкциями для 16-битной арифметики со знаком.
8080-совместимые AF, BC, DE, HL дублированы как два отдельных банка в Z80, где процессор может быстро переключаться с одного банка на другой; функция, полезная для ускорения реакции на одноуровневые прерывания с высоким приоритетом. Подобная функция присутствовала в 2200, но никогда не была реализована в Intel. Двойной набор регистров очень полезен во встроенной роли, как он улучшает обработку прерываний, но нашел широкое применение в качестве дополнительного набора общего набора сложного кода, как арифметика с плавающей запятой или домашние компьютерные игры.
Регистры Z80 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Как и в 8080, 8-битные регистры обычно объединяются в пары для обеспечения 16-битных версий. Совместимые с 8080 регистры:
AF
: 8-битный аккумулятор (A) и биты флагов (F) перенос, ноль, минус, четность / переполнение, половинный перенос (используется для BCD ), а также флаг сложения / вычитания (обычно называемый N) и для BCDBC
: 16-разрядный регистр данных / адреса или два 8-разрядных регистраDE
: 16-разрядный регистр данных / адреса или два 8-битовые регистрыHL
: 16-битный регистр накопителя / адреса или два 8-битных регистраSP
: указатель стека, 16 битPC
: программный счетчик, 16 битНовые регистры, представленные в Z80::
IX
: 16-битный индекс или базовый регистр для 8-битных немедленных смещенийIY
: 16-битный индекс или базовый регистр для 8-битных смещенийI
: базовый регистр прерывания, 8 битR
: Счетчик обновления DRAM, 8 бит (msb не учитывается)AF '
: альтернативный (или теневой) накопитель и флаги (включаются и выключаются с помощью EX AF, AF')BC '
, DE '
и HL '
: альтернативные (или теневые) регистры (включаются и выключаются с помощью EXX)Нет прямого доступа к альтернативным регистрам; вместо этого две специальные инструкции, EX AF, AF '
и EXX
, каждый переключает один из двух тригеров мультиплексора . Это быстрое переключение контекста для подпрограмм прерываний: EX AF, AF '
можно использовать отдельно для действительно простых и быстрых подпрограмм обработки прерываний или вместе с EXX
для замены всего BC, комплект DE, HL. Это все еще в несколько раз быстрее, чем помещать те же регистры в стек . Однако более медленные, более низкие приоритеты или многоуровневые прерывания используют стек для хранения регистров.
Регистр обновления, R
, увеличивается каждый раз, когда ЦП выбирает код операции (или префикс кода операции) и не имеет простой связи с выполнением программы. Иногда это использовалось для генерации псевдослучайных чисел в играх, а также в схемах защиты программного обеспечения. Он также использовался как «аппаратный» счетчик в некоторых проектах; Примером этого является ZX81, который позволяет ему просматривать позиции на экране телевизора, вызывая прерывание в , оборачиваясь вокруг (путем подключения INT к A6).
Регистр прерывания прерывания, I
, используется для прерываний режима 2 Z80 (выбирается командой IM 2
). Он отправляет старший байт базового адреса для таблицы из 128 записей через служебную программу, которые выбираются через индекс, отправляемый в ЦП во время цикла подтверждения прерывания ; этот индекс - просто младшая байтовая часть указателя на табулированный косвенный адрес, указывающий на обслуживание обслуживания. Указатель идентифицирует конкретную периферийную микросхему или периферийную функцию или событие, где микросхемы обычно подключаются в так называемую цепочку гирляндного подключения для разрешения приоритета. Как и регистр обновления, этот регистр иногда использовался творчески; в режиме прерывания 0 и 1 (или в системе, не прерывания прерывания) он может быть просто как еще один 8-й регистр данных.
Инструкции LD A, R
и LD A, I
Воздействие на регистр флагов Z80, в отличие от всех других инструкций LD
(загрузка). Флаги Sign (бит 7) и Zero (бит 6) установлены в соответствии с данными, загруженными из исходных регистров обновления или прерывания. Для обеих инструкций флаг четности / переполнения (бит 2) устанавливается в соответствии с состоянием триггера IFF2.
Первый Intel 8008 язык ассемблера основан на очень простом (но систематическом) синтаксисе, унаследованном от дизайна Datapoint 2200. Этот исходный синтаксис позже был преобразован в новую, несколько более традиционную форму языка ассемблера для того же оригинального чипа 8008. Примерно в то же время новый язык ассемблера был также расширен для включения дополнительных возможностей адресации в более продвинутом чипе Intel 8080 (8008 и 8080 совместно использовали языковой подмножество, не будучи двоично-совместимым ; однако 8008 был двоично совместим с Datapoint 2200).
В этом процессе мнемоника L
для НАГРУЗКИ была заменена различными сокращениями слов ЗАГРУЗИТЬ, СОХРАНИТЬ и ПЕРЕМЕСТИТЬ, смешанными с другими символическими буквами. Мнемоническая буква M
для памяти (на которую ссылается HL) была извлечена из мнемоники инструкций, чтобы стать синтаксически автономным операндом, в то время как регистры и комбинации регистров стали обозначаться очень непоследовательно; либо сокращенными операндами (MVI D, LXI H и т. д.), внутри самой мнемоники инструкций (LDA, LHLD и т. д.), либо обоими одновременно (LDAX B, STAX D и т. д.).
Intel 8008. Datapoint 2200 | Intel 8080. Intel 8085 | Zilog Z80 | Intel 8086 /. Intel 8088 |
---|---|---|---|
до прибл.. 1973 | ок. 1974 | 1976 | 1978 |
LBC | MOV B, C | LD B, C | MOV BL, CL |
-- | LDAX B | LD A, (BC) | MOV AL, [BX] |
LAM | MOV A, M | LD A, (HL) | MOV AL, [BP] |
LBM | MOV B, M | LD B, (HL) | MOV BL, [BP] |
-- | STAX D | LD (DE), A | MOV [DX], AL |
LMA | MOV M, A | LD (HL), A | MOV [BP], AL |
LMC | MOV M, C | LD (HL), C | MOV [BP], CL |
LDI 56 | MVI D, 56 | LD D, 56 | MOV DL, 56 |
LMI 56 | MVI M, 56 | LD (HL), 56 | MOV byte ptr [ BP], 56 |
-- | LDA 1234 | LD A, (1234) | MOV AL, [1234] |
-- | STA 1234 | LD (1234), A | MOV [1234], AL |
-- | -- | LD B, (IX + 56) | MOV BL, [SI + 56] |
-- | -- | LD (IX + 56), C | MOV [SI + 56], CL |
-- | -- | LD (IY +56), 78 | байт MOV ptr [DI + 56], 78 |
-- | LXI B, 1234 | LD BC, 1234 | MOV BX, 1234 |
-- | LXI H, 1234 | LD HL, 1234 | MOV BP, 1234 |
-- | SHLD 1234 | LD (1234), HL | MOV [1234], BP |
-- | LHLD 1234 | LD HL, (1234) | MOV BP, [1234] |
-- | -- | LD BC, (12 34) | MOV BX, [1234] |
-- | -- | LD IX, (1234) | MOV SI, [1234] |
Иллюстрация четырех синтаксисов, используя примеры эквивалента, или (для 8086) очень похожий, загрузите и сохраните инструкции. Синтаксис Z80 использует круглые скобки вокруг выражения, чтобы указать, что указать в качестве номера памяти в указанном месте (как указано ниже), в то время как синтаксис 8086 использует для этой цели квадратные скобки вместо обычных. И Z80, и 8086 используют знак +, чтобы указать, что константа добавлен базовый регистр для создания адреса
Как Intel заявила об авторских правах на свою мнемонику сборки, новая сборка синтаксис должен был разработан для Z80. На этот раз был использован более систематический подход:
Эти принципы упростили поиск имен и форм для всех новых инструкций Z80, а также ортогонализации старых, таких как LD BC, (1234)
.
Помимо различных в именах и несмотря на определенное несоответствие в данной структуре синтаксис Z80 и 8086 фактически изоморфен для большой части инструкций. Между языками ассемблера 8080 и 8086 существует лишь весьма внешнее (например, MOV или буква X для расширенного регистра), хотя программы 8080 могут быть переведены на язык ассемблера 8086 с помощью программ-переводчиков.
Z80 использует 252 из доступных 256 кодов как однобайтовые коды операций («корневая инструкция»); четыре используемых широко используемых: CB и ED включают дополнительные инструкции, а DD или FD оставят выбирают IX + d или IY + d соответственно (в некоторых случаях без с нарушением d) вместо HL. Эта схема дает Z80 большое количество перестановок инструкций и регистров; Zilog позволяет работать с большинством программ 8080 на Z80 на 158 различных функциях инструкций, которые работают с Intel 8080. В документации Zilog инструкции далее группируются в следующие категории:
В исходном Z80 нет команд умножения. Различные размеры и варианты добавлений, сдвигов и поворотов несколько по-разному влиянию на флаги, в силу основных свойств изменения флага 8080 было скопировано. Бит P флаг четности 8080 (бит 2) называется P / V (четность / переполнение) в Z80, поскольку он служит дополнительной цели индикатора переполнения с дополнением до двух, отсутствующей в 8080. Арифметические инструкции на Z80 установил его для инструкций, а не контроля четности, в то время как побитовые инструкции по-прежнему используйте его как флаг четности. Этот новый флаг переполнения используется для всех новых специфичных для Z80 16-битных операций (ADC
, SBC
), а также для 8-битных арифметических операций, хотя 16-битные операции унаследованы от 8080 (ADD
, INC
, DEC
) не влияют на него. Кроме того, бит 1 регистра флагов (резервный бит на 8080) используется как флаг N, который указывает, была ли последняя выполненная арифметическая инструкция вычитанием или сложением. Версия Z80 инструкции DAA
(Decimal Adjust Accumulator для BCD арифметики) проверяет флаг N и ведет себя соответствующим образом, поэтому (гипотетическое) вычитание с последующим DAA
даст другой результат на старом 8080, на старом 8080, на Z80. Однако, скорее всего, это будет ошибочный код на 8080, поскольку DAA
был определен для добавления только на этом процессе.
Z80 имеет шесть новых инструкций LD
, которые могут загружать пары регистров DE, BC и SP из памяти и загружать память из этих трех пар регистров - в отличие от 8080. Как и на 8080, Инструкция по установке на флаги (за специальную загрузку регистров I и R). Результатом обычного кодирования (общего с 8080) является то, что каждый из 8-битных регистров может быть загружен сам по себе (например, LD A, A
). Фактически это NOP
.
Новые инструкции передачи блоков могут перемещать до 64 килобайт из памяти в память или между памятью и периферийными портами ввода-вывода. Инструкции блока LDIR
и LDDR
(LoaD, Increment / Decrement, Repeat) используют HL для указания на адрес источника, DE на адрес назначения и BC в счетчика байтов. Байты копируются из источника в место назначения, увеличиваются или уменьшаются, а счетчик байтов уменьшается до тех пор, пока BC не достигнет нуля. Неповторяющиеся версии LDI
и LDD
перемещают один байт и увеличивают указатели и счетчик байтов, который, если становится нулевым, сбрасывает флаг P / V. Соответствующие инструкции преобразования ввод в вывод INIR
, INDR
, OTIR
, OTDR
, INI
, IND
, OUTI
и OUTD
работают аналогично. Z80 может вводить и выводить любой регистр в порт ввода / вывода, используя регистр C для обозначения порта (8080 ввод / вывод только через аккумулятор A).
Последняя группа инструкций блока выполняет сравнение CP
между байтом в (HL) и сумматором A. Регистровая пара DE не используется. Повторяющиеся версии CPIR
и CPDR
завершаются только в том случае, если BC обнуляется или обнаруживается совпадение. HL слева указывает на байт после (CPIR
) или перед (CPDR
) совпадающего байта. Если совпадение не найдено, флаг Z сбрасывается. Существуют неповторяющиеся версии CPI
и CPD
.
В отличие от 8080, Z80 может перейти к относительному адресу (JR
вместо JP
) с использованием 8- битного с соразмером знаком. Для этих новых двухбайтовыхций JR
можно тестировать только флаги нуля и переноса. Двухбайтовая инструкция, предназначенная для циклического выполнения программы, также является новой для Z80. DJNZ
(переход с уменьшением, если не равен нулю) принимает 8-битное смещение со знаком как непосредственный операнд. Регистр B уменьшается. Если результат не равен нулю, то выполнение программы перескакивает относительно адреса ПК плюс смещение. Флаги остаются без изменений. Чтобы выполнить эквивалентный цикл на 8080, потребовались бы отдельные инструкции декремента и перехода (к двухбайтовому адресу), и регистр флага был бы изменен.
Инструкции индексного регистратора (IX / IY, часто сокращенно XY) могут быть полезны для доступа к данным, организованным в фиксированные гетерогенные структуры (например, записи ) или с фиксированными базовыми смещениями относительно соответствующих адресов (как в рекурсивном кадрах стека ), а также может уменьшить размер кода, устраняя необходимость в нескольких коротких инструкциях с использованием неиндексированных регистров. Однако, хотя они могут сэкономить скорость в некоторых контекстах по сравнению с постоянными / сложными «эквивалентными» последовательностями более простых операций, они требуют много дополнительного времени ЦП (например, 19 T-состояний для доступа к одной индексированной ячейке против всего лишь 11 для доступа к той же памяти с помощью HL и INC
для перехода к следующему). Таким образом, для простого или линейного доступа к данным IX и IY обычно медленнее и занимает больше памяти. Тем не менее, они могут быть полезны в случаях, когда все «основные» регистры заняты, поскольку устраняет необходимость включения / восстанавливать регистры. Их официально недокументированные 8-битные половинки (см. Ниже) могут быть особенно полезны в этом контексте, поскольку они несут меньшее замедление, чем их 16-битные родители. Точно так же инструкции для 16-битного сложения не очень быстрые (11 тактов) в оригинальном Z80; тем не менее, они примерно в два раза быстрее, чем выполнение тех же вычислений с использованием 8-битных операций, и, что не менее важно, они сокращают использование регистров. Программисты нередко «вставляли» разные (обычно вычисляемые динамически) байты с ущербом в индексированные инструкции; это пример самогоодифицируемого кода, который был регулярной практикой почти на всех ранних 8-битных процессорах с не- конвейерными исполнительными модулями.
Индексные регистры имеют параллельную инструкцию для JP (HL)
, то есть есть JP (XY)
. Это часто наблюдается в стек-ориентированных языках, таких как Forth, которые в конце каждого слова Forth (атомарные подпрограммы, составляющие язык) должны безоговорочно возвращаться к своим подпрограммам интерпретатора потоков. Обычно эта инструкция появляется в приложении много сотен раз, и в пространстве JP (XY)
вместо JP THREAD
каждый раз сохраняется байт и два t-состояния. Это, естественно, делает индексный регистр недоступным для любого другого использования, иначе постоянно перезагружать его снизит его эффективность.
Новейшая на 10 лет конструкция Z180 с микрокодированием изначально могла позволить себе большую «площадь микросхем», позволяя немного более эффективную работу (с использованием более широкого ALU, вещи); то же самое можно сказать о Z800, Z280 и Z380. Только после того, как в 2001 году был запущен полностью конвейерный eZ80, эти инструкции, наконец, стали примерно столь же циклически эффективными, насколько это технически возможно, т. Е. С учетом кодирования Z80 в сочетании с выполнять 8-битное чтение или запись в каждом тактовом цикле.
Индексные регистры IX и IY предназначались как гибкие 16-битные указатели, расширяющие возможность управления памятью, кадрами, стека и структуры данных. Официально они считались только 16-битными. На самом деле они были реализованы как пара 8-битных регистров таким же образом, как регистр HL, который доступен либо как 16-битный, либо отдельно как регистры высокого и низкого уровня. Двоичные коды операций (машинный язык) были идентичны, но им предшествовал новый префикс кода операции. Zilog опубликовал коды операций и соответствующих мнемонику для предполагаемых функций, но не задокументировал тот факт, что каждый код операции, позволяющий манипулировать регистрами H и L, одинаково действителен для 8-битных частей регистров IX и IY. Например, код операции 26h, за которым следует непосредственное значение байта (LD H, n)
, загрузит это значение в регистр H. Предшествие этой двухбайтовой инструкции префиксу кода операции регистра IX, DD вместо этого привело бы к загрузке 8 старших битов регистра IX с тем же значением. Заметным исключением из этих правил могут быть инструкции, инструкции LD H, (IX + d)
, которые используют регистры HL и IX или IY в одной инструкции; в этом случае префикс DD использует только к части инструкции (IX + d). Половинки регистров XY могут также содержать операнды для 8-битных арифметических, логических и сравнительных инструкций, оставляя обычные 8-битные регистры для другого использования. Недокументированная возможность увеличить и уменьшить верхнюю половину индексированного регистратора позволила расширить диапазон обычных индексированных показателей, не прибегая к законным ADD / SBC XY, DE
или ADD / SBC XY, BC
.
Есть еще несколько недокументированных инструкций. Недокументированные или недопустимые коды операций не обнаруживаются Z80 и имеют различные эффекты, некоторые из которых полезны. Однако, поскольку они не являются частью формального определения набора команд, разные реализации Z80 не гарантируют одинаковую работу для каждого недокументированного кода операции.
Инструкция OTDR
не соответствует документации Z80. Предполагается, что обе инструкции OTDR
и OTIR
не изменяют флаг переноса (C). Команда OTIR
работает правильно; однако во время выполнения инструкции OTDR
флаг переноса принимает результаты ложного сравнения между аккумулятором (A) и последним выводом инструкции OTDR
.
Следующий исходный код на языке ассемблера Z80 предназначен для подпрограммы с именем memcpy
, которая копирует блок байтов данных заданного размера из одного места в другое. Важно: пример кода не обрабатывает определенный случай, когда целевой блок перекрывает источник; фатальный баг. Образец кода крайне неэффективен и предназначен для иллюстрации различных типов инструкций, а не для демонстрации лучших практик по скорости. В частности, Z80 имеет одну инструкцию, которая будет выполнять весь цикл (LDIR
). Блок данных копируется по одному байту за раз, а логика перемещения данных и цикла использует 16-битные операции. Обратите внимание, что собранный код двоично совместим с процессорами Intel 8080 и 8085.
1000 1000 1000 78 1001 B1 1002 C8 1003 1A 1004 77 1005 13 1006 23 1007 0B 1008 C3 00 10 100B | ; memcpy -; Скопируйте блок памяти из одного места в другое. ; ; Регистры входа; BC - количество байтов для копирования; DE - адрес блока исходных данных; HL - адрес целевого блока данных; ; Регистры возврата; BC - Zero org 1000h; Начало в 1000h. Открытый цикл memcpy ld a, b; Test BC, or c; Если BC = 0, ret z; Return ld a, (de); Load A from (DE) ld (hl), a; сохранить A в (HL) inc de; увеличить DE inc hl; увеличить HL dec bc; уменьшить цикл BC jp; Повторить конец цикла |
Выполнение каждого выполняется шагами, которые обычно называют машинными циклами (M-циклами), каждый из которых может занимать от трех до шести так периоды (Т- циклы). Каждый M-цикл примерно соответствует одному обращению к памяти или внутренней операции. Многие инструкции заканчиваются во время M1 инструкции, которая известна как перекрытие выборки / выполнения.
Всего M-циклов | инструкция | M1 | M2 | M3 | M4 | M5 | M6 |
---|---|---|---|---|---|---|---|
1 | INC BC | код операции | |||||
2 | ADD A, n | код операции | n | ||||
3 | ADD HL, DE | код операции | внутренний | внутренний | |||
4 | SET b, (HL) | префикс | код операции | R (HL), установите | W (HL) | ||
5 | LD (IX + d), n | префикс | код операции | d | n, добавьте | W (IX + d) | |
6 | INC (IY + d) | префикс | код операции | d | добавить | R (IY + d), inc | W ( IY + d) |
Циклы машины Z80 упорядочены внутренним конечным автоматом , который строит каждый M-цикл из 3, 4, 5 или 6 T-циклов в зависимости от контекста. Это позволяет избежать громоздкой асинхронной логики и обеспечивает согласованное поведение управляющих сигналов в широком диапазоне тактовых частот. Это означает, что необходимо использовать кристалл с более высокой степенью, чем без этого разделения машинныхлов (в 2–3 раза выше). Это не подразумевает более жестких требований к , поскольку часы с высоким разрешением позволяют более контролировать тайминги памяти, и поэтому память может быть точно активна с ЦП в большей степени, что позволяет более эффективно использовать доступная пропускная способность способность памяти.
Одним из центральных примеров этого является то, что для выборки кода операции Z80 объединяет два полных тактовых цикла в период доступа к (сигнал M1). В Z80 этот сигнал длится относительно большую часть типичного времени выполнения инструкций, чем в конструкции, такой как 6800, 6502 или аналогичных, где этот период обычно длится 30-40% такта. Учитывая доступность микросхемы памяти (то есть время доступа около 450-250 нс в 1980-е), как правило, максимально возможное время доступа, это означало, что такие конструкции были привязаны к значительно более длительному тактовому циклу (то есть есть более низкой внутренней тактовой частоты), чем Z80..
Память была обычно медленной по сравнению с субциклами конечного автомата (тактовыми циклами), используемыми в современных микропроцессорах. Поэтому кратчайший машинный цикл, который можно было безопасно использовать во встроенных конструкциях, ограничивался временем доступа к памяти, с невысокой точностью процессора (особенно в эпоху домашних компьютеров). Однако это отношение медленно менялось в течение последних десятилетий, особенно в отношении SRAM ; Поэтому безкешные конструкции с одним циклом, такие как eZ80, в последнее время стали гораздо более значимыми.
Содержимое регистрационного обновления R отправляется по нижней половине адресной шины вместе с сигналом управления обновлением, в то время как ЦП декодирует и выбранную команду. Во время обновления содержимого прерывания я отправляется в верхнюю половину адресной шины.
Zilog представила ряд периферийных компонентов для Z80, которые входят в систему обработки прерываний Z80 и адресное пространство ввода-вывода. К ним относящегося счетчика / таймера (CTC), SIO (последовательный ввод прямой-вывод), DMA (доступ к памяти), PIO (параллельный ввод-вывод) и DART (передатчик с двойным асинхронным приемником). По мере развития продуктов были представлены маломощные, высокоскоростные и CMOS версии этих микросхем.
PIO Z84C2008
CTC Z84C3008
SIO Z84C4008
Подобно процессорам 8080, 8085 и 8086, но в отличие от таких процессоров, как Motorola 6800 и MOS Technology 6502, Z80 и 8080 имеют отдельную линию управления и адресное пространство для инструкций ввода-вывода. В то время как некоторые компьютеры на базе Z80, такие как Osborne 1, использовали устройства ввода / вывода «в стиле Motorola» с отображением, обычно пространство ввода / вывода использовалось для адресации одного из многих Периферийные микросхемы Zilog, совместимые с Z80. Микросхемы ввода-вывода Zilog поддерживает новый режим 2 прерывания Z80, который упрощает обработку прерываний для большого количества периферийных устройств.
Официально Z80 был описан как поддерживающий 16-битную (64 КБ) адресацию памяти и 8-битную (256 портов) адресацию ввода-вывода. Все инструкции ввода-вывода фактически подтверждают 16-битную адресную шину. OUT (C), reg и IN reg, (C) помещает содержимое всего 16-битного регистра BC на адресную шину; OUT (n), A и IN A, (n) помещает содержимое регистратора A в b8-b15 адресной шины и n в b0-b7 адресной шины. Разработчик может выбрать декодирование всей 16-битной адресной шины при операциях ввода-вывода, чтобы использовать эту функцию, или использовать верхнюю половину адресной шины для выбора подфункций устройства ввода-вывода. Эта функция также использовалась для минимизации требований к аппаратному декодированию, например, в Amstrad CPC / PCW и ZX81.
Mostek, который произвел первый Z80 для Zilog, использует его в качестве второго источника как MK3880. SGS-Thomson (ныне STMicroelectronics ) тоже была вторым поставщиком со своим Z8400. Sharp и NEC разработали источники питания для NMOS Z80, LH0080 и µPD780C соответственно. LH0080 использовался в различных домашних компьютерах и компьютерах производства Sharp и других японских производителей, включая Sony компьютеры MSX и ряд компьютеров в Sharp MZ.
Toshiba создала CMOS-версию TMPZ84C00, которая считает (но не проверена) той же конструкцией, которая использовалась Zilog для своей собственной CMOS Z84C00. Также были чипы Z80 производства GoldStar (теперь LG ) и серия BU18400 клонов Z80 (включая DMA, PIO, CTC, DART и SIO) в NMOS. и CMOS производства ROHM Electronics.
В Восточной Германии был выпущен нелицензионный клон Z80, известный как U880. изготовлено. Он был очень популярен и использовался в компьютерных системах Роботрон и VEB Mikroelektronik Mühlhausen (таких как серия KC85 ), а также во многих самодельных компьютерных системах. В Румынии может быть найден другой нелицензированный клон, названный MMN80CPU и произведенный Microelectronica, используемый в домашних компьютерах, таких как TIM-S, HC, COBRA.
Кроме того, в Советском было создано несколько клонов Z80, наиболее известными из которых были КР1858ВМ1 (аналог советского 8080-клона KR580VM80A ). Первая маркировка использовалась в предсерийном производстве, а вторая была первая должность для более крупного производства. Однако из-за распада советской микроэлектроники в конце 1980-х годов T34BM1 намного больше, чем КР1858ВМ1.
Mostek Z80: MK3880
Toshiba Z84C00
Советский клон T34BM1 Z80
В конце 1970-х - начало 1980-х Z80 использовался в большом количестве довольно анонимных бизнес-ориентированных машин с операционной системой CP / M, комбинацией, которая доминировала на рынке в то время. Z80, работающие под управлением CP / M: Heathkit H89, портативный Osborne 1, серия Kaypro и серия Epson Q Х-10. Менее известный был дорогой высококлассный Отрона Атташе. В некоторых системах использовалось многозадачное программное обеспечение операционной системы (например, MP / M или Morrow's Micronix) для совместного использования одного процессора между пользователями.
A Sinclair ZX Spectrum, в котором использовался Z80 с тактовой частотой 3,5 МГц.Было представлено несколько домашних компьютеров, которые использовали Z80 в качестве основного процессора или в качестве дополнительного модуля для доступа к программному обеспечению, написанному для Z80.
В 1981 году компания Multitech (наиболее ставшая Acer ) представила Microprofessor I, простую и недорогую обучающую систему для микропроцессора Z80. В настоящее время он по-прежнему продается компанией Flite Electronics International Limited в Саутгемптоне, Англия.
Использование Z80 в более легких устройствах с батарейным питанием стало более распространенным с появлением CMOS версий процессора. Он также вдохновил на других процессоров на базе CMOS, таких как LH5801 от Sharp. Sharp PC-1500, BASIC -программируемый карманный компьютер был выпущен в 1981 году, за ним последовал улучшенный Sharp PC-1600 в 1986 г. и Sharp PC-E220 в 1991 г. Ноутбуки, на которых могла работать операционная система CP / M, как настольные компьютеры, последовавшие за Epson PX-8 Geneva в 1984 г., а в 1985 г. - Epson PX-4 и Bondwell-2. В то время как рынок ноутбуков в последующие годы перешел на более мощные процессоры Intel 8086 и операционная система MS-DOS, все еще предлагались облегченные системы на базе Z80 с более длительным временем автономной работы, такие как Cambridge Z88 в 1988 году и Amstrad NC100 в 1992 году. Производный от Z80 Z8S180 также нашел свое место в раннем с ручным управлением персональный цифровой помощник, Amstrad PenPad PDA600 в 1993 году. Гонконгская компания VTech произвела линейку небольших портативных компьютеров под названием «Лазеры» на базе Z80. Последними двумя были Laser PC5 и PC6.
Начало с TI-81 в 1990 году, Texas Instruments произвела длинную линейку графических калькуляторов на основе Z80. Серия TI-84 Plus, представленная в 2004 году, все еще находится в производстве по состоянию на 2020 год. В серии TI-84 Plus CE, представленной в 2015 году, используется производная от Z80 модель Процессор Zilog eZ80, который также находится в производстве по состоянию на 2020 год. TI также произвела линейку карманных органайзеров (завершенных в 2000 году), использующих процессоры Toshiba на базе ядра Z80; Первым из них был TI PS-6200, и после продолжительного производства нескольких десятков моделей кульминацией стала серия PocketMate. Более поздние модели органайзеров серии Sharp Wizard были основаны на Z80.
Zilog Z80 уже давно является популярным микропроцессором во встраиваемых системах и ядер микроконтроллера, где он и сегодня широко используется. Применения Z80 включает использование в бытовой электронике, промышленных продуктах и электронных музыкальных инструментах. Например, Z80 использовался в новаторском музыкальном синтезаторе Prophet-5, а также в первом MIDI-синтезаторе. Casio использовала Z80A в своем PV-1000 игровая консоль. Z80 использовался в консолях Master System и Game Gear. Sega Genesis содержит Z80, который управляет звуковыми чипами и обеспечивает обратную совместимость с играми Master System.
В конце 1980-х в серии советских стационарных телефонов под названием «АОН» был Z80; эти телефоны расширили набор функций стационарной линии с помощью мобильного устройства вызывающего абонента, различных рингтонов в зависимости от вызывающего абонента, быстрого набора и абонента. д.
В Викиучебнике есть книга на следующие темы: Сборка Z80 |
Викискладе есть носители, относящиеся к Zilog Z80. |