CRISS CP/M programmer's reference
A computer is alive when programs are written on it. CRISS CP/M has all the necessary interfaces and features, and a wide set of development tools: Basic, C, Pascal, Fortran, Modula, that will allow you to do almost anything you can imagine. To write programs it is desirable to know the basic principles of the CP/M operating system, which are not included in this manual, please use special literature.
If you have any questions, miss something in the description, notice a mistake or a typo, have suggestions for extending the standard functions - write to mail@criss.fun.
This section is expanding by the requests: just write an email "Please describe how to work with ..." and it will appear in few days, be sure!
Introduction
CRISS CP/M is a general-purpose personal computer, having compatible with Z80 Zilog processor instructions set and supporting CP/M operation system. Despite it is DIY computer and it can be soldered by anyone it has all interfaces that allow to use it like real computer. It is powered by 64Kb SRAM, Z80-compatible CPU with 1 us register-to-register transfer time, supports VGA displays in alphanumeric mode and standard PS/2 keyboard. Optionally it can be powered by real-time clock chip, RS-232 converter, Ethernet controller, 128 Kb EEPROM chip.
Architecture
To program efficiently please pay attention to the computer architecture, it will help to understand internal processes and avoid problems.
Functional description
First of all please take into account that CRISS CP/M has not CPU chip - CPU is emulated using the microcntroller IC. The same is concerning peripheral and VGA controllers - in fact they are also MCU with the custom firmware. So, when some feature is called "hardware" it means that functionality is implemented into the firmware, when is written "software" it means that functionality is implemented in the user program, that operates in the emulated CPU environment.
All computer components are joined via the internal SPI-bus, that operates at 5MHz except the SRAM that has direct parallel connection to the CPU MCU.
Formally computer for the end-user looks like having the von Neumann architecture, program instructions and data are located in the read/write random-access memory. But core MCUs have Harvard architecture what means that there is no way to modify its firmware "on the fly". All significant data like CPU instructions processing, keyboard layouts, video symbol sets etc are programmed inside the MCUs and can be changed only via special firmware upgrade procedure.
To access peripheral devices CRISS CP/M provides wide range of hardware options, but user programs can also use low-level direct access to the SPI bus. This feature is implemented mainly in order to have transparent way for the adding custom SPI modules and it is not recommended to use it without real necessity.
The second exception is the system UART interface that is served by the CPU MCU and this interface is used for the debugging and remote control options.
CPU instructions
Instructions set is based on the Zilog Z80 CPU set but isn't 100% equivalent to it. Main differences are:
- flags 3 and 5 are not supported and returns 0;
- R registers doesn't count operation cycles rather that it is internal timer, 7th bit preserving rule is supported;
- undocumented commands are implemented partially;
- new commands were added.
Generally Z80 emulations passes Z80 instruction exerciser test and provides reliable compatibility for majority of general programs. But if the program extensively uses Z80 undocumented options its work is not guaranteed.
In comparison with standard Z80 assembler CRISS CP/M has some additional commands (mainly ED-prefixed):
- integer MUL and DIV;
- 4-byte floating point SUM, SUB, MUL and DIV commands (FL32 0 - FL32 3 );
- BIOS/BDOS command calls (BIOS *).
For the full list of supported commands please refer to the Appendix.
If you need more details or you have any ideas what to do else please write the request by e-mail.
8-bit compliance
Usually retro-style computers have 7 bit restriction processing text data, because initially they were focused on ASCII character table that have only 128 symbols. CRISS CP/M doesn't have such limitation and can normally process 8 bit texts if software allow that.
For now 7th bit problem is solved for:
- BIOS/BDOS - limitation removed;
- programming: please use BBC Basic, C, patched Turbo pascal, etc;
- text processing: Express editor and Superwriter text processor doesn't have 7th bit restrictions.
Full 256 chars local keyboards and character sets are supported.
Interrupts
CRISS CP/M has special IRQ processing system that is compatible with Z80 IRQ modes but with some peculiarities that should be noted:
- IRQ vectors must be set in advance in system console;
- there are several IRQ enabling settings that should be set in user program before enabling interrupts;
- Z80 IRQ mode 0 allows only 1-byte instructions.
Interrupt processing routines are still under development and may have some bugs.
BIOS and BDOS
The most advantage feature of CRISS CP/M computer is that all BIOS, BDOS and CCP procedures are supposed to be written on the level of CPU MCU firmware that would give unbelievable 60 Kb TPA, great performance and "native" communication with modern technologies.
Currently OS CPM 2.2 is 100% handles by the AVR code, next step will be CPM 3.0 support. All functions support CRISS CP/M hardware. For the user programs standard method af BIOS calls is used.
Function | Name | Features/ Enhancements | Location | Date |
---|---|---|---|---|
0 | BOOT | Cold start, returns to CCP | FW | March 2021 |
1 | WBOOT | Warm start, returns to CCP | FW | March 2021 |
2 | CONST | Console status | FW | March 2021 |
3 | CONIN | Console input - can be mapped to UART, LPT or LAN channels for remote control | FW | March 2021 |
4 | CONOUT | Console output - can be mapped to UART, LPT or LAN channels for remote control | FW | March 2021 |
5 | LIST | Printer output - can be mapped to UART, LPT or LAN channels | FW | March 2021 |
6 | PUNCH | User device output - can be mapped to UART, LPT or LAN channels, may be used for LAN communication between two CRISS CP/M computers | FW | March 2021 |
7 | READER | User devise input - can be mapped to UART, LPT or LAN channels, may be used for LAN communication between two CRISS CP/M computers | FW | March 2021 |
8 | HOME | Home FDD - does nothing | FW | March 2021 |
9 | SELDSK | Select disk | FW | March 2021 |
10 | SETTRK | Set track | FW | March 2021 |
11 | SETSEK | Set sector | FW | March 2021 |
12 | SETDMA | Set DMA buffer address | FW | March 2021 |
13 | READ | Read 128b sector - can be mapped to UART, LPT or LAN channels | FW | March 2021 |
14 | WRITE | Write 128b sector - can be mapped to UART, LPT or LAN channels | FW | March 2021 |
15 | LISTST | Printer status - can be mapped to UART, LPT or LAN channels and may be used to read data from RS-232 LPT channel | FW | March 2021 |
16 | SECTRAN | Sector translation - does nothing | FW | March 2021 |
BIOS code level also is responsible for the hardware terminal emulation: console and printer i/o routines call special hardware compatibility firmware library.
After the BIOS next step is to move BDOS on the AVR level, Work is in progress, it is not so clear how to implement CP/M filesystem behavior because many programs use internal data structures directly. Coming soon, hope that it will be done till the end of 2021.
I/O ports
CRISS CP/M has powerful extended I/O port structure. There are four groups of ports:
- ports 0x00-0xCF are handled by the hardware compatibility layer;
- ports 0xD0-0xF3 are responsible for operation with the peripheral controller;
- ports 0xF4-0xFD handles working with the internal databanks (more details in Memory section);
- ports 0xFE and 0xFF are special control ports, which are responsible for external devices and software controllers.
The first group is responsible for the correct port emulation: having received a request for an operation with this port interval, the handler causes the function of the hardware compatibility unit, which performs the appropriate actions. For example, in Robotron 1715, after reading the keyboard via BIOS call, an input command was performed from port 12 to read the key code.
Peripheral controller I/O ports allow to work with keyboard, VGA video adapter, melody generator, GPIO, RS-232. For the full list of I/O ports please refer to the Appendix.
Other ports will described in "Peripheral" section, please send requests if you need more information.
Memory structure
Memory overview
Please write request to prepare this section!
Basic memory
Please write request to prepare this section!
Memory banks
Please write request to prepare this section!
Video memory
Please write request to prepare this section!
EEPROMs
Please write request to prepare this section!
Programming
Programing languages
CRISS CP/M supports a wide range of programing languages available for CPM 2.2 system. Please download them from the CRISS CP/M support web-site. All programs have detailed manuals in the archive. When downloading please note hardware platform and known problems/restrictions also concerning 7th bit problem.
Usually programming has no special requirements. If there is no inbuilt text editor it is advised to use Express text editor that can be downloaded from the support site.
If your CRISS CP/M is powered by the EEPROM chip it is possible to keep 2 user sessions with the editor and compiler but please use different drives for program texts and compilation.
Console output
For the output please use standard functions of the programing language. To control the output there are set of control codes and ESC-sequences, i.e. sequence of chars started with ESC (27 dec or 1B hex) char.
Console control characters:
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 |
Supported ESC-sequences in text mode:
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+ |
If CON IOBYTE is set to extended output options, all characters sent to the console will be also sent to printer, RS-232, UART, LAN etc. If you disable CON output to the monitor VGA output will be frozen.
Keyboard input
BIOS CRISS CP/M supports standard key processing with correct reporting of keyboard status etc. There is no input keyboard buffer and next key will replace previous one so it is responsibility of the programmer to read it. If allowed pressed key rises the interrupt state.
Key code corresponds to the layout table uploaded to the peripheral controller MCU, usually it is CP866 codepage. CRISS CP/M supports special keys as follow:
- SHIFT - in a standard way
- CAPS LOCK - in a standard way, the led indicates active state;
- SCROLL LOCK - switch between default and local layout, the led indicates local layout active;
- NUM LOCK - not supported and is read as ordinary key.
Functional keys are mapped to the char codes 1-31 as follows:
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) |
NumLock key is not supported and numeric keypad always returns digits without SHIFT and behaves as arrows with SHIFT pressed.
When ALT and CTRL keys are pressed the numeric keypad returns pseudo-graphic characters for the frames: single line without SHIFT and double line with SHIFT.
NUM | / | * | - |
┌ | ┬ | ┐ | │ |
├ | ┼ | ┤ | |
└ | ┴ | ┘ | ET |
─ | Del |
Reading the port 212 (0xD4) it is possible to get access to the real scan-code of the key and reading the port 211 (0xD3) the state of ALT, CTRL, SHIFT keys:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
- | - | - | ALT | CAPSLOCK | SCROLLOCK | SHIFT | CTRL |
Scan codes generally corresponds to the PS/2 keyboard scan codes but are not equivalent.
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 |
Please note that if CON IOBYTE maps input to other channels like LAN or UART, port value for the scan code is undefined.
Files I/O
Files I/O has now peculiarities, please follow your programing language manual.
Graphics and symbol pages
By default CRISS CP/M is an alphanumeric terminal, supporting VGA monitor output up to 25x80 monochrome characters, default mode is 24x80 characters. Terminal settings may limit lines number and width, but it will not affect physical resolution. Character block has 20x8 pixels for the 1..24 lines mode and 19x8 for the 25 lines mode. Cursor mark that can be switched on/off is supported. Due to hardware limitation the only cursor shape full character block is supported. Blinking rate 1Hz is preset and can not be tuned. Attributes are not implemented.
To output text to the screen there are three options:
- using standard BDOS/BIOS CP/M functions, it is default way supporting special symbols and ESC-sequences, symbols are stored in the video RAM;
- direct writing to video RAM that is located at address 0xF800 of general RAM area, in this case symbols will be represented exactly as they are in the character table;
- direct output to the screen without storing symbols to the video RAM, it is useful for some special purposes.
Structure of console output is shown in the figure. Full process includes additional 2Kb RAM at the CPU AVR that is used to support attributes for correct hardware emulation. This area is not accessible from user programs.
CRISS CP/M supports 5 switchable code pages, please refer to the Appendix for more details.
You can switch between sets:
- using ESC control sequences;
- writing CRT control port 208 (0xD0).
Structure of the CRT control port value:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
LN4 | LN3 | LN2 | LN1 | LN0 | CP2 | CP1 | CP0 |
- LN4..LN0 - number of lines 24/25
- CP2..CP0 - code page from 0 t0 4
This port is R/W. Setting this port to zero sets monitor to the sleep mode.
From the VGA CPU firmware version 1.21+ code page 7 allows you to mix videmodes on one screen, in this mode line 25 must contain an array of code pages in the range 0..4 in its first 24 bytes.
Alternatively you can use ESC-sequences to switch between video-modes:
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 |
CRISS CP/M supports basic graphic capabilities providing monochrome resolution 160x96 pixels, each pixel can be set/clear individually. Video memory for the graphic mode is the same as for text mode and located at address 0xF800.
In graphic mode CRISS CP/M provides some useful commands for graphic primitives that can be called via the ESC-sequences. Bresenham's algorithms are used.
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 |
In addition to basic primitives there is special fie format *.cri that can be prepared in advance converting 160x96 b/w bmp file using special program for MS Windows. This format allows to load file directly to the video memory area and provides the fastest way to show image.
Using printers
OS CP/M supports printers via the special BIOS command LSTOUT. By default RS-232 interface is used and serial printer is assumed. CRISS CP/M provides full compatibility and some extended features like mapping LST channel to LAN, UART and support of LPT interface that is realized as special GPIO module.
Standard setting for the RS-232 interface are 9600 bod, 8 bit, no parity, 1 stop-bit. RS-232 interface contains only RX and TX lines, hardware flow control is not supported.
CRISS CP/M allows to use printer output channel flexibly by setting the LST IO byte in the system console or from the user's program. LST output can be redirected to:
- LST - standard RS-232 channel/printer;
- system UART;
- LPT - GPIO LPT adapter assumed, LPT printers are partially supported;
- LAN - all printer output is sent to the P-SERVER, that can be set in the system console, UDP 1-byte packets are used.
By default LST channel is checked. User program may change this settings, what allow to use LST function for other purposes.
LSTST BIOS function (LST status) returns real printer status if LPT adapter is used and 0xff (ready) in other cases.
Peripheral
This section describes how to communicate with the standard on-board peripheral. No program languages have been customized to work with CRISS CP/M peripheral so only low-level access is available. Probably partially this interaction will be simplified to ESC-sequences.
Melody generator
CRISS CP/M has on-board amplifier and single-tone melody generator that allows to play 16-notes melody asynchronously with the main program. If enabled end of melody rises the interrupt.
To use this feature there are 17 ports reserved: 16 ports for the notes and 1 control port.
Control port 214 (0xD6) accepts commands as follow:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
PD2 | PD1 | PD0 | ND4 | ND3 | ND2 | ND1 | ND0 |
- PD2..PD1 - pause between notes duration, may be from 0 to 6
- ND2..PD1 - 1/8 note basic duration
When playing is finished reading from this port returns 0.
There is some special commands:
- 0xFF - stop playing current melody, wait for 0 in the port;
- 0xFE (CPD firmware 0.22+) - starts playing tone stored in the port 224 until stop command.
Notes to play are store in ports 224-239, value structure is the following:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
NI4 | NI3 | NI2 | NI1 | NI0 | SPB | DI1 | DI0 |
- NI4..NI0 - tone index
- SPB - when 1 forces pause suppressing
- DI1..DI0 - note duration: 0 = 1/8, 1 = 1/4, 2 = 1/2, 3 = 1
There are two special values:
- 0x04 - end of melody
- 0x05 - repeat from the beginning.
Reference table for the tone indexes:
Индекс | 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# | Ре-диез малой октавы |
Code example
Plays short melody.
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;
Mouse
This chapter is actual for CPD firmware 0.21+, CPU firmware 4.61+
CRISS CP/M supports standard PS/2 mouse in standard mode, wheel is not supported. Mouse has to be connected to the I2C lines: DATA = SDA, CLOCK = SCL. There is no way to use mouse and GPIO in the same time, but you can use them concurrently physically switching devices.
Mouse processing has the peculiarity that in contrast to other peripheral devices it is processed asynchronously. So, for example, when I2C GPIO chip is controlled, it doesn't affect other tools: timer, VGA output etc are working without delays. But mouse poll stops all other processes until the response or timeout will be detected. Usually it takes about 1ms for the normal procedure and approx 20ms if the request is cancelled with the timeout. For that time VGA output, sound control and timer stop, that may lead sometime to missing of the timer step. Please take it into account.
To use mouse in the user program you should do the following steps:
Init the mouse sending 0xe0 to port 215, wait at least 5ms and check port 215 for the value returned: 0 means that mouse is detected and successfully initialized, 1 means error condition, usually it means that no mouse is connected.
If mouse is detected it is signaled by the NumLock led (on).
To get mouse state you should send 0xe1 to port 215, wait at least 10ms and check port 215 for the value returned: 0 means that data was successfully read. In this case port 216 will contain buttons states:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
*AF | *Middle | *Right | *Left | AF | Middle | Right | Left |
where prefix * means previous state before the request. Ports 217, 218 will contain 8-bit signed X and Y shift movement since these ports were cleared, i.e. each poll changes these values to the accumulated shift from the previous request. You'll need to clear or correct data in ports 217, 218 to avoid overflow.
After the program need not more mouse interface it must send 0xe4 to port 215 that will release interface lines. NumLock led will be turned off, indicating that command has been accepted.
If you need perform hardware mouse reset send 0xe4 to port 215 and wait at least 1s for completion. This command returns immediately after sending "Reset mode" command and doesn't wait for the response.
Code example
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.
Timers
There are two system timers that can be used:
- count-down 8-bit timer with 10ms step holding by peripheral MCU
- incremental 8 bit timer holding by CPU MCU
To access count-down timer simply write any value to port 222 (0xDE) and read it until it comes to zero. If it is allowed an interrupt will occur.
Code example (waiting key for 1s):
port[222]:=100; repeat until (bios(1)<>0) or (port[222]=0);
The second timer is accessed via the system memory block by writing 86 (dec) to port 0xF6 and than reading from the port 0xF7. This timer is incremented each 10 ms. You can reset this timer writing any value to port 0xF7 (after writing 86 (dec) to port 0xF6) but it not advised because resident programs may use it. Better to use count-down described above.
GPIO
CRISS CP/M supports external GPIO module built using PCF8574(A) IMCs via I2C SCL and SDA lines that are available via external MPS connector. These lines can be used in several ways:
- external custom user's I2C GPIO module up to 128 lines connection;
- external display/keyboard module based on TM1637 chip connection;
- PS/2 mice connection;
- connection of LPT module that also can be used as 24-lines GPIO block.
Typical GPIO module has the structure like following:
In the user's program there are two ports responsible for the standard GPIO block control:
- 0xD7 (215) - control port;
- 0xD8 (216) - data port.
If you want to send/read data to/from your GPIO chip, you need out command to the control block:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
C3 | C2 | C1 | C0 | A2 | A1 | A0 | RW |
where C3-C0 is the I2C chip code equal 0100 for PCF8574 and 0111 for PCF8574A, A2-A0 is the slave address (see the datasheet for more details) and RW is access mode: 0 for write and 1 for read.
Data port responds request data.
So, if you need to write data to GPIO module having PCF8574 chip with slave address 000 (all three pins A* are connected to ground) you have to write data to be set to data port 0xD8 and then write control port 0xD7 with the command 01000000, it will start command execution. Read control port until it will return to 0 that means success or 1 what means error condition, data port will contain the error code.
Writing the code 01000001 (RW=1) will cause read operation from the chip, after the completion data port will contain read value.
Standard CRISS CP/M LPT module when is used in GPIO mode has three PCF8574A chips with slave code 0, 1 and 2 and can be controlled in the standard way.
When working with PCF8574 chips approximate time to change it state is 250us, simple code written in Pascal generating the pulse on one pin gives approximately 350us pulse duration. Using PCA8574 chips will allow to decrease this timing, but you'll need to re-init the TWI interface for the 400kHz/1MHz operation. Default setting after the startup is 100kHz.
Code example
Output random values to the LPT module running in GPIO mode, BBC Basic syntax:
10 P=112:GOSUB 100 20 P=114:GOSUB 100 30 P=115:GOSUB 100 40 STOP 100 PUT 216, RND(256) 110 PUT 215, P 120 IF GET(215)>1 THEN 120 130 RETURN
UART
Please write request to prepare this section!
RS-232 interface
Serial communication via the RS-232 interface is governed by peripheral controller MCU and uses its hardware UART interface with external MAX232 chip that serves to shift signal levels to standard values for the RS-232 signalling.
This port depending on the IOBYTE settings can be used as:
- LST channel output and for serial printer connection;
- PUNCH/READER communication interface;
- console I/O interface;
- general-purpose serial interface.
This chapter describes using this interface as general-purpose.
Default settings for the RS-232 interface are: 9600 bod, 8 bit, 1 stop, no parity.
User program may customize port setting via the following procedure:
- out 0xC4 to the port 0xDC (220);
- out baud rate index value from the table below to the port 0xDD (221);
- out 0x82 the the port 0xDB (219).
Baud rate | Index, decimal value |
---|---|
9600 | 129 |
14400 | 86 |
19200 | 64 |
28800 | 42 |
38400 | 32 |
57600 | 21 |
115200 | 10 |
To send data to the port the following sequence of operations should be used:
- write data to be sent to the port 0xF2 (242);
- write 1 to the port 0xDF (223) to initiate the transmission.
After the completion reading from the port 0xDF (223) will return 0 that means that channel is ready for the next symbol. If you need to send the same symbol more than 1 time on the step 2 write instead of 1 the number of times to send data byte. Writing 0 to the port 0xDF (223) will cancel sending procedure.
Reading the data from the port should be done in the following way: read RS-232 status port 0xF1 (241) and check the bit 7: when this bit is set (1) it means that data byte is received, read it from the port 0xF3 (243). Reading from the status port clears bit 7 flag.
There is no input buffer at the peripheral controller and new symbol will rewrite previous one, if it was not read it will be lost without traces.
If interrupts are configured char reception and completing of the transmission will rise interrupts.
Ethernet LAN
There are several ways how to use Ethernet interface:
- assigning standard I/O interfaces to the LAN and setting IP and MAC addresses in the system console will allow you to send/receive data without writing any code - please refer to User's manual;
- simplified UDP data send/receive from the user program using pre-default commands;
- direct access to ENC28J60 chip for unlimited advanced applications - please refer to the IC datasheet and to "Advanced" section of this manual.
For LAN communication CRISS CP/M has a set of tools that allow to use this interface within just few code lines.
Please write request to complete this section!
Real-time clock
Please write request to prepare this section!
EEPROM
Please write request to prepare this section!
Appendix
Instructions set
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 | |----|--------------|--------------|--------------|--------------|--------------|--------------|--------------|--------------|
Pripheral controller I/O ports
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 |
Symbol pages
Standard CRISS symbol set based on CP866 codepage:
Code page 1, used for graphic mode:
Code page 2:
Code page 3:
Codepage 4 is reserved for custom user application. All character sets can be customized.
Work is in the progress
Didn't find information you need? Work is in the progress, information will be available soon! Please send requests what you need "ASAP"!