8-900-374-94-44
[email protected]
Slide Image
Меню

Система команд z80: Приложение 1. Система команд микропроцессора Z80 [Мозаика системного администрирования]

Zilog Z-80 — Бессмертный восьмидесятник / Хабр

Ранние годы эпохи персональных компьютеров, начавшиеся еще до появления легендарного IBM PC в 1981, во многом определили картину рынка, сложившуюся в следующем десятилетии, когда крепнущая Intel выводила на рынок продукты, едва ли не мгновенно обрастающие множеством совместимых аналогов – как более доступных, так и более продвинутых, технически интересных. Но еще задолго до того, как компании скрестили мечи в борьбе за покупателей первых 186 и их последователей, конкуренция коснулась и первого ключевого чипа в истории компьютерной индустрии – Intel 8080.


Intel 8080

Выход процессора Intel 8080 стал катализатором развития направления разработки и производства микропроцессоров, нашедших применение в самых различных областях и сферах. Выход различных 8-битных решений (таких, как Motorola 6800 или MOS Technologies 6502), а также производство полностью совместимых решений-клонов (производимых, в частности, и компанией AMD), определило потребности рынка в середине 70-х, что отчасти можно назвать и причиной появления Z-80.

Уволившись из Intel, Федерико Фаджин и Ральф Унгерманн стали обсуждать, какие продукты они могли бы разрабатывать. Унгерманна привлекала идея создания электронных пишущих машинок. А Фаджин хотел использовать концепцию оригинального микропроцессора 4004 в одночиповом микроконтроллере, который содержал бы все устройства памяти и ввода/вывода с процессором на одном кремниевом элементе.


Федерико Фаджин (слева) и Ральф Унгерманн

Слухи об этом дошли до журналистов из «Electronics News», и в очередном номере коммерческого журнала вышла большая статья о том, что Фаджин и Унгерманн собираются вместе заняться процессорным бизнесом.

Через неделю в офис, снятый ими в престижном районе Лос-Альтоса, что в нескольких милях от Пало-Альто, пришел неожиданный посетитель. Он представился сотрудником дочерней компании Exxon, крупнейшей в мире нефтяной компании, основанной для инвестирования в начинающие компании. Exxon Enterprises, как называлась его компания, заинтересовалась Фаджином и Унгерманном.

Если они хотят разрабатывать новый микропроцессор, фирма могла бы их поддержать.

Сделку заключили быстро. Компания получала контрольный пакет в 51% в обмен на 1,5 млн. долларов.

Унгерманн придумал неплохое название для нового бизнеса — «Zilog». Это означало, что компания считала себя «последним словом [Z] в интегральной [I] логике [LOG]».

Двумя месяцами позже Фаджину пришла в голову еще одна идея. Он следил за судьбой своего старого проекта — процессора Intel 8080. Из восторженных оценок коммерческих изданий, из того, что компании по всей Америке начинают его использовать, Фаджин понял, что было бы глупо не сделать капитал на волне подъема, начавшегося для микропроцессоров общего назначения. В декабре 1974 года он убедил Унгерманна оставить проект с контроллерами и переключиться на разработку усовершенствованной версии чипа 8080.

Пытаясь восстановить связи с Энди Гроувом, Фаджин приехал в Intel со своими идеями и предложил организовать производство улучшенного 8080-го по контракту с Intel. Однако его предложения были отвергнуты.

Позже к Фаджину с просьбой о приеме на работу обратился Масатоси Сима, инженер, контролировавший проект 4004, а затем перешедший в Intel. Поскольку Сима занимался разработкой подробного чертежа 8080-го, Фаджин с радостью пригласил его.


Масатоси Сима

Новый чип Zilog был создан быстрее, чем Фаджин и Унгерманн ожидали. Занимаясь чипом по 80 часов в неделю, Фаджин завершил разработку его архитектуры меньше чем за девять месяцев.
Поначалу Zilog объединяла только их троих, им помогали несколько чертежников, поэтому вопрос о собственном производстве чипа не стоял. Фаджин рисовал чертеж на миллиметровой бумаге грифелем; Сима следил за созданием шаблонов по чертежам. Готовый набор шаблонов отправляли на производство в компанию Mostek, отделившуюся от Texas Instruments, которая была в то время одним из сильнейших конкурентов Intel на рынке MOS-технологий. К марту 1976 года Zilog получила работающее устройство, способное завоевать мир.

Z-80 является однокристальным микропроцессором третьего поколения, оперирующим 8-разрядными данными и 16-разрядными адресами. Он содержал 8500 транзисторов и производился по 3-микронным технологическим нормам. Площадь кристалла составляла 22,54 мм2.
Максимальный объём прямо адресуемой памяти и прямо адресуемого пространства ввода вывода – по 64 Кбайта (пространство ввода-вывода микропроцессора 8080 составляет 256 байт).


Zilog Z-80

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

Выпускались микропроцессоры с различными рабочими тактовыми частотами от 2,5 до 8 МГц (у 8080A – 2,5 МГц), что обеспечивало очень высокое по тем временам быстродействие.
Наконец, на самом кристалле микропроцессора реализован счётчик регенерации динамической памяти, что позволяет резко сократить количество деталей в простых микрокомпьютерах по сравнению с 8080.

Микропроцессор Z-80 выпускался в 40-выводном DIP-корпусе, наиболее распространённом для восьмиразрядных микропроцессоров. В отличие от микропроцессора 8080 фирмы Intel, Z-80 для своей работы не требует специфических дополнительных схем (двухфазного тактового генератора и системного контроллера), что значительно упрощает конструкцию процессорного модуля. Кроме того, для работы Z80 требует единственное напряжение питания +5 В вместо трёх напряжений для 8080 (+5, –5 и +12 В).

При цене всего в 200 долларов Z-80 оказался привлекательным и для отдельных потребителей, которые раньше проводили долгие ночи у любительского радиоприемника, а теперь, благодаря триумфу широкомасштабной интеграции схем, возились с электроникой. Z-80 позволил им впервые задуматься о том, чтобы самим собрать компьютер. В 1974 году компьютеров в мире было меньше, чем самолетов в 1997-м. Поэтому собирать в то время компьютер означало примерно то же, что сегодня строить на заднем дворе «Боинг-767». Впрочем, это было ненамного страшнее.

Потратив на разработку своего чипа 400 тыс. долларов, Zilog не могла себе позволить шедро оплачивать работу армии торговых агентов. Вместо этого компания купила место в журнале «Electronic News» и опубликовала серию рекламных статей.

Из-за распространения Z80 по всему миру, компания Zilog заключала множество контрактов на производство своих микропроцессоров в различных уголках света. После выхода на рынок в 1976 году основными партнерами в США стали компании Synertek и Mostek, производившие первые серии процессоров Z-80 (в конце 1976 года Zilog открыла собственные фабрики, и обеспечивала американский рынок Z80 своими силами). В Японии производство Z80 развернули такие компании, как Toshiba и Hitachi. Из-за невероятной популярности и спроса на Z80, многие производители аналогов работали без лицензии, поэтому суммарно менее половины всех произведенных Z-80 оказались лицензированной продукцией Zilog или её официальных партнеров.

В нашей стране Z80 известен прежде всего по игровым компьютером Sinclair Spectrum, чрезвычайно популярным во второй половине 1980-х годов.


Sinclair ZX Spectrum

Однако спектр применения этого микропроцессора был намного шире. В частности, именно он является “мозгом” французских противокорабельных ракет “Exocet” (в 1982 году такой ракетой аргентинский истребитель “Мираж” потопил английский эскадренный миноносец “Шеффилд” – один из наиболее современных на тот момент боевых кораблей).

Процессор Zilog Z80 не только стал невероятно популярен после выхода на рынок, но и показал себя рекордсменом-долгожителем, — на протяжении десятилетий он присутствует в различных системах в качестве одного из специализированных микропроцессоров, используется в компьютерных, портативных, и бизнес-системах самых различных уровней и предназначений. В 80-х годах он становился частью портативных систем, таких как Sharp PC-1500 и Cambridge Z88, в 90-е стал использоваться в инженерных калькуляторах семейства TI-81 от Texas Instruments.


TI-81

Его использовали и в качестве микропроцессора музыкальных инструментов (например, легендарной MIDI-клавиатуры Prophet-5), а многие встроенные системы до сих пор содержат легендарный микропроцессор в составе своих решений.


Prophet-5

Спустя более чем 40 лет с момента появления на рынке, Zilog Z80 был и остается незаменимым в десятках различных компьютерных систем, и может служить примером того, как компьютерные технологии, появившиеся на заре эпохи персональных компьютеров, всё еще остаются частью нашей повседневной жизни.

Наш видеоролик на основе статьи — ТЫК

Автор статьи Александр Лис.

Микропроцессор Z80 его структура и система команд

Московский Институт Электроники и Математики (технический университет) Кафедра ИТАС РЕФЕРАТ по курсу : “ЭВМ и периферийные устройства” на тему: Микропроцессор Z80 его структура и система команд. Выполнил: студент группы АП-41 Завалишин Е.

А. МОСКВА 1998 Архитектура микропроцессора Z-80 Архитектура микропроцессора Z-80 фирмы ZILOG основывается на архитектурных принципах микропроцессора 8080 и позволяет выполнять все 78 команд этого микропроцессора, а также 80 дополнительных команд. Всего микропроцессор Z-80 имеет 696 кодов операций (в отличие от 244 кодов микропроцессора 8080). К числу особенностей микропроцессора Z-80 относятся: использование для питания лишь одного источника напряжением “+5В”, наличие однофазного внешнего синхрогенератора, 17 внутренних регистров и встроенная схема регенерации ОЗУ. НАЗНАЧЕНИЕ ВЫВОДОВ. Микропроцессор Z-80 — это микросхема с 40 выводами, пронумерованными от 1 до 40. Рассмотрим функции выводов. Вывод 11 напряжение питания +5в. Вывод 29- общий. Вывод 06- тактовый вход. В SPECTRUMe используется тактовая частота 3.5 Мгц. Вывод 07-10, 12-15- информационная шина. Вывод 1-5,30-40- адресная шина. Оставшиеся 13 выводов присоединены к линиям, которые несут управляющие сигналы. Вывод 21- линия считывания RD.
Эта линия становится активной, когда байт информации должен быть считан из памяти или порта. Вывод 22- линия записи WR. Эта линия активна, когда байт информации должен быть записан в память или в порт. Вывод 19- запрос памяти MREQ. Эта линия активна в тех случаях, когда требуется обращение к памяти. Байт информации считывается из памяти в соответствии с адресом, помещенным на адресной шине. Далее, в соответствии с откликом на сигналы RD и MREQ, байт информации поступает на информационную шину, с которой эта информация в дальнейшем считывается микропроцессором. Для записи байта данных в память микропроцессор помещает требуемые адреса на адресную шину и требуемую информацию на шину данных. Сигналы MREQ и WR активизируются, и байт данных записывается в память. Вывод 28- линия регенерации RFSH. Она используется для регенерации динамической памяти. Частично используется для формирования TV сканирующих сигналов. Вывод 27- активизируется при выполнении

Эниология как паранаука

Омонимы в русском языке

Деловой этикет

Шпаргалки по БЖД к экзамену

Наладка системы и монтаж

Микропроцессор Z80

   

Навигация
Дом
электронная почта

Предыстория
История CP/M
Архитектура CP/M

Использование CP/M
Команды и CCP
Программирование с помощью BDOS
Интерфейс BIOS

ЦП Z80
Архитектура Z80
Набор инструкций Z80

Программные средства
Установка эмулятора
Zip, ark, crunch и urgh
Редакторы, ассемблеры, отладчики

Установка CP/M
Сборка биоса
Замена БДОС
Замена КПК

Справочник
Карта памяти
Структуры данных
Глоссарий

 

История

В 1969 году японская компания Busicom обратилась к Intel с просьбой произвести микросхемы для настольного электронного калькулятора Busicom. Intel предположила, что калькулятор должен быть построен на основе однокристального универсального вычислительного механизма, и таким образом родился первый микропроцессор — 4004. Хотя он был основан на идеях гораздо более крупных мейнфреймов и мини-компьютеров, 4004 был урезан, чтобы поместиться в 16-контактный чип, самый большой из доступных в то время, так что его шина данных и адресная шина имели ширину всего 4 бита каждая.

Intel продолжила улучшать дизайн и выпустила 4040 (улучшенный 4-битный дизайн), 8008 (первый 8-битный микропроцессор), а затем в 1974 году 8080. Последний оказался очень полезным и популярным дизайном и использовался в первом домашнем компьютере Altair 8800 и CP/M.

В 1975 году Федерико Фаггин, который работал в Intel над процессором 4004 и его преемниками, покинул компанию и объединил усилия с Масатоши Шимой, чтобы сформировать Zilog. В своей новой компании Фаггин и Шима разработали микропроцессор, который был совместим с Intel 8080 (он выполнял все 78 инструкций 8080 точно так же, как чип Intel), но имел гораздо больше возможностей (дополнительные 120 инструкций, гораздо больше регистров, упрощенное подключение к оборудованию). Так родился могучий Z80!

Оригинальный Z80 был впервые выпущен в июле 1976 года. С тех пор появились более новые версии с точно такой же архитектурой, но работающие на более высоких скоростях. Оригинальный Z80 работал с тактовой частотой 2,5 МГц, Z80A — 4 МГц, Z80B — 6 МГц, а Z80H — 8 МГц.

Многие компании производили машины на основе усовершенствованного чипа Zilog в 1970-х и 80-х годах, и поскольку чип мог запускать код 8080 без каких-либо изменений в коде, идеальным выбором операционной системы была CP/M.

Итак, давайте погрузимся в Z80 и посмотрим, что внутри…

8-битные данные, 16-битные адреса

Z80 использует 8-битные байты, которые хранятся в памяти. Эти байты содержат как программу, которую выполняет процессор, так и элементы данных, над которыми работает программа. Процессор использует 16-битные адреса для доступа к этим байтам, поэтому может быть что угодно до 64 КБ (65536) байт памяти. Сколько памяти на самом деле доступно, и какая ее часть доступна только для чтения (ПЗУ) или с произвольным доступом (ОЗУ) варьируется от одной машины к другой: в простом контроллере может быть всего 4 КБ ПЗУ для хранения программы и 1 КБ ОЗУ для хранения программы. элементы данных; в большой системе CP/M вы найдете полные 64 КБ ОЗУ.

Процессор также использует отдельные 64k адресов для устройств ввода и вывода. Это адресное пространство ввода-вывода используется только несколькими инструкциями (что неудивительно, называемыми IN и OUT) для отправки или получения байтов от устройств ввода-вывода. Адреса для инструкций ввода-вывода используют ту же проводку, что и адреса для памяти, а байты данных проходят по той же проводке, которая используется для байтов в памяти, поэтому процессор использует специальные управляющие сигналы, чтобы различать доступ к памяти и операции ввода-вывода. Эти управляющие сигналы должны декодироваться устройствами ввода-вывода вместе с адресами, отправляемыми процессором, чтобы устройства не реагировали ошибочно на запросы, предназначенные для чтения или записи байтов в памяти.

Модель программиста

Все программирование Z80 вращается вокруг его внутренних регистров. Эти регистры используются для управления потоком программы и для работы с элементами данных. Внутри процессора есть 16-битные регистры, которые адресуют байты программы в памяти, и есть 8-битные регистры, в которые загружаются байты данных и затем обрабатываются. Эти 8-битные регистры также можно комбинировать попарно для формирования 16-битных адресов, и эти адреса можно использовать для индексации структур данных в памяти, занимающих несколько байтов.

Поток управляющих регистров

Z80 использует 16-битный программный счетчик (ПК) для хранения адреса памяти следующей инструкции для выполнения. Этот регистр постепенно перемещается по памяти по мере выполнения инструкций, но некоторые инструкции могут изменить его напрямую, чтобы заставить поток программы перейти в новое место.

Z80 также поддерживает вызовы подпрограмм с помощью указателя стека (SP). Когда вызывается подпрограмма, содержимое PC помещается в ячейку памяти, на которую указывает SP, а указатель стека уменьшается. Когда подпрограмма завершает выполнение, указатель стека увеличивается, и содержимое ПК выталкивается обратно из ячейки памяти. Таким образом, вызовы подпрограмм могут быть вложены на любую глубину, если есть место для помещения счетчика программ в память для каждого вызова.

Z80 также содержит флаги для управления потоком программы. Флаги изменяются всякий раз, когда выполняется арифметическая операция, и флаги можно проверять по одному с помощью инструкций перехода, чтобы изменить ход программы в зависимости от состояния флага. Флаги записывают знак (S), ноль (Z), половинный перенос (H), четность (P) и перенос (C) результата последней арифметической инструкции, и все это можно проверить с помощью инструкций перехода. Существует также флаг, который записывает, была ли последняя арифметическая операция сложением или вычитанием (N), которое используется только для десятичной арифметики. Эти шесть флагов хранятся в одном байте (F), а биты 3 и 5 не используются.

8-битные регистры данных

Процессор Z80 содержит 14 регистров общего назначения, которые можно использовать для хранения байтов данных и управления ими. Каждый из этих регистров имеет ширину 8 бит и называется A, B, C, D, E, H, L, A’, B’, C’, D’, E’, H’, L’.

Как следует из их названий, регистры разделены на два набора. Первый набор — это регистры A..L, а второй набор, называемый альтернативными регистрами, — это A’..L’. Большинство операций в процессоре работают только с первым набором, а альтернативные просто предоставляют временное пространство для сохранения содержимого A..L. Z80 имеет короткие инструкции, которые обменивают содержимое рабочих регистров на содержимое альтернативных. Конечно, это временное пространство может быть легко выделено в памяти, но в приложениях, где время имеет решающее значение, намного быстрее заменить рабочие регистры и альтернативы, чем сохранять рабочие регистры, а затем загружать новые значения из памяти.

После того, как данные загружены в рабочие регистры, Z80 имеет полный набор арифметических, логических, операций сдвига и циклических инструкций для обработки 8-битных байтов. Результаты этих операций обычно попадают в регистр А (аккумулятор), откуда их можно переместить в другие регистры или сохранить обратно в ячейки памяти.

В некоторых инструкциях флаги обрабатываются как один байт, который называется регистром F.

16-битные адресные регистры

Z80 содержит два типа 16-битных регистров адресации: пары регистров и индексные регистры.

Пары регистров формируются из комбинаций 8-битных регистров общего назначения. Z80 допускает три комбинации: регистры B и C могут быть объединены в 16-битный регистр, который называется BC, регистры D и E объединены в DE, а H и L объединены в HL.

Эти пары регистров могут использоваться для некоторых ограниченных 16-битных арифметических действий (сложение, вычитание, увеличение, уменьшение), но обычно они используются в качестве указателей на данные в памяти. Набор инструкций сильно ориентирован на использование HL в качестве указателя данных. Многие арифметические инструкции могут комбинировать аккумулятор A с байтом в памяти, на который указывает HL. Таким образом, байт в памяти не нужно загружать во внутренний регистр, прежде чем он будет объединен с аккумулятором, сохраняя инструкции и место в регистре.

Процессор также содержит два индексных регистра (IX и IY), которые можно использовать для адресации данных в памяти. Эти регистры работают так же, как пара регистров HL, поскольку многие инструкции могут использовать байт, к которому обращаются IX или IY, в качестве операнда. Однако, в отличие от HL, перед обращением к памяти к значению в индексном регистре добавляется смещение. Это смещение содержится в инструкции, использующей IX или IY, и представляет собой 8-битное значение. Это помогает программисту создавать причудливые структуры данных в памяти, используя индексный регистр для указания на начало структуры и 8-битное смещение для выбора полей внутри структуры.

Аппаратные регистры

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

Прерываниями можно управлять с помощью двух флагов (IFF.1 и IFF.2) и 8-битного указателя страницы (I). Программист может включать и отключать некоторые прерывания, устанавливая и сбрасывая IFF. 1. Когда происходит прерывание, текущее содержимое IFF.1 сохраняется в IFF.2, а затем IFF.1 устанавливается таким образом, что дальнейшие прерывания запрещены. Когда программа завершает обработку прерывания, IFF.2 копируется обратно в IFF.1, восстанавливая исходное значение флага.

Набор инструкций

Эти ссылки приведут вас к таблицам с подробным описанием инструкций Z80. Они разбиты на группы похожих инструкций:

8-битная загрузка и сохранение — использование регистров общего назначения
16-битная загрузка и сохранение — использование пар регистров, индексных регистров и указателя стека

1-битная арифметика — немного установить, немного очистить, немного протестировать

8-битная арифметика — сложение, вычитание, И, ИЛИ и т. д.
8-битный сдвиг и поворот — сдвиг влево, сдвиг вправо, поворот, вставка бита переноса и т. д.

16-битная арифметика — сложение, вычитание, увеличение, уменьшение

Управление флагами — установка флага переноса, сброс переноса, включение и отключение прерываний
Поток программы — переход, условный переход, вызов подпрограммы

Ввод/вывод — ввод байта, вывод байта
Блочные инструкции — перемещение блока памяти, поиск блока памяти, ввод или вывод блока

3 августа 1998 г. , 22:38:42

Удивительный Zilog Z80

В последние несколько месяцев я заинтересовался (или, скорее, одержим) 8-битным эмуляция домашнего компьютера и «компьютерная археология», что является просто красивым термином для просеивания через ранние-90, давно заброшенные группы USENET и PDF-файлы старых компьютерных руководств и принципиальных схем, обработанные с помощью OCR.

Одним из результатов этой одержимости является новый эмулятор восточногерманского 8-битного компьютеры, работающие в браузере через emscripten: http://floooh.github.io/virtualkc/.

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

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

Heart and Soul

Сердцем каждого эмулятора является процессор. Возможно, это не самая сложная часть, но определенно самый утомительный и скучный для написания, в основном потому, что есть ничего не видно уже давно. Эмулированный процессор, который только что был подключен к какому-то память и запуск небольших тестовых программ — это как мозг в банке, он может «жить», но без связи с миром руками, глазами, ушами и ртом его не делает человека. То же самое с эмулируемым процессором. Он может работать и обрабатывать инструкции, изменяя свое внутреннее состояние, но без души — система ROM — и способ общения с внешним миром это будет не эмулятор.

И эмуляция ЦП должна быть почти завершена для успешной загрузки системы ROM, и этот этап разработки стоит многих вечеров без происшествий, но этот момент когда эмулятор загружается впервые и «что-то» происходит на экране, даже если это просто мерцающий пиксельный мусор… этот момент незабываем, и от тогда все остальное кажется легким, даже если действительно каверзные проблемы еще впереди.

8-битные войны

Итак, где я был… Z80 ! Наследник Intel 8080, заклятый враг M6502, поджигатель первых сражений в вечной фанбойской войне: Z80 vs. 6502, Commodore против Atari, Intel против Motorola, ПК против Mac, Xbox против Playstation!

Z80 был одним из двух «больших» восьмибитников конца 70-х и начала 80-х, а 6502 — другой. Интересно, что Intel был довольно многое отсутствует в гонке вооружений домашних компьютеров. Мир разделился на два, Z80 с машинами Sinclair, Amstrad и MSX с одной стороны, и 6502 с Commodore, Apple и Atari с другой.

У двух процессоров была очень разная философия дизайна, все, что касалось Z80 был большим и брутфорсным, регистров было много, инструкция огромная поставил и работал на частоте до 4 МГц. Модель 6502, с другой стороны, была маленькой, дешевой и (признаюсь даже как фанат Z80) — шикарно, с первого взгляда RISC виден на горизонте.

О, и у Nintendo Game Boy и Sega Master System тоже был Z80, так что я думаю можно с уверенностью сказать, что Z80 выиграл 8-битные войны в конце концов просто числом.

Чтобы понять Z80 имеет смысл сначала взглянуть на его внебрачного отца, Intel 8080:

От i8080 до Z80

Intel 8080 был выпущен в 1974 году и на первый взгляд выглядит как Z80 разрезан пополам. На самом деле Z80, конечно, больше похож на два Intel 8080. склеены вместе.

У i8080 уже есть парный набор 8-/16-битных регистров, который все еще расплывчато заметный в современных процессорах x86 42 года спустя, и который должен выглядеть странно знакомый всем, кто баловался ассемблерным кодированием x86:

 A F
    Б С => БК
    ДЭ => ДЭ
    В Л => ВЛ
                                       
             СП
             ПК
    флаги (F): SZ-H-P-C
 

С левой стороны расположены восемь 8-битных регистров: A,F,B,C,D,E,H,L. Два из тех особенные: A — аккумулятор, здесь результат алгоритмического инструкция хранится. F — флаговый регистр, который содержит состояние биты о результате предыдущих инструкций (например, если результат нулевой или отрицательный, или произошел перенос).

Остальные 8-битные регистры сгруппированы в 3 пары 16-битных регистров (BC, DE, HL), где HL используется как общий указатель памяти. Это оставляет два специальные 16-битные регистры SP (указатель стека) и PC (инструкция указатель).

8080 инструкций были закодированы одним байтом, при этом все 256 инструкций используемые слоты. Инструкции могут сопровождаться одним или двумя байтами непосредственного операнды.

В 1974 инженер по спецпроектам сбежал из секретного подполья Intel объектов и бежал в Советский Союз, где он основал OKB-Zilog для работа над программой секретного оружия, ведущая к разработке первого двуногий танк, «металлическая шестерня».

Хорошо, я выдумал, инженером Intel на самом деле был Федерико Фаггин, который руководил группа разработчиков i4004 (первая в мире коммерчески доступная микропроцессор), и он не перебежал в Советский Союз конечно, но основал Zilog как американскую компанию.

Z80 был выпущен в 1976 году и создан, чтобы стать убийцей 8080: полностью отсталый совместим для запуска доминирующей операционной системы CP/M, но с гораздо более мощный набор команд и больше регистров:

 A F AF'
    ВС => ВС ВС'
    ДЭ => ДЭ ДЭ'
    H L => HL HL '
                     
    я IX
    Р ИЮ
            СП
            ПК
    флаги (F): SZ-H-PNC
 

Появился новый «теневой банк регистров» AF’,BC’,DE’ и HL’. Эти регистры не доступен напрямую, но может быть очень быстро заменен их основным банком аналоги, например, инструкция EXX меняет местами BC,DE и HL с BC’,DE’ и HL’, всего за 4 цикла, что намного быстрее, чем запись или чтение даже одного регистра из памяти.

Далее идут два новых 16-битных «индексных регистра» IX и IY. Они позволяют мощно новый режим адресации «косвенный со смещением». Регистр IX или IY будет служить базовым указателем и 8-битным смещением, которое непосредственно закодировано в добавляется инструкция, чтобы получить окончательный 16-битный адрес.

Остальные усовершенствования банка регистров довольно неясны: регистр I является «вектором прерывания» для поиска таблицы переходов обработчика прерываний, а Регистр «R» — это «счетчик обновления памяти», и есть новый бит флага. «N» указывает, была ли последняя инструкция вычитанием. Все из этого на данный момент не очень интересны.

Следующим большим изменением стал расширенный набор инструкций. все становится интереснее, особенно для авторов эмуляторов:

Помните, что у Intel 8080 были однобайтовые коды операций, и все 256 возможных использовались коды инструкций. Как бы Z80 собирался втиснуть дополнительные слоты инструкций в уже полностью заполненное ведро? И как бы все эти дополнительные инструкции могут быть добавлены без увеличения производительности чипа. количество транзисторов несколько раз?

На первый взгляд ответ кажется простым и понятным, но под капюшонов ждет умопомрачительное (по крайней мере, для меня) чудо инженерной мысли, как максимально использовать очень ограниченные ресурсы, скрытые в темноте и недокументированные углы процессора.

Взлом внутри Взлом внутри Взлом

Простой и очевидный ответ, как расширить набор инструкций: через многобайтовые инструкции. Вместо кодирования всех инструкций в один байт, теперь есть коды операций с 2 ​​или даже 3 байтами инструкций. Это может быть за которым следует до 2 байтов непосредственного операнда, самые длинные инструкции может иметь длину 4 байта и выполняться за 23 цикла (самый быстрый 1-байтовый инструкции занимают 4 цикла).

Но подождите, как бы работала такая многобайтовая инструкция, если бы Intel 8080 уже были заполнены все 256 возможных слотов инструкций?

Ответ — первый начальный уровень: некоторые из этих слотов были избыточными и реализовал те же инструкции. Это были «альтернативные коды операций, которые должны не использоваться».

В 8080 было несколько таких избыточных слотов: 00 — официальный NOP инструкция (ничего не делать), но 08, 10, 18, 20, 28, 30 и 38 также были NOP. Все эти альтернативные NOP были заполнены новыми 1-байтовыми опкоды на Z80 (в основном относительные скачки), интереснее было 4 альтернативные байты кода операции в верхнем диапазоне инструкций:

Инструкция перехода по адресу JMP nn находится в шестнадцатеричном коде операции C3 (обе на i8080 и Z80), но на i8080 код операции CB также реализует JMP nn. И инструкция CALL nn (которая вызывает подпрограмму) на CD даже имеет 3 альтернативы в DD, ED и FD.

В Z80 эти 4-байтовые значения CB, DD, ED и FD используются как начальные байты для расширенных многобайтовых инструкций (конечно, если программа Intel 8080 использовала те альтернативные коды операций, которые она не запускала на Z80).

Разработчики Zilog хорошо использовали многобайтовые инструкции:

Префикс CB добавил полный набор инструкций по битовому сдвигу и вращению. (сегодня они распространены, но полностью отсутствуют в 8080), и заполнили остальное с инструкциями BIT, RES и SET, которые проверены, очищены и установлены отдельные биты.

В префиксы DD и FD добавлена ​​инструкция, использующая новый индексный регистр плюс режимы адресации со смещением (DD был для регистра IX и FD для регистра IY).

Наконец, в многобайтовую группу инструкций ED добавлена ​​так называемая «блочные инструкции» и меньшее количество оставшихся, например 16-битных инструкции сложения, вычитания и загрузки/сохранения.

«Блочные инструкции» были маленькими монстрами CISC. Возьмем, к примеру, Инструкция LDIR, что означает «Загрузить, увеличить и повторить»:

Она принимает исходный адрес в HL, целевой адрес в DE и 16-битный счетчик в ДО Н.Э. При выполнении LDIR загрузит байт с адреса, на который указывает HL, и сохранить его по адресу, на который указывает DE. Затем он увеличит HL и DE, уменьшите BC и повторите весь танец загрузки/сохранения/увеличения/уменьшения до тех пор, пока BC равен 0. Целый блок памяти может быть скопирован одной инструкцией! Копирование одного байта таким образом стоило 21 цикл, так что это было не совсем быстро, для нескольких десятков килобайт LDIR потребовалось бы несколько секунд.

А теперь последний вопрос головоломки: Как могли позволить себе конструкторы Z80 увеличить количество инструкций в несколько раз, не создавая монстра чип? Согласно Википедии, у 8080 было около 4,5 тыс. В Z80 было 8,5 тыс. транзисторов, даже не в два раза больше (не связанное с этим примечание: у 6502 было около 3,5 тыс. транзисторов).

Ответ кроется в недокументированном наборе инструкций:

Темная сторона Z80

Недокументированные части Z80 огромны и разнообразны. В то время У Intel 8080 было всего 11 «недокументированных» инструкций, вместо них у Z80 представил сотен новых недокументированных инструкций вместе с 2 недокументированных бита флага (в позициях 3 и 5), которые не были полностью понимался разработчиками эмуляторов вплоть до 2000-х годов.

Недокументированные инструкции в расширенных диапазонах FD и DD особенно интересны, они объясняют, как все эти проиндексированные инструкции использование регистров IX и IY может быть реализовано с минимальными затратами. дополнительное место на чипе:

Глядя на задокументированную индексную инструкцию , становится ясно, что индексные регистры IX и IY так или иначе связаны с регистром HL.

Например, коды операций для загрузки 16-битного значения в HL, IX и IY выглядят очень похоже:

 LD HL,nn => 21 n n
LD IX,nn => DD 21 n n
LD IY,nn => FD 21 n n
 

Байт кода операции 21 такой же, в расширенных версиях просто префикс байта DD и FD впереди.

То же отношение существует для инструкций, использующих новую адресацию индекса режимы, например:

 LD (HL),n => 36 n
LD (IX+d),n => DD 36 d n
LD (IY+d),n => FD 36 d n
 

Опять же, базовый код операции 36 идентичен, только байт префикса и добавлено смещение ‘d’.

Все базовые 1-байтовые коды операций, которые так или иначе используют HL, имеют свои аналоги, где IX и IY используются вместо HL.

Но в этих группах инструкций DD и FD есть огромные дыры. Большие площади кажутся просто неиспользуемыми в официальной документации Z80. Что лежит под эти неиспользуемые области?

Ответ — второй начальный уровень: все эти «неиспользуемые» слоты инструкций являются избыточными альтернативами «нерасширенным» базовым инструкциям!

Например, шестнадцатеричный код операции C6 — ADD A,n (добавьте 8-битное непосредственное значение к аккумулятор A):

 ADD A,n => C6 n
 

Код операции с префиксом DD C6 недокументирован, что он делает? Ответ: ДОБАВИТЬ А,Н! Она абсолютно идентична 1-байтовой инструкции, которая добавляет 8-битное непосредственное значение для A, то же верно для FD C6:

 DD C6 n => ADD A,n
FD C6 n => ДОБАВИТЬ A,n
 

Эти инструкции занимают больше циклов, чем их официальный 1-байтовый аналог, поэтому зачем они вообще существуют, зачем инженеры их «поставили»? Зачем тратить транзисторы для сотен совершенно бесполезных инструкций?

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *