Меню

Z80 система команд таблица



где r — а,в,с^,е ,h,l.

Вывод байта из регистра г в порт, адресуемый регистром ВС (С — младший байт адреса, а В — старший).

Вывод байта из ячейки памяти в порт с инкрементом. Байт считывается из ячейки памяти, адресуемой ре-
гистром HL, и пересылается в порт, адресуемый регистром ВС. После выполнения команды содержимое HL уве-
тачивается на единицу, значение В уменьшается на единицу. Если в результате выполнения команды регистр В
обнуляется, то устанавливается флаг Z, в противном случае Z=0.

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

Вывод байта из ячейки памяти в порт с декрементом. Байт считывается из ячейки памяти, адресуемой ре-
гистром HL, и пересылается в порт, адресуемый регистром ВС. После выполнения команды содержимое регист-
ров HL и В уменьшается на единицу. Если в результате выполнения команды В обнуляется, то устанавливается
флаг Z, в противном случае Z=0.

Вывод массива из памяти в порты с декрементом. Адреса портов задаются регистром ВС, начальный адрес
массива — регистром HL. Вывод осуществляется в сторону уменьшения адресов, количество передаваемых байт

равно значению регистра В. После передачи очередного байта содержимое регистров В и HL уменьшается на
единицу.

Недокументированные команды

При использовании 8-разрядной шины данных непосредственно можно реализовать только 25 6 ко-
дов команд (2 8 =256). Остальные 440 (696-256) кодов команд Z80 являются двухбайтными — первым
байтом кода в них стоит один из четырех префиксов: #СВ, #DD, #ED, #FD*. Следовательно, кроме
описанных 696 кодов команд возможно составить еще много вариантов «неучтенных» кодов. Выпол-
нение некоторых из них может привести к вполне осмысленным результатам. Эти коды составляют
так называемые недокументированные команды. В фирменных описаниях процессора эти команды не
приводятся, однако многие программисты пользуются ими: иногда для удобства, иногда из сооб-
ражений секретности (отладчики обычно «не берут» такие команды), иногда для позы, мол, по-
смотрите, какой я умный.

Чаще всего применяются недокументированные команды, работающие с частями индексных регист-
ров как с 8-разрядными регистрами общего назначения. Эти регистры, верней, части регистров
обозначаются IXh, 1X1 (старший и младший байты регистра IX) и IYh, IY1 (старший и младший
байты регистра IY).

Ниже приведены некоторые недокументированные команды Z8 0:

*)Байты #DD и #FD содержатся в кодах команд, работающих с индексными регистрами (IX и IY соответст-
венно); #СВ — в кодах команд, работающих с битами; #ED — в кодах остальных двухбайтных команд.

где r — А,В,С,В,Е или n;
d — IXh,IXl,IYh,IYl.

Этими командами удобно пользоваться, когда нужно загрузить индексный регистр из какого-
либо другого регистра. Например, вместо последовательности команд

PUSH DE ;запись в стеке содержимого регистра DE
POP IX ;загрузка регистра IX значением из стека

Хотя вторая последовательность команд занимает в памяти на один байт больше, время ее вы-
полнения меньше на 9 тактов процессора. Ниже приведены недокументированные команды, действие
которых не отличается от действия «нормальных» команд байтовой арифметики.

Например, для увеличения значения регистра IX на 25 6 можно использовать недокументирован-
ную команду INC IXh, выполнение которой эквивалентно работе целой программы:

PUSH DE ;сохранение содержимого регистра DE

LD DE,256 ;загрузка регистра DE значением 256

ADD IX,DE ;увеличение содержимого регистра IX

POP DE ;восстановление значения регистра DE

Приведем еще одну недокументированную команду, дополняющую группу команд сдвига:

Сдвиг содержимого регистра s влево на один разряд, в младший бит записывается 1, старший бит перепи-
сывается во флаг переноса CY.

Мы привели лишь несколько недокументированных команд микропроцессора Z8 0, надеемся, что
они будут Вам полезны. Если же Вас заинтересовали неизвестные возможности Z80, ничто не ме-
шает Вам поэкспериментировать самим.

Источник

Система команд микропроцессора Z80, используемого в игровых приставках SEGA

1.3. Система команд микропроцессора Z80, используемого в игровых приставках SEGA

Мнемоника Операнды Описание Изменяемые флаги

LD r1,r2r1 — А, В, C, D, E, H, L
r2-A,B,C,D, E, H,L,(HL), (|X+i8), (|Y+i8)Загрузка байта из регистра r1 8 r2

LD r1,d8r1 -A,B,C,D, E, H, L, (HL), (|X+i8), (|Y+iB)Загрузка байта d8 в r1

LD HL,ss-A,B,C,D, E, H,LЗапись s в ячейку, адресуемую порой HL

LD A,ss-(BC),(DE),(a16)Загрузка байта из s в аккумулятор

LD d,Ad-(BC),(DE),(a16)Запись байта из аккумулятора в d

LD A,I
Загрузка байта из регистра 1 в аккумуляторZ, P/V, S, N, Н
LD A,R
Загрузка байта из регистра R в аккумуляторZ, P/V, S, N, Н
LD I,A
Запись байта из аккумулятора в регистр IZ, P/V, S, N, Н
LD R,A
Запись байта из аккумулятора в регистр RZ, P/V, S, N, Н
LD r16,d16r16-BC,DE,HL,SP,IX,IYЗагрузить в регистровую пару r1 6 16-разрядное число d 16

LD r16,(a16)r16-BC,DE,HL,SP,IX,IYЗагрузка в регистровую пару r1 6 16-разрядного числа, расположенного в памяти по адресу a16

LD (a16),r16r16-BC,DE, HL, SP, IX, IYЗапись 16-разряднога числа из регистровой пары r16 в память по адресу а 16

LD SP,r16r16-HL,IX,IYКопирование содержимого регистра r16 в указатель стека

PUSH r16r16-BC,DE,HL,AF,IX,IYСохранение регистра r16 в стеке. Указатель стека уменьшается на 2

POP r16r16-BC,DE, HL, AF, IX, IYИзвлечение верхнего элемента стека в регистр r16. Указатель стека увеличивается на 2

EX DX,HL
Обмен содержимого регистровых пар HL и DE

EX SP,r16r16-HL,IX,IYОбмен содержимого регистра r16 и вершины стека. Указатель стека остается прежним

EX AF,AF
Переключение регистров А и F на альтернативный наборВсе
EXX
Переключение активного набора регистров (ВС, DE, HL)

LDI
Копирование байто из ячейки, адресуемой регистровой парой HL, в ячейку, адресуемую регистровой парой DE, увеличение HL и DE на 1 и уменьшение ВС на 1P/V, N, Н
LDR
Выполнение команды LDI, пако ВС не станет равно 0P/V, N, Н
LDD
Копирование байта из ячейки, адресуемой регистровой парой HL, в ячейку, адресуемую регистровой парой DE, уменьшение HL, DE и ВС на 1P/V, N, Н
LDDR
Выполнение команды LDD, пока ВС не станет равно 0P/V, N, Н
CPI
Сравнение содержимого ячейки, адресуемой регистровой порой HL, с аккумулятором, увеличение HL на 1 и уменьшение ВС на 1Z, P/V, S, N, H
CPIR
Повторение команды CPI, пока не будет найден байт, равный записанному в аккумуляторе, или ВС не станет равным 0Z, P/V, S, N, H
CPD
Сравнение содержимого ячейки, адресуемой регистровой парой HL, с аккумулятором и уменьшение HL и ВС на 1Z, P/V, S, N, H
CPDR
Повторение команды CPD, пока не будет найден байт, равный записанному в аккумуляторе, или ВС не станет равным 0Z, P/V, S, N, H
ADD A,ss-A,B, C,D,E,H,L,(HL), d8, (IX+i8),(IY+i8)Сложение A = A + sВсе
ADC A,ss-A,B,C,D, E, Н,L,(НL), d8, (IX+i8), (IY+i8)Сложение с учетом переноса A-A + s + CYВсе
SUB ss-A,B,C,D,E,H,L,(HL), d8, (IX+i8), (IY+i8)Вычитание А = A-sВсе
SBC A,ss-A,B,C,D,E, H, L, (HL), d8, (IX+i8), (IY+i8)Вычитание с учетом заема A = A-s-CYВсе
AND ss-A,B,C,D,E,H,L,(HL), d8, (IX+i8), (IY+ i8)Логическое И A = A&sВсе
OR ss-A,B,C,D,E,H,L,(HL), d8,(IX+i8),(IY+i8)Логическое ИЛИ А = А | sВсе
XOR ss-A,B,C,D,E, H, L, (HL), d8, (IX+i8), (IY+i8)Исключающее ИЛИ A=AXORsВсе
CP ss-A,B, C, D, E, H, L, (HL), d8, (IX+i8), (IY+i8)Сравнение. Флаги устанавливаются в соответствии с результатом операции А — s, содержимое регистров не меняетсяВсе
ADD HL,r16r16-BC, DE, HL,SP16-разрядное сложение HL = HL + r16С, N, Н
ADD IX,r16r16-BC, DE, IX, SP16-разрядное сложение с индексным регистром IХ = IХ +r16С, N, Н
ADD IY,r16r16-BC, DE, IX, SP16-разрядное сложение с индексным регистром IY=IY + r16С, N, Н
ADC HL,r16r16-BC, DE, HL, SP16-разрядное сложение с учетом переноса HL = HL+r16 + CYВсе
SBC HL,r16r16-BC, DE, HL,SP16-разрядное вычитание с учетом заемо HL = HL-r16-CYВсе
DAA
Коррекция результата (необходима при роботе с числами в двоично-десятичном коде)С, Z, P/V, S, Н
CPL
Инверсия числа в аккумулятореN, Н
NEG
Преобразование числа в аккумуляторе в дополнительный кодВсе
CCF
Инверсия флага переносаС, N, Н
SCF
Установка флага переносаС, N, Н
INC dd — А, В, C, D, E, H, L, (HL), (IX+i8), (IY+i8)Увеличение на 1
D = d + 1Z, P/V, S, N, Н
INC r16r16-ВС, DE, HL,SP, IX, IYУвеличение на 1
r16 = r16+ 1

DEC dd — А, В, C, D, E, H, L, (HL), (IX+i8), (IY+i8)Уменьшение на 1
D = d — 1Z, P/V, S, N, Н
DEC r16r16-BC, DE, HL,SP, IX, IYУменьшение на 1
r16 = r16- 1

RLCA
Циклический сдвиг содержимого аккумулятора влево на один разрядC, N, H
RLA
Циклический сдвиг содержимого аккумулятора влево на один разряд через флаг переносаC, N, H
RRCA
Циклический сдвиг содержимого аккумулятора вправо на один разрядC, N, H
RRA
Циклический сдвиг содержимого аккумулятора вправо на один разряд через флаг переносаC, N, H
RLC ss-A,B, C, D, E, H, L, (HL), (IX+i8), (IY+i8)Циклический сдвиг s влево на один разрядВсе
RL ss — А, В, C, D, E, H, L, (HL), (IX+i8), (IY+i8)Циклический сдвиг s влево но один разряд через флаг переносаВсе
RRC ss — А, В, C, D, E, H, L, (HL), (IX+i8), (IY+i8)Циклический сдвиг s вправо на один разрядВсе
RR ss-A,B, C, D, E, H, L, (HL), (IX+i8), (IY+i8)Циклический сдвиг s вправо но один разряд через флаг переносаВсе
SLA ss-A,B, C, D, E, H, L, (HL), (IX+18), (IY+18)Арифметический сдвиг s влево на один разрядВсе
SRA ss — А, В, C, D, E, H, L, (HL), (IX+i8), (IY+i8)Арифметический сдвиг s вправо на один разрядВсе
SRL ss — А, В, C, D, E, H, L, (HL), (IX+i8), (IY+i8)Логический сдвиг s влево на один разрядВсе
RLD
Циклический перенос влево полубайтов ячейки памяти, адресуемой регистровой парой HL, через младший полубайт аккумулятораZ, P/V, S, N, Н
RRD
Циклический перенос вправо полубайтов ячейки памяти, адресуемой регистровой парой HL, через младший полубайт аккумулятораZ, P/V, S, N, Н
BIT b,d
b-0-7
d — А, В, C, D, E, H, L, (HL), (IX+i8), (IY+i8)Z, P/V, S, N, Н
SET b,db-0-7
d-A,B,C,D,E, H, L, (HL), (IX+i8), (IY+iB)Установка бита с номером b в 8-разряднам числе в d

Читайте также:  Таблица посадки соединение вала и отверстия

RES b,db-0-7
d-A,B,C,D, E, H, L, (HL), (IX+i8),(IY+iB)Сброс бита с номером b в 8-разряднам числе в d

HALT
Остановка процессора. Рабата возобновляется после поступления запроса на прерывание

DI
Запрет обработки маскируемых прерываний

EI
Разрешение обработки маскируемых прерываний

IM nn-0,1,2Установка режима обработки маскируемых прерываний

CALL a16
Переход к подпрограмме. Адрес следующей команды сохраняется на вершине стека, указатель стека уменьшается на 2

CALL cc,a16cc-NZ,Z,NC,C,PO, PE,P, MВызов подпрограммы, если истинна условие сс

RET
Возврат из подпрограммы. Адрес берется с вершины стека, указатель стека увеличивается на 2

RETcccc-NZ,Z,NC,C,PO, PE,P, MВозврат из подпрограммы, если истина условие сс

RETI
Возврат из подпрограммы обработки маскируемого прерывания. Адрес берется с вершины стека, указатель стека увеличивается на 2, разрешается обработка прерываний

RETN
Возврат из подпрограммы обработки немаскируемого прерывания. Адрес берется с вершины стека, указатель стека увеличивается на 2, разрешается обработка прерываний

RST pp-00h,08h, 10h, 18h, 20h, 28h,30h,38hВызов подпрограммы, расположенной по фиксированному адресу р (программное прерывание). Адрес возврата сохраняется в стеке

JP a16
Переход по адресу а 16

JP cc,a16cc -NZ,Z,NC,C,PO, PE,P, MПереход по адресу а 16, если условие сс истинно

JP i8
Относительный переход. Новый адрес вычисляется как сумма значения из регистра PC и 8-разряднога смещения i8.
Смещение рассматривается как число со знаком

JP cc,i8cc-NZ, Z, NC, CОтносительный переход, если условие сс истинно

JP (r16)r16-HL, IX, IYПереход по адресу, содержащемуся в регистровой паре r16.

DJNZ iB
Из числа в регистре В вычитается 1. Если при этом не получен 0, то осуществляется относительный переход па смещению i8, если же В = 0, выполняется следующая за DJNZ команда

IN A,n8
Ввод байта из парта с адресам n8 и запись его в аккумулятор

IN r,(C)r — A, B, C, D, E, H, LВвод байта из парта, адрес которого задан в регистровой паре ВС, и его запись в регистр rZ,P/V,S,N,H
INI
Ввод байта из парта, адрес которого задан в регистровой паре ВС;
запись введенного байта в ячейку, адресуемую регистровой парой HL, увеличение HL на 1 и уменьшение числа в регистре В на 1Все
INIR
Выполнение команды INI, пока число в регистре В не станет равным 0Все
IND
Ввод байта из парта, адрес которого задан в регистровой паре ВС;
запись введенного байта в ячейку, адресуемую регистровой парой HL, уменьшение HL на 1 и уменьшение числа в регистре В на 1Все
INDR
Выполнение команды IND, пока число в регистре В не станет равным 0Все
OUT (n8),A
Вывод байта из аккумулятора в порт с адресом n8

OUT (C),rr-A,B,C,D, E, H,LВывод байта из регистра г в порт, адрес которого задан в регистровой паре ВС

OUTI
Вывод байта из ячейки памяти, адресуемой регистровой парой HL, в порт, адрес которого задан в регистровой поре ВС, увеличение HL на 1 и уменьшение числа в регистре В на 1Все
OTIR
Выполнение команды OUTI, пока число в регистре В не стонет ровным 0Все
OUTD
Вывод байта из ячейки памяти, адресуемой регистровой парой HL, в парт, адрес которого задан в регистровой паре ВС, уменьшение HL на 1 и уменьшение числа в регистре В на 1Все
OTDR
Выполнение команды OUTD, пока число в регистре В не стонет равным 0Все

Источник

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

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

image
Intel 8080

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

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

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

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

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

image

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

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

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

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

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

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

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

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

image
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-х годов.

image
Sinclair ZX Spectrum

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

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

image
TI-81

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

image
Prophet-5

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

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

Источник

Z80 система команд таблица

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

Запросы маскируемых прерываний поступают в микропроцессор по линии INT#. Внутренний триггер процессора IFF1 (Interrupt Flip Flop) используется для управления разрешением маскируемых прерываний Когда этот флаг сброшен, маскируемые прерывания запрещены.

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

RST 0h, RST 8h, RST 10h, RST 18h, RST 20h, RST 28h, RST 30h
и RST 38h

Добавлено (21.08.2015, 02:56)
———————————————
при аппаратном прерывании также происходит переход, но причиной перехода является появление сигнала INT —>(RST XX h)—>( )

Для управления режимами прерываний в процессоре имеются также
4 Флага которые отвечают за работу прерываний. в частности
Флаги IMFa и IMFb определяют режим работы маскируемых прерываний. Комбинации их состояний образуют разные режимы работы:

– 00 – режим совместимости с процессором 8080 (режим 0);
– 01 – не используется в Z80 ;
– 10 – режим одиночного вектора (режим 1);
– 11 – режим векторов, предоставляемых устройствами (режим 2).

Установка режимов осуществляется с помощью команд:

Команда IM0.
Код — ED 46. включение прерываний в режиме 0.

Команда IM1.
Код — ED 56. включение режима прерываний первого типа

Команда IM2.
Код — ED 5E. включение режима прерываний второго рода

IM — аббревиатура от английского Interrupt mode (тип прерывания.)

Команда EI. (Enable interrupts)
Код FB. Назначение — разрешение прерывания. После прохождения этой команды обработка прерываний разрешена.

Команда DI. (Disable interrupts)
Код — F3. Назначение — запрет прерываний. Она запрещает прерывания до тех пор, пока не пройдет команда EI.

Команда RET I.
Код — ED 4D. Эта команда аналогична команде RET (возврат после вызова подпрограммы), но выполняет двойную функцию:
• возврат из подпрограммы, обслуживающей маскируемое прерывание;
• управление приоритетом прерываний (в контроллерах прерываний)
Команда не снимает запрет на прерывания (не является аналогом EI)

Из документации -Z80.Instruction set (Zilog)
Description: This instruction is used at the end of a maskable interrupt service routine to:

• Restore the contents of the Program Counter (PC) (analogous to the
RET instruction)
The RETI instruction also facilitates the nesting of interrupts, allowing higher priority devices to temporarily suspend service of lower priority
service routines. However, this instruction does not enable interrupts
that were disabled when the interrupt routine was entered

Перевод –
Описание: Эта команда используется в конце процедуры обработки маскируемых прерываний.

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

Добавлено (21.08.2015, 02:56)
———————————————
При программировании следует учитывать неточности в самом процессоре.

В исполнении кристалла (Z80)по технологии NMOS в некоторых случаях триггер IFF2 неправильно отражает текущий статус прерываний.

При выполнении команд (LD A,R и LD A,I) происходит перезапись состояния триггера разрешения прерываний во флаг четности (P/V). Что позволяет определить статус прерываний . Если прерывание производится во время выполнения текущей команды (подразумевается, что прерывания разрешены), то флаг P/V будет очищен, что приведет к неправильному выводу о состоянии прерываний.

Использование прерываний в ZX Spectrum

По своей архитектуре микропроцессор Z-80 имеет возможность обработки двух видов прерываний — маскируемых и немаскируемых. Маскируемые прерывания делятся на три типа — прерывания типа 0, 1 и 2. Тип маскируемого прерывания устанавливается с помощью команд Ассемблера.

Z-80 имеет два входа для сигналов запроса прерываний — входы «INT» и «NMI».
На входе линии запроса прерывания «INT» (16 вывод микросхемы) внешнее устройство формирует сигнал низкого уровня, обращая «внимание» микропроцессора на этот сигнал. В ZX Spectrum сигнал «INT» формируется 50 раз в секунду. Если прерывания разрешены то запрос воспринимается
микропроцессор прерывает обычную обработку и переходит к выполнению необходимой процедуры прерывания. Реакция на запрос прерывания определяется флагом прерывания, поэтому прерывание может быть замаскировано. В программу могут вводиться команды, которые устанавливают или сбрасывают флажок прерывания и, следовательно, разрешают или запрещают его обработку. Что позволяет гибко реагировать на прерывания.

Добавлено (21.08.2015, 02:57)
———————————————
Описание режимов работы прерываний

Режим «IM 0». “Прерывания нулевого типа” — соответствует механизму обработки прерываний микропроцессора i8080. В этом режиме используются инструкции (RST 0…..38 Hex) в качестве вектора прерывания, факт подтверждения прерывания определяется по сигналам M1/ и IORQ/ .

Всего возможных векторов прерываний обычно восемь, в стандартном варианте, при использовании адресных линий А0-А2 эти вектора попадают на адреса рестартов процессора, т.e. на «RST0 — RST38H», которые уже задействованы в ПЗУ «СПЕКТРУМА», причем одна процедура «RST38H» служит для обработки прерываний. При использовании дополнительной логики (контроллера прерываний) Возможно использование других команд
(кроме RST)в качестве векторов прерываний, но на практике такой режим
Работы на базе (ZX Spectrum) никто не проверял.

Читайте также:  Ведущие капиталистические страны сша таблица

Добавлено (21.08.2015, 02:58)
———————————————
Режим «IM 1». Из книги “Программирование в машинных кодах”

После включения питания в ZX Spectrum устанавливается режим прерываний «IM 1» — по приходу сигнала INT производится переход на 0038Н, по этому адресу расположена программа сканирования клавиатуры и встроенного системного таймера, но если подключено ПЗУ контроллера дисководов или интерфейса микродрайва, то все, что делается при обработке прерывания- это немедленный возврат без каких-либо других действий, т.е. по адресу 0038Н в этих ПЗУ записан код возврата из прерывания «RETI» (Return from interrupt) — ED4D Hex.
Далее речь пойдет о видео-системе фирменного «СПЕКТРУМА», в частности о контроллере дисплея на микросхеме «ULA», При инициализации в регистре прерываний I помещается число 63 (03FH) и устанавливается первый тип прерываний. В принципе, задавать регистр «I» необязательно, т.к. режим «IM 1» его не использует, потому что любые прерывания идут через «RST38H». Но регистр I в фирменном «СПЕКТРУМЕ» дополнительно участвует в формировании телевизионного сигнала. «ULA» задействует биты 6 и 7 регистра «I».
При каждом цикле машинных команд Z-80 обращается к ячейке памяти, адресуемой регистром I, выводя его, в старшие восемь битов адресной шины, а линия запроса памяти «MREQ» активизируется. «ULA» генерирует прерывания каждый раз, когда необходимо изменить содержимое экрана. Это заставляет Z-80 запустить программу обработки прерываний, при условии, что прерывания подключены.
Когда программа обработки прерываний выполнена, процессор возвращается в точку, в которой он был при прерывании. Если это команды считывания/записи в память между 16384 (4000H) и 32767 (7FFFH), что «ULA» проверяет, просматривая две старшие линии адресной шины и линию «MREQ», то «ULA» приостанавливает микропроцессор до окончания изменения экрана.
Если старший бит регистра I сброшен, а бит 6 активизирован, то «ULA» может запутаться из-за регенерации динамической памяти. Активизируется линия «MREQ», и регистр I помещается в старшие восемь битов адресной шины. Далее «ULA» думает, что процессор производит запись или считывание в эту область ОЗУ, и при попытке это предотвратить, «ULA» пропускает свое собственное обращение для изменения дисплея, что приводит к развалу картинки. Поэтому в регистре I не должно содержаться любое число от 64 до 127 (040H до 07FH) включительно, т.е. c двумя старшими битами, установленными вышеописанным образом.
Скорее всего, это справедливо и для других версий компьютеров с разделением поля памяти на 16К и 32К (см. «ZX-РЕВЮ» N1, 1991г.). По крайней мере, при записи в регистр I чисел из запрещенного интервала на компьютерах версий «НОВОСИБИРСК», «БАЛТИКА», «ЛЕНИНГРАД» развала картинки не наблюдалось.

Добавлено (21.08.2015, 02:59)
———————————————
«IM 2».
Путем установки режима «IM 2» возможно менять вектор прерываний как программно, так и аппаратно.
При получении прерывания по линии «INT» процессор запоминает адрес следующей команды программы на машинном стеке, затем просматривает ячейку, указанную шиной данных И теперь если В регистре I содержится число 10 (0AH), а на шине данных выставлено число 255 (0FFH).
То получаем :
10*256=2560
2560+255=2815.
Этот адрес находится в ПЗУ «СПЕКТРУМА», поэтому точка, к которой будет сделан переход, возьмется из содержимого адреса 2815+(256, умноженное на число по адресу 2816). В ячейке 2815 содержится 34, а в 2816 — 128. В этом можно убедиться с помощью оператора PEEK. Таким образом, адрес перехода равен :
34+(256*128)=32802.

Вообще-то, считается дурным тоном иметь бит ноль на шине данных активированным в качестве указателя в режиме «IM 2», т.к. указатель всегда будет стартовать с адреса, пронумерованного четным числом

Гораздо проще все выглядит в шестнадцатеричном виде. Тут уже не надо вычислять адрес, откуда брать точку для перехода. Просто шина данных формирует младший байт адреса, а регистр I — старший байт.

По этому адресу берется точка перехода на программу обработки прерываний, где опять-таки данный адрес содержит младший байт, а следующий за ним — старший байт адреса программы.
Все это можно представить, как косвенную адресацию по содержимому регистровой пары. Это своего рода команда CALL (I+ШД). Но, т.к. такой команды не существует, и она не может разместить собственный адрес возврата, то адрес после последней выполненной команды кладется процессором на машинный стек, и к нему будет осуществлен возврат после выполнения программы обработки прерываний.
Как Вы видите, программное изменение вектора прерываний задается с помощью перезаписи регистра I, а аппаратное — благодаря шине данных.
Обычно в момент прерывания на шине данных содержится — 255 ( 0FFH ), но если Вы подключите внешнее устройство, изменяющее в этот момент состояние шины данных, то Вы можете, не переписывая регистр I, менять в небольших пределах адрес программы обработки «IM 2». Порой такое необходимо при подключении нескольких периферийных устройств, чтобы процессор знал, какое из них ему обслуживать на данный момент. Вдобавок ко всему, Вы можете еще перехватывать управление линией «INT» для аппаратного включения или выключения прерываний в необходимый момент времени. Именно так и делает контроллер дисковода.
С «IM 2» есть одна проблема при использовании прерываний при подключенном контроллере дисковода или микродрайва. Дело в том, что при переключении на теневое ПЗУ контроллера эти ПЗУ меняют указатель регистра I. Поэтому, по всей видимости, до включения «IM 2» необходима проверка на то, какое ПЗУ подключено на данный момент. Хорошо еще, что в распространенной версии контроллера «TR-DOS» предусмотрено, что Вы можете изменить указатель в регистре I.
Дополнительная проблема возникает при использовании указателей из ПЗУ при создании коммерческого ПО, т.к. любые изменения и дополнения в ПЗУ могут сделать вашу программу неработающей.
При размещении в регистре I чисел от 0 до 63 (03FH), все адреса точек переходов по прерыванию «IM 2» лежат в области ПЗУ.

Есть несколько правил написания программ обработки прерываний «IM 2».
1. Перед выполнением программы необходимо запретить прерывания с помощью команды DI. Причина состоит в том, чтобы гарантировать, что программа не зациклит петлю, если процедура обработки прерываний выполняется дольше, чем пауза между двумя прерываниями.
2. После выполнения программы обработки «IM 2» включите прерывания командой EI. Для возврата в основную программу используйте команду RETI.
3. Когда бы ни использовались программы прерываний, очень важно, чтобы все регистры микропроцессора, используемые программой обработки прерывания, сохранялись на входе и восстанавливались перед возвращением.
4. Не должно быть попыток пересылки данных через регистры в программу обработки прерываний или из нее.
5. Помните, что если Вы не используете «RST 38H» в прерывающей программе, то Вам необходимо сбрасывать режим «IM 2» и включать «IM 1» до возвращения в БЕЙСИК.
И еще совет. Если Вам необходимо, чтобы таймер системы обновлялся, а клавиатура сканировалась, если, например, Вы работаете в БЕЙСИКЕ со включенным прерыванием второго типа, то в конце вашей программы обработки «IM 2» восстановите содержимое регистров (см. П.3 правил) и сделайте переход JP 0038H. Программа «RST38H» сама подключит прерывания и сделает возврат в основную программу. Это позволит Вам сократить время обработки прерывания.
Вам в своей работе надо также учитывать то обстоятельство, что есть операторы БЕЙСИКА, которые на время своего выполнения запрещают прерывания. Это операторы : LOAD, SAVE, BEEP.

Путём присвоения приоритетов запросам можно добиться, чтобы ЦП реагировал, прежде всего, на наиболее важное событие, игнорируя запросы либо прерывая ISR менее важных.

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

Загрузка регистра I возможна только единственным образом:
LD I,A.
Чтение регистра I способно дать ценную информацию: при выполнении команды LD A,I значение триггера разрешения прерывания копируется
в флаг P/V. Таким путем программа пользователя может узнать, разрешены ли прерывания в данный момент:
P/V=1 — разрешены, 0 — запрещены.
В режимах прерываний 0 и 1 регистр I не задействован и может
быть использован программой для хранения данных. При чтении
LD A,I помимо флага P/V срабатывают флаги нуля Z и знака S.
Кроме загрузки и чтения через аккумулятор, других команд для
регистра I нет.
Spectrum жив в нашей душе навсегда

Источник

Adblock
detector