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