Руководство программиста КРИСС CP/M
Компьютер жив тогда, когда на нём пишут программы! Вся техническая информация будет собираться и актуализироваться на этой странице. Если у Вас есть вопросы, Вам чего-то не хватает в описании, Вы заметили ошибку или опучатку, у Вас есть предложения по расширению стандартных функций - смело пишите на mail@ogss.ru или mail@radio.ru.
Наиболее подробное описание правил и приёмов написания программ и работы с компьютером КРИСС CP/M ищите в журналах Радио за 2021 год. У компьютера есть все необходимые интерфейсы и возможности, а богатый набор языков разработки (Бейсик, Си, Паскаль, Фортран, Модула) позволит сделать практически всё, что можно придумать!
Для написания программ желательно знать базовые принципы устройства ОС CP/M, рекомендуем прочитать:
- Уэйт М., Ангермейер Дж. - Операционная система CP-M, в оригинальном названии "Библия CP/M". Скан взят из Интернета, спасибо тому, кто потратил силы и время на оцифровку!
- Andy Johnson-Laird THE PROGRAMMER’S CP/M HANDBOOK, в архиве исходные коды примеров из книги, на английском языке.
Сами языки программирования никаких особенностей не имеют, ко всем языкам приложены найденные инструкции по работе с ними. Если не хватает какой-то информации - пишите запросы по электронной почте, информация будет добавлена.
Для удобства подготовлена краткое руководство по базовым ESC-командам, скачать его можно тут: criss.fun/criss/pdf/CRISS_Manual_RUS.pdf.
Специальные символы и ESC-последовательности
В базовой версии поддерживается некий усреднённый набор специальных символов и ESC-последовательностей для базового режима работы (режим совместимости CRISS). Для других платформ коды могут быть другие, см. документацию на платформы.
#N обозначает символ с кодом N (chr(N)), символ - стандартный символ ASCII.
DEC | HEX | Mnemonic | Описание | Description | Стандарт/Standard | |
---|---|---|---|---|---|---|
#1 | 0x01 | ^A | HOME | установка курсора в позицию 1,1 | locate cursor to home position top left corner | Terminal |
#7 | 0x07 | ^G | BELL | системный звуковой сигнал | system beep | Terminal |
#8 | 0x08 | ^H | CURLEFT | перемещение курсора на символ влево | move cursor 1 char left | Terminal |
#9 | 0x09 | ^I | TAB | установка курсора в следующую позицию табуляции | move cursor to next tab position | Terminal |
#10 | 0x0a | ^J | LF | перемещение курсора на следующую строку | move cursor to next line, line feed | Terminal |
#12 | 0x0c | ^L | CLRSCR | очистка экрана и установка курсора в позицию 1,1 | clear screen and home cursor | Terminal |
#13 | 0x0d | ^M | CR | установка курсора в начало текущей строки | locate cursor to the 1st column, carriage return | Terminal |
#14 | 0x0e | ^N | SCROLLOFF | запрет скроллинга | disable screen scrolling | Robotron 1715 |
#15 | 0x0f | ^O | SCROLLON | разрешение сколлинга экрана | enable screen scrolling | Robotron 1715 |
#20 | 0x14 | ^T | CLRCUR | стирание с позиции курсора до конца экрана | clear screen from the cursor to end of the screen | Terminal |
#21 | 0x15 | ^U | CURRIGHT | перемещение курсора на 1 позицию вправо | move cursor 1 char right | Terminal |
#22 | 0x16 | ^V | CLREOL | стирание с позиции курсора до конца строки | clear from the cursor to the end of line | Terminal |
#24 | 0x18 | ^X | CLRLN | стирание строки | clear line | Terminal |
#26 | 0x1a | ^Z | CURUP | перемещение курсора на 1 позицию вверх | move cursor 1 char up | терм. |
#27 | 0x1b | ESC | управляющий код ESC | ESC control char | Terminal | |
#30 | 0x1e | CUROFF | выключение курсора | cursor off | CRISS | |
#31 | 0x1f | CURON | включение курсора | cursor on | CRISS |
Перечень поддерживаемых ESC-последовательностей приведён в таблице. Строки и столбцы считаются от 1. Символ звёздочки, если идёт не сразу за командой #27, обозначает любой символ.
ESC-seq | Описание | Descriptio | Standard | FW |
---|---|---|---|---|
#27 0 | выключение курсора | cursor off | CRISS | |
#27 1 | включение курсора | cursor on | CRISS | |
#27 \ chr(n) | вывод на экран символа chr(n) для рисования символов #1..#31 | output symbol with code n | CRISS | |
#27 #124 chr(n) | вывод на экран символа chr(n) в обхрд видеопамяти | output symbol with code n bypassing vide RAM | CRISS | 4.66 |
#27 #9 chr(x) | установить курсор в столбец x | set cursor to column x | CRISS | |
#27 Z chr(x) | установка видережима, биты 0-4 - число строк, 7-5 - таблица ЗГ (со стиранием экрана) | set video mode: bits 0-4 contains lines number; 7-5 - codepage | CRISS | |
#27 chr(127+y) chr(127+x) | установка курсора в позицию x,y | set cursor to pos x,y | Robotron 1715 | |
#27 ^ * | игнорируется | ignored | Robotron 1715 | |
#27 _ * | игнорируется | ignored | Robotron 1715 | |
#27 = chr(31+y) chr(31+x) | установка курсора в позицию x,y | set cursor to pos x,y | KAYPRO | |
#27 B 4 | выключение курсора | cursor off | KAYPRO | |
#27 C 4 | включение курсора | cursor on | KAYPRO | |
#27 B 6 | запомнить текущее положение курсора | store cursor position | KAYPRO | |
#27 C 6 | восстановить положение курсора | restore cursor position | KAYPRO | |
#27 R | Удалить строку | remove line | KAYPRO | |
#27 E | Вставить строку | insert line | KAYPRO | |
#27 Y chr(y+1) chr(x+1) | установка курсора в позицию x,y | set cursor to pos x,y | TRS-80 | |
#27 H | установка курсора в позицию 1,1 | set cursor to home pos 1,1 | TRS-80 | |
#27 J | очистка экрана от позиции курсора до конца экрана | clear screen from the cursor to end of screen | TRS-80 | |
#27 K | очистка экрана от позиции курсора до конца строки | clear from the cursor to end of line | TRS-80 | |
#27 j | очистка экрана | clear screen | TRS-80 | |
#27 B S | запомнить экран во внутреннем буфере | store screen in internal buffer | CRISS | 4.65+ |
#27 C S | восстановить экран из внутреннего буфера | restore screen from internal buffer | CRISS | 4.65+ |
Команды переключения видео-режима:
ESC-seq | Описание | Descriptio | Standard | FW |
---|---|---|---|---|
#27 G 0 | Выбор знакогенератора 0 и 24 строки с очисткой экрана | select standard symbols set 24 lines | CRISS | 4.58 |
#27 G 1 | Выбор знакогенератора 2 и 24 строки с очисткой экрана | select symbols set 2 and 24 lines | CRISS | 4.58 |
#27 G 2 | Выбор знакогенератора 3 и 24 строки с очисткой экрана | select symbols set 3 and 24 lines | CRISS | 4.58 |
#27 G 3 | Выбор знакогенератора 4 с очисткой экрана | select symbols set 4 and 24 lines | CRISS | 4.58 |
#27 G 4 | Переключение в графический режим с очисткой экрана | select graphic mode | KAYPRO | |
#27 G 5 | Выбор знакогенератора 0 и 25 строк с очисткой экрана | select standard symbols set 25 lines | CRISS | 4.58 |
#27 G 6 | Выбор знакогенератора 0 и 30 строк 64 символа с очисткой экрана | select standard symbols set 30 lines x 64 chars | CRISS | 4.64 |
#27 G 7 | Выбор знакогенератора 4 и 30 строк 64 символа с очисткой экрана | select 4th symbols set 30 lines x 64 chars | CRISS | 4.64 |
#27 G 8 | Выбор знакогенератора 0 и 31 строка 64 символа с очисткой экрана | select standard symbols set 31 lines x 64 chars | CRISS | 4.64 |
#27 G 8 | Выбор знакогенератора 4 и 31 строка 64 символа с очисткой экрана | select 4th symbols set 31 lines x 64 chars | CRISS | 4.64 |
#27 G S | Специальный режим - таблица знакогенератора определяется списком по адресу 0xf800+24*80, режим 24 строки 80 символов с очисткой экрана | Special mode, symbols sets are selected per line at 0xf800+24*80, 24 lines x 80 chars | CRISS | 4.64 |
#27 G s | Переход в режим Sleep | Sleep mode | CRISS | 4.66 |
#27 G w | Возврат из режима Sleep без очистки экрана | Return from Sleep mode | CRISS | 4.66 |
Коды для команд графики:
ESC-seq | Описание | Descriptio | Standard | FW |
---|---|---|---|---|
#27 G 4 | включить графический режим | Graphics mode | KAYPRO | |
#27 G N | включить текстовый режим 24x80 | Text mode 24x80 | KAYPRO | |
#27 * chr(y) chr(x) | установка точки в графическом режиме | Put pixel | KAYPRO | |
#27 chr(32) chr(y) chr(x) | стирание точки в графическом режиме | Clear pixel | KAYPRO | |
#27 # chr(y) chr(x) | инверсия точки в графическом режиме | Invert the pixel | CRISS | |
#27 L chr(y1) chr(x1) chr(y2) chr(x2) | рисование линии в графическом режиме | Draw line | KAYPRO | |
#27 D chr(y1) chr(x1) chr(y2) chr(x2) | стирание линии в графическом режиме | Clear line | KAYPRO | |
#27 x chr(y1) chr(x1) chr(y2) chr(x2) | инверсия линии в графическом режиме | Invert the line | CRISS | |
#27 c chr(S) chr(y) chr(x) chr(R) | рисование сегментов окружности (S) | Draw circle | CRISS |
Команды управления периферией
ESC-seq | Описание | Descriptio | Standard | FW |
---|---|---|---|---|
#27 g CH VAL | вывод значения в стандартный канал GPIO адрес расширителя CH, VAL - значение | write VAL to GPIO channel chip CH | CRISS | 4.64+ |
#27 k # | запись символа во входной поток клавиатуры | return char to CON input | CRISS | 4.65+ |
#27 m n1 n2 .. nk 4 cmd | Проигрывание мелодии, n1..nk - ноты, cmd - команда проигрывания | Play melody, n1..nk - notes, cmd - play command | CRISS | 4.66+ |
Команды специального ввода/вывода на экран
ESC-seq | Описание | Descriptio | Standard | FW |
---|---|---|---|---|
#27 W x1 y1 x2 y2 | Оконный вывод - установить границы | Windowed output - set limits | CRISS | 4.65+ |
#27 w # | Оконный вывод: значение # = C - очистка, U - скроллинг, F - двойная рамка, f - одинарная рамка | Windowed output: # value: C - clear window, U - scroll window, F - double frame, f - single frame | CRISS | 4.65+ |
#27 y X Y | Оконный вывод - установить курсор в окне, X, Y - от 1 до размера окна | Windowed output - relative set cursor, X, Y count from 1 to window size | CRISS | 4.65+ |
#27 a B | Закрепить нижнюю строку экрана как статусную | Fix bottom line as a status bar line | CRISS | 4.67+ |
#27 a T | Закрепить верхнюю строку экрана как статусную | Fix top line as a status bar line | CRISS | 4.67+ |
#27 A x | Сохраняет позицию курсора (ESC+B+6), выключает его и ставит в позицию x статусной строки | Store and hide cursor and place it to position x of the status line | CRISS | 4.67+ |
Команды работы с модулем цветности
ESC-seq | Описание | Descriptio | Standard | FW |
---|---|---|---|---|
#27 q # | Вывод команды # в интерфейс МК ФСЦ | Colored output - raw command | CRISS | 4.66+ |
#27 r /SELPHRGYBMCW/ | Управляющая команда интерфейса ФСЦ: S -- скроллинг, E -- очистка экрана, L -- очистка строки, P -- переход в режим цветовых схем, HRGYBMCW -- установить цвет вывода: чёрный, красный, зелёный, жёлтый, синий, малиновый, циан, белый | Colored output - control command | CRISS | 4.66+ |
#27 s /1-16/ /0-7/ | Вывести с позиции экранного курсора 1--16 символов цветом 0--7, соответственно чёрный, красный, зелёный, жёлтый, синий, малиновый, циан, белый | Colored output - Output command | CRISS | 4.66+ |
Коды клавиатуры
Функциональные и специальные клавиши возвращаются как ASCII-символы в диапазоне 1-31, перечень возвращаемых значений приведён в таблице. В своём большинстве клавиши соответствуют стандартам редактора WordStar. Скан-коды клавиш и структура клавиш-модификаторов в разделах "Скан-коды клавиш" и "Порты ввода/вывода".
DEC | CTRL | Клавиша / Кey | DEC | CTRL | Клавиша / Key | DEC | CTRL | Клавиша / Key |
---|---|---|---|---|---|---|---|---|
0 | ^@ | - | 10 | ^J | F1 | 20 | ^T | Ctrl-Del |
1 | ^A | Ctrl-(←) | 11 | ^K | F2 | 21 | ^U | F9 |
2 | ^B | F6 | 12 | ^L | F7 | 22 | ^V | Ins |
3 | ^C | PgDn | 13 | ^M | Enter (ET) | 23 | ^W | End |
4 | ^D | (→) | 14 | ^N | F8 | 24 | ^X | (↓) |
5 | ^E | (↑) | 15 | ^O | F3 | 25 | ^Y | F10 |
6 | ^F | Ctrl-(→) | 16 | ^P | F4 | 26 | ^Z | Home |
7 | ^G | Del | 17 | ^Q | F5 | 27 | - | ESC |
8 | ^H | Забой (Backspace) | 18 | ^R | PgUp | 28 | - | F11 |
9 | ^I | TAB | 19 | ^S | (←) | 29 | - | F12 |
127 | Ctrl-Забой (Ctrl-Backspace) |
Комбинации клавиш Ctrl + Alt + цифровая клавиатура возвращают символы псевдографики одиночной линии, Shift + Ctrl + Alt + цифровая клавиатура - сдвоенная линия. Коды символов соответствуют кодировке CP 866. Расположение символов показано в таблице.
NUM | / | * | - |
┌ | ┬ | ┐ | │ |
├ | ┼ | ┤ | |
└ | ┴ | ┘ | ET |
─ | Del |
Ввод символа по коду с нажатой клавишей Alt не реализован.
С версии прошивки КВУ 0.22 комбинация клавиш Ctrl + Alt + клавиша возвращает символы псевдографики: основные цифровые клавиши - знаки фигур, I, O - спецсимволы, QWERTYU - символы заполнения и рисования стен, остальные - символы псевдографики для соединения одинарных и двойных линий рамок.
Скан-коды клавиш
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
00 | F9 | F7 | F5 | F3 | F1 | F2 | F12 | F10 | F8 | F6 | F4 | TAB | тильда | |||
10 | Alt | LShift | Ctrl | Q | 1! | Z | S | A | W | 2@ | ||||||
20 | C | X | D | E | 4$ | 3# | Space | V | F | T | R | 5% | ||||
30 | N | B | H | G | Y | 6^ | M | J | U | 7& | 8* | |||||
40 | ,< | K | I | O | 0) | 9( | .> | /? | L | ;: | P | -_ | ||||
50 | '" | * | { | =+ | CapsLock | RShift | Enter | } | END | \ | Left | Home | ||||
60 | INS | DEL | Down | Right | Up | PgDown | BSpace | PgUp | 1 | 4 | 7 | |||||
70 | 0 | KP. | 2 | 5 | 6 | 8 | ESC | NUMLOCK | F11 | KP+ | 3 | KP- | KP* | 9 | SCRLOCK |
Таблицы знакогенератора
Для редактирования таблиц знакогенератора рекомендуется использовать редактор ZEDITOR Виталия Поединка, доступного тут: 86rk.ru/zeditor/.
Основная кодовая страница CP0, в основу положена кодировка CP866. Базовая для режима совместимости КРИСС. Актуальна начиная с обновления 30.11.2021 г. Стабильная, возможные изменения только в отрисовке символов.
Кодовая таблица графического режима (CP1). Точка в данной таблице не заполняет отведённого пространства полностью, можно использовать альтернативную версию таблицы ЗГ, где точка квадратные, с частичным или полным заполнением блока 4x5 пикселов.
Кодовая страница CP2 ориентирована на режим эмуляции Robotron 1715 RU, реализована поддержка атрибута инверсии.
Кодовая страница CP3 ориентирована на режим эмуляции Robotron 1715 EN, KAYPRO, TRS-80, MICROBEE, реализована поддержка атрибута инверсии и символов псевдографики. Проработка режима совместимости продолжается, возможны изменения в данной таблице.
Таблица CP4 находится в процессе проработки, предполагается наполнение её символами игровой псевдографики. Все предложения приветствуются!
Синтезатор мелодий
Проигрывание мелодии запускается записью в порт управления (214). Команда, в зависимости от значения старших битов, имеет разные значения.
Для проигрывания программной загруженной мелодии:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
PD2 | PD1 | PD0 | ND4 | ND3 | ND2 | ND1 | ND0 |
- PD2..PD0 - длительность паузы между нотами, от 0 до 6
- ND4..ND0 - длительность ноты длительностью 1/8
Единица длительности равна 10 мс.
Для проигрывания мелодии из набора преднастроенных (системных) мелодий:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
1 | 1 | 1 | 0 | PN3 | PN2 | PN1 | PN0 |
- PN3..PN0 - номер мелодии в ПЗУ (системные мелодии), мелодии записаны в ПЗУ с адреса 0x0100 блоками по 16 байт, первый байт - команда воспроизведения, далее 15 нот мелодии (прошивка 0.20+).
Специальные команды вывода в порт управления:
- 0xFF - останавливает проигрывание мелодии (прошивка 0.20+)
- 0xFE - запускает проигрывание первой ноты до получения команды 0xFF (прошивка 0.22+)
После окончания воспроизведения чтение из порта вернёт 0.
Структура байта ноты для проигрывания имеет вид:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
NI4 | NI3 | NI2 | NI1 | NI0 | SPB | DI1 | DI0 |
- NI4..NI0 - индекс высоты тона для проигрывания
- SPB - бит подавления паузы между нотами, когда равен 1 пауза подавляется
- DI1..DI0 - индекс длительности: 0 соответствует длительности 1/8, 1 - 1/4, 2 - 1/2, 3 - 1
Некоторые значения байта ноты обозначают специальные команды:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 1 | C1 | C0 |
- C0, C1 - код специальной команды
Специальные кманды:
- 0 (0x04) - конец мелодии
- 1 (0x05) - повторение мелодии (прошивка 0.20+)
Для быстрого написания мелодий можно воспользоваться таблицей индексов высот тона.
Индекс | NI4..NI0 | Символьный код | Частота, Гц | Нота | Примечание |
---|---|---|---|---|---|
0 | 0 | - | - | - | Пауза |
1 | 8 | 2-6 | 880.00 | A | Ля второй октавы |
2 | 16 | 2-5/6 | 830.60 | G# | Соль-диез второй октавы |
3 | 24 | 2-5 | 784.00 | G | Соль второй октавы |
4 | 32 | 2-4/5 | 739.98 | F# | Фа-диез второй октавы |
5 | 40 | 2-4 | 698.46 | F | Фа второй октавы |
6 | 48 | 2-3 | 659.26 | E | Ми второй октавы |
7 | 56 | 2-2/3 | 622.26 | D# | Ре-диез второй октавы |
8 | 64 | 2-2 | 587.32 | D | Ре второй октавы |
9 | 72 | 2-1/2 | 554.36 | C# | До-диез второй октавы |
10 | 80 | 2-1 | 523.25 | C | До второй октавы |
11 | 88 | 1-7 | 493.88 | B | Си первой октавы |
12 | 96 | 1-6/7 | 466.16 | A# | Ля-диез первой октавы |
13 | 104 | 1-6 | 440.00 | A | Ля первой октавы |
14 | 112 | 1-5/6 | 415.30 | G# | Соль-диез первой октавы |
15 | 120 | 1-5 | 392.00 | G | Соль первой октавы |
16 | 128 | 1-4/5 | 369.99 | F# | Фа-диез первой октавы |
17 | 136 | 1-4 | 349.23 | F | Фа первой октавы |
18 | 144 | 1-3 | 329.63 | E | Ми первой октавы |
19 | 152 | 1-2/3 | 311.13 | D# | Ре-диез первой октавы |
20 | 160 | 1-2 | 293.66 | D | Ре первой октавы |
21 | 168 | 1-1/2 | 277.18 | C# | До-диез первой октавы |
22 | 176 | 1-1 | 261.63 | C | До первой октавы |
23 | 184 | 0-7 | 246.96 | B | Си малой октавы |
24 | 192 | 0-6/7 | 233.08 | A# | Ля-диез малой октавы |
25 | 200 | 0-6 | 220.00 | A | Ля малой октавы |
26 | 208 | 0-5/6 | 207.00 | G# | Соль-диез малой октавы |
27 | 216 | 0-5 | 196.00 | G | Соль малой октавы |
28 | 224 | 0-4/5 | 185.00 | F# | Фа-диез малой октавы |
29 | 232 | 0-4 | 174.62 | F | Фа малой октавы |
30 | 240 | 0-3 | 164.81 | E | Ми малой октавы |
31 | 248 | 0-2/3 | 155.56 | D# | Ре-диез малой октавы |
Пример кода, играющего мелодию "от улыбки хмурый день светлей":
procedure music; const m:array[224..233] of byte = (121,145,106,122,161,137,145,161,178,4); var i:integer; begin for i:=224 to 233 do port[i]:=m[i]; port[214]:=10; end;
Порты ввода/вывода
В данном разделе приведено описание лишь основных портов ввода/вывода, доступных для CP/M-программ через команды IN/OUT. Порядок работы с полным набором портов может быть выслан по отдельному запросу.
Порты с номерами 00h - СFh обслуживаются ПО уровня обеспечения аппаратной совместимости.
Порт 0xFE - порт работы с внешними устройствами (ЧРВ, сеть, ...), порт 0xFF - порт работы с внутренними устройствами МК ЦПУ (регистры и пр.).
Системные порты ввода вывода приведены в таблице
HEX | DEC | Index | Название | Title | Описание | Description | * |
---|---|---|---|---|---|---|---|
DO | 208 | VSTAT | Порт видеоконтроллера | Video controller control port | Установка кодовой страницы и числа строк экрана | Line number and code page settings | R/W |
D1 | 209 | VCURH | -"- | -"- | Адрес отображаемого курсора (старший байт) | Cursor address H | R/W |
D2 | 210 | VCURL | -"- | -"- | Адрес отображаемого курсора (младший байт) | Cursor address L | R/W |
D3 | 211 | KMODK | Порт контроллера клавиатуры | Keyboard controller control port | Значение модификаторов | Modkeys values | R |
D4 | 212 | KACTK | -"- | -"- | Скан-код клавиши | Key scan-code value | R |
D5 | 213 | KCHAR | -"- | -"- | CP866 Код нажатой клавиши | Decoded key value | R/W |
D6 | 214 | MPCMD | Порт управления синтезатора мелодий | Melody generator control port | Команда для выполнения синтезатором мелодий | Command | R/W |
E0-EF | 224-239 | MPBUF | -"- | -"- | Ноты для воспроизведения | Notes buffer | R/W |
D7 | 215 | TWCMD | Порт управления GPIO | GPIO controller control port | TWI-команда для выполнения | TWI command to be executed | R/W |
D8 | 216 | TWDTI | -"- | -"- | Параметр или возвращаемое значение команды | TWI parameter | R/W |
DB | 219 | SYSRQ | Системный порт | System command control port | Команда | Command to execute | R/W |
DC | 220 | SYSAA | -"- | -"- | Адрес | Address value | W |
DD | 221 | SYSVV | -"- | -"- | Значение | Parameter value | R/W |
DE | 222 | CTCVV | Порт управления таймером | Timer port | Задание/текущее состояния таймера 10мс | Current value 10ms step | R/W |
DF | 223 | COMTC | Порт управления COM-каналом | RS-232 control port | Установка/чтение счётчика передачи | Output counter | R/W |
F1 | 241 | COMST | -"- | -"- | Флаг наличия символа во буфере | Symbol ready flag | R, Clear-on-read port |
F2 | 242 | COMTX | -"- | -"- | Символ для передачи | Symbol to transmit | W |
F3 | 243 | COMRX | -"- | -"- | Принятый символ | Received symbol | R, Clear-on-read port |
Структура байта управления экраном (порт управления видеоконтроллера)
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
LN4 | LN3 | LN2 | LN1 | LN0 | CP2 | CP1 | CP0 |
- LN4..LN0 - число строк на экране, от 1 до 25
- CP2..CP0 - кодовая страница, от 0 до 4
С версии 0.21 прошивки МК VGA добавлен перевод видеоадаптера в режим сна записью значения 0x00 в порт управления экраном D0/208. Для пробуждения необходимо установить требуемый видеорежим.
Структура байта кодов-модификаторов клавиатуры, значения битов 5-7 не определены.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
- | - | - | ALT | CAPSLOCK | SCROLLOCK | SHIFT | CTRL |
- биты 0-4 - значения модификаторов
Системный пор SYSRQ 219 (0xDB) работает в режиме чтения/записи, частично его биты имеют роль системных флагов. Структура байта порта:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
SRQ | MSS | LCR | - | CMD3 | CMD2 | CMD1 | CMD0 |
- SRQ - флаг запроса исполнения системной команды, равен 0, когда команда выполнена
- MSS - флаг активного состояния манипулятора мышь, 1 - мышь активна
- LCR - внутренний флаг запроса изменения состояния индикатора NumLock, 1 - запрос на изменение в соответствии со значением бита MSS
- Бит 4 - зарезервирован и читается как 0
- CMD3-CMD0 - код системной команды: 0x01 -- чтение 8-битного регистра, 0x02, 0x03 -- запись восьми битного/шестнадцатибитного регистра соответственно, 0x0E -- запрос версии прошивки, 0x0F -- аппаратный сброс (RESET) (прошивка 0.23+)
Для исполнения команды необходимо:
- прочитать значение порта, убедиться, что флаг SRQ==0
- установить в битах CMD3-CMD0 значение команды и SRQ=1
- записать новое значение в порт
- дождаться исполнения, что будет сигнализироваться значением флага SRQ==0.
При работе с регистрами порт SYSAA содержит адрес регистра, SYSVV - его значение. При записи шестнадцатеричного регистра старший байт предполагается равным 0.
Структура банков данных
Работа с системными переменными и некоторыми внешними устройствами организована через специальные банки данных, доступ к которым осуществляется через два порта: пор адреса и порт данных.
Порт адрес | Порт данных | Длина, байт | Описание |
---|---|---|---|
0xF4 | 0xF5 | 18 | Управление программным ускорителем видеоконтролллера |
0xF6 | 0xF7 | 254 | Блок системных переменных и обменных переменных |
0xF8 | 0xF9 | 32 | Резерв |
0xFA | 0xFB | 35 | Банк данных контроллера Ethernet |
0xFC | 0xFD | 134 | Буфер прямого доступа к SPI-устройствам |
Блок системных переменных
Смещение | Тип данных | Мнемоника | Описание |
---|---|---|---|
0 | BYTE | HW_FLAG | Номер выбранной аппаратной платформы |
1 | BYTE | CON_IOBYTE | IOBYTE консольного ввода/вывода |
2 | BYTE | HW_FOUND | Установленное оборудование |
3 | WORD | INT_MASK | Маска прерываний |
5 | BYTE | CRT_SETTINGS | Настройки терминала |
6 | BYTE | CURSOR_X | Позиция курсора по горизонтали |
7 | BYTE | CURSOR_Y | Позиция курсора по вертикали |
8 | BYTE | CURSOR_STATUS | Режим отображения курсора |
9 | BYTE | CRT_LINES | Число строк экрана |
10 | BYTE | CRT_CHARS | Число символов в строке |
11 | WORD | VIDEO_END | Верхняя граница условной видеопамяти |
13 | WORD | VIDEO_CURSOR | Адрес курсора в условной видеопамяти |
15 | BYTE | BIOS_DISK | Выбранный логический диск BIOS |
16 | WORD | BIOS_TRACK | Дорожка BIOS |
18 | BYTE | BIOS_SECTOR | Сектор BIOS |
19 | WORD | BIOS_DMA | Адрес DMA-буфера в памяти эмулятора |
21 | BYTE | SD_TYPE | Тип SD-карты |
22 | BYTE | CON_LAST_CHAR | Введённый с клавиатуры символ |
23 | BYTE | CON_LAST_MODK | Модификаторы |
24 | BYTE | CON_LAST_KACT | Скан-код |
25 | BYTE | LST_LAST_CHAR | Введённый с канала LST символ |
26 | BYTE*16 | SD_FDD_BASE | Физические номера на SD-карте образов логических дисков |
42 | BYTE | SYS_NOTIFY | Настройки отладчика |
43 | BYTE*3 | DBG_OPTIONS | Зарезервировано |
46 | BYTE | BIOS_LAST_CALL | Номер последней вызванной команды BIOS |
47 | BYTE*4 | - | Резерв |
51 | BYTE*13 | FLIB_CMD | Блок сопроцессора операций с плавающей точкой |
64 | BYTE | BDOS_LAST_CALL | Номер последней вызванной команды BDOS |
65 | BYTE*7 | RTC | Данные часов реального времени |
72 | BYTE | PR_IOBYTE | Настройки коммуникационного обмена канала PUNCH/READER |
73 | BYTE | HW_DISABLE | Запрет работы интерфейсов |
74 | BYTE*12 | PR_SRV | Настройки сетевых параметров канала PUNCH/READER |
86 | BYTE | TMR_10MS | Системный таймер с инкрементом 10 мс |
86-127 | - | - | Зарезервировано |
128-254 | - | - | Зона пользовательских данных |
Блок данных контроллера Ethernet
Смещение | Тип данных | Мнемоника | Описание |
---|---|---|---|
0 | WORD | LAN_PAR | Служебные настройки |
2 | WORD | LAN_MBUF_IN | Адрес буфера приёма в ОЗУ эмулятора |
4 | WORD | LAN_MBUF_IN_L | Длина буфера |
8 | WORD | LAN_MBUF_OUT | Адрес буфера передачи в ОЗУ эмулятора |
10 | WORD | LAN_MBUF_IN_L | Длина буфера |
12 | BYTE*4 | LAN_IP_MY | Свой IP-адрес |
16 | BYTE*4 | LAN_IP_REMOTE | IP-адрес партнёра |
20 | BYTE*6 | LAN_MAC_MY | Свой MAC-адрес |
26 | BYTE*6 | LAN_MAC_MY | MAC-адрес партнёра |
32 | BYTE | LAN_BANK | Служебные данные |
33 | WORD | LAN_RXDPT | Указатель чтения внутреннего буфера контроллера |
35 | WORD | LAN_RXSTATUS | Результат операции чтения |
37 | WORD | LAN_UPD_DATA | Данные для записи в регистры |
39 | WORD | LAN_PORT_MY | Свой порт |
41 | WORD | LAN_PORT_REMOTE | Порт партнёра |
43 | BYTE | LAN_PROTOCOL | Тип протокола |
44 | BYTE | LAN_MAIN_RQST | Флаг требования обработки пакета |
45 | BYTE*4 | - | Зарезервировано |
Блок данных доступа к SPI-утройствам
Смещение | Тип данных | Мнемоника | Описание |
---|---|---|---|
0 | BYTE | PSPI_ADDR | Логический адрес устройства |
1 | BYTE | PSPI_MODE | Настройка скорости и режима работы |
2-133 | - | PSPI_DATA | Данные отправки/приёма |
Битовые маски
HW_FLAG - обнаруженное оборудование
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
FSDC | FCAN | FLAN | FROM | FRTC | FIRQ | F128 | FRAM |
- FSDC - накопитель SD;
- FCAN - CAN-контроллер
- FLAN - Ethernet-контроллер
- FROM - системное ПЗУ
- FRTC - ЧРВ
- FIRQ - контроллер прерываний
- F128 - 128 кБ ОЗУ
- FRAM - ОЗУ
IOBYTE, PR_IOBYTE
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
SILST | SILAN | SITTY | SICON | SOLST | SOLAN | SOTTY | SOCON |
- SILST - ввод с RS-232
- S|LAN - ввод с LAN
- S|TTY - ввод с TTY
- S|CON - ввод с клавиатуры
- SOLST - вывод на RS-232
- SOLAN - вывод на LAN
- SOTTY - вывод наTTY
- SOCON - вывод на 'экран
Команды управляющих портов
Порт внешних устройств
Порядок доступа к порту внешних устройств:
- отправить код команды в порт 0xFE
- отправить при необходимости параметры по списку в указанном порядке в порт 0xFE
- прочитать результат выполнения команды из порта 0xFE
Блок базовых команд
Команда | Описание | Возвращаемое значение |
---|---|---|
0 | Выполнение SPI-запроса | Последний полученный байт данных с шины |
1 | Реинициализация SD-карты | Тип SD-карты |
2-15 | Зарезервировано | - |
16-47 | Зарезервировано для устройства пользователя | - |
48-79 | Команды контроллера Ethernet | См. описание |
80-96 | Команды ЧРВ | См. описание |
96-127 | Зарезервировано | - |
128-255 | Блок пользовательских портов | - |
Блок команд контроллера Ethernet
Базовые команды:
Команда | Индекс | Описание | Возвращаемое значение | Прошивка |
---|---|---|---|---|
48 | 0 | Инициализация адаптера Ethernet на стандартные настройки | - | |
49 | 1 | Инициализация адаптера Ethernet на настройки банка данных | - | |
50 | 2 | Копировать данные из ОЗУ эмулятора во внутренний буфер | - | |
51 | 3 | Копировать данные из внутреннего буфера в ОЗУ эмулятора | - | |
52 | 4 | Прочитать значение ETH регистра | Значение регистра | |
53 | 5 | Прочитать значение MX регистра | Значение регистра | |
54 | 6 | Отправить Ethernet пакет из внутреннего буфера | Статус | |
55 | 7 | Прочитать Ethernet пакет во внутренний буфер | Статус | |
56 | 8 | Прочитать значения счётчика пакетов в очереди приёмника | Значение счётчика | |
57 | 9 | Записать данные в ETH регистр | - | |
58 | 10 | Прочитать PHY регистр | - | |
59 | 11 | Рассчитать IP CRC внутреннего буфера | - | |
60 | 12 | Сформировать IP-пакет из внутреннего буфера | - | |
61 | 13 | Сформировать UDP-пакет из внутреннего буфера | - | |
62 | 14 | Сформировать ARP-ответ по запросу внутреннего буфера | - | |
63 | 15 | Сформировать Ethernet-пакет из внутреннего буфера | - | |
64 | 16 | Получить тип принятого пакета | Тип пакета | |
65 | 17 | Прочитать значение регистра ESTAT | Значение регистра | |
66 | 18 | Обработать очередь входящих пакетов | Результат | |
67 | 19 | Прочитать данные UDP пакета | Результат | 4.64+ |
68 | 20 | Сформировать и отправить ARP-запрос | Результат | 4.64+ |
69 | 21 | Сформировать и отправить UDP-пакет | Результат | 4.64+ |
70 | 22 | Сформировать и отправить PING-запрос | Результат | 4.64+ |
71 | 23 | Сформировать и отправить PING-ответ | Результат | 4.64+ |
Команды, которые были в первых версиях прошивки, но были исключены:
Команда | Индекс | Описание | Возвращаемое значение | Прошивка |
---|---|---|---|---|
67 | 19 | Отправить байт данных в сетевой интерфейс консоли | Результат | до 4.64, удалена |
68 | 20 | Отправить байт данных в сетевой интерфейс канала PUNCH/READER | Результат | до 4.64, удалена |
69 | 21 | Отправить загруженный буфер по UDP | Результат | 4.58 до 4.64, удалена |
70 | 22 | Удалить заголовок UDP-пакета | - | 4.58 до 4.64, удалена |
Блок команд ЧРВ
Команда | Индекс | Описание | Возвращаемое значение | Прошивка |
---|---|---|---|---|
80 | 0 | Считать время/дату | - | |
81 | 1 | Установить время | - | |
82 | 2 | Установить дату | - | |
83 | 3 | Системная команда записи ПЗУ ЧРВ | - | |
84 | 4 | Считать настройки ALARM0 | Настройки | |
85 | 5 | Считать настройки ALARM1 | Настройки | |
86 | 6 | Считать байт статуса ЧРВ | Статус | |
87 | 7 | Системная команда чтения ПЗУ ЧРВ | - |
Порт внутренних устройств
Порядок доступа к порту внутренних устройств МК ЦПУ устройств:
- отправить код команды в порт 0xFF
- отправить при необходимости параметры по списку в указанном порядке в порт 0xFF
- прочитать результат выполнения команды из порта 0xFF
Команда | Описание | Параметры | Возвращаемое значение | Прошивка |
---|---|---|---|---|
0-31 | Команды блока операций с плавающей точкой | - | - | |
32 | Чтение системного регистра AVR | Адрес регистра в памяти | Значение регистра | |
33 | Запись 8-битного регистра AVR | Адрес регистра в памяти, значение | - | 4.65+ |
34 | Запись 16-битного регистра AVR | Адрес регистра в памяти, значение Hi, значение Lo | - | 4.65+ |
35 | Запрос версии прошивки | - | Минорный номер прошивки | 4.65+ |
36 | Запрос версии прошивки | - | Мажорный номер прошивки | 4.65+ |
37 | Чтение значения счётчика символов в буфере TTY / UART1 | - | Число символов в буфере | 4.67+ |
38 | Чтение символа из буфера TTY / UART1 | - | Символ | 4.67+ |
39 | Отправка символа в канал TTY / UART1 | Символ | - | 4.67+ |
Работа с периферийными устройствами
Порт RS-232
Настройки порта по умолчанию: скорость 9600 бод, 8 бит данных, 1 стоп-бит, без проверки чётности.
Настройка скорости передачи выполняется через системный порт КВУ (для прошивок 0.21+):
- записать в SYSAA значение 0xC4
- записать в SYSVV значение скорости (табл.)
- прочитать значение порта SYSRQ, выполнить OR со значением 0x83, записать полученное значение в SYSRQ
- дождаться пока чтение из порта SYSRQ вернёт значение с битом 7 равным 0.
Скорость, кБод | индекс скорости для записи |
---|---|
9.6 | 129 |
14.4 | 86 |
19.2 | 64 |
28.8 | 42 |
38.4 | 32 |
57.6 | 21 |
76.8 | 15 |
115.2 | 10 |
GPIO
КРИСС CP/M поддерживает работы с внешним модулем цифровых каналов ввода/вывода на базе микросхем PCF8574(A). Можно использовать как рекомендованный 24-канальный адаптер GPIO, так и самодельный.
Для работы с внешними устройствам используются порты ввода/вывода twcmd (215) и twdta (216). Порядок работы подробно описан в журнальной статье. Для вывода байта данных на шину GPIO необходимо сначала в порт данных twdta записать значение, потом в порт управления twcmd - команду и дождаться, пока значение в порту twcmd станет равно 0 (успешно) или 1 (ошибка шины). Для чтения необходимо сначала записать команду, потом, в случае успеха, прочитать результат из порта данных.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
C3 | C2 | C1 | C0 | A2 | A1 | A0 | RW |
- C3-C0 - идентификатор ИМС расширителя (по документации);
- A2-A0 - адрес ведомого устройства;
- RW - тип команды: 0 - запись, 1 - чтение.
Начиная с версии прошивки 0.24 КВУ отслеживается тайм-аут обращения к шине и обрабатываются дополнительные команды в порту twcmd (215):
- 0xFE - сброс шины TWI, после записи дождитесь чтения 0 из этого регистра;
- 0xFD - исполнение команды в расширенном режиме.
Расширенный режим канала TWI (прошивка 0.24+) позволяет обращаться к произвольным TWI-устройствам на шине, используя буфер mpbuf (используется так же генератором мелодий) для записи последовательности команд. В этом режиме команды записываются парами код состояния шины - значение, поддерживаются состояния (коды):
Код | Команда | Значение | R/W | Комментарий |
---|---|---|---|---|
0x08 | START | SLA+RW | W | Обязательно в первой блоке |
0x10 | RESTART | SLA+RW | W | |
0x18 | WRITE | Data | W | Первая запись после START+W, ACK получен |
0x20 | WRITE | Data | W | Запись после START+W, NACK получен |
0x28 | WRITE | Data | W | Запись после WRITE, ACK получен |
0x40 | READ RQ | Data | - | Чтение после START+R, ACK получен |
0x50 | READ RQ | Data | R | Чтение после READ, ACK получен |
0x58 | READ | Data | R | Чтение после READ, NACK получен |
SLA обозначает 8-битный адрес устройства, RW - признак типа доступа: 0 - запись, 1 - чтение. Data - 8-битное значение. В режиме чтения возвращаемый байт данных будет записан в порт следующего за READ RQ операцией.
Пример записи 2 байт в устройство на шине:
0x08 0x40 START SLA=0x40+W 0x18 [0xFF] SEND after ACK [0xFF] - value 0x28 [0xFF] SEND after DATA [0xFF] - value 0x00 0x00 STOP
Пример чтения 1 байта с устройства на шине
read: Responce: 0x08 0x41 START SLA=0x40+R 0x08 0x41 0x40 0x00 SLA ACK - request 0x40 0x00 0x50 0x00 READ with NACK expected 0x50 [0xFF] (responce!) 0x00 0x00 STOP 0x00 0x00
Манипулятор мышь
Начиная с версии 0.21 КВУ реализована поддержка PS/2 манипулятора мышь. Для работы используются те же физические линии, что и для внешнего блока GPIO, поэтому их одновременное использование невозможно.
Для работы с мышью в рамках пользовательской программы необходимо:
- записать в порт 215 команду 0xE0 - инициализация, выдержать паузу 10мс и проверить значение в порту 215 - 0 значит что мышь подключена и успешно инициализирована;
- записать в порт 216 значение 0 для инициализации состояния кнопок;
- для опроса мыши записать в порт 215 команду 0xE1, выдержать паузу 10мс, далее порт 216 будет содержать состояние кнопок (см. рис.), 217, 218 - накопительное смещение по X и по Y в формате знаковых 8-битных значений;
- перед окончанием работы программы записать в порт 215 команду 0xE2 деактивации мыши.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
*AF | *Middle | *Right | *Left | AF | Middle | Right | Left |
Значения со звёздочкой соответствуют состоянию до опроса. AF - флаг перехвата опроса более приоритетным запросом, равен 0 в случае опроса без перехвата, в противном случае состояние мышки не изменяется.
Пример программного кода работы с машью:
begin port[215]:=$e0; delay(10); if port[215]<>0 then begin write('Error'); halt; end; port[216]:=0; repeat port[215]:=$e1; delay(10); if port[216] and 1 >0 then write('Left button pressed'); until port[216] and 1>0; port[215]:=$e4; end.
Команды эмулятор Z80
Basic functions
.----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 00 | NOP | LD BC,nn | LD (BC),A | INC BC | INC B | DEC B | LD B,n | RLCA | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 08 | EX AF,AFe | ADD HL,BC | LD A,(BC) | DEC BC | INC C | DEC C | LD C,n | RRCA | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 10 | DJNZ s | LD DE,nn | LD (DE),A | INC DE | INC D | DEC D | LD D,n | RLA | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 18 | JR *,s | ADD HL,DE | LD A,(DE) | DEC DE | INC E | DEC E | LD E,n | RRA | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 20 | JR NZ,s | LD HL,nn | LD (ww),HL | INC HL | INC H | DEC H | LD H,n | DAA | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 28 | JR Z,s | ADD HL,HL | LD HL,(ww) | DEC HL | INC L | DEC L | LD L,n | CPL A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 30 | JR NC,s | LD SP,nn | LD (nn),A | INC SP | INC (HL) | DEC (HL) | LD (HL),n | SCF | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 38 | JR C,s | ADD HL,SP | LD A,(nn) | DEC SP | INC A | DEC A | LD A,n | CCF | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 40 | LD B,B | LD B,C | LD B,D | LD B,E | LD B,H | LD B,L | LD B,(HL) | LD B,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 48 | LD C,B | LD C,C | LD C,D | LD C,E | LD C,H | LD C,L | LD C,(HL) | LD C,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 50 | LD D,B | LD D,C | LD D,D | LD D,E | LD D,H | LD D,L | LD D,(HL) | LD D,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 58 | LD E,B | LD E,C | LD E,D | LD E,E | LD E,H | LD E,L | LD E,(HL) | LD E,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 60 | LD H,B | LD H,C | LD H,D | LD H,E | LD H,H | LD H,L | LD H,(HL) | LD H,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 68 | LD L,B | LD L,C | LD L,D | LD L,E | LD L,H | LD L,L | LD L,(HL) | LD L,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 70 | LD (HL),B | LD (HL),C | LD (HL),D | LD (HL),E | LD (HL),H | LD (HL),L | HALT | LD (HL),A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 78 | LD A,B | LD A,C | LD A,D | LD A,E | LD A,H | LD A,L | LD A,(HL) | LD A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 80 | ADD A,B | ADD A,C | ADD A,D | ADD A,E | ADD A,H | ADD A,L | ADD A,(HL) | ADD A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 88 | ADC A,B | ADC A,C | ADC A,D | ADC A,E | ADC A,H | ADC A,L | ADC A,(HL) | ADC A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 90 | SUB A,B | SUB A,C | SUB A,D | SUB A,E | SUB A,H | SUB A,L | SUB A,(HL) | SUB A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 98 | SBC A,B | SBC A,C | SBC A,D | SBC A,E | SBC A,H | SBC A,L | SBC A,(HL) | SBC A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | a0 | AND A,B | AND A,C | AND A,D | AND A,E | AND A,H | AND A,L | AND A,(HL) | AND A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | a8 | XOR A,B | XOR A,C | XOR A,D | XOR A,E | XOR A,H | XOR A,L | XOR A,(HL) | XOR A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | b0 | OR A,B | OR A,C | OR A,D | OR A,E | OR A,H | OR A,L | OR A,(HL) | OR A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | b8 | CP A,B | CP A,C | CP A,D | CP A,E | CP A,H | CP A,L | CP A,(HL) | CP A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | c0 | RET NZ | POP BC | JP NZ,nn | JP *,nn | CALL NZ,nn | PUSH BC | ADD A,n | RST 00h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | c8 | RET Z | RET * | JP Z,nn | CB* | CALL Z,nn | CALL *,nn | ADC A,n | RST 08h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | d0 | RET NC | POP DE | JP NC,nn | OUT (n),A | CALL NC,nn | PUSH DE | SUB A,n | RST 10h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | d8 | RET C | EXX | JP C,nn | IN A,(n) | CALL C,nn | DD* | SBC A,n | RST 18h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | e0 | RET PO | POP HL | JP PO,nn | EX (SP),HL | CALL PO,nn | PUSH HL | AND A,n | RST 20h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | e8 | RET PE | JP *,HL | JP PE,nn | EX DE,HL | CALL PE,nn | ED* | XOR A,n | RST 28h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | f0 | RET P | POP AF | JP P,nn | DI | CALL P,nn | PUSH AF | OR A,n | RST 30h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | f8 | RET M | LD SP,HL | JP M,nn | EI | CALL M,nn | FD* | CP A,n | RST 38h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|
CB-prefixed commands
.----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 00 | RLC B | RLC C | RLC D | RLC E | RLC H | RLC L | RLC (HL) | RLC A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 08 | RRC B | RRC C | RRC D | RRC E | RRC H | RRC L | RRC (HL) | RRC A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 10 | RL B | RL C | RL D | RL E | RL H | RL L | RL (HL) | RL A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 18 | RR B | RR C | RR D | RR E | RR H | RR L | RR (HL) | RR A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 20 | SLA B | SLA C | SLA D | SLA E | SLA H | SLA L | SLA (HL) | SLA A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 28 | SRA B | SRA C | SRA D | SRA E | SRA H | SRA L | SRA (HL) | SRA A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 30 | SLL B | SLL C | SLL D | SLL E | SLL H | SLL L | SLL (HL) | SLL A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 38 | SRL B | SRL C | SRL D | SRL E | SRL H | SRL L | SRL (HL) | SRL A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 40 | BIT 0,B | BIT 0,C | BIT 0,D | BIT 0,E | BIT 0,H | BIT 0,L | BIT 0,(HL) | BIT 0,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 48 | BIT 1,B | BIT 1,C | BIT 1,D | BIT 1,E | BIT 1,H | BIT 1,L | BIT 1,(HL) | BIT 1,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 50 | BIT 2,B | BIT 2,C | BIT 2,D | BIT 2,E | BIT 2,H | BIT 2,L | BIT 2,(HL) | BIT 2,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 58 | BIT 3,B | BIT 3,C | BIT 3,D | BIT 3,E | BIT 3,H | BIT 3,L | BIT 3,(HL) | BIT 3,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 60 | BIT 4,B | BIT 4,C | BIT 4,D | BIT 4,E | BIT 4,H | BIT 4,L | BIT 4,(HL) | BIT 4,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 68 | BIT 5,B | BIT 5,C | BIT 5,D | BIT 5,E | BIT 5,H | BIT 5,L | BIT 5,(HL) | BIT 5,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 70 | BIT 6,B | BIT 6,C | BIT 6,D | BIT 6,E | BIT 6,H | BIT 6,L | BIT 6,(HL) | BIT 6,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 78 | BIT 7,B | BIT 7,C | BIT 7,D | BIT 7,E | BIT 7,H | BIT 7,L | BIT 7,(HL) | BIT 7,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 80 | RES 0,B | RES 0,C | RES 0,D | RES 0,E | RES 0,H | RES 0,L | RES 0,(HL) | RES 0,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 88 | RES 1,B | RES 1,C | RES 1,D | RES 1,E | RES 1,H | RES 1,L | RES 1,(HL) | RES 1,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 90 | RES 2,B | RES 2,C | RES 2,D | RES 2,E | RES 2,H | RES 2,L | RES 2,(HL) | RES 2,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 98 | RES 3,B | RES 3,C | RES 3,D | RES 3,E | RES 3,H | RES 3,L | RES 3,(HL) | RES 3,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | a0 | RES 4,B | RES 4,C | RES 4,D | RES 4,E | RES 4,H | RES 4,L | RES 4,(HL) | RES 4,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | a8 | RES 5,B | RES 5,C | RES 5,D | RES 5,E | RES 5,H | RES 5,L | RES 5,(HL) | RES 5,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | b0 | RES 6,B | RES 6,C | RES 6,D | RES 6,E | RES 6,H | RES 6,L | RES 6,(HL) | RES 6,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | b8 | RES 7,B | RES 7,C | RES 7,D | RES 7,E | RES 7,H | RES 7,L | RES 7,(HL) | RES 7,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | c0 | SET 0,B | SET 0,C | SET 0,D | SET 0,E | SET 0,H | SET 0,L | SET 0,(HL) | SET 0,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | c8 | SET 1,B | SET 1,C | SET 1,D | SET 1,E | SET 1,H | SET 1,L | SET 1,(HL) | SET 1,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | d0 | SET 2,B | SET 2,C | SET 2,D | SET 2,E | SET 2,H | SET 2,L | SET 2,(HL) | SET 2,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | d8 | SET 3,B | SET 3,C | SET 3,D | SET 3,E | SET 3,H | SET 3,L | SET 3,(HL) | SET 3,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | e0 | SET 4,B | SET 4,C | SET 4,D | SET 4,E | SET 4,H | SET 4,L | SET 4,(HL) | SET 4,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | e8 | SET 5,B | SET 5,C | SET 5,D | SET 5,E | SET 5,H | SET 5,L | SET 5,(HL) | SET 5,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | f0 | SET 6,B | SET 6,C | SET 6,D | SET 6,E | SET 6,H | SET 6,L | SET 6,(HL) | SET 6,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | f8 | SET 7,B | SET 7,C | SET 7,D | SET 7,E | SET 7,H | SET 7,L | SET 7,(HL) | SET 7,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|
DD-prefixed commands
.----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 00 | NOP | LD BC,nn | LD (BC),A | INC BC | INC B | DEC B | LD B,n | RLCA | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 08 | EX AF,AFe | ADD IX,BC | LD A,(BC) | DEC BC | INC C | DEC C | LD C,n | RRCA | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 10 | DJNZ s | LD DE,nn | LD (DE),A | INC DE | INC D | DEC D | LD D,n | RLA | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 18 | JR *,s | ADD IX,DE | LD A,(DE) | DEC DE | INC E | DEC E | LD E,n | RRA | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 20 | JR NZ,s | LD IX,nn | LD (ww),IX | INC IX | INC IXh | DEC IXh | LD IXh,n | DAA | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 28 | JR Z,s | ADD IX,IX | LD IX,(ww) | DEC IX | INC IXl | DEC IXl | LD IXl,n | CPL A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 30 | JR NC,s | LD SP,nn | LD (nn),A | INC SP | INC (IX+d) | DEC (IX+d) | LD (IX+d),n | SCF | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 38 | JR C,s | ADD IX,SP | LD A,(nn) | DEC SP | INC A | DEC A | LD A,n | CCF | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 40 | LD B,B | LD B,C | LD B,D | LD B,E | LD B,IXh | LD B,IXl | LD B,(IX+d) | LD B,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 48 | LD C,B | LD C,C | LD C,D | LD C,E | LD C,IXh | LD C,IXl | LD C,(IX+d) | LD C,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 50 | LD D,B | LD D,C | LD D,D | LD D,E | LD D,IXh | LD D,IXl | LD D,(IX+d) | LD D,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 58 | LD E,B | LD E,C | LD E,D | LD E,E | LD E,IXh | LD E,IXl | LD E,(IX+d) | LD E,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 60 | LD IXh,B | LD IXh,C | LD IXh,D | LD IXh,E | LD IXh,IXh | LD IXh,IXl | LD H,(IX+d) | LD IXh,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 68 | LD IXl,B | LD IXl,C | LD IXl,D | LD IXl,E | LD IXl,IXh | LD IXl,IXl | LD L,(IX+d) | LD IXl,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 70 | LD (IX+d),B | LD (IX+d),C | LD (IX+d),D | LD (IX+d),E | LD (IX+d),H | LD (IX+d),L | HALT | LD (IX+d),A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 78 | LD A,B | LD A,C | LD A,D | LD A,E | LD A,IXh | LD A,IXl | LD A,(IX+d) | LD A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 80 | ADD A,B | ADD A,C | ADD A,D | ADD A,E | ADD A,IXh | ADD A,IXl | ADD A,(IX+d) | ADD A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 88 | ADC A,B | ADC A,C | ADC A,D | ADC A,E | ADC A,IXh | ADC A,IXl | ADC A,(IX+d) | ADC A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 90 | SUB A,B | SUB A,C | SUB A,D | SUB A,E | SUB A,IXh | SUB A,IXl | SUB A,(IX+d) | SUB A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 98 | SBC A,B | SBC A,C | SBC A,D | SBC A,E | SBC A,IXh | SBC A,IXl | SBC A,(IX+d) | SBC A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | a0 | AND A,B | AND A,C | AND A,D | AND A,E | AND A,IXh | AND A,IXl | AND A,(IX+d) | AND A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | a8 | XOR A,B | XOR A,C | XOR A,D | XOR A,E | XOR A,IXh | XOR A,IXl | XOR A,(IX+d) | XOR A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | b0 | OR A,B | OR A,C | OR A,D | OR A,E | OR A,IXh | OR A,IXl | OR A,(IX+d) | OR A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | b8 | CP A,B | CP A,C | CP A,D | CP A,E | CP A,IXh | CP A,IXl | CP A,(IX+d) | CP A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | c0 | RET NZ | POP BC | JP NZ,nn | JP *,nn | CALL NZ,nn | PUSH BC | ADD A,n | RST 00h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | c8 | RET Z | RET * | JP Z,nn | DDCB | CALL Z,nn | CALL *,nn | ADC A,n | RST 08h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | d0 | RET NC | POP DE | JP NC,nn | OUT (n),A | CALL NC,nn | PUSH DE | SUB A,n | RST 10h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | d8 | RET C | EXX | JP C,nn | IN A,(n) | CALL C,nn | NONI | SBC A,n | RST 18h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | e0 | RET PO | POP IX | JP PO,nn | EX (SP),IX | CALL PO,nn | PUSH IX | AND A,n | RST 20h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | e8 | RET PE | JP *,IX | JP PE,nn | EX DE,IX | CALL PE,nn | NONI | XOR A,n | RST 28h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | f0 | RET P | POP AF | JP P,nn | DI | CALL P,nn | PUSH AF | OR A,n | RST 30h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | f8 | RET M | LD SP,IX | JP M,nn | EI | CALL M,nn | NONI | CP A,n | RST 38h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|
ED-prefixed commands
.----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 00 | BIOS 0 | BIOS 1 | BIOS 2 | BIOS 3 | BIOS 4 | BIOS 5 | BIOS 6 | BIOS 7 | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 08 | BIOS 8 | BIOS 9 | BIOS 10 | BIOS 11 | BIOS 12 | BIOS 13 | BIOS 14 | BIOS 15 | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 10 | BIOS 16 | BIOS 17 | BIOS 18 | BIOS 19 | BIOS 20 | BIOS 21 | BIOS 22 | BIOS 23 | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 18 | BIOS 24 | BIOS 25 | BIOS 26 | BIOS 27 | BIOS 28 | BIOS 29 | BIOS 30 | BIOS 31 | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 20 | BIOS 32 | BIOS 33 | BIOS 34 | BIOS 35 | BIOS 36 | BIOS 37 | BIOS 38 | BDOS | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 28 | NONI | NONI | NONI | NONI | NONI | NONI | NONI | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 30 | NONI | NONI | NONI | NONI | NONI | NONI | NONI | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 38 | NONI | NONI | NONI | NONI | NONI | NONI | NONI | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 40 | IN B,(C) | OUT (C),B | SBC HL,BC | LD (ww),BC | NEG A | RETN | IM 0 | LD I,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 48 | IN C,(C) | OUT (C),C | ADC HL,BC | LD BC,(ww) | NEG A | RETI | IM 3 | LD R,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 50 | IN D,(C) | OUT (C),D | SBC HL,DE | LD (ww),DE | NEG A | RETN | IM 1 | LD A,I | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 58 | IN E,(C) | OUT (C),E | ADC HL,DE | LD DE,(ww) | NEG A | RETN | IM 2 | LD A,R | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 60 | IN H,(C) | OUT (C),H | SBC HL,HL | LD (ww),HL | NEG A | RETN | IM 0 | RRD A,(HL) | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 68 | IN L,(C) | OUT (C),L | ADC HL,HL | LD HL,(ww) | NEG A | RETN | IM 3 | RLD A,(HL) | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 70 | NONI | OUT (C),0 | SBC HL,SP | LD (ww),SP | NEG A | RETN | IM 1 | MUL | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 78 | IN A,(C) | OUT (C),A | ADC HL,SP | LD SP,(ww) | NEG A | RETN | IM 2 | DIV | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 80 | NONI | NONI | NONI | NONI | NONI | NONI | NONI | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 88 | NONI | NONI | NONI | NONI | NONI | NONI | NONI | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 90 | NONI | NONI | NONI | NONI | NONI | NONI | NONI | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 98 | NONI | NONI | NONI | NONI | NONI | NONI | NONI | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | a0 | LDI | CPI | INI | OUTI | FL32 0 | FL32 1 | FL32 2 | FL32 3 | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | a8 | LDD | CPD | IND | OUTD | NONI | NONI | NONI | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | b0 | LDIR | CPIR | INIR | OTIR | NONI | NONI | NONI | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | b8 | LDDR | CPDR | INDR | OTDR | NONI | NONI | NONI | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | c0 | NONI | NONI | NONI | NONI | NONI | NONI | NONI | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | c8 | NONI | NONI | NONI | NONI | NONI | NONI | NONI | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | d0 | NONI | NONI | NONI | NONI | NONI | NONI | NONI | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | d8 | NONI | NONI | NONI | NONI | NONI | NONI | NONI | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | e0 | NONI | NONI | NONI | NONI | NONI | NONI | NONI | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | e8 | NONI | NONI | NONI | NONI | NONI | NONI | NONI | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | f0 | NONI | NONI | NONI | NONI | NONI | NONI | NONI | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | f8 | NONI | NONI | NONI | NONI | NONI | NONI | NONI | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|
FD-prefixed commands
.----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 00 | NOP | LD BC,nn | LD (BC),A | INC BC | INC B | DEC B | LD B,n | RLCA | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 08 | EX AF,AFe | ADD IY,BC | LD A,(BC) | DEC BC | INC C | DEC C | LD C,n | RRCA | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 10 | DJNZ s | LD DE,nn | LD (DE),A | INC DE | INC D | DEC D | LD D,n | RLA | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 18 | JR *,s | ADD IY,DE | LD A,(DE) | DEC DE | INC E | DEC E | LD E,n | RRA | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 20 | JR NZ,s | LD IY,nn | LD (ww),IY | INC IY | INC IYh | DEC IYh | LD IYh,n | DAA | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 28 | JR Z,s | ADD IY,IY | LD IY,(ww) | DEC IY | INC IYl | DEC IYl | LD IYl,n | CPL A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 30 | JR NC,s | LD SP,nn | LD (nn),A | INC SP | INC (IY+d) | DEC (IY+d) | LD (IY+d),n | SCF | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 38 | JR C,s | ADD IY,SP | LD A,(nn) | DEC SP | INC A | DEC A | LD A,n | CCF | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 40 | LD B,B | LD B,C | LD B,D | LD B,E | LD B,IYh | LD B,IYl | LD B,(IY+d) | LD B,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 48 | LD C,B | LD C,C | LD C,D | LD C,E | LD C,IYh | LD C,IYl | LD C,(IY+d) | LD C,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 50 | LD D,B | LD D,C | LD D,D | LD D,E | LD D,IYh | LD D,IYl | LD D,(IY+d) | LD D,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 58 | LD E,B | LD E,C | LD E,D | LD E,E | LD E,IYh | LD E,IYl | LD E,(IY+d) | LD E,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 60 | LD IYh,B | LD IYh,C | LD IYh,D | LD IYh,E | LD IYh,IYh | LD IYh,IYl | LD H,(IY+d) | LD IYh,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 68 | LD IYl,B | LD IYl,C | LD IYl,D | LD IYl,E | LD IYl,IYh | LD IYl,IYl | LD L,(IY+d) | LD IYl,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 70 | LD (IY+d),B | LD (IY+d),C | LD (IY+d),D | LD (IY+d),E | LD (IY+d),H | LD (IY+d),L | HALT | LD (IY+d),A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 78 | LD A,B | LD A,C | LD A,D | LD A,E | LD A,IYh | LD A,IYl | LD A,(IY+d) | LD A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 80 | ADD A,B | ADD A,C | ADD A,D | ADD A,E | ADD A,IYh | ADD A,IYl | ADD A,(IY+d) | ADD A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 88 | ADC A,B | ADC A,C | ADC A,D | ADC A,E | ADC A,IYh | ADC A,IYl | ADC A,(IY+d) | ADC A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 90 | SUB A,B | SUB A,C | SUB A,D | SUB A,E | SUB A,IYh | SUB A,IYl | SUB A,(IY+d) | SUB A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 98 | SBC A,B | SBC A,C | SBC A,D | SBC A,E | SBC A,IYh | SBC A,IYl | SBC A,(IY+d) | SBC A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | a0 | AND A,B | AND A,C | AND A,D | AND A,E | AND A,IYh | AND A,IYl | AND A,(IY+d) | AND A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | a8 | XOR A,B | XOR A,C | XOR A,D | XOR A,E | XOR A,IYh | XOR A,IYl | XOR A,(IY+d) | XOR A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | b0 | OR A,B | OR A,C | OR A,D | OR A,E | OR A,IYh | OR A,IYl | OR A,(IY+d) | OR A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | b8 | CP A,B | CP A,C | CP A,D | CP A,E | CP A,IYh | CP A,IYl | CP A,(IY+d) | CP A,A | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | c0 | RET NZ | POP BC | JP NZ,nn | JP *,nn | CALL NZ,nn | PUSH BC | ADD A,n | RST 00h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | c8 | RET Z | RET * | JP Z,nn | FDCB | CALL Z,nn | CALL *,nn | ADC A,n | RST 08h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | d0 | RET NC | POP DE | JP NC,nn | OUT (n),A | CALL NC,nn | PUSH DE | SUB A,n | RST 10h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | d8 | RET C | EXX | JP C,nn | IN A,(n) | CALL C,nn | NONI | SBC A,n | RST 18h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | e0 | RET PO | POP IY | JP PO,nn | EX (SP),IY | CALL PO,nn | PUSH IY | AND A,n | RST 20h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | e8 | RET PE | JP *,IY | JP PE,nn | EX DE,IY | CALL PE,nn | NONI | XOR A,n | RST 28h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | f0 | RET P | POP AF | JP P,nn | DI | CALL P,nn | PUSH AF | OR A,n | RST 30h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | f8 | RET M | LD SP,IY | JP M,nn | EI | CALL M,nn | NONI | CP A,n | RST 38h | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|
DDCB-prefixed commands
.----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 00 | NONI | NONI | NONI | NONI | NONI | NONI | RLC (IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 08 | NONI | NONI | NONI | NONI | NONI | NONI | RRC (IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 10 | NONI | NONI | NONI | NONI | NONI | NONI | RL (IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 18 | NONI | NONI | NONI | NONI | NONI | NONI | RR (IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 20 | NONI | NONI | NONI | NONI | NONI | NONI | SLA (IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 28 | NONI | NONI | NONI | NONI | NONI | NONI | SRA (IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 30 | NONI | NONI | NONI | NONI | NONI | NONI | SLL (IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 38 | NONI | NONI | NONI | NONI | NONI | NONI | SRL (IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 40 | NONI | NONI | NONI | NONI | NONI | NONI | BIT 0,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 48 | NONI | NONI | NONI | NONI | NONI | NONI | BIT 1,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 50 | NONI | NONI | NONI | NONI | NONI | NONI | BIT 2,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 58 | NONI | NONI | NONI | NONI | NONI | NONI | BIT 3,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 60 | NONI | NONI | NONI | NONI | NONI | NONI | BIT 4,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 68 | NONI | NONI | NONI | NONI | NONI | NONI | BIT 5,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 70 | NONI | NONI | NONI | NONI | NONI | NONI | BIT 6,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 78 | NONI | NONI | NONI | NONI | NONI | NONI | BIT 7,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 80 | NONI | NONI | NONI | NONI | NONI | NONI | RES 0,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 88 | NONI | NONI | NONI | NONI | NONI | NONI | RES 1,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 90 | NONI | NONI | NONI | NONI | NONI | NONI | RES 2,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 98 | NONI | NONI | NONI | NONI | NONI | NONI | RES 3,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | a0 | NONI | NONI | NONI | NONI | NONI | NONI | RES 4,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | a8 | NONI | NONI | NONI | NONI | NONI | NONI | RES 5,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | b0 | NONI | NONI | NONI | NONI | NONI | NONI | RES 6,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | b8 | NONI | NONI | NONI | NONI | NONI | NONI | RES 7,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | c0 | NONI | NONI | NONI | NONI | NONI | NONI | SET 0,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | c8 | NONI | NONI | NONI | NONI | NONI | NONI | SET 1,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | d0 | NONI | NONI | NONI | NONI | NONI | NONI | SET 2,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | d8 | NONI | NONI | NONI | NONI | NONI | NONI | SET 3,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | e0 | NONI | NONI | NONI | NONI | NONI | NONI | SET 4,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | e8 | NONI | NONI | NONI | NONI | NONI | NONI | SET 5,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | f0 | NONI | NONI | NONI | NONI | NONI | NONI | SET 6,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | f8 | NONI | NONI | NONI | NONI | NONI | NONI | SET 7,(IX+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|
FDCB-prefixed commands
.----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 00 | NONI | NONI | NONI | NONI | NONI | NONI | RLC (IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 08 | NONI | NONI | NONI | NONI | NONI | NONI | RRC (IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 10 | NONI | NONI | NONI | NONI | NONI | NONI | RL (IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 18 | NONI | NONI | NONI | NONI | NONI | NONI | RR (IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 20 | NONI | NONI | NONI | NONI | NONI | NONI | SLA (IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 28 | NONI | NONI | NONI | NONI | NONI | NONI | SRA (IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 30 | NONI | NONI | NONI | NONI | NONI | NONI | SLL (IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 38 | NONI | NONI | NONI | NONI | NONI | NONI | SRL (IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 40 | NONI | NONI | NONI | NONI | NONI | NONI | BIT 0,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 48 | NONI | NONI | NONI | NONI | NONI | NONI | BIT 1,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 50 | NONI | NONI | NONI | NONI | NONI | NONI | BIT 2,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 58 | NONI | NONI | NONI | NONI | NONI | NONI | BIT 3,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 60 | NONI | NONI | NONI | NONI | NONI | NONI | BIT 4,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 68 | NONI | NONI | NONI | NONI | NONI | NONI | BIT 5,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 70 | NONI | NONI | NONI | NONI | NONI | NONI | BIT 6,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 78 | NONI | NONI | NONI | NONI | NONI | NONI | BIT 7,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 80 | NONI | NONI | NONI | NONI | NONI | NONI | RES 0,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 88 | NONI | NONI | NONI | NONI | NONI | NONI | RES 1,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 90 | NONI | NONI | NONI | NONI | NONI | NONI | RES 2,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | 98 | NONI | NONI | NONI | NONI | NONI | NONI | RES 3,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | a0 | NONI | NONI | NONI | NONI | NONI | NONI | RES 4,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | a8 | NONI | NONI | NONI | NONI | NONI | NONI | RES 5,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | b0 | NONI | NONI | NONI | NONI | NONI | NONI | RES 6,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | b8 | NONI | NONI | NONI | NONI | NONI | NONI | RES 7,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | c0 | NONI | NONI | NONI | NONI | NONI | NONI | SET 0,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | c8 | NONI | NONI | NONI | NONI | NONI | NONI | SET 1,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | d0 | NONI | NONI | NONI | NONI | NONI | NONI | SET 2,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | d8 | NONI | NONI | NONI | NONI | NONI | NONI | SET 3,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | e0 | NONI | NONI | NONI | NONI | NONI | NONI | SET 4,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | e8 | NONI | NONI | NONI | NONI | NONI | NONI | SET 5,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | f0 | NONI | NONI | NONI | NONI | NONI | NONI | SET 6,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------| | f8 | NONI | NONI | NONI | NONI | NONI | NONI | SET 7,(IY+d) | NONI | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|