ZZZZ 333 88 00
Z 3 8 8 0 0
Z 3 88 0 0
Z 3 8 8 0 0
ZZZZ 333 88 00
С О Д Е Р Ж А Н И Е
1 Общая характеристика микропроцессора Z380.
2 Биты, байты, слова и длинные слова.
3 Два пространства устройств ввода-вывода - внешнее и внутреннее.
4 Регистр флагов.
5 Методы адресации.
6 Система команд. Группы команд.
6.1 Группа команд 8-разрядной загрузки.
6.2 Группа команд 16- и 32-разрядной загрузки.
6.3 Группа PUSH / POP.
6.4 Группа команд обмена, пересылки блока и группового поиска.
6.5 Группа 8-разрядной арифметики и логики.
6.6 Группа команд арифметики основного назначения и группа команд управления центральным процессором.
6.7 Группа инструкций декодирующих директив.
6.8 Группа команд 16- и 32-разрядной арифметики и логики.
6.9 Группа инструкций умножения и деления.
6.10 Группа команд 8-разрядных сдвигов.
6.11 Группа команд 16- и 32-разрядных сдвигов.
6.12 Группа команд работы с отдельными битами.
6.13 Группа команд переходов.
6.14 Группа команд обращения к подпрограммам и возврата из подпрограмм
6.15 Группа команд 8-разрядного ввода-вывода.
6.16 Группа инструкций 16-разрядного ввода-вывода.
6.17 Внутреннее пространство устройств ввода-вывода (ВП УВВ).
6.18 Регистровый состав внутреннего пространства устройств ввода-вывода (ВП УВВ).
7 Управление ресурсами памяти с помощью встроенного контроллера обращения к памяти.
7.1 Нижняя память.
7.2 Верхняя память.
7.3 Средняя память.
7.4 Управление тактами ожидания при обращении к нижней, верхней и средней памяти.
8 Режим экономичного останова.
9 Система прерываний.
Общая характеристика микропроцессора Z380.
Презентация нового процессора состоялась в феврале 1995 года.
Как электронный компонент Z380 - микросхема статического типа,
по технологии КМОП,с малым энергопотреблением в состоянии покоя.
Напряжение питания + 3.3 ... 5 вольт.Тактовая частота до 18 МГц
при 5 вольтах и до 10 МГц при 3.3 В.Корпус - 100-контактный QFP.
Как логическое устройство Z380 - 32-разрядный процессор с 16-ра-
зрядной внешней и 32-разрядной внутренней шиной данных. Шина ад-
реса 32-разрядная. Шины адреса и данных не мультиплексированы -
каждая имеет свои собственные линии: 32 - адреса и 16 - данных.
Адресное пространство памяти и равное ему пространство устройств
ввода-вывода - 4 гигабайта. Адресное пространство линейно и не-
прерывно; никаких "сегментов" и тому подобной интеловской чуши.
Микросхема имеет встроенный как бы контроллер ОЗУ, позволяя
строить запоминающее устройство из нескольких физических моду-
лей нужной суммарной емкости.
В системе команд реализован полный набор способов адресации дан-
ных, переходов и подпрограмм по относительному адресу с 1-, 2-
и 3-байтовым смещением, что позволяет писать свободно перемещае-
мые программы в любом мыслимом диапазоне адресов.Даже системные
драйверы смогут работать безо всякой настройки на адрес загруз-
ки. Короткие команды типа "регистр-регистр" выполняются за 2 та-
кта, что фактически дает еще 2-кратное преимущество по сравне-
нию с Z80, то есть 18 МГц=36 Мгц. Введен 3-й режим прерываний с
16-разрядным вектором и 16-разрядным смещением. Арифметические
и логические операции выполняются над 16-разрядными данными.Вве-
дены умножение и деление. Процессор может работать в режиме Z80
и расширенном режиме. В режиме Z80 счетчик адресов и указатель
стека работают только с младшими 64К памяти; остальные биты ад-
реса сброшены в 0. Этот режим полностью совместим с прототипом.
Но даже в нем остальная память доступна для размещения данных;
доступ к ним возможен путем прямой, косвенной и индексной адре-
сации. Трудно было понять, но вроде бы указатель стека тоже мож-
но загрузить 32-битовым значением. Но исполняемые коды и точки
входа в процедуры обработки прерываний располагаются только в
64К. Из режима Z80 процессор переключается в расширенный режим
одной командой, но обратного переключения нет (только RESET). В
режиме Z80 можно исполнять все команды (не только из подмножест-
ва Z80); разница между двумя режимами - только в распределении
диапазона адресов для исполняемых кодов. Формат данных может
быть "байт", "слово" (WORD; W) и "длинное слово" (LONG WORD;LW).
После сброса устанавливается формат "слово".Имеются команды для
изменения формата данных по умолчанию. Арифметические, логичес-
кие и сдвиговые операции не работают с "длинными" словами и не
отслеживают установленный формат данных (всегда формат "слово"
или обычный байтовый формат для команд подмножества Z80). Опера-
ции ввода-вывода также имеют максимально 16-битный формат дан-
ных. Система команд Z80 входит целиком как подмножество в систе-
му команд Z380; совпадение - вплоть до кодов операций. Но рас-
клад команд по тактам и сигналам на шине управления отличается.
Состав регистров процессора: учетверенные наборы B,C,D,E,H,L
и их "штриховые" двойники, расширенные до 32 бит; 4 набора "ак-
кумулятор+флаги" (плюс "штрихи"), оставшиеся 8-битными; индекс-
ные регистры IX и IY, расширенные до 32 бит (тоже 4 набора + ');
32-разрядные PC и SP; 16-разрядный I; 8-разрядный R; 32-разряд-
ный регистр управления ("регистр выбора" - Select Register; SR).
Вот карта регистрового пространства, которую я воспроизвожу сим-
волами псевдографики, демонстративно развернув ее трехмерность
влево (в оригинале - вправо):
–––––––––––––––––––––––
¦–––––––––––––––––––––––
––––––––––––––––––––––––––– ––––––––––––––––––––––
¦––––––––––––––––––––––––––––––––––––––––––––––––––
¦¦––––––––––––––––––––––––––¦ A ¦ F ¦
¦¦¦–––––––––––––––––––––––––¦––––––––––¦––––––––––¦
¦¦¦¦ BCz ¦ B ¦ C ¦
¦¦¦¦––––––––––––––––––––––––¦––––––––––¦––––––––––¦
¦¦¦¦ DEz ¦ D ¦ E ¦
¦¦¦¦––––––––––––––––––––––––¦––––––––––¦––––––––––¦
¦¦¦¦ HLz ¦ H ¦ L ¦
¦¦¦¦––––––––––––––––––––––––¦––––––––––¦––––––––––¦
–¦¦¦ IXz ¦ IXU ¦ IYU ¦
–¦¦––––––––––––––––––––––––¦––––––––––¦––––––––––¦
–¦ IYz ¦ IYU ¦ IYL ¦
––––––––––––––––––––––––––––––––––––––––––––––––
–––––––––––––––––––––––
¦–––––––––––––––––––––––
––––––––––––––––––––––––––– ––––––––––––––––––––––
¦––––––––––––––––––––––––––––––––––––––––––––––––––
¦¦––––––––––––––––––––––––––¦ A' ¦ F' ¦
¦¦¦–––––––––––––––––––––––––¦––––––––––¦––––––––––¦
¦¦¦¦ BCz' ¦ B' ¦ C' ¦
¦¦¦¦––––––––––––––––––––––––¦––––––––––¦––––––––––¦
¦¦¦¦ DEz' ¦ D' ¦ E' ¦
¦¦¦¦––––––––––––––––––––––––¦––––––––––¦––––––––––¦
¦¦¦¦ HLz' ¦ H' ¦ L' ¦
¦¦¦¦––––––––––––––––––––––––¦––––––––––¦––––––––––¦
–¦¦¦ IXz' ¦ IXU' ¦ IYU' ¦
–¦¦––––––––––––––––––––––––¦––––––––––¦––––––––––¦
–¦ IYz' ¦ IYU' ¦ IYL' ¦
––––––––––––––––––––––––––––––––––––––––––––––––
––––––––––––
¦ R ¦
–––––––––––––––––––––––––¦––––––––––¦
¦ Iz ¦ I ¦
–––––––––––––––––––––––––––––––––––––
––––––––––––––––––––––––––––––––––––––––––––––––
¦ SPz ¦ SP ¦
¦––––––––––––––––––––––––¦–––––––––––––––––––––¦
¦ PCz ¦ PC ¦
––––––––––––––––––––––––––––––––––––––––––––––––
Как видим, набор регистров общего назначения (РОН) выглядит до-
вольно привычно. Разница с Z80 в том, что в каждом из двух набо-
ров - основном и альтернативном - имеется учетверенный комплект
аналогичных по назначению РОН, и регистры расширены до 32 бит.
РОН используются для хранения и обработки данных и для адресова-
ния памяти, причем ограничений на способы адресации у 380-го
значительно меньше. Обращения к РОН определяются в кодах команд,
плюс активный регистровый слот задается битами регистра управле-
ния SR. Обратите внимание: у половинок индексных регистров поя-
вилась официальная мнемоника - IXU, IYU для старшей половинки и
IXL, IYL для младшей. Не трудно догадаться, что суффикс "z" оз-
начает объединение регистровой линейки в 32-разрядный регистр,
но только в описаниях,но не в мнемониках операций.
Регистр управления SR.
<------------ YSR ------------> ¦ <------------- XSR --------->
0 0 0 0 0 ¦IY bank¦IYP¦ 0 0 0 0 0 ¦IX bank¦IXP
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
<--------- DSR --------------> ¦
Main IEF
0 0 0 0 0 ¦ Bank ¦Alt¦ XM¦ LW¦ 1 ¦ IM ¦ 0 ¦LCK¦AFP¦
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
IYBANK - 2-битовое поле выбора банка IY-регистров. Содержит но-
мер (0...3) банка IY или IY'. После RESET сбрасывается в 0.
IYP - бит выбора основного или альтернативного блока регистров
IY. 0 - основной набор, 1 - альтернативный набор.
IXBANK, IXP - то же для IX.
MAINBANK - 2-битовое поле выбора блока регистров AF,HL,DE,BC и
A',F',HL',DE',BC'. Содержит номер банка регистров.
ALT - бит выбора основного или альтернативного набора HL,DE,BC.
0 - основной, 1 - альтернативный.
XM (Extended Mode) - бит установки режима работы процессора.
1 - расширенный режим, 0 - режим Z80. Обратного переключения в 0
нет (только RESET; даже POP не помогает).
LW (Long Word mode) - бит контроля режима "слово"/"длинное сло-
во". 1 - длинное слово, 0 - обычное (16-разрядное) слово. (Для
единичных инструкций можно установить индивидуальный режим дли-
ны слова, действующий только в пределах одной команды,с помощью
специальных команд). RESET сбрасывает в 0.
IEF1 - флаг разрешения маскируемых прерываний. 1 - прерывания
разрешены, 0 - прерывания запрещены. RESET сбрасывает в 0.
IM - 2-битовое поле выбора режима прерываний 0,1,2 или 3.
LCK (Lock) - бит блокировки обслуживания запросов обращения к
системной шине со стороны других устройств. 1 - внешние запросы
игнорируются, 0 - внешние запросы обслуживаются. RESET сбрасыва-
ет в 0.
AFP - бит выбора основного или альтернативного блока регистров
AF (AF или AF'). 0 - основной, 1 - альтернативный.
Регистр SR программно доступен как 32-разрядный SR, как 3 вось-
мибитных регистра YSR, XSR и DSR, а также может быть сохранен
через PUSH и загружен через POP.
Биты, байты, слова и длинные слова.
Нетрудно убедиться, что эти понятия настолько просты и естест-
венны, что даже нет необходимости что-либо пояснять:
–––––––––––––––––––––––––
¦ 7¦ 6¦ 5¦ 4¦ 3¦ 2¦ 1¦ 0¦ - биты в байте
–––––––––––––––––––––––––
Двухбайтовое 16-разрядное слово:
–––––––––––––––––––––––––
¦ старший байт ¦ - адрес N+1
¦–––––––––––––––––––––––¦
¦ младший байт ¦ - адрес N <--- адрес
–––––––––––––––––––––––––
Четырехбайтовое 32-разрядное длинное слово:
–––––––––––––––––––––––––
¦ d31...24 ¦ - адрес N+3
¦–––––––––––––––––––––––¦
¦ d23...16 ¦ - адрес N+2
¦–––––––––––––––––––––––¦
¦ d15...8 ¦ - адрес N+1
¦–––––––––––––––––––––––¦
¦ d7...0 ¦ - адрес N <--- адрес
–––––––––––––––––––––––––
Пространство памяти.
Единственное, что, пожалуй, требует по крайней мере упоминания,
это характер обращения к памяти при доступе к 16- или 32-разряд-
ному данному. Несмотря на то, что шина данных 16-разрядная, су-
ществует разница в обращении к данному, адрес начального байта
которого четный (A0=0) или нечетный (A0=1). Трудно было понять
(в очередной раз...), но вроде бы происходит следующее: если бо-
лее чем 1-байтовый операнд "ложится" на четный адрес, то все в
порядке - сначала идет младший байт, потом старший; в противном
случае байты меняются местами, так, чтобы младший байт всегда
ложился на четный адрес, а старший - на нечетный; при "неправи-
льной" расстановке байтов обращение к памяти занимает 2 машин-
ных цикла вместо одного.
Два пространства устройств ввода-вывода -
внешнее и внутреннее.
Внешнее (external) пространство устройств ввода-вывода представ-
лено подмножеством портов Z80 и расширенным до 32 бит адресным
I/O-пространством. Команды ввода-вывода из подмножества Z80 ос-
тались прежними и в мнемониках, и по сути (16 старших бит шины
адреса сбрасываются в 0). Некоторые дополнительные команды:
Группа
инструкций A31...A24 A23...A16 A15...A8 A7...A0
IN dst,(C) BC31-BC24 BC23-BC16 BC15-BC8 BC7-BC0
IN0 dst,(n) 00000000 00000000 00000000 n
INA(W) dst,(mn)00000000 00000000 m n
DDIR IB INA(W) dst,(lmn)
00000000 l m n
DDIR IW INA(W) dst,(klmn)
k l m n
(операции вывода аналогично).
Префиксы "DDIR IB", "DDIR IW" означают получение дополнительно-
го байтового или словарного данного.
Можно заметить появление прямой адресации портов до 32 бит адре-
са и такую же косвенную адресацию по расширенной паре BC.
Внешннее пространство устройств ввода-вывода обеспечивает также
истинно 8-битовую прямую адресацию портов командами вида
OUT0 (n),r , где n - 8-битный адрес порта; r - регистр; 24 стар-
ших бита адреса сброшены в 0.
Внутреннее пространство УВВ фактически предназначено лишь для
формирования электрических сигналов обращения к портам и подтве-
рждения прерывания. Адресация внутреннего пространства УВВ неяв-
ная. Вот, например, команда IN0 (n) - ввод из 8-битного порта с
адресом "n" в... никуда. Линии A31...A8 сброшены в 0.
Регистр флагов.
–––––––––––––––––––––––––––––––––
¦ S ¦ Z ¦ x ¦ H ¦ x ¦P/V¦ N ¦ C ¦
–––––––––––––––––––––––––––––––––
S - признак знака;
Z - признак нуля;
H - признак полупереноса;
P/V - флаг четности/переполнения;
N - признак сложения/вычитания (1 - вычитание, 0 - сложение);
C - флаг переноса.
Флаг N используется командой DAA для определения вида предыду-
щей операции (сложения или вычитания).
Все, как в нашем старом добром знакомом Z80.
Методы адресации.
Для вычисления (получения) физического адреса операнда, исполь-
зуемого при исполнении той или иной команды, применяются различ-
ные методы адресации. Авторы фирменного описания подразделили
их на 7 групп, 6 из которых имелись в Z80, а один - относитель-
ная стековая адресация - добавлен.
Регистровая адресация. Операнд содержится в 8-битном регистре
A,B,C,D,E,H,L,IXU,IYU,IXL,IYL,A',B',C',D',E',H',L', или в 16-
или 32-битном регистре BC,DE,HL,IX,IY,BC',DE',HL',IX',IY', а
также в регистре SP или в регистрах I или R. Например: LD HL,I;
LD IY,DE; LD BC,IX; EX D,D'.
Непосредственная адресация. Операнд содержится непосредственно
в коде инструкции. Директивы декодирования DDIR IB или DDIR IW
позволяют идентифицировать 24- или 32-битный непосредственный
операнд.
Косвенная регистровая адресация. Адрес операнда содержится в
регистре (паре). HL имеет преимущества перед другими парами по
коротковизне кода операции, но и BC и DE также могут все. IX и
IY могут быть использованы для адресации JP. BC адресует прост-
ранство устройств ввода-вывода.
Прямая адресация. Адрес операнда входит в состав кода инструк-
ции. Нормальное значение адреса - 16-битное, но директивами де-
кодирования можно установить 24- или 32-разрядный абсолютный ад-
рес.
Индексная адресация. Абсолютный адрес операнда вычисляется пу-
тем сложения содержимого индексного регистра IX или IY со смеще-
нием, входящим в состав команды. Смещение - число со знаком в
старшем разряде. Нормальное значение смещения - 8-битное, но
оно может быть расширено до 24 или 32 бит с помощью DDIR.
Адресация со смещением относительно счетчика команд или указате-
ля стека. 1. Относительно счетчика команд PC. Так можно адресо-
вать переходы JP и JR и вызовы подпрограмм CALL, например:
JR NZ,eee (eee - 24-битное смещение); CALR PE,ee (CALR - Call
Relative). Для команд этой подгруппы не используются директивы
декодирования - каждая из этих команд имеет индивидуальный код
и собственную мнемонику в ассемблере. 2. Относительно SP. Норма-
льное значение смещения - 8 бит. Расширение до 16 или 24 бит
производится через DDIR.
Мнемоника DDIR IB, DDIR IW указывается первой в общей мнемонике
команды (см.,например, DDIR IW OUTA... в примерах ввода-вывода).
Ассемблер сформирует нужный префикс к коду команды.
"DDIR IB" означает "добавить байт", то есть если по умолчанию
операнд был байтовым, то станет слововым, а если был 16-битным -
станет 24-битным.
"DDIR IW" означает "добавить слово", то есть 16 бит. 8-битный
операнд станет 24-битным, а 16-битный расширится до 32 бит.
Система команд. Группы команд.
Авторы подразделили систему команд на 17 групп:
8-разрядная загрузка;
16- и 32-разрядная загрузка;
PUSH/POP;
обмен регистров, пересылки и сравнения блоков;
8-разрядная арифметика и логика;
команды управления процессором и глобальные команды арифметики
наподобие DAA;
директивы декодирования;
16- и 32-разрядная арифметика;
группа команд умножения и деления;
8-разрядные сдвиги;
16-разрядные сдвиги;
8-битные операции с отдельными битами (SET, RES, BIT);
переходы;
вызовы подпрограмм, возвраты из подпрограмм и группа RST;
8-разрядный ввод/вывод во внешнем пространстве ввода-вывода;
8-разрядный ввод/вывод во внутреннем пространстве ввода-вывода;
16-разрядный ввод/вывод.
Условные обозначения, применяемые
при описаниях команд.
dst - операнд-приемник
src - операнд-источник
dst(m-n)- биты от n до m, например: HL(23-16) - 16..23 биты
пары HL
n - 8-разрядная константа
nn - 16-разрядная константа
d - 8-разрядное смещение
r - регистр общего назначения
s - 8-разрядный адрес
dd,qq,ss,tt,uu - любой 16-разрядный элемент, суть адрес или
смещение, используемый при адресации
xxh - h - обозначение старшего байта, где "xx" - любой
16-разрядный операнд
xxl - l - младший байт
SR - регистр управления
(C) - указание на косвенную адресацию ввода-вывода
по паре BC
cc - условие, например Z; NC; PE и т.п.
[ ] - необязательный компонент
( ) - указание на косвенную адресацию
<- - направление пересылки, например: HL <- HL+DE -
результат сложения HL+DE поместить в HL
Обозначения флагов:
S - Sign (знак)
Z - Zero (нуль)
H - Half carry (полуперенос)
P/V - Parity/oVerflow (четность/переполнение)
N - Add/Subtract (сложение/вычитание)
C - Carry (перенос)
? - флаг получает непредсказуемое, неистинное значение
. - флаг не меняет значения
0 - флаг сбрасывается в 0
1 - флаг устанавливается в 1
V - P/V-флаг отражает переполнение
P - P/V-флаг отражает четность
Обозначения условий:
Z - Zero (равно нулю или равно между собой)
NZ - Not Zero (не равно нулю или не равно между собой)
C - Carry (есть перенос)
NC - No Carry (нет переноса)
S - Sign (флаг знака установлен)
NS - No Sign (флаг знака сброшен)
NV - No oVerflow (флаг P/V сброшен)
V - oVerflow (флаг P/V установлен)
PE - Parity Even (четный результат)
PO - Parity Odd (нечетный результат)
P - Positive (неотрицательный результат; флаг S сброшен)
M - Minus (отрицательный результат; флаг S установлен).
Как можно заметить, введены новые коды условий, делающие указа-
ние условий более удобным, хотя собственно новых условий не поя-
вилось (так как не появилось новых флагов).
Группа команд 8-разрядной загрузки.
В ней добавились к имеющимся в Z80 инструкциям только
операции с половинками индексных регистров:
Команда Действие
LD XYU,n XYU <- n
LD XYL,n XYL <- n
где "XY" - IX или IY, а "n" - 8-разрядная константа.
Также объявлены команды пересылок между половинками индексных
регистров и регистрами общего назначения:
LD XYU,s
LD XYL,s
LD s,XYU
LD s,XYL
где "s" - регистр общего назначения.
На самом деле эти операции выполнялись и на Z80, только они бы-
ли не объявлены в официальном списке команд. Теперь же у них по-
явилась стандартная мнемоника, а вместе с нею и полноправное
вхождение в перечень инструкций.
Инструкции вида
LD r,(XY+d)
LD (XY+d),r
LD (XY+d),n
LD A,(nn)
LD (nn),A
могут быть префиксованы DDIR IB или DDIR IW для расширения раз-
рядности операнда.
В остальном состав группы 8-разрядных пересылок точно такой же,
как и у Z80.
Группа команд 16- и 32-разрядной загрузки.
Новые команды:
LD[W] (pp),nn (pp+1) <- nh загрузка 16-битной константы nn
(pp) <- nl по адресу, указываемому парой
pp, например, LD (BC),nn;
LD pp,(uu) pph <- (uu+1) косвенная загрузка регистровой
ppl <- (uu) пары pp с адреса, указываемого
парой uu, например LD IX,(BC);
LD (pp),uu (pp+1) <- uuh помещение значения пары uu по
(pp) <- uul адресу, указываемому парой pp:
LD (DE),IX;
LD pp,UU pp <- UU пересылка значения одной пары
в другую: LD BC,HL;
LD XY,pp XY <- pp LD IX,BC; LD IY,DE;
LD pp,XY pp <- XY LD BC,IX; LD DE,IY;
LD IX,IY пересылка значения одного
LD IY,IX индексного регистра в другой;
LD (pp),XY (pp+1) <- XYU сохранение индексного регистра
(pp) <- XYL по адресу,указываемому парой pp;
LD (BC),IX;
LD XY,(pp) XYU <- (pp+1) загрузка индексного регистра с
XYL <- (pp) адреса, указываемого парой pp;
LD IY,(DE);
LD pp,(XY+d) pph <- (XY+d)h загрузка пары pp с адреса, инде-
ppl <- (XY+d)l ксируемого по IX или IY со сме-
щением d: LD HL,(IX+d);
LD IX,(IY+d) загрузка одного индексного реги-
LD IY,(IX+d) стра с адреса, индексируемого
другим индексным регистром со
смещением d;
LD pp,(SP+d) pph <- (SP+d)h загрузка пары с адреса, индекси-
ppl <- (SP+d)l руемого указателем стека SP со
смещением d; LD DE,(SP+d);
LD XY,(SP+d) -"- индексного регистра;
LD (XY+d),pp загрузки в противоположном на-
LD (IX+d),IY правлении - помещение пары pp
LD (IY+d),IX или индексного регистра в память
LD (SP+d),pp по адресу, индексируемому XY или
LD (SP+d),XY SP;
LD[W] I,HL I <- HL загрузка регистра вектора преры-
ваний значением пары HL;
LD I,HL; LDW I,HL ("W" - необя-
зательный элемент);
LD[W] HL,I HL <- I чтение регистра вектора прерыва-
ний в пару HL;
LD HL,I; LDW HL,I.
Символ "W" можно употреблять для удобства чтения программы, что-
бы визуально подчеркнуть, что речь идет об операнде формата
"слово".
Все команды 16-разрядной загрузки, в том числе и "старые", в ре-
жиме "длинное слово" (LW; Long Word mode), установленном в реги-
стре SR, будут работать с 32-разрядными операндами.
Однобайтовое смещение в индексных операциях и 16-разрядный адрес
в операциях с прямой адресацией можно расширить до соответствен-
но 16 или 24-х или до 24-х или 32-х бит с помощью префиксов
DDIR IB, DDIR IW, если формат данных установлен в одинарное сло-
во. В режиме "длинное слово" операнды суть "16-разрядный адрес"
и так превращаются в 32-разрядные и требуют соответствующего ко-
личества байт, но индексное смещение остается в прежнем формате
и требует, при необходимости, префиксования DDIR (! Возможно, в
этом нюансе я чего-то и напутал (все-таки с английского оригина-
ла читаю)).
Группа PUSH / POP.
Добавились:
PUSH nn (SP-2) <- nnl занесение в стек константы;
(SP-1) <- nnh (константу можно расширить
SP <- SP-2 через DDIR);
PUSH SR (SP-2) <- SR(7-0)
(SP-1) <- SR(15-8)
SP <- SP-2
POP SR SR(6-0) <- (SP) <-- бит SR(7) не пере-
SR(15-8) <- (SP+1) устанавливается через
SR(23-16) <- (SP+1) POP; это бит расширен-
SR(31-24) <- (SP+1) ного режима процессора;
SP <- SP+2 его можно сбросить толь-
ко RESET-ом;
При установленном формате "обычное слово" POP SR, как видно, ве-
дет себя довольно оригинально - 8...15-й биты SR копируются в 2
старших байта регистра. При режиме "длинное слово" в стек зано-
сится все 32-битное значение и так же все снимается при POP(это
справедливо для всех регистровых пар); старшая половина 32-бит-
ного значения заносится в стек первой (по отношению к "основной"
части значения).
"PUSH nn" можно расширить с помощью DDIR. Нерасширенный"PUSH nn"
в режиме "длинное слово" заносит дополнительно #0000 в стек (та-
кже это относится к PUSH AF).
"POP nn", разумеется, не существует (смысл очевиден).
При работе процессора в режиме "Z80" указатель стека закольцован
на младших 64К памяти; старшие разряды сброшены в 0.
Группа команд обмена, пересылки блока и группового поиска.
Новые команды:
EX BC,DE BC(15-0) <-> DE(15-0) Обмен значениями пар
EX BC,HL BC(15-0) <-> HL(15-0) основных РОН.
В Long Word mode- 32 бит
EX A,r A <-> r Обмен 8-разрядными значениями
аккумулятора и другого регистра,
например, EX A,B; EX A,E.
EX A,(HL) A <-> (HL) Обмен значениями аккумулятора и
ячейки памяти, адресуемой парой
HL.
EX r,r' r <-> r' Обмен значениями 8-разрядного
регистра и его альтернативного
"двойника"; например, EX B,B'.
EX pp,pp' pp(15-0) <-> pp'(15-0) Обмен 16-разрядными зна-
чениями пары и альтернативной
пары, например, EX BC,BC'.
В Long Word mode - 32 бит.
EX XY,XY' XY(15-0) <-> XY'(15-0) Обмен 16-разрядными зна-
чениями IX или IY с альтернатив-
ным индексным регистром.
В Long Word mode - 32 бит.
EX pp,XY pp(15-0) <-> XY(15-0) Обмен 16-разрядными зна-
чениями пары и индексного регис-
тра, например, EX HL,IX.
В Long Word mode - 32 бит.
EX IX,IY IX(15-0) <-> IY(15-0) Обмен 16-разрядными зна-
чениями между двумя индексными
регистрами.
В Long Word mode - 32 бит.
EXALL SR(24)<- NOT SR(24) Переключение с основного на
SR(16)<- NOT SR(16) альтернативный или наоборот
SR(8) <- NOT SR(8) наборов IY,IX,BC,DE,HL.
EXXX SR(16)<- NOT SR(16) Переключение с основного на
альтернативный или наоборот наборов регистров IX
EXXY SR(24)<- NOT SR(24) То же для IY.
Обратите внимание: благодаря программной доступности регистра SR
основные и альтернативные наборы регистров не равноправны! Прог-
раммно можно установить, какой из наборов активен! Из-за этого
следует четко различать ОБМЕН значениями между регистрами и
ПЕРЕКЛЮЧЕНИЕ наборов регистров!
SWAP pp pp(31-16) <-> pp(15-0) Обмен значениями старшей
и младшей 16-разрядной половины 32-разрядной па-
ры. Например, SWAP HL. Действует независимо от
установленного формата операнда по длине слова.
SWAP XY XY(31-16) <-> XY(15-0) То же для IX,IY.
LDIW (DE) <- (HL) Пересылка одиночного
(DE+1) <- (HL+1) слова. Адреса области-
DE <- DE+2 источника и области-
HL <- HL+2 приемника должны быть
BC(15-0) <- BC(15-0)-2 четными.
От LDI эта команда отличается тем, что за ОДИН
машинный цикл выполняет пересылку слова, а не
байта.
LDDW (DE) <- (HL) Пересылка слова с дек-
(DE+1) <- (HL+1) рементом адресов.
DE <- DE-2
HL <- HL-2
BC(15-0) <- BC(15-0)-2
LDIRW Аналогичные команды групповой пересылки слов.
LDDRW Выполняются, пока BC не достигнет нуля.
Общие свойства LDIW,LDDW,LDIRW,LDDRW:
- в режиме "длинное слово" пересылаются 2 слова за один машинный
цикл, а BC уменьшает свое значение на 4;
- адреса области-источника и области-приемника должны быть выра-
внены на четный адрес (что произойдет в противном случае, опи-
сание умалчивает);
- в режиме "Z80" адресация закольцована на младших 64К.
Группа команд типа CPI, CPIR не расширена и осталась прежней. В
ней также имеет место закольцованность адресации в пределах 64К
в нерасширенном режиме работы процессора.
"Старые" EX DE,HL; EXX; EX (SP),HL; EX (SP),XY в режиме"длинное
слово" работают с 32-разрядными парами регистров.
Для EX (SP),rr справедливо все, что было сказано о закольцован-
ности адресов.
Группа 8-разрядной арифметики и логики.
Объявлены"законными" операции с половинками индексных регистров:
ADD A,XYU
ADD A,XYL
и все смежные с ними - ADC,SUB,SBC,AND,OR,XOR,CP, а также опера-
ции инкремента и декремента:
INC XYU DEC XYU
INC XYL DEC XYL
Новые операции:
TST r A AND r Логическое "И" над аккумулятором
и вторым операндом с установкой
флагов, но без засылки результата в аккумулятор. (r - любой до-
пустимый по способам адресации операнд - как для AND).
TST n A AND n То же с константой в роли второ-
го операнда.
TST (HL) A AND (HL) То же над содержимым ячейки, ад-
ресуемой парой HL.
Группа команд арифметики основного назначения
и группа команд управления центральным процессором.
Новые команды:
Мнемоника Смысл Комментарий
CPLW HL <- NOT HL Инверсия пары HL, выступающей
CPLW HL в роли 16-разрядного аккумулято-
ра.
NEGW HL <- 0-HL Смена знака значения пары HL
NEGW HL
EXTS L <- A
EXTS A H <- 00 , если D7 аккумулятора = 0;
H <- #FF , если -"- = 1
Расширение 8-разрядного значения
аккумулятора до 16 (или 32 бит в режиме "длинное слово")
бит с перенесением результата в HL. Знаковый разряд пре-
образуется в значение старших разрядов слова.
EXTSW HLz <- #0000 при H(7)=0;
EXTSW HL HLz <- #FFFF при H(7)=1
Расширение 16-разрядного значе-
ния HL до 32 бит с учетом знака.
SLP Sleep Перевод микросхемы процессора в
режим экономичного останова. Прекращается генерация так-
товых импульсов встроенным источником; процессор отклю-
чается от шин данных и управления; шина адреса переводи-
тся в состояние лог.1 с открытым стоком; резко снижает-
ся энергопотребление. Выйти из Sleep можно сбросом, пре-
рыванием маскируемым и немаскируемым и запросом на зах-
ват системной шины. Если переход в Sleep запрещен (? -
пока не разобрался, как!), то SLP выполняется как HALT.
DI n IER(i) <- 0 в соответствии с битами n.
SR(5) <- 0 если n(0)=1.
Занесение маски битов запрещения прерываний в регистр
разрешения прерываний. Имеется 4 значащих бита (0...3)
в регистре IER (подробнее будет освещено при изучении
режимов прерываний).
EI n IER(i) <- 1 -"- Аналогично для разрешения прерываний.
SR(5) <- 1 -"-.
IM 3 Включение 3-го режима прерываний.
LDCTL SR,A SR(31-24) <- A Инициализация регистра управле-
SR(23-16) <- A ния значением аккумулятора.
SR(15-8) <- A
LDCTL SR,n Load Control То же - константой.
SR(31-24) <- n
SR(23-16) <- n
SR(15-8) <- n
LDCTL HL,SR HL(15-0) <- SR(15-0) Чтение регистра управле-
ния в пару HL. В режиме "длинное слово" читаются
32 бит.
LDCTL SR,HL SR(15-8) <- HL(15-8) Загрузка регистра управ-
SR(0) <- HL(0) ления значением пары HL.
SR(31-24)<- HL(15-8)
SR(23-16)<- HL(15-8)
В режиме "длинное слово":
SR(31-16)<- HL(31-16)
LDCTL A,v A <- v Чтение 8-битовой группы регистра
управления SR в аккумулятор. ("v" - одна
из групп YSR, XSR или DSR).
LDCTL v,A v <- A Загрузка 8-битовой группы регис-
тра управления SR значением аккумулято-
ра.
LDCTL v,n v <- n То же константой.
SET LCK SR(1) <- 1 Установить блокировку запросов
на захват системной шины.
RESC LCK SR(1) <- 0 Снять блокировку -"-.
SETC LW SR(6) <- 1 Установить режим "длинное слово"
RESC LW SR(6) <- 0 Отменить режим "длинное слово".
BTEST Bank Test Занесение некоторых битов регис-
S <- SR(16) тра управления во флаги.
Z <- SR(24)
V <- SR(0)
C <- SR(8)
MTEST Mode Test То же, но с другими битами для
S <- SR(7) проверки других состояний.
Z <- SR(6)
C <- SR(1)
Группа инструкций декодирующих директив
Мнемоника Смысл Комментарий
DDIR W Одну последующую инструкцию выполнить в режиме
"слово"
DDIR IB,W Одну последующую инструкцию выполнить в режиме
"слово"; расширить непосредственный операнд на
1 дополнительный байт
DDIR IW,W Одну последующую инструкцию выполнить в режиме
"слово"; расширить непосредственный операнд на
слово (2 байта)
DDIR IB Расширить непосредственный операнд на 1 байт
DDIR LW Одну последующую инструкцию выполнить в режиме
"длинное слово"
DDIR IB,LW Одну последующую инструкцию выполнить в режиме
"длинное слово"; расширить непосредственный
операнд на 1 байт
DDIR IW,LW Одну последующую инструкцию выполнить в режиме
"длинное слово"; расширить непосредственный
операнд на слово
DDIR IW Расширить непосредственный операнд на слово.
Характерной особенностью директив декодирования является их ис-
полнение в одном машинном цикле с инструкцией, к которой отно-
сится директива декодирования, благодаря чему исполнение собст-
венно директивы декодирования отнимает 0 (!) дополнительных
тактов процессора.
Ранее уже говорилось, но я вкратце еще раз напомню, для чего
служат директивы декодирования. Например, в операции
LD E,(IX+d)
смещение "d", обычно являющееся однобайтовым, можно расширить
до 2-х - DDIR IB LD E,(IX+dd)
или даже 3-х - DDIR IW LD E,(IX+ddd) - байт.
Группа команд 16- и 32-разрядной арифметики
и логики
Новые команды:
ADD SP,nn SP <- SP+nn Модификация указателя стека
SUB SP,nn SP <- SP-nn путем сложения или вычтания
с константой. В расширенном
режиме процессора SP имеет
32 значащих бита.
ADDW [HL,]pp HL <- HL+pp Сложение HL с другой парой pp.
Отличается от ADD HL,pp влияни-
ем на все флаги.
ADDW [HL,]nn HL <- HL+nn Сложение HL с 16-разрядной кон-
стантой (можно DDIR)
ADDW [HL,]XY HL <- HL+XY Сложение HL с IX или IY
ADDW [HL,](XY+d) HL <- HL+(XY+d) Сложение HL со словом (!) с ад-
реса (XY+d). "d" можно расширить
через DDIR
ADCW [HL,]uu HL <- HL+uu+CY Сложение с учетом переноса
SUBW [HL,]uu HL <- HL-uu Вычитание
SBCW [HL,]uu HL <- HL-uu-CY Вычитание с учетом переноса
ANDW [HL,]uu HL <- HL and uu Логическое И
ORW [HL,]uu HL <- HL or uu Логическое ИЛИ
XORW [HL,]uu HL <- HL xor uu Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ
CPW [HL,]uu HL-uu Сравнение с установкой флагов
где "uu" - любой операнд, как в ADDW; CY - признак переноса
ADD HL,(nn) HL <- HL+(nn) Сложение со словом с адреса (nn)
SUB HL,(nn) HL <- HL-(nn) Вычитание слова с адреса (nn)
В расширенном режиме процессора
(не "длинное слово"!) - 32 бит.
В обычном режиме адрес можно ра-
сширить через DDIR.
"Старые" команды семейств ADD HL,rr; ADD XY,rr; INC rr; INC XY;
DEC rr; DEC XY в расширенном режиме процессора (имеется в виду
не режим "длинное слово", а доступ к 4Г памяти) работают с 32-
разрядными операндами. В обычном режиме расширение разрядности
невозможно по причине того, что регистр SP в кодах команд этой
группы присутствует наравне с другими парами регистров, а он
не расширяется без переключения процессора в расширенный режим.
Группа инструкций умножения и деления.
Мнемоника Смысл Комментарий
MLT dd dd <- ddH*ddL "dd" - пара регистров.
Результат умножения мла-
MLT BC дшего и старшего байтов
MLT DE помещается в ту же пару.
MLT HL
MLT SP
Команда MLT является заимствованной из системы команд Z180 (для
совместимости). Она не влияет на флаги (!).
MULTW [HL,]pp HL(31-0) <- HL(15-0)*pp(15-0)
Умножение слов.
"pp" - пара регистров.
MULTW [HL,]XY HL(31-0) <- HL(15-0)*XY(15-0)
"XY" - IX или IY.
MULTW [HL,]nn HL(31-0) <- HL(15-0)*nn "nn" - непосредственная
константа-слово (которая
может быть расширена до 24 или 32 бит с помощью
DDIR).
MULTW (XY+d) HL(31-0) <- HL(15-0)*(XY+d)
Умножение 16-разрядного
значения пары HL на слово (!) с адреса (XY+d),
где "d" - смещение - может быть расширено до
слова или 24-битного значения через DDIR.
MULTUW uu HL(31-0) <- HL(15-0)*uu "uu" - pp,nn,XY,(nn),
(XY+d). Разновидность
команды умножения с любым способом адресации.
Выполняется на один такт дольше по сравнению
с MULTW.
Команды умножения воздействуют на флаги S,Z,C. Флаг P/V=0.
DIVUW [HL,]pp HL(15-0) <- HL(31-0)/pp; Деление 32-раз-
HL(31-16) <- остаток рядного значения
HL на 16-разряд-
ное значение пары. Остаток заносится в старшую
половину 32-разрядной пары HL.
DIVUW [HL,]XY HL(15-0) <- HL(31-0)/XY; То же для
HL(31-16) <- остаток. IX, IY.
DIVUW [HL,]nn HL(15-0) <- HL(31-0)/nn; Деление
HL(31-16) <- остаток. на константу.
Константа может
быть расширена до 24-х или 32-х бит через DDIR.
DIVUW [HL,](XY+d)
HL(15-0) <- HL(31-0)/(XY+d); Деление 32-разр.
HL(31-16) <- остаток. HL на слово (!)
с адреса (XY+d).
Смещение "d" может быть расширено до 16 или 24
бит с помощью DDIR.
Влияние команд деления на флаги:
S=0; Z - по результату; P/V - "V" по результату. CY не меняется.
Группа команд 8-разрядных сдвигов.
В ней не прибавилось ни одной новой команды. Единственное отли-
чие - возможность расширения смещения "d" до 16 или 24 бит в
командах с адресацией по (XY+d). И еще: не пройдет номер с левы-
ми командами наподобие RL (IX+d),r (сдвиг в ячейке памяти с од-
новременной пересылкой результата в регистр) - эти коды заняты
другими командами.
Группа команд 16- и 32-разрядных сдвигов.
RLCW pp Как RLC, только для пары.
RLCW XY То же для IX, IY.
RLCW (HL) Сдвиг слова (!) по адресу (HL).
RLCW (XY+d) Сдвиг слова (!) по адресу (XY+d).
"d" может быть расширено через DDIR.
RLW То же, что аналогичные инструкции Z80,
RRCW только для операнда формата слово.
RRW
SLAW
SRAW
SRLW
Влияние на флаги аналогично соответствующим инструкциям Z80.
Группа команд работы с отдельными битами.
SET
RES
BIT
Здесь все по-прежнему. Команды работают с теми же 8-битными опе-
рандами, как и в прототипе. Единственное отличие - в операциях
с адресацией по (XY+d) смещение "d" может быть расширено до 16
или 24 бит с помощью DDIR. Группы команд 16-разрядной работы с
отдельными битами не существует.
Группа команд переходов
Мнемоника Смысл Комментарий
Новые команды:
JR ee PC <- PC+ee+4 Относительный переход по двух-
байтовому смещению, отсчитыва-
емому от кода инструкции, следующей после JR
(+4 байта)
JR cc,ee То же - переход по условию C, NC, Z, NZ
JR eee PC <- PC+eee+5 Относительный переход по 3-бай-
товому смещению, отсчитываемому
от следующей инструкции (+5 байт)
JR cc,eee То же - переход по условию C, NC, Z, NZ
DJNZ ee B <- B-1;
Если B не равно 0, то PC <- PC+ee+4
Иначе - PC <- PC+4
Оператор цикла на регистре B
с относительным переходом по 2-байтовому смеще-
нию относительно следующей инструкции (+4 байт)
DJNZ eee B <- B-1;
Если B не равно 0, то PC <- PC+eee+5
Иначе PC <- PC+5
То же с переходом по 3-байтово-
му смещению
Группа команд обращения к подпрограммам
и возврата из подпрограмм
Новые команды:
CALR e (SP-1) <- PCh Переход на подпрограмму относи-
(SP-2) <- PCl тельно следующей команды по
SP <- SP-2 смещению e
PC <- PC+e+3
CALR cc,e То же по условию Z, NZ, C, NC, S, NS, NV, V,
PE, PO, P, M
CALR ee (SP-1) <- PCh Переход на подпрограмму относи-
(SP-2) <- PCl тельно следующей команды по
SP <- SP-2 2-байтовому смещению ee
PC <- PC+ee+4
CALR cc,ee То же по условиям, как для CALR cc,e
CALR eee (SP-1) <- PCh Переход на подпрограмму относи-
(SP-2) <- PCl тельно следующей команды по
SP <- SP-2 3-байтовому смещению eee
PC <- PC+eee+5
CALR cc,eee То же по условиям, как для CALR cc,e
В расширенном режиме процессора в стек заносится 4-байтовый
адрес возврата, соответственно стек растет на 4 значения.
При использовании "старых" команд RST в расширенном режиме
недостающие до 32 бит разряды дополняются нулями.
При использовании относительной адресации в нерасширенном режи-
ме процессора адрес вычисляется по модулю 65536; старшие 16 раз-
рядов = 0.
Во всех случаях e,ee,eee - старший разряд является знаковым.
Группа команд 8-разрядного ввода-вывода.
Мнемоника Смысл Комментарий
Новые команды:
INA A,(nn) A <- port (nn) Ввод байта из порта, непосредст-
венно адресуемого 16-битным ад-
ресом
OUT (C),n port (C) <- n Вывод константы, входящей в сос-
тав команды, в порт, адресуемый
парой BC
OUTA (nn),A port (nn) <- A Вывод данного из аккумулятора в
порт, адресуемый 16-битным зна-
чением,входящим в состав команды
16-разрядный непосредственный адрес "nn" может быть расширен до
24 или 32 бит с помощью DDIR.
Группа инструкций 16-разрядного ввода-вывода.
INW pp,(C) pp <- port (C) Ввод 16-разрядного значения из
порта, адресуемого парой BC, в
пару pp
INAW HL,(nn) HL(15-0) <- port (nn)
Ввод 16-разрядного значения из
порта, адресуемого прямым значе-
нием nn, в пару HL
INIW (HL) <- port (DE)l; Ввод слова из порта (DE)
(HL+1) <- port (DE)h; в память по адресу (HL)
BC(15-0) <- BC(15-0)-1; с отсчетом на паре BC
HL <- HL+2
INIRW То же с организацией цикла на паре BC, пока BC
не достигнет 0
INDW Как INIW, но с декрементом HL
INDRW То же с организацией цикла на паре BC, пока BC
не станет равно 0
OUTW (C),pp port (C) <- pp Вывод значения пары pp в порт,
адресуемый парой BC
OUTW (C),nn port (C) <- nn Вывод 16-разрядной константы nn,
входящей в состав команды, в
порт, адресуемый парой BC
OUTAW (nn),HL port (nn) <- HL(15-0)
Вывод значения пары HL в порт,
адресуемый прямым значением nn
OUTIW port (DE)l <- (HL); Вывод слова с адреса(HL)
port (DE)h <- (HL+1); в порт (DE) с отсчетом
BC(15-0) <- BC(15-0)-1; на паре BC
HL <- HL+2
OTIRW То же с организацией цикла на паре BC, пока BC
не достигнет 0
OUTDW Как OUTIW, но с декрементом HL
OUTDRW То же с организацией цикла на паре BC, пока BC
не достигнет 0
Внутреннее пространство устройств ввода-вывода (ВП УВВ)
ВП УВВ - необычная структура в процессоре Z380, не имеющая ниче-
го похожего в прототипе. Сущность ВП УВВ такова: в процессоре
имеется целый ряд внутренних регистров, носящих вспомогательный
характер или выполняющих некоторые второстепенные управляющие
функции; доступ к этим регистрам возможен как к портам ввода-вы-
вода, расположенным в самом процессоре. При этом каждый такой
регистр имеет свой 32-разрядный адрес во ВП УВВ (правда,в 380-м
задействован только один младший байт 32-разрядного адреса, то
есть адресация ВП УВВ фактически 8-разрядная; остальные разряды
оставлены про запас). У этих регистров есть свои мнемоники, но
они не поддерживаются ассемблером. Для обращения к регистрам ВП
УВВ необходимо указывать их адреса.К некоторым регистрам ВП УВВ
или к отдельным разрядам их может иметься доступ с помощью
команд процессора; например, команды разрешения/запрещения пре-
рывания EI и DI воздействуют на биты регистра IER, имеющего ад-
рес 00000017h. Следует заметить, что RESET устанавливает все ре-
гистры ВП УВВ в состояние,позволяющее эксплуатировать процессор
в типовом режиме, даже не подозревая о существовании ВП УВВ.
Доступ к регистрам ВП УВВ как к внутренним портам может потребо-
ваться при использовании периферийных функций процессора, таких,
как, например, выборка физических блоков ОЗУ с помощью встроен-
ного диспетчера памяти.
INO r,(n) r <- port (n) Ввод из порта ВП УВВ с адресом
n в регистр процессора r
INO (n) <- (n) Чтение порта n ВП УВВ с установ-
кой флагов по результату
OUTO (n),r (n) <- r Вывод из регистра r в порт ВП
УВВ с адресом n
TSTIO n (C) AND n Логическое "И" над результатом
чтения порта ВП УВВ,адресуемого
регистром C, и операндом n
OTIMR (C) <- (HL); Групповой вывод последовательно-
HL <- HL+1; сти байтов из памяти, адресуемой
C <- C+1; HL, в последовательный ряд реги-
B <- B-1; стров ВП УВВ, адресуемый регист-
повторяется, ром C
пока B не 0
OTIM То же, но выводится одиночный байт без организа-
ции цикла
OTDMR Как OTIMR, но с декрементом HL и C
OTDM Как OTIM, но с декрементом HL и C
Примечание: r - регистр D,E,H,L,A.
Регистровый состав внутреннего пространства
устройств ввода-вывода (ВП УВВ)
Регистр Мнемоника Адрес
в ВП УВВ
Регистр-0 выбора кристалла
микросхемы нижней памяти LMCS0 00000000H
Регистр-1 выбора кристалла
микросхемы нижней памяти LMCS1 00000001H
Регистр-0 выбора кристалла
микросхемы верхней памяти UMCS0 00000002H
Регистр-1 выбора кристалла
микросхемы верхней памяти UMCS1 00000003H
Регистр-0 выбора кристалла
микросхемы средней памяти MMCS0 00000004H
Регистр-1 выбора кристалла
микросхемы средней памяти MMCS1 00000005H
Регистр-2 выбора кристалла
микросхемы средней памяти MMCS2 00000006H
Регистр-3 выбора кристалла
микросхемы средней памяти MMCS3 00000007H
Регистр управления тактами
ожидания (WAIT) для нижней
памяти LMWR 00000008H
Регистр управления тактами
ожидания для верхней памяти UMWR 00000009H
Регистр-0 управления тактами
ожидания для средней памяти MMWR0 0000000AH
Регистр-1 управления тактами
ожидания для средней памяти MMWR1 0000000BH
Регистр-2 управления тактами
ожидания для средней памяти MMWR2 0000000CH
Регистр-3 управления тактами
ожидания для средней памяти MMWR3 0000000DH
Регистр управления тактами
ожидания для операций
ввода-вывода IOWR 0000000EH
Регистр управления тактами
ожидания для цикла регенерации
памяти RFWR 0000000FH
Главный регистр управления
разрешением выбора кристаллов
микросхем памяти MSMER 00000010H
Регистр-0 управления шиной
в операциях ввода-вывода IOCR0 00000011H
Регистр-1 управления шиной
в операциях ввода-вывода IOCR1 00000012H
Регистр-0 регенерации памяти RFSHR0 00000013H
Регистр-1 регенерации памяти RFSHR1 00000014H
Регистр-2 регенерации памяти RFSHR2 00000015H
Регистр управления режимом
экономичного останова SMCR 00000016H
Регистр разрешения прерываний IER 00000017H
Регистр общей базовой части
векторов прерываний со входов
/INT1, /INT2 и /INT3 AVBR 00000018H
Регистр флагов по фактам
прерываний по ошибкам в коде
команды TRPBK 00000019H
Управление ресурсами памяти с помощью
встроенного контроллера обращения к памяти
Следует сразу заметить, что использовать встроенный контроллер
памяти (ВКП) вовсе не обязательно. Если быстродействие ОЗУ со-
ответствует тактовой частоте процессора, если внешние схемы
выборки устройств памяти обеспечивают все необходимые электри-
ческие сигналы, о существовании ВКП можно даже не догадываться.
Использование ВКП целесообразно, по-видимому, либо в самых про-
стых устройствах со статическим ОЗУ, либо при наличии медленных
устройств в составе памяти.
Z380 поддерживает две схемы организации сигналов выборки
устройств памяти (Memory Chip Select) в пределах младших 16М
адресного пространства. Первая схема предоставляет для исполь-
зования 6 сигналов выборки устройств памяти с распределением
адресного пространства следующим образом:
00FFFFFFH –––––––––––––––––––––
/UMCS ¦ Верхняя ¦
¦ память ¦
¦–––––––––––––––––––¦
¦¦
¦ Не используется ¦
¦–––––––––––––––––––¦
/MCS3 ¦ Средняя ¦
¦ память-3 ¦
¦–––––––––––––––––––¦
/MCS2 ¦ Средняя ¦
¦ память-2 ¦
¦–––––––––––––––––––¦
/MCS1 ¦ Средняя ¦
¦ память-1 ¦
¦–––––––––––––––––––¦
/MCS0 ¦ Средняя ¦
¦ память-0 ¦
¦–––––––––––––––––––¦
¦¦
¦ Не используется ¦
¦–––––––––––––––––––¦
/LMCS ¦ Нижняя ¦
¦ память ¦
00000000H –––––––––––––––––––––
Вторая схема предоставляет 3 сигнала выборки устройств памяти
с распределением адресного пространства согласно рисунку:
00FFFFFFH –––––––––––––––––––––
/UMCS ¦ Верхняя ¦
¦ память ¦
¦–––––––––––––––––––¦
¦ ¦
¦ ¦
/MCS ¦ Средняя ¦
¦ память ¦
¦ ¦
¦ ¦
¦–––––––––––––––––––¦
/LMCS ¦ Нижняя ¦
¦ память ¦
00000000H –––––––––––––––––––––
При использовании ВКП можно запрограммировать искусственную
затяжку тактов обращения к памяти дополнительно на 1, 2 или
3 такта раздельно для нижней, верхней и средней памяти. При
использовании первой схемы средняя память делится еще на 4
ареала, для каждого из которых также можно установить свою
задержку. Подобное построение памяти целесообразно, видимо,
при использовании устройств с разным быстродействием, что
очевидно. Но сигналы /RAS и /CAS для динамического ОЗУ ВКП не
вырабатывает.
Нижняя память
Нижняя память начинается от адреса 000000000H и определяется
битами 7...4 регистра LMCSR0 и всеми битами регистра LMCSR1.Эти
биты задают разряды шины адреса, которые должны анализироваться
на предмет выставления сигнала /LMCS. Логика анализа такова: ес-
ли бит регистра = 1, то бит шины адреса проверяется на 0. Если
хотя бы в одном сравнении обнаруживается бит шины адреса = 1,то
сигнал /LMCS не вырабатывается и затяжка тактов не выполняется.
Иными словами, для активизации выборки нижней памяти необходимо,
чтобы все заданные биты шины адреса были = 0.
Регистр LMCS0:
–––––––––––––––––––––––––––––––––––––––––––––––––
¦MA15 ¦MA14 ¦MA13 ¦MA12 ¦ 0 ¦ 0 ¦ 0 ¦ ERF ¦
–––––––––––––––––––––––––––––––––––––––––––––––––
MA15...MA12 - биты определения разрядов A15...A12 шины адреса;
ERF - бит разрешения регенерации нижней памяти: 0 - запрещено;
1 - в цикле регенерации сигнал /LMCS активизируется при попада-
нии адреса регенерации в диапазон нижней памяти. RESET сбрасыва-
ет в 0.
Регистр LMCS1:
–––––––––––––––––––––––––––––––––––––––––––––––––
¦MA23 ¦MA22 ¦MA21 ¦MA20 ¦MA19 ¦MA18 ¦MA17 ¦MA16 ¦
–––––––––––––––––––––––––––––––––––––––––––––––––
MA23...MA16 - биты определения разрядов A23...A16 шины адреса.
Пример: при установлении битов MA23...MA12 в 1 диапазон нижней
памяти "простирается" от 0 до %111111111111 (#0FFF), то есть то-
лько в пределах 4К.
Верхняя память
Ареал верхней памяти определяется конечным адресом 00FFFFFFH и
начальным адресом, задаваемым в регистрах UMCSR0 и UMCSR1 анало-
гично подобному для нижней памяти; разница только в том, что
побитная проверка на попадание адреса в диапазон верхней памяти
производится по логике "или": достаточно хотя бы одному заданно-
му разряду шины адреса нести лог.1, чтобы сигнал выборки верх-
ней памяти /UMCS активизировался (при условии разрешения ее вы-
борки вообще).
Регистр UMCSR0:
–––––––––––––––––––––––––––––––––––––––––––––––––
¦MA15 ¦MA14 ¦MA13 ¦MA12 ¦ 0 ¦ 0 ¦ 0 ¦ ERF ¦
–––––––––––––––––––––––––––––––––––––––––––––––––
Регистр UMCSR1:
–––––––––––––––––––––––––––––––––––––––––––––––––
¦MA23 ¦MA22 ¦MA21 ¦MA20 ¦MA19 ¦MA18 ¦MA17 ¦MA16 ¦
–––––––––––––––––––––––––––––––––––––––––––––––––
Биты MA23...MA12 определяют разряды шины адреса, которые должны
проверяться на лог.1 на предмет выставления сигнала /UMCS.
Бит ERF при установке в лог.1 разрешает регенерацию верхней па-
мяти.
Средняя память
По схеме 1 пользователь может задать базовый адрес и общий
размер средней памяти, которая автоматически будет делиться
на 4 равных ареала самим ВКП при попытках обращения к ней.
Диапазон этих ареалов будет определяться 4-мя возможными
комбинациями битов A14 и A15 полного адреса.
По схеме 2 (см. там же) средняя память размещается между нижней
и верхней памятью и определяется границами последних.
Регистр MSMER:
–––––––––––––––––––––––––––––––––––––––––––––––––
¦ENLM ¦ENUM ¦ENM1 ¦ENM2 ¦ - ¦ - ¦ - ¦ SR ¦
–––––––––––––––––––––––––––––––––––––––––––––––––
1 1 0 0 0 <-После
Reset
Выбор схемы 1 или 2 для организации средней памяти, а также раз-
решение выборки верхней или (и) нижней памяти, а также разреше-
ние формирования временных задержек в циклах обращения к этим
областям памяти производится с помощью главного регистра разре-
шения выборки памяти (MSMER). Лог.1 в соответствующих разрядах
разрешает следующие действия:
ENLM - выборка нижней памяти и формирование временных задержек;
ENUM - выборка верхней памяти и формирование временных задержек;
ENM1 - включение 1-й схемы средней памяти и формирование времен-
ных задержек;
ENM2 - включение 2-й схемы средней памяти и формирование времен-
ных задержек;
SR - при 0 - глобальный запрет на работу ВКП и блокирование
выработки всех его сигналов.
При ENM1=1 и ENM2=1 сигнал /MCS0 будет вырабатываться при любом
обращении к средней памяти, а сигналы /MCS1..3 - по логике.
При ENM1=0 и ENM=0 понятие "средняя память" отсутствует.
Регистр MMCSR0:
–––––––––––––––––––––––––––––––––––––––––––––––––
¦MA15 ¦MA14 ¦ - ¦ - ¦ERF3 ¦ERF2 ¦ERF1 ¦ERF0 ¦
–––––––––––––––––––––––––––––––––––––––––––––––––
Регистр MMCSR1:
–––––––––––––––––––––––––––––––––––––––––––––––––
¦MA23 ¦MA22 ¦MA21 ¦MA20 ¦MA19 ¦MA18 ¦MA17 ¦MA16 ¦
–––––––––––––––––––––––––––––––––––––––––––––––––
Регистр MMCSR2:
–––––––––––––––––––––––––––––––––––––––––––––––––
¦BA15 ¦BA14 ¦ - ¦ - ¦ - ¦ - ¦ - ¦ - ¦
–––––––––––––––––––––––––––––––––––––––––––––––––
Регистр MMCSR3:
–––––––––––––––––––––––––––––––––––––––––––––––––
¦BA23 ¦BA22 ¦BA21 ¦BA20 ¦BA19 ¦BA18 ¦BA17 ¦BA16 ¦
–––––––––––––––––––––––––––––––––––––––––––––––––
Разряды BA23...BA14 задают базовые биты адреса, а разряды
MA23...MA14 показывают, какие разряды шины адреса процессора
нужно анализировать на предмет выявления обращения к средней па-
мяти. Логика здесь такова: если какой-либо бит MA равен 1, то
соответствующий бит адреса сравнивается с соответствующим битом
из числа битов BA, и так для всей цепочки разрядов 23...14. По
общему результату сравнения принимается решение о выставлении
одного из сигналов /MCS0.../MCS3. При полном отсутствии совпаде-
ний бит адреса = бит BA принимается решение о невыборке средней
памяти.
Разряды ERF определяют разрешение регенерации соответствующего
ареала средней памяти.
При работе по схеме 2 разряды MA и BA не несут полезной информа-
ции; используется только разряд ERF0 регистра MMCSR0 для опреде-
ления разрешения регенерации всей средней памяти.
Управление тактами ожидания при обращении к нижней, верхней
и средней памяти
При использовании встроенного контроллера обращения к памяти
(ВКП) можно программно задать искусственные задержки в машинных
циклах обращения к определенным для ВКП ареалам нижней, средней
и верхней памяти.
Структура регистров управления задержками одинакова для всех
ареалов памяти:
7 6 5 4 3 2 1 0
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––
¦ T1W2 ¦ T1W1 ¦ T1W0 ¦ T2W1 ¦ T2W0 ¦ T3W2 ¦ T3W1 ¦ T3W0 ¦
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––
"T1", "T2" и "T3" означают номера машинных тактов одного машин-
ного цикла, а "W2", "W1", "W0" - двоичные веса констант програм-
мируемой задержки: например,запись в регистр значения %10100000
задаст задержку в такте T1 на %101 = 5 дополнительных тактов.
Режим экономичного останова
Z380 имеет программно-управляемый режим экономичного останова,
при использовании которого можно достичь резкого снижения энер-
гопотребления процессором и/или микропроцессорной системой. Ес-
ли режим экономичного останова (РЭО) разрешен, активизация РЭО
производится командой процессора SLP (sleep). После выполнения
SLP прекращается трансляция тактовых импульсов на выходы
BUSCLK и IOCLK; сигнал на выходе /STNBY переходит в лог.0, по-
казывая подтверждение РЭО; выполнение операций процессором пре-
кращается; шина адреса переходит в состояние лог.1; шина управ-
ления принимает 3-е состояние. Сигнал /STNBY может использовать-
ся для подачи команды отключения питания других устройств или
хотя бы для блокировки работы внешнего тактового генератора.
Выход из РЭО совершается путем сброса, подачи запроса немаски-
руемого прерывания, подачи запроса маскируемого прерывания лю-
бого типа (если разрешено EI), а также запросом на захват шин,
если таковой разрешен в регистре SR.
Если РЭО не разрешен, команда SLP исполняется как HALT (включая
выставление сигнала подтверждения /HALT).
Управление РЭО осуществляется с помощью Регистра Управления
РЭО и Возвратом из РЭО (SMCR). (Адрес SMCR во ВП УВВ-00000016h).
7 6 5 4 3 2 1 0
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––
¦ STBY ¦ BRXT ¦ -- ¦ -- ¦ -- ¦ WM2 ¦ WM1 ¦ WM0 ¦
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Назначение разрядов регистра SMCR:
STBY - лог.1 разрешает переход в РЭО;
BRXT - лог.1 разрешает выход из РЭО по запросу на захват шин;
WM2...WM0 - задают время задержки в периодах основной частоты
тактового генератора, в течение которого процессор будет удер-
живаться в "подвешенном" состоянии (дословно "WM" - Warm-Up
time, то есть "время прогрева") после выхода из РЭО; это вре-
мя может быть необходимо для вхождения в рабочий режим других
устройств, отключенных по сигналу /STNBY. Установка в лог.1 би-
та WM0 задает задержку 2^16 периодов тактовой частоты, WM1 -
2^17, WM2 - 2^19. В течение времени прогрева трансляция импуль-
сов тактовой частоты на выходы BUSCLK и IOCLK не производится.
При всех лог.0 задержка не отрабатывается.
Система прерываний
Структура системы прерываний (СП) Z380 содержит совместимую с
Z80 и Z180 подгруппу, а также включает в себя новые элементы,
например, обработку прерываний по неверному коду команды.
Аппаратные прерывания вызываются подачей низкого уровня на
один из входов /NMI, /INT3../INT0.
/NMI - вход немаскируемого прерывания. При обработке NMI про-
цессор засылает в стек адрес возврата, запоминает флаг разре-
шения маскируемых прерываний, запрещает маскируемые прерывания
и переходит на адрес 00000066H, то есть аналогично Z80. Разни-
ца в том, что NMI в 380-м имеет не наивысший приоритет (!) -
в первую очередь обслуживается программное прерывание по не-
правильному коду команды (trap).
Третьим по уровню приоритета является прерывание со входа
/INT0, которое полностью аналогично обычному маскируемому пре-
рыванию Z80. В частности, с этого входа поддержаны 4 типа пре-
рываний IM 0, IM 1, IM 2 и IM 3. Режим IM 3 отличается от IM 2
только использованием 16-разрядных вектора и смещения: биты
A31..A16 задаются расширенным регистром I, а биты A15..A0 счи-
тываются с шины данных в такте подтверждения прерывания; по
полученному адресу считывается слово или длинное слово (в за-
висимости от режима процессора), которое и служит адресом пе-
рехода на обслуживающую подпрограмму.
Прерывания /INT1, /INT2, /INT3 (в порядке убывания приоритета)
вызываются подачей низкого уровня на соответствующий вход, а
адрес обрабатывающей процедуры определяется так называемым
связанным вектором, который вычисляется следующим образом:
A31..A16 берутся из расширенного регистра I; A15..A9 определя-
ются содержимым регистра AVBR (его адрес во ВП УВВ 00000018H);
A8 = 0; A7..A0 соответственно равны (в 16-ричном виде) 00H для
/INT1, 04H - для /INT2, 08H - для /INT3. По вычисленному адре-
су считывается слово или длинное слово (в зависимости от режи-
ма процессора), которое и служит адресом перехода на обслужи-
вающую процедуру.
AVBR:
7 6 5 4 3 2 1 0
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––
¦ AB15 ¦ AB14 ¦ AB13 ¦ AB12 ¦ AB11 ¦ AB10 ¦ AB9 ¦ 0 ¦
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Разрешение/запрещение маскируемых прерываний производится либо
командами EI 0 ... EI 3 для /INT0.../INT3, либо прямым манипу-
лированием флагами разрешения прерываний, которые находятся в
регистре IER (регистр разрешения прерываний; адрес во ВП УВВ
00000017H) и в регистре SR (бит 5). Распределение обязанностей
между IER и 5-м битом SR таково: биты IER показывают лишь возмо-
жность осуществления прерывания с конкретного входа /INT 0..3,
а 5-й бит SR - это флаг именно разрешения прерываний. Командой
DI можно разом запретить все маскируемые прерывания. EI разреша-
ет прерывания, но только те, которые разблокированы в IER.
IER:
7 6 5 4 3 2 1 0
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––
¦ -- ¦ -- ¦ -- ¦ -- ¦ IE3 ¦ IE2 ¦ IE1 ¦ IE0 ¦
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––
0 0 0 1