Z80 - недокументированные команды процессора Z80

Дата добавления инфы 07.09.2023

Тесты процессоров Z80 и их клонов на различных частотах

"НЕИЗВЕСТНЫЕ" КОМАНДЫ МИКРОПРОЦЕССОРА Z-80

Среди неопубликованных инструкций чаще всего встречаются команды, работающие с половинками индексных регистров IX и IY в группе команд, не предваряемых никаким другим префиксом (т.е. 0CBH или 0EDH). Они основываются на префиксировании кодом 0DDH (для IX) либо 0FDH (для IY) команды, касающейся регистров H (для старшего байта) и L (для младшего байта). Тогда вместо всего регистра берется соответствующая половинка индексного регистра. Через HX обозначается обычно старшая часть регистра IX, через LX - младшая. Аналогично HY и LY. Вот примеры:

Код Инструкция Код Инструкция Код Инструкция
---------------- ------------------ -----------------
24 INC H DD 24 INC HX FD 24 INC HY
2D DEC L DD 2D DEC LX FD 2D DEC LY
4C LD C,H DD 4C LD C,HX FD 4C LD C,HY
64 LD H,H DD 64 LD HX,HX FD 64 LD HY,HY
26 01 LD H,1 DD 26 01 LD HX,1 FD 26 01 LD HY,1
B5 OR L DD B5 OR LX FD B5 OR LY

z80 Код Инструкция Код Инструкция Код Инструкция

Это актуально для всех команд однобайтовых пересылок между регистрами и для восьмибитных операций AND, OR, XOR, ADD, ADC, SUB, SBC и CP, выполняемых в аккумуляторе.
Префикс 0FDH, либо 0DDH относится ко всем регистрам H,L, либо HL, присутствующим в команде, поэтому невозможно использование в одной инструкции ячейки, адресованной через (HL), регистра HL, H, либо L, совместно с HX, HY, LX, LY (в дальнейшем ограничимся регистром IX, хотя в такой же мере это касается и регистра IY), например:

66 LD H,(HL) DD 66 dd LD HX,(IX+d)
75 LD (HL),L DD 75 dd LD (IX+d),LX
65 LD H,L DD 65 LD HX,IX

Несколько иначе обстоит дело в случае ротации ячейки, адресованной индексным регистром, т.е. в случае инструкций, начинающихся кодом DD CB. Инструкции типа RR (IX+dd) и им подобные
подробно описаны во всевозможных доступных материалах по микропроцессору Z-80, однако мало кто знает об инструкциях типа RR (IX+dd),r и т.п., где r означает произвольный регистр микропроцессора. Они основаны на префиксировании кодом 0DDH или 0FDH инструкций типа RR r. Аналогично происходит с инструкциями SET n,(IX+d),r и RES n,(IX+d),r (но для BIT - уже нет). Действие такой инструкции основывается на выполнении "нормальной" команды RR (IX+d) (либо аналогичной), SET n,(IX+d) либо RES n,(IX+d), а затем пересылки результата как в ячейку (IX+d), так и в соответствующий регистр микропроцессора. Например:

CB 13 RL E
DD CB 01 13 RL (IX+1),E

производит ротацию ячейки с адресом IX+1 влево на 1 бит и пересылку результата в регистр E, что "обычным" способом следовало бы сделать так:

DD CB 01 16 RL (IX+1)
DD 5E 01 LD E,(IX+1)

Под конец описания инструкций этого типа следует напомнить еще, что не существует команды EX DE,IX или EX DE,IY. Префиксирование команды EX DE,HL не даст результата. Аналогично - префиксирование команд, коды которых начинаются с EDH, а также с тех, в которых не участвует ни один из регистров H,L или пара HL (например, LD B,n, RRCA и т.д.).

Следующей интересной командой является SLI (Shift left and Increment), действие которой аналогично SLA, с той разницей, что младший бит устанавливается в 1. Состояние указателей идентично, как и при SLA:

CB 37 SLI A
CB 36 SLI (HL)
DD CB dd 36 SLI (IX+d)
DD CB dd 57 SLI (IX+d),A

Иногда доставляет хлопот строение флагового регистра, особенно тогда, когда он используется нетипично, например:

PUSH AF
POP BC
RL C
JR NC,..

Его строение представлено на рисунке:

НЕИЗВЕСТНЫЕ" КОМАНДЫ МИКРОПРОЦЕССОРА Z-80

Дополнительным свойством регистра F является то, что биты 3 и 5 (обозначаемые F3 и F5) точно отражают состояние 3-го и 5-го бита результата последней, на данный момент, выполненной восьмибитовой арифметической или логической операции, либо операции IN r,(C) и IN F,(C). Например, после выполнения:

XOR A ;запись значения 0
ADD A,15 ;результат - 00001111B

указатель F5 будет обнулен, F3 - установлен 1.

И последней, видимо, тайной Z-80 (кто может поручиться, что их не больше?) является регистр регенерации памяти R, а точнее - тот факт, что когда после очередного машинного цикла процессора инкрементируется содержимое этого регистра, его старший бит остается неизменным, поэтому он м.б. использован для хранения произвольной однобитной информации. Важно также то, что инструкция LD A,R , при помощи которой м.б. получена эта информация, устанавливает также указатель S, т.е. не требуется дополнительная команда, проверяющая значение этого бита.

Описание подготовил В.Пушков 23.01.96.

Z80 и установка кр1531тм2

 

  

 

Полезные ссылки

На предыдущую страницу  На главную страницу На следующую страницу