----------T----------T------------T-------------T---------------¬
|01 Esc |12 E |23 H |34 . > |45 NumLock |
|02 1 ! |13 R |24 J |35 / ? |46 ScrollLock|
|03 2 @ |14 T |25 K |36 Shft(прав)|47 Home [7] |
|04 3 # |15 Y |26 L |37 * PrtSc |48 Up [8] |
|05 4 $ |16 U |27 ; : |38 Alt |49 PgUp [9] |
|06 5 % |17 I |28 " ' |39 Пробел |4a K - |
|07 6 ^ |18 O |29 ` ~ |3a CapsLock|4b <- [4] |
|08 7 & |19 P |2a Shft(лев)|3b F1 |4c [5] |
|09 8 * |1a [ { |2b \ | |3c F2 |4d -> [6] |
|0a 9 ( |1b ] } |2c Z |3d F3 |4e K + |
|0b 0 ) |1c Enter|2d X |3e F4 |4f End [1] |
|0c - _ |1d Ctrl |2e C |3f F5 |50 Dn [2] |
|0d + = |1e A |2f V |40 F6 |51 PgDn [3] |
|0e Bksp|1f S |30 B |41 F7 |52 Ins [0] |
|0f Tab |20 D |31 N |42 F8 |53 Del [.] |
|10 Q |21 F |32 M |43 F9 | |
|11 W |22 G |33 , < |44 F10 | |
L---------|----------|------------|-------------|----------------
г--------T--------------T--------------T-------------¬ | F1 3b| Shift-F1 54| Ctrl-F1 5e | Alt-F1 68 | | F2 3c| Shift-F2 55| Ctrl-F2 5f | Alt-F2 69 | | F3 3d| Shift-F3 56| Ctrl-F3 60 | Alt-F3 6a | | F4 3e| Shift-F4 57| Ctrl-F4 61 | Alt-F4 6b | | F5 3f| Shift-F5 58| Ctrl-F5 62 | Alt-F5 6c | | F6 40| Shift-F6 59| Ctrl-F6 63 | Alt-F6 6d | | F7 41| Shift-F7 5a| Ctrl-F7 64 | Alt-F7 6e | | F8 42| Shift-F8 5b| Ctrl-F8 65 | Alt-F8 6f | | F9 43| Shift-F9 5c| Ctrl-F9 66 | Alt-F9 70 | | F10 44| Shift-F10 5d| Ctrl-F10 67 | Alt-F10 71 | L--------|--------------|--------------|-------------- г----------T----------T-------------T-------------¬ | Alt-A 1e| Alt-P 19| Alt-3 7a| Down Dn 50| | Alt-B 30| Alt-Q 10| Alt-4 7b| Left <- 4b| | Alt-C 2e| Alt-R 13| Alt-5 7c| Right -> 4d| | Alt-D 20| Alt-S 1f| Alt-6 7d| Up Up 48| | Alt-E 12| Alt-T 14| Alt-7 7e| End 4f| | Alt-F 21| Alt-U 16| Alt-8 7f| Home 47| | Alt-G 22| Alt-V 2f| Alt-9 80| PgDn 51| | Alt-H 23| Alt-W 11| Alt-- 82| PgUp 49| | Alt-I 17| Alt-X 2d| Alt-= 83| | | Alt-J 24| Alt-Y 15| | ^Left 73| | Alt-K 25| Alt-Z 2c| NUL 03| ^Right 74| | Alt-L 26| | Shift-Tab 0f| ^End 75| | Alt-M 32| Alt-0 81| Ins 52| ^Home 77| | Alt-N 31| Alt-1 78| Del 53| ^PgDn 76| | Alt-O 18| Alt-2 79| ^PrtSc 72| ^PgUp 84| L----------|----------|-------------|--------------
Таблица скан-кодов клавиш, имеющихся только на 101-клавишной клавиатуре:
г-------------T------------------T------------------¬ | F11 85| Alt-Bksp 0e | Alt- Д / a4| | F12 86| Alt-Enter 1c | Alt- Д * 37| | Shft-F11 87| Alt-Esc 01 | Alt- Д - 4a| | Shft-F12 88| Alt-Tab a5 | Alt- Д + 4e| | Ctrl-F11 89| Ctrl-Tab 94 | Alt- Д Enter a6| | Ctrl-F12 8a| | | | Alt-F11 8b| Alt-up Up 98 | Ctrl- Д / 95| | Alt-F12 8c| Alt-down Dn a0 | Ctrl- Д * 96| | Alt-[ 1a| Alt-left <- 9b | Ctrl- Д - 8e| | Alt-] 1b| Alt-right -> 9d | Ctrl- Д + 90| | Alt-; 27| | | | Alt-' 28| Alt-Delete a3 | Ctrl- Д Up [8] 8d| | Alt-` 29| Alt-End 9f | Ctrl- Д 5 [5] 8f| | Alt-\ 2b| Alt-Home 97 | Ctrl- Д Dn [2] 91| | Alt-, 33| Alt-Insert a2 | Ctrl- Д Ins[0] 92| | Alt-. 34| Alt-PageUp 99 | Ctrl- Д Del[.] 93| L-------------|------------------|-------------------
Регистр |
Назначение |
0 |
счетчик секунд |
1
|
регистр секунд будильника
|
2
|
счетчик минут
|
3
|
регистр минут будильника
|
4
|
счетчик часов
|
5
|
регистр часов будильника
|
6
|
счетчик дней недели (1 - воскресенье)
|
7
|
счетчик дней месяца
|
8
|
счетчик месяцев
|
9
|
счетчик лет (последние две цифры текущего года)
|
7 6 5 4 3 2 1 0
T-T-T-T-T-T-T---¬
| | | |
LT+T+-+T+T+-+-+T-
| L=T=- L=====|= переключатель скорости (установлен в 0110)
| L=========== 22-разрядный делитель (установлен в 010)
L=============== Флаг обновления, 0 означает готовность
данных для чтения.
7 6 5 4 3 2 1 0
T-T-T-T-T-T-T-T-¬
| | | | | | | | |
LT+T+T+T+T+T+T+T-
| | | | | | | L= 1 - использование летнего времени
| | | | | | | (daylight savings enable);
| | | | | | | 0 - стандартное время (установлен в 0)
| | | | | | |
| | | | | | L=== 12 или 24-часовой режим. 0 - 12-часовой
| | | | | | режим (установлен в 1)
| | | | | |
| | | | | L===== режим данных BCD. 1 - двоичный, 0 - BCD.
| | | | | (установлен в 0)
| | | | |
| | | | L======= разрешение прямоугольной волны.
| | | | 1 - включение прямоугольной волны.
| | | | (установлен в 0)
| | | |
| | | L========= разрешение прерывания по окончанию
| | | изменения данных (установлен в 0)
| | |
| | L=========== разрешение прерывания будильника
| | (установлен в 0)
| |
| L============= разрешение периодических прерываний
| (установлен в 0)
|
L=============== Флаг обновления, 0 означает готовность
данных для чтения КМОП-памяти.
0cH регистр состояния C.
Биты состояния прерывания, их можно только читать.
0dH регистр состояния D.
Если бит 7 равен 0, это означает, что разрядился
аккумулятор, питающий КМОП-память.
В этой таблице приведены частоты нот для второй октавы.
При повышении (понижении) тона на октаву
частота соответствующей ноты умножается
(делится) на 2.
Нота |
Частота, Гц |
До |
261,7 |
До-диез |
277,2 |
Ре |
293,7 |
Ре-диез |
311,1 |
Ми |
329,6 |
Фа |
349,2 |
Фа-диез |
370,0 |
Соль |
392,0 |
Соль-диез |
415,3 |
Ля |
440,0 |
Ля-диез |
466,2 |
Си |
493,9 |
Приведем разводку разъема порта последовательной передачи данных DB25P:
Номер контакта Назначение контакта Вход или выход
1 Защитное заземление -
2 Передаваемые данные Выход
(Transmitted Data)
3 Принимаемые данные Вход
(Received Data)
4 Запрос для передачи Выход
(Request to send, RTS)
5 Сброс для передачи Вход
(Clear to Send, CTS)
6 Готовность данных Вход
(Data Set Ready, DSR)
7 Сигнальное заземление -
8 Детектор принимаемого Вход
с линии сигнала
(Data Carrier Detect,
DCD)
9-19 Не используется
20 Готовность выходных Выход
данных
(Data Terminal Ready,
DTR)
21 Не используется
22 Индикатор вызова Вход
(Ring Indicator, RI)
23-25 Не используется
Приведем также разводку разъема порта последовательной передачи данных DB9P:
Номер Назначение Вход или выход
контакта контакта
1 Детектор принимаемого Вход
с линии сигнала
(Data Carrier Detect,
DCD)
2 Принимаемые данные Вход
(Received Data)
3 Передаваемые данные Выход
(Transmitted Data)
4 Готовность выходных Выход
данных
(Data Terminal Ready,
DTR)
5 Сигнальное заземление -
6 Готовность данных Вход
(Data Set Ready, DSR)
7 Запрос для передачи Выход
(Request to send, RTS)
8 Сброс для передачи Вход
(Clear to Send, CTS)
9 Индикатор вызова Вход
(Ring Indicator, RI)
Этот порт предназначен для записи выводимого на принтер байта данных. Возможно также чтение только что записанного байта.
Порт управления принтером, доступен для чтения
и записи:
7 6 5 4 3 2 1 0 T-T-T-T-T-T-T-T-¬ | | | | | | | LT+-+T+T+T+T+T+T- L=T=- | | | | L= строб данных, принимает значение 1 при | | | | | выводе байта, подключен к 1 контакту | | | | | разъема, STROBE; | | | | | | | | | L=== автоматический перевод строки после | | | | символа "возврат каретки" CR, контакт 14, | | | | AUTO LineFeed; | | | | | | | L===== сброс принтера, активный уровень - 0, | | | контакт 16, INIT; | | | | | L======= выбор принтера для работы, контакт 17, | | SLCT IN; | | | L========= разрешение прерывания от принтера, | IRQ Enable; | L============= равно 0.
Если прерывания от принтера разрешены, они вырабатываются, когда сигнал готовности принтера ACK (контакт разъема 10) принимает уровень логического 0.
Порт состояния принтера, доступен только для чтения:
7 6 5 4 3 2 1 0
T-T-T-T-T-T-T---¬
| | | | | | |
LT+T+T+T+T+T+-+T-
| | | | | L===|= установлены в 0;
| | | | |
| | | | L======= сигнал ошибки, активный уровень - 0,
| | | | контакт разъема - 15, ERROR;
| | | |
| | | L========= принтер выбран, контакт 13, SLCT;
| | |
| | L=========== конец бумаги, контакт 12, PE;
| |
| L============= готовность принтера, активный уровень - 0,
| контакт разъема - 10, ACK;
|
L=============== 0 - принтер занят, находится в состоянии
offline или произошла ошибка, контакт 11,
BUSY.
Таблица назначения контактов разъемов принтерного порта (контакт PC) на компьютере и контактов разъема непосредственно на принтере (контакт принтера):
Контакт Контакт Назначение Вход/выход
PC принтера
1 1 Строб (STROBE) Выход, инверсия
2 2 Данные, бит 0 Выход
3 3 Данные, бит 1 Выход
4 4 Данные, бит 2 Выход
5 5 Данные, бит 3 Выход
6 6 Данные, бит 4 Выход
7 7 Данные, бит 5 Выход
8 8 Данные, бит 6 Выход
9 9 Данные, бит 7 Выход
10 10 Подтверждение, ACK Вход, инверсия
11 11 Занятость, BUSY Вход
12 12 Конец бумаги, PE Вход
13 13 Выбор, SLCT Вход
14 14 Авт. перевод Выход, инверсия
строки, Auto
Line Feed
15 32 Ошибка, ERROR Вход, инверсия
16 31 Сброс принтера, Выход, инверсия
INIT
17 36 Принтер выбран, Выход, инверсия
SLCT IN
18-25 16,17, Земля -
19-30,
33
ESC @ Инициализация принтера
1Bh 40h
Выполняется сброс принтера в исходное состояние, если происходила печать строки, то при инициализации эта печать отменяется.
DC1(17) Выбор принтера для работы
11h
Возвращает принтер в выбранное (активное) состояние, если раньше он был переведен в неактивное состояние командой DC3. Эта команда не выполняет никаких действий, если принтер находится в состоянии OFF LINE
DC3(19) Перевод принтера в неактивное состояние
13h
Переводит принтер в неактивное состояние до получения принтером команды DC1 выбора принтера для работы. Если принтер переведен в неактивное состояние, его нельзя перевести в состояние ON LINE при помощи соответствующей клавиши на лицевой панели.
DEL(127) Удаление символа
7Fh
Удаляет последний переданный в принтер символ. Эта команда не действует на управляющие коды.
ESC < Печать в одном направлении
1Bh 3Ch
Переключает принтер в режим печати в одном направлении, т.е. принтер печатает только тогда, когда печатающая головка движется в одну сторону. Команда задает режим только для одной строки, символ возврата каретки отменяет печать только в одном направлении.
ESC U n Включение/выключение режима печати в одном
направлении
1Bh 55h n
В зависимости от параметра n режим печати только в одном направлении может включаться либо отключаться:
n = 1 режим включен;
n = 0 режим выключен.
ESC EM n Управление податчиком бумаги
1Bh 19h n
Эта команда распознается принтером только в том случае, если принтер оборудован податчиком бумаги (Cut Sheet Feeder).
Возможные значения параметра n:
1 Загрузка бумаги из кармана BIN1
2 Загрузка бумаги из кармана BIN2
R Проброс листа бумаги без загрузки нового.
BEL(7) Выдача звукового сигнала
07h
Если выдать эту команду на принтер, громкоговоритель принтера издаст звуковой сигнал. Эта команда может быть использована для предупреждения оператора, например, о том, что кончилась бумага.
Старший бит данных MSB (Most Significant Bit) - это бит 7 байтов, посылаемых программой в принтер. Обычно вам не надо изменять значение старшего бита данных, более того, команды управления старшим битом не действуют в графическом режиме или при переопределении символов.
ESC = Установка MSB в 0 1Bh 3Dh Для всех выводимых на принтер данных старший бит принудительно устанавливается в 0. Этот режим используется при работе принтера с такими компьютерами, которые всегда посылают на принтер данные со старшим битом, установленным в 1. ESC > Установка MSB в 1 1Bh 3Eh Для всех выводимых на принтер данных старший бит принудительно устанавливается в 1. ESC # Отмена управления MSB 1Bh 23h Отменяется действие введенных ранее команд управления MSB "ESC =" или "ESC >"
CR(13) Возврат каретки
0Dh
Команда вызывает распечатку содержимого буфера данных принтера, после чего головка переводится в начало текущей строки.
CAN(24) Отмена печати строки
18h
Весь текст из распечатываемой строки удаляется. Команда не влияет на управляющий коды, находящиеся в этой строке.
FF(12) Подача бумаги на один лист
0Ch
Команда вызыывает распечатывание содержимого буфера принтера, вслед за этим происходит подача бумаги вперед на один лист (в соответствии с установленной длиной листа).
ESC C n Установить длину листа бумаги в строках
1Bh 43h n
Команда устанавливает длину листа бумаги, равной n строкам. Используется установленное ранее расстояние между строками. Допустимые значения параметра n лежат в пределах 1...127 строк.
ESC C 0 n Установить длину листа бумаги в дюймах
1Bh 43h 00h n
Комнда устанавливает длину листа бумаги, равную n дюймам. Значение n должно находиться в пределах 1...22 дюйма.
ESC N n Установить режим пропуска перфорации
1Bh 4Eh n
В этой команде параметр n - это количество строк, пропускаемых принтером между последней строкой страницы и первой строкой следующей страницы. Значение n должно находиться в пределах 1...127 строк.
ESC O Отмена режима пропуска перфорации
1Bh 4Fh
Эта команда отменяет режим пропуска перфорации, установленный командой "ESC N n".
LF(10) Перевод строки
0Ah
Команда вызывает распечатку содержимого буфера данных принтера, после чего головка переводится в начало следующей строки (бумага продвигается впереж на одну строку).
ESC 0 Выбор межстрочного интервала, равного 1/8 дюйма
1Bh 30h
Расстояние между текстовыми строками устанавливается равным 1/8 дюйма.
ESC 2 Выбор межстрочного интервала, равного 1/6 дюйма
1Bh 32h
Расстояние между текстовыми строками устанавливается равным 1/6 дюйма. Это значение используется по умолчанию при включении питания принтера.
ESC 3 n Выбор межстрочного интервала, равного n/180 дюйма
1Bh 33h n
Расстояние между текстовыми строками устанавливается равным n/180 дюймов. Значение n должно находиться в пределах 0...255.
ESC + n Выбор межстрочного интервала, равного n/360 дюйма
1Bh 2Bh n
Расстояние между текстовыми строками устанавливается равным n/360 дюймов. Значение n должно находиться в пределах 0...255.
ESC A n Выбор межстрочного интервала, равного n/60 дюйма
1Bh 41h n
Расстояние между текстовыми строками устанавливается равным n/60 дюймов. Значение n должно находиться в пределах 0...85.
ESC J n Проброс бумаги на расстояние n/180 дюймов
1Bh 4Ah n
Бумага продвигается вперед на расстояние, равное n/180 дюймов. Команда выполняется немедленно и не вызывает перемещений печатающей головки.
VT(11) Вертикальная табуляция
0Bh
Бумага продвигается до следующего символа табуляции в канале, выбранном командой "ESC /". Если не выбран никакой канал, по умолчанию используется нулевой. Если вертикальная табуляция не установлена, бумага продвигается вперед на одну строку.
ESC B n1 n2 ... 0 Установка вертикальной табуляции
1Bh 42h n1 n2 ... 00h
Команда позволяет задать до 16 положений для вертикальной табуляции. Параметры n1, n2, ... задают позиции для табуляции. Они должны указываться в порядке возрастания. Последний параметр всегда должен быть равен 0 - это признак конца последовательности параметров. Табуляция устанавливается в нулевом канале.
ESC b c n1 n2 ... 0 Установка вертикальной табуляции в канале
1Bh 62h c 1n n2 ... 00h
Команда аналогична команде "ESC B", за исключением того, что необходимо указывать параметр c - номер выбираемого канала для вертикальной табуляции. Значение параметра c должно находиться в пределах 0...7.
ESC / c Выбор канала для вертикальной табуляции
1Bh 2Fh c
Команда выбирает канал c для работы с командами VT вертикальной табуляции. Значение параметра c должно находиться в пределах 0...7.
ESC l n Установка левой границы
1Bh 6Ch n
Устанавливается левая граница листа. В левой части листа оставляется n пустых столбцов символов текущей ширины. Если командв выдается для пропорционального набора символов, в качестве ширины для установки левой границы берется значение 10 символов на дюйм (10 pitch).
ESC Q n Установка правой границы
1Bh 51h n
Устанавливается правая граница листа. В правой части листа оставляется n пустых столбцов символов текущей ширины. Если командв выдается для пропорционального набора символов, в качестве ширины для установки правой границы берется значение 10 символов на дюйм (10 pitch).
BS(8) Возврат на одну позицию
08h
Команда вызывает распечатку содержимого буфера печати, после чего печатающая головка возвращается на одну позицию назад (но не за левую границу, установленную командой "ESC l". Если этот код выводится на принтер сразу после печати строки в графическом режиме, печатающая головка возвращается к началу только что напечатанной графической строки.
ESC $ n1 n2 Установка абсолютной позиции для печати
1Bh 24h n1 n2
Команда задает расстояние от левой границы листа до того места, откуда будет продолжена печать символов. Для вычисления расстояния используется следующая формула: n1 + (n2 * 256). Расстояние задается в единицах, эквивалентных 1/60 доли дюйма.
ESC \ n1 n2 Установка относительной позиции для печати
1Bh 5Ch n1 n2
Команда задает расстояние от текущей позиции печатающей головки до того места, откуда будет продолжена печать символов. Для вычисления расстояния используется следующая формула: n1 + (n2 * 256). Расстояние задается в единицах, эквивалентных 1/120 доли дюйма для чернового режима и 1/180 доли дюйма для качественного и пропорционального.
HT(9) Горизонтальная табуляция
09h
Печатающая головка продвигается до следующего символа горизонтальной табуляции. По умолчанию для одного символа табуляции используется интервал в 8 символов текущего размера.
ESC D n1 n2 ... 0 Установка горизонтальной табуляции
1Bh 44h n1 n2 ... 00h
Команда позволяет задать до 32 положений для горизонтальной табуляции. Параметры n1, n2, ... задают позиции для табуляции. Они должны указываться в порядке возрастания. Последний параметр всегда должен быть равен 0 - это признак конца последовательности параметров. Команда "ESC D 0" сбрасывает все позиции горизонтальной табуляции.
ESC x n Выбор черновой или качественной печати
1Bh 78h n
Параметр n определяет режим печати следующим образом:
0 - черновой режим печати;
1 - качественный (LQ) режим печати.
ESC k n Выбор стиля печати
1Bh 6Bh n
Команда действительна только для режима качественной печати. Параметр n задает стиль:
0 - Roman;
1 - Sans Serif;
2 - Courier;
3 - Prestige;
4 - Script;
5 - OCR-B;
6 - OCR-A.
ESC ! n Выбор режима работы принтера
1Bh 21h n
Команда позволяет задать комбинацию различных режимов работы принтера. Можно по отдельности задавать размер символов (10 или 12 символов на дюйм), набор символов (пропорциональный, сжатый, выделенный и т.д.). Отдельные биты байта параметра n задают режим работы принтера следующим образом:
7 6 5 4 3 2 1 0
--T-T-T-T-T-T-T-¬
| | | | | | | | |
LT+T+T+T+T+T+T+T-
| | | | | | | L= 0 - размер символа 10 pitch
| | | | | | | 1 - размер символа 12 pitch
| | | | | | |
| | | | | | L=== пропорциональный шрифт
| | | | | |
| | | | | L===== сжатый шрифт
| | | | |
| | | | L======= выделенный шрифт
| | | |
| | | L========= использование двух проходов
| | |
| | L=========== двойная высота
| |
| L============= использование курсива
|
L=============== использование подчеркивания
ESC P Выбор размера символа в 10 pitch
1Bh 50h
Эта команда задает размер символа, равный 10 pitch, или 10 символов на дюйм. Такой размер устанавливается по умолчанию при инициализации принтера.
ESC M Выбор размера символа в 12 pitch
1Bh 4Dh
Эта команда задает размер символа, равный 12 pitch, или 12 символов на дюйм.
ESC g Выбор размера символа в 15 pitch
1Bh 67h
Эта команда задает размер символа, равный 15 pitch, или 15 символов на дюйм. Этот режим несовместим с режимом сжатой печати.
ESC p n Включение/выключение пропорционального режима
1Bh 70h n
В пропорциональном режиме разные символы имеют различную ширину, что благоприятно сказывается на читаемости текста. Например, букава "i" уже, чем "W".
Параметр n может принимать следующие значения:
0 - выключение пропорционального режима;
1 - включение пропорционального режима.
SI(15) Выбор режима сжатой печати
0Fh
В этом режиме символы имеют примерно на 60 процентов меньшую ширину, чем в нормальном режиме. Режим сжатой печати не совместим с пропорциональным режимом.
ESC SI Выбор режима сжатой печати
1Bh 0Fh
Команда полностью аналогична предыдущей командe "SI".
DC2(18) Отмена режима сжатой печати
12h
Отменяется режим сжатой печати, установленный ранее командами ESC SI или SI.
SO(14) Печать с двойной шириной
0Eh
В этом режиме ширина каждого распечатываемого символа увеличивается в два раза. Режим печати с двойной шириной отменяется командой возврата каретки или командой DC4.
ESC SO Печать с двойной шириной
1Bh 0Eh
Команда полностью аналогична предыдущей командe "SO".
ESC W n Включение/выключение режима печати с двойной высотой
1Bh 77h n
В режиме печати с двойной высотой высота каждого распечатываемого символа увеличивается в два раза.
Возможные значения параметра n:
0 - выключение режима печати с двойной высотой;
1 - включение режима печати с двойной высотой.
DC4(20) Отмена режима печати с двойной шириной
14h
Команда отменяет действие команд "ESC SO" или "SO", но не действует, если режим печати с двойной шириной задан командами "ESC W" или "ESC !".
ESC W n Включение/выключение режима печати с двойной шириной
1Bh 57h n
В режиме печати с двойной шириной ширина каждого распечатываемого символа увеличивается в два раза.
Возможные значения параметра n:
0 - выключение режима печати с двойной шириной;
1 - включение режима печати с двойной шириной.
ESC E Установка режима печати с выделением
1Bh 45h
Распечатываемые символы выглядят "толще" за счет того, что каждая точка печатается дважды.
ESC F Отмена режима печати с выделением
1Bh 46h
Команда отменяет действие команды "ESC E".
ESC G Установка режима двойной печати
1Bh 47h
В режиме двойной печати каждая строка печатается дважды, поэтому текст выглядит ярче. Скорость печати уменьшается в два раза.
ESC H Отмена режима двойной печати
1Bh 48h
Команда отменяет действие команды "ESC G".
ESC S 0 Печать верхнего индекса
1Bh 53h 00h
Символы распечатываются выше обычного уровня, занимая верхние две трети сетки.
ESC S 1 Печать нижнего индекса
1Bh 53h 01h
Символы распечатываются ниже обычного уровня, занимая нижние две трети сетки.
ESC T Отмена печати верхнего или нижнего индекса
1Bh 54h
Команда отменяет действие любой из команд, задающих режим печати индекса - "ESC S 0" или "ESC S 1".
ESC - n Включение/выключение режима подчеркивания
1Bh 2Dh n
В зависимости от значения параметра n все символы (и пробелы тоже) печатаются с подчеркиванием или без подчеркивания:
0 - выключение режима подчеркивания;
1 - включение режима подчеркивания.
ESC q n Выбор стиля распечатываемых символов
1Bh 71h n
В зависимости от значения параметра n все символы, кроме имеющих коды от B0h до DFh и символа с кодом F5h распечатываются с использованием следующих стилей:
0 - обычный стиль;
1 - контурное (outline) начертание символов;
2 - использование тени (стиль shadow);
3 - комбинация контурного начертания и тени.
ESC a n Выравнивание для качественного (LQ) набора символов
1Bh 61h n
Параметр n может принимать следующие значения:
0 - выравнивание влево;
1 - выравнивание по центру;
2 - выравнивание вправо;
3 - полное выравнивание.
По умолчанию при инициализации принтера выбирается режим выравнивания влево. Полное выравнивание выполняется после заполнения буфера печати. При этом распечатываемый текст может содержать символы горизонтальной табуляции HT и возврата на одну позицию BS только тогда, когда задан режим выравнивания влево (n=0). Если используется полное выравнивание, параграфы текста не должны содержать символы возврата каретки.
ESC SP n Выбор расстояния между символами
1Bh 20h n
Команда позволяет увеличить расстояние между символами по сравнению с тем, которое было задано в сетке при разработке начертания символов. Параметр n, значение которого должно лежать в пределах 0...127, задает количество точек, добавляемых справа к каждому символу. Одна точка соответствует 1/120 дюйма в черновом режиме и 1/180 дюйма в качественном и пропорциональном режимах.
ESC t n Выбор таблицы символов
1Bh 74h n
Данная команда выбирает одну из таблиц, описывающих начертание символов для символов с кодами от 128 до 255, т.е. для правой половины кодовой таблицы ASCII. Можно выбрать таблицу, содержащую символы курсива (только латинские буквы), расширенную графическую таблицу фирмы Epson или таблицу, определенную пользователем:
0 - таблица с символами курсива (Italics character
table);
1 - расширенная графическая таблица Epson;
2 - таблица, определенная пользователем.
После загрузки в принтер русских (или других пользовательских) шрифтов необходимо задать режим n=2.
ESC 4 Использование курсива
1Bh 34h
После получения этой команды принтер печатает весь текст курсивом для любой таблицы символов, за исключением символов псевдографики расширенной таблицы Epson.
ESC 5 Отмена использования курсива
1Bh 35h
Команда отменяет печать курсивом.
ESC R n Выбор национального набора символов
1Bh 52h n
В зависимости от параметра n выбирается национальный набор символов:
0 - США; 7 - Испания, набор 1;
1 - Франция; 8 - Япония;
2 - Германия; 9 - Норвегия;
3 - Англия; 10 - Дания, набор 2;
4 - Дания, набор 1; 11 - Испания, набор 2;
5 - Швеция; 12 - Латинская Америка.
6 - Италия;
ESC & Определение символов
1Bh 26h 00h n1 n2 d0 d1 d2 data
Полный формат команды для переопределения символов в принтере Epson LQ-2550:
ESC "&" "0" n1 n2 d0 d1 d2 data
Параметры n1 и n2 задают диапазон кодов ASCII символов, начертание которых необходимо переопределить. Их назначение такое же, как и для 9-игольчатых принтеров Epson. Если вы переопределяете только один символ, эти два параметра должны быть одинаковыми.
Далее следуют три байта данных, которые задают ширину символа и размер свободного пространства вокруг символа. Параметр d0 задает количество свободных столбцов слева от символа, параметр d2 определяет количество свободных столбцов справа от символа. Параметр d1 определяет ширину символа в столбцах сетки.Изменяя ширину символа и размер свободного пространства вокруг него можно формировать пропорциональные наборы символов. В следующей таблице приведены максимальные значения для параметров d0, d1, d2 для различных наборов символов:
Набор d1 d0+d1+d2
Черновой 9 12
Качественный, 29 36
10 символов на дюйм
Качественный, 23 30
12 символов на дюйм
Пропорциональный 37 42
После параметра d2 следует последовательность байтов, описывающих символ, т.е. образец для символа. Для задания одного столбца сетки требуется три байта, поэтому для определения одного символа вы должны задать (d1 * 3) байтов данных.
ESC : 0 n 0 Копирование символов из ПЗУ в ОЗУ
1Bh 3Ah 00h n 00h
Команда выполняет копирование заданного параметром n набора символов из постоянного запоминающего устройства принтера в его оперативную память. После этого можно переопределить начертание части символов командой "ESC &". Возможные значения для параметра n:
0 - Roman;
1 - Sans Serif;
2 - Courier;
3 - Prestige;
4 - Script;
5 - OCR-B;
6 - OCR-A.
ESC % n Выбор набора символов, заданного пользователем
1Bh 25h n
Команда позволяет переключать используемый набор символов. В зависимости от значения параметра n будет использоваться либо стандартный набор символов принтера, либо наор символов, определенный пользователем при помощи команды "ESC &".
Возможные значения параметра n:
0 - используется стандартный набор символов;
1 - используется набор символов, определенный
пользователем.
ESC 6 Разрешение печати символов с кодами 128...159
1Bh 36h
После приема этой команды при использовании расширенной графической таблицы Epson символы с кодами от 128 до 159 будут интерпретироваться принтером как символы, а не как управляющие коды.
ESC 7 Запрещение печати символов с кодами 128...159
1Bh 37h
После приема этой команды при использовании расширенной графической таблицы Epson символы с кодами от 128 до 159 будут интерпретироваться принтером как управляющие коды. Этот режим устанавливается по умолчанию при инициализации принтера.
ESC K n1 n2 Выбор графического режима с одинарной плотностью
1Bh 4Bh n1 n2
Команда устанавливает графический 8-битовый режим одинарной плотности. Общее количество столбцов в графической строке при этом составит n1 + (n2 * 256).
ESC L n1 n2 Выбор графического режима с двойной плотностью
1Bh 4Ch n1 n2
Команда устанавливает графический 8-битовый режим двойной плотности, печать будет выполняться с низкой скоростью. Общее количество столбцов в графической строке при этом составит n1 + (n2 * 256).
ESC Y n1 n2 Выбор скоростного графического режима с двойной плотностью
1Bh 59h n1 n2
Команда устанавливает графический 8-битовый режим двойной плотности, печать будет выполняться с высокой скоростью. Общее количество столбцов в графической строке при этом составит n1 + (n2 * 256).
ESC Z n1 n2 Выбор графического режима с учетверенной плотностью
1Bh 5Ah n1 n2
Команда устанавливает графический 8-битовый режим учетверенной плотности. Общее количество столбцов в графической строке при этом составит n1 + (n2 * 256).
ESC * Печать в графическом режиме
1Bh 2Ah m n1 n2
Полный формат команды графической печати:
ESC "*" m n1 n2 data
В этой команде параметр m задает режим печати:
m Режим
0 Одинарная плотность, 60 точек на дюйм,
8-битовая графика
1 Двойная плотность, 120 точек на дюйм,
8-битовая графика
2 Двойная плотность, печать с высокой,
скоростью, 120 точек на дюйм,
8-битовая графика
3 Учетверенная плотность, 240 точек на
дюйм,
8-битовая графика
4 Режим CRT I, плотность 80 точек
на дюйм,
8-битовая графика
6 Режим CRT II, плотность 90 точек
на дюйм,
8-битовая графика
32 Одинарная плотность, 60 точек на дюйм,
24-битовая графика
33 Двойная плотность, 120 точек на дюйм,
24-битовая графика
38 Режим CRT III, плотность 90 точек
на дюйм,
24-битовая графика
39 Тройная плотность, 180 точек на дюйм,
24-битовая графика
40 Шестикратное увеличение плотности,
360 точек на дюйм,
24-битовая графика
ESC ? s n Переназначение графических режимов
1Bh 3Fh s n
Команда позволяет заменить один графический режим на другой. Параметр s - это символ (K, L, Y, Z), который назначается графическому режиму, заданному параметром n (0...6).
ESC r n Определение цвета печати
1Bh 72h n
В зависимости от значения параметра n печать будет выполнена одним из следующих цветов:
0 - черный;
1 - малиновый;
2 - циан;
3 - фиолетовый;
4 - желтый;
5 - красный;
6 - зеленый.
ESC @ Инициализация принтера
1Bh 40h
Epson
Выполняется сброс принтера в исходное состояние, если происходила печать строки, то при инициализации эта печать отменяется.
DC1(17) Выбор принтера для работы
11h
Epson, IBM
Возвращает принтер в выбранное (активное) состояние, если раньше он был переведен в неактивное состояние командой DC3. Эта команда не выполняет никаких действий, если принтер находится в состоянии OFF LINE
DC3(19) Перевод принтера в неактивное состояние
13h
Epson
Переводит принтер в неактивное состояние до получения принтером команды DC1 выбора принтера для работы. Если принтер переведен в неактивное состояние, его нельзя перевести в состояние ON LINE при помощи соответствующей клавиши на лицевой панели.
DEL(127) Удаление символа
7Fh
Epson
Удаляет последний переданный в принтер символ. Эта команда не действует на управляющие коды.
ESC s n Включение/выключение половинной скорости печати
1Bh 73h n
Epson
Значения параметра n:
0 - режим половинной скорости печати выключен;
1 - режим половинной скорости печати включен.
ESC < Печать в одном направлении
Epson
1Bh 3Ch
Переключает принтер в режим печати в одном направлении, т.е. принтер печатает только тогда, когда печатающая головка движется в одну сторону. Команда задает режим только для одной строки, символ возврата каретки отменяет печать только в одном направлении.
ESC U n Включение/выключение режима печати в одном
направлении
1Bh 55h n
Epson, IBM
В зависимости от параметра n режим печати только в одном направлении может включаться либо отключаться:
n = 1 режим включен;
n = 0 режим выключен.
ESC EM n Управление податчиком бумаги
1Bh 19h n
Epson
Эта команда распознается принтером только в том случае, если принтер оборудован податчиком бумаги (Cut Sheet Feeder).
Возможные значения параметра n:
0 Отключение податчика бумаги;
4 Включение податчика бумаги.
ESC 8 Запрещение обнаружения конца бумаги
1Bh 38h
Epson
После приема этой команды принтер не останавливает печать даже в том случае, если кончилась бумага.
ESC 9 Разрешение обнаружения конца бумаги
1Bh 39h
Epson
Команда отменяет действие предыдущей команды.
BEL(7) Выдача звукового сигнала
07h
Epson, IBM
Если выдать эту команду на принтер, громкоговоритель принтера издаст звуковой сигнал. Эта команда может быть использована для предупреждения оператора, например, о том, что кончилась бумага.
Старший бит данных MSB (Most Significant Bit) - это бит 7 байтов, посылаемых программой в принтер. Обычно вам не надо изменять значение старшего бита данных, более того, команды управления старшим битом не действуют в графическом режиме или при переопределении символов.
ESC = Установка MSB в 0 1Bh 3Dh Epson Для всех выводимых на принтер данных старший бит принудительно устанавливается в 0. Этот режим используется при работе принтера с такими компьютерами, которые всегда посылают на принтер данные со старшим битом, установленным в 1. ESC > Установка MSB в 1 1Bh 3Eh Epson Для всех выводимых на принтер данных старший бит принудительно устанавливается в 1. ESC # Отмена управления MSB 1Bh 23h Epson Отменяется действие введенных ранее команд управления MSB "ESC =" или "ESC >"
CR(13) Возврат каретки
0Dh
Epson, IBM
Команда вызывает распечатку содержимого буфера данных принтера, после чего головка переводится в начало текущей строки.
CAN(24) Отмена печати строки
18h
Epson, IBM
Весь текст из распечатываемой строки удаляется. Команда не влияет на управляющий коды, находящиеся в этой строке.
FF(12) Подача бумаги на один лист
0Ch
Epson, IBM
Команда вызыывает распечатывание содержимого буфера принтера, вслед за этим происходит подача бумаги вперед на один лист (в соответствии с установленной длиной листа).
ESC C n Установить длину листа бумаги в строках
1Bh 43h n
Epson, IBM
Команда устанавливает длину листа бумаги, равной n строкам. Используется установленное ранее расстояние между строками. Допустимые значения параметра n лежат в пределах 1...127 строк.
ESC C 0 n Установить длину листа бумаги в дюймах
1Bh 43h 00h n
Epson, IBM
Комнда устанавливает длину листа бумаги, равную n дюймам. Значение n должно находиться в пределах 1...22 дюйма.
ESC N n Установить режим пропуска перфорации
1Bh 4Eh n
Epson, IBM
В этой команде параметр n - это количество строк, пропускаемых принтером между последней строкой страницы и первой строкой следующей страницы. Значение n должно находиться в пределах 1...127 строк.
ESC O Отмена режима пропуска перфорации
1Bh 4Fh
Epson, IBM
Эта команда отменяет режим пропуска перфорации, установленный командой "ESC N n".
ESC 4 Установка верхней границы листа
1Bh 34h
IBM
Текущая строка становится верхней строкой листа.
LF(10) Перевод строки
0Ah
Epson, IBM
Команда вызывает распечатку содержимого буфера данных принтера, после чего головка переводится в начало следующей строки (бумага продвигается впереж на одну строку).
ESC 0 Выбор межстрочного интервала, равного 1/8 дюйма
1Bh 30h
Epson, IBM
Расстояние между текстовыми строками устанавливается равным 1/8 дюйма.
ESC 1 Выбор межстрочного интервала, равного 7/72 дюйма
1Bh 31h
Epson, IBM
Расстояние между текстовыми строками устанавливается равным 7/72 дюйма.
ESC 2 Выбор межстрочного интервала, равного 1/6 дюйма
1Bh 32h
Epson, IBM
Расстояние между текстовыми строками устанавливается равным 1/6 дюйма. Это значение используется по умолчанию при включении питания принтера.
ESC 2 Выбор межстрочного интервала командой "ESC A n"
1Bh 32h
IBM
После приема принтером этой команды межстрочный интервал устанавливается таким, каким он был задан в команде "ESC A n".
ESC 3 n Выбор межстрочного интервала, равного n/216 дюйма
1Bh 33h n
Epson, IBM
Расстояние между текстовыми строками устанавливается равным n/216 дюймов. Значение n должно находиться в пределах 0...255.
ESC A n Выбор межстрочного интервала, равного n/72 дюйма
1Bh 41h n
Epson
Расстояние между текстовыми строками устанавливается равным n/72 дюймов. Значение n должно находиться в пределах 0...85.
ESC A n Выбор межстрочного интервала, равного n/72 дюйма
1Bh 41h n
IBM
Расстояние между текстовыми строками устанавливается равным n/72 дюймов. Значение n должно находиться в пределах 0...85. Для того, чтобы эта команда включилась в работу, принтер должен принять команду "ESC 2".
ESC J n Проброс бумаги на расстояние n/216 дюймов
1Bh 4Ah n
Epson, IBM
Бумага продвигается вперед на расстояние, равное n/216 дюймов. Команда выполняется немедленно и не вызывает перемещений печатающей головки. Диапазон допустимых значений n - 0...255.
ESC 5 Переключение режима автоматического перевода строки
1Bh 35h n
IBM
Если включен режим автоматического перевода строки, то принтер переводит строку после приема символа возврата каретки CR, без дополнительного символа перевода каретки LF. Возможные значения параметра n:
0 - выключить автоматический перевод строки;
1 - включить автоматический перевод строки.
VT(11) Вертикальная табуляция
0Bh
Epson, IBM
Бумага продвигается до следующей позиции вертикальной табуляции. Если вертикальная табуляция не установлена, бумага продвигается вперед на одну строку.
ESC B n1 n2 ... 0 Установка вертикальной табуляции
1Bh 42h n1 n2 ... 00h
Epson, IBM
Команда позволяет задать до 16 положений для вертикальной табуляции. Параметры n1, n2, ... задают позиции для табуляции. Они должны указываться в порядке возрастания. Последний параметр всегда должен быть равен 0 - это признак конца последовательности параметров.
ESC b c n1 n2 ... 0 Установка вертикальной табуляции в канале
1Bh 62h c 1n n2 ... 00h
Epson
Команда аналогична команде "ESC B", за исключением того, что необходимо указывать параметр c - номер выбираемого канала для вертикальной табуляции. Значение параметра c должно находиться в пределах 0...7.
ESC / c Выбор канала для вертикальной табуляции
1Bh 2Fh c
Epson
Команда выбирает канал c для работы с командами VT вертикальной табуляции. Значение параметра c должно находиться в пределах 0...7.
ESC l n Установка левой границы
1Bh 6Ch n
Epson
Устанавливается левая граница листа. В левой части листа оставляется n пустых столбцов символов текущей ширины. Если командв выдается для пропорционального набора символов, в качестве ширины для установки левой границы берется значение 10 символов на дюйм (10 pitch).
ESC Q n Установка правой границы
1Bh 51h n
Epson
Устанавливается правая граница листа. В правой части листа оставляется n пустых столбцов символов текущей ширины. Если командв выдается для пропорционального набора символов, в качестве ширины для установки правой границы берется значение 10 символов на дюйм (10 pitch).
ESC X Установка левой и правой границы листа
1Bh 58h n1 n2
IBM
Левая граница устанавливается в n1, правая в n2. Используется текущая ширина символов.
BS(8) Возврат на одну позицию
08h
Epson, IBM
Команда вызывает распечатку содержимого буфера печати, после чего печатающая головка возвращается на одну позицию назад (но не за левую границу, установленную командой "ESC l". После команд "ESC a 2" и "ESC a 3" эта команда игнорируется. Если команда BS выводится на принтер сразу после печати строки в графическом режиме, печатающая головка возвращается к началу только что напечатанной графической строки.
ESC $ n1 n2 Установка абсолютной позиции для печати
1Bh 24h n1 n2
Epson, IBM
Команда задает расстояние от левой границы листа до того места, откуда будет продолжена печать символов. Для вычисления расстояния используется следующая формула: n1 + (n2 * 256). Расстояние задается в единицах, эквивалентных 1/60 доли дюйма.
ESC \ n1 n2 Установка относительной позиции для печати
1Bh 5Ch n1 n2
Epson
Команда задает расстояние от текущей позиции печатающей головки до того места, откуда будет продолжена печать символов. Для вычисления расстояния вначале надо вычислить требуемое смещение в точках. Если надо определить смещение влево, полученное значение следует вычесть из числа 65536. Общее количество точек вычисляется по формуле: n1 + (n2 * 256).
HT(9) Горизонтальная табуляция
09h
Epson, IBM
Печатающая головка продвигается до следующего символа горизонтальной табуляции.
ESC D n1 n2 ... 0 Установка горизонтальной табуляции
1Bh 44h n1 n2 ... 00h
Epson, IBM
Команда позволяет задать до 32 положений для горизонтальной табуляции. Параметры n1, n2, ... задают позиции для табуляции. Они должны указываться в порядке возрастания. Последний параметр всегда должен быть равен 0 - это признак конца последовательности параметров. Команда "ESC D 0" сбрасывает все позиции горизонтальной табуляции. После включения питания (или приема команды инициализации "ESC @" каждому символу табуляции при печати будет соответствовать восемь пробелов.
ESC R Отмена табуляции
1Bh 52h
IBM
Отменяется одновременно горизонтальная и вертикальная табуляция.
ESC x n Выбор черновой или качественной печати
1Bh 78h n
Epson
Параметр n определяет режим печати следующим образом:
0 - черновой режим печати;
1 - качественный (NLQ) режим печати.
В качественном режиме печати используются наборы символов Roman или Sans Serif.
ESC k n Выбор стиля печати
1Bh 6Bh n
Epson
Команда действительна только для режима качественной печати. Параметр n задает стиль:
0 - Roman;
1 - Sans Serif.
ESC ! n Выбор режима работы принтера
1Bh 21h n
Epson
Команда позволяет задать комбинацию различных режимов работы принтера. Можно по отдельности задавать размер символов (10 или 12 символов на дюйм), набор символов (пропорциональный, сжатый, выделенный и т.д.). Отдельные биты байта параметра n задают режим работы принтера следующим образом:
7 6 5 4 3 2 1 0
--T-T-T-T-T-T-T-¬
| | | | | | | | |
LT+T+T+T+T+T+T+T-
| | | | | | | L= 0 - размер символа 10 pitch
| | | | | | | 1 - размер символа 12 pitch
| | | | | | |
| | | | | | L=== пропорциональный шрифт
| | | | | |
| | | | | L===== сжатый шрифт
| | | | |
| | | | L======= выделенный шрифт
| | | |
| | | L========= использование двух проходов
| | |
| | L=========== двойная высота
| |
| L============= использование курсива
|
L=============== использование подчеркивания
ESC I n Выбор шрифта
1Bh 49h n
IBM
В зависимости от параметра n выбирается один из следующих шрифтов:
0 обычное качество, 10 символов на дюйм;
1 обычное качество, 12 символов на дюйм;
2 качественный шрифт Sans Serif;
3 качественный шрифт Roman;
4 шрифт обычного качества, определенный
пользователем, 10 символов на дюйм;
5 шрифт обычного качества, определенный
пользователем, 12 символов на дюйм;
6 качественный шрифт, определенный
пользователем, 10 символов на дюйм;
7 качественный шрифт, определенный
пользователем, 12 символов на дюйм;
ESC P Выбор размера символа в 10 pitch
1Bh 50h
Epson
Эта команда задает размер символа, равный 10 pitch, или 10 символов на дюйм. Такой размер устанавливается по умолчанию при инициализации принтера.
ESC M Выбор размера символа в 12 pitch
1Bh 4Dh
Epson
Эта команда задает размер символа, равный 12 pitch, или 12 символов на дюйм.
DC2(18) Выбор размера символа в 10 pitch
12h
IBM
Эта команда задает размер символа, равный 10 pitch, или 10 символов на дюйм. Команда отменяет ранее установленный режим сжатой печати.
ESC : Выбор размера символа в 12 pitch
1Bh 3Ah
IBM
Эта команда задает размер символа, равный 10 pitch, или 12 символов на дюйм.
ESC p n Включение/выключение пропорционального режима
1Bh 70h n
Epson
В пропорциональном режиме разные символы имеют различную ширину, что благоприятно сказывается на читаемости текста. Например, букава "i" уже, чем "W".
Параметр n может принимать следующие значения:
0 - выключение пропорционального режима;
1 - включение пропорционального режима.
ESC P n Включение/выключение пропорционального режима
1Bh 50h n
IBM
Параметр n может принимать следующие значения:
0 - выключение пропорционального режима;
1 - включение пропорционального режима.
SI(15) Выбор режима сжатой печати
0Fh
Epson, IBM
В этом режиме символы имеют примерно на 60 процентов меньшую ширину, чем в нормальном режиме. Режим сжатой печати не совместим с пропорциональным режимом.
ESC SI Выбор режима сжатой печати
1Bh 0Fh
Epson, IBM
Команда полностью аналогична предыдущей командe "SI".
DC2(18) Отмена режима сжатой печати
12h
Epson
Отменяется режим сжатой печати, установленный ранее командами ESC SI или SI.
SO(14) Печать с двойной шириной
0Eh
Epson, IBM
В этом режиме ширина каждого распечатываемого символа увеличивается в два раза. Режим печати с двойной шириной отменяется командой возврата каретки или командой DC4.
ESC SO Печать с двойной шириной
1Bh 0Eh
Epson, IBM
Команда полностью аналогична предыдущей командe "SO".
ESC W n Включение/выключение режима печати с двойной высотой
1Bh 77h n
Epson, IBM
В режиме печати с двойной высотой высота каждого распечатываемого символа увеличивается в два раза.
Возможные значения параметра n:
0 - выключение режима печати с двойной высотой;
1 - включение режима печати с двойной высотой.
DC4(20) Отмена режима печати с двойной шириной
14h
Epson, IBM
Команда отменяет действие команд "ESC SO" или "SO", но не действует, если режим печати с двойной шириной задан командами "ESC W" или "ESC !".
ESC W n Включение/выключение режима печати с двойной шириной
1Bh 57h n
Epson
В режиме печати с двойной шириной ширина каждого распечатываемого символа увеличивается в два раза.
Возможные значения параметра n:
0 - выключение режима печати с двойной шириной;
1 - включение режима печати с двойной шириной.
ESC [ @ Печать с двойной высотой и двойной шириной
1Bh 5Bh 40h n1 n2 m1 m2 m3 m4
IBM
Команда позволяет управлять высотой и шириной распечатываемых символов. Параметры n2, m1, m2 должны быть равны 0, параметр n1 должен быть равен 4. Параметр m3 влияет на высоту символов и количество пробрасываемых по команде LF строк:
1 стандартная высота, текущий режим перевода
строки;
2 двойная высота, обычный режим перевода
строки;
16 текущая высота, одна строка на один LF;
17 стандартная высота, одна строка на один LF;
18 двойная высота, одна строка на один LF;
32 текущая высота, две строки на один LF;
33 стандартная высота, две строки на один LF;
34 двойная высота, две строки на один LF;
Параметр m4 влияет на ширину символов:
1 стандартная ширина;
2 двойная ширина.
ESC E Установка режима печати с выделением
1Bh 45h
Epson, IBM
Распечатываемые символы выглядят "толще" за счет того, что каждая точка печатается дважды.
ESC F Отмена режима печати с выделением
1Bh 46h
Epson, IBM
Команда отменяет действие команды "ESC E".
ESC G Установка режима двойной печати
1Bh 47h
Epson, IBM
В режиме двойной печати каждая строка печатается дважды, поэтому текст выглядит ярче. Скорость печати уменьшается в два раза.
ESC H Отмена режима двойной печати
1Bh 48h
Epson, IBM
Команда отменяет действие команды "ESC G".
ESC S 0 Печать верхнего индекса
1Bh 53h 00h
Epson, IBM
Символы распечатываются выше обычного уровня, занимая верхние две трети сетки.
ESC S 1 Печать нижнего индекса
1Bh 53h 01h
Epson, IBM
Символы распечатываются ниже обычного уровня, занимая нижние две трети сетки.
ESC T Отмена печати верхнего или нижнего индекса
1Bh 54h
Epson, IBM
Команда отменяет действие любой из команд, задающих режим печати индекса - "ESC S 0" или "ESC S 1".
ESC - n Включение/выключение режима подчеркивания
1Bh 2Dh n
Epson, IBM
В зависимости от значения параметра n все символы (и пробелы тоже) печатаются с подчеркиванием или без подчеркивания:
0 - выключение режима подчеркивания;
1 - включение режима подчеркивания.
ESC _ n Включение/выключение режима перечеркивания
1Bh 2Dh n
IBM
В зависимости от значения параметра n все символы печатаются перечеркнутыми или нет:
0 - выключение режима перечеркивания;
1 - включение режима перечеркивания.
ESC a n Выравнивание для качественного (LQ) набора символов
1Bh 61h n
Epson
Параметр n может принимать следующие значения:
0 - выравнивание влево;
1 - выравнивание по центру;
2 - выравнивание вправо;
3 - полное выравнивание.
По умолчанию при инициализации принтера выбирается режим выравнивания влево. Полное выравнивание выполняется после заполнения буфера печати. При этом распечатываемый текст может содержать символы горизонтальной табуляции HT и возврата на одну позицию BS только тогда, когда задан режим выравнивания влево (n=0). Если используется полное выравнивание, параграфы текста не должны содержать символы возврата каретки.
ESC SP n Выбор расстояния между символами
1Bh 20h n
Epson
Команда позволяет увеличить расстояние между символами по сравнению с тем, которое было задано в сетке при разработке начертания символов. Параметр n, значение которого должно лежать в пределах 0...127, задает количество точек, добавляемых справа к каждому символу. Одна точка соответствует 1/120 дюйма.
ESC t n Выбор таблицы символов
1Bh 74h n
Epson
Данная команда выбирает одну из таблиц, описывающих начертание символов для символов с кодами от 128 до 255, т.е. для правой половины кодовой таблицы ASCII. Можно выбрать таблицу, содержащую символы курсива (только латинские буквы) или расширенную графическую таблицу фирмы Epson:
0 - таблица с символами курсива (Italics character
table);
1 - расширенная графическая таблица Epson.
ESC 4 Использование курсива
1Bh 34h
Epson
После получения этой команды принтер печатает весь текст курсивом для любой таблицы символов, за исключением символов псевдографики расширенной таблицы Epson.
ESC 5 Отмена использования курсива
1Bh 35h
Epson
Команда отменяет печать курсивом.
ESC R n Выбор национального набора символов
1Bh 52h n
Epson
В зависимости от параметра n выбирается национальный набор символов:
0 - США; 7 - Испания, набор 1;
1 - Франция; 8 - Япония;
2 - Германия; 9 - Норвегия;
3 - Англия; 10 - Дания, набор 2;
4 - Дания, набор 1; 11 - Испания, набор 2;
5 - Швеция; 12 - Латинская Америка.
6 - Италия;
ESC \ Печать символов с кодами, меньшими 32
1Bh 5Ch n1 n2
IBM
Разрешается печать следующих за командой (n2 * 256) + n1 символов, имеющих коды, меньшие чем 32.
ESC ^ Печать одного символа с кодом, меньшим 32
1Bh 5Eh n
IBM
Разрешается печать следующих за командой (n2 * 256) + n1 символов, имеющих коды, меньшие чем 32.
ESC & Определение символов
1Bh 26h 00h d1 d2 ... dn
Epson
Параметры n1 и n2 задают диапазон кодов ASCII символов, начертание которых необходимо переопределить. Если вы переопределяете только один символ, эти два параметра должны быть одинаковыми.
Параметр a1 определяет ширину символа в точках и его положение в сетке (использует ли символ верхние восемь линий, либо нижние восемь линий). Ширина определяемого символа требуется для печати в пропорциональном режиме, когда место, занимаемое каждой буквой в строке распечатки, зависит от ее ширины. Например, буква "Ш" шире, чем буква "И". Старший бит параметра a1 задает расположение символа в сетке. Если этот бит равен 1, используются восемь верхних линий сетки, если 0 - восемь нижних.Младшие семь битов задают ширину символа и представляют собой число, определяемое по следующей схеме:
| возмите в качестве начального значения для ширины символа число 8;
| для каждого пустого столбца в сетке с правой стороны символа надо вычесть из начального значения единицу;
| для каждого пустого столбца в сетке с левой стороны символа надо прибавить к начальному значению число 16.
Пусть определяемый символ располагается в верхней части сетки (использует восемь верхних строк). Пусть этот символ начинается в третьем столбце и заканчивается в 7 столбце. Тогда десятичное значение параметра a1 вычисляется следующим образом:
a1 = 8(начальное значение) -
- 2(два пустых столбца справа) +
+ 32(два пустых столбца слева) +
+ 128(старший бит равен 1) = 166
Если ваш символ использует верхние восемь строк сетки, начинается в первом столбце и заканчивается в девятом, в качестве параметра a1 подходит значение 136. При этом символы будут печататься верхними восемью иголками печатающей головки. Для использования нижних восьми иголок и такой же ширины символа задайте значение a1 равное 8.
Параметры d1...dn - образцы столбцов точек для определяемого символа. Их должно быть всегда 11, даже если символ содержит пустые столбцы. Для пустых столбцов в качестве образца надо задать 0.
Для включения определенного программой набора символов в работу необходимо выдать команду ESC "%" "0", для использования набора символов из внутреннего ПЗУ принтера выдайте команду ESC "%" "1".
ESC = Определение символов
1Bh 26h 00h n1 n2 ... nk
IBM
Команда предназначена для переопределения символов. Для определения параметров команды можно воспользоваться следующей методикой:
| пусть C - общее количество переопределяемых символов;
| вычисляем B по формуле: B=(C*13)+2;
| n1 = B MOD 256;
| n2 = INT(B/256);
| n3 = 20 (всегда);
| n4 = код первого переопределяемого символа;
| n5 = 0, если используются верхних восемь
иголок печатающей головки,
n5 = 128, если используются нижних восемь
иголок;
| n6 = 0 (всегда);
| n7...nk = байты данных, определяющие начертание
символа, их должно быть 11.
Для включения переопределенных символов в работу необходимо выдать принтеру команду ESC I.
ESC : 0 n 0 Копирование символов из ПЗУ в ОЗУ
1Bh 3Ah 00h n 00h
Epson
Команда выполняет копирование заданного параметром n набора символов из постоянного запоминающего устройства принтера в его оперативную память. После этого можно переопределить начертание части символов командой "ESC &". Возможные значения для параметра n:
0 - Roman;
1 - Sans Serif.
ESC % n Выбор набора символов, заданного пользователем
1Bh 25h n
Epson
Команда позволяет переключать используемый набор символов. В зависимости от значения параметра n будет использоваться либо стандартный набор символов принтера, либо наор символов, определенный пользователем при помощи команды "ESC &".
Возможные значения параметра n:
0 - используется стандартный набор символов;
1 - используется набор символов, определенный
пользователем.
ESC 6 Разрешение печати символов с кодами 128...159
1Bh 36h
Epson, IBM
После приема этой команды при использовании расширенной графической таблицы Epson символы с кодами от 128 до 159 будут интерпретироваться принтером как символы, а не как управляющие коды.
ESC 7 Запрещение печати символов с кодами 128...159
1Bh 37h
Epson, IBM
После приема этой команды при использовании расширенной графической таблицы Epson символы с кодами от 128 до 159 будут интерпретироваться принтером как управляющие коды. Этот режим устанавливается по умолчанию при инициализации принтера.
ESC K n1 n2 Выбор графического режима с одинарной плотностью
1Bh 4Bh n1 n2
Epson, IBM
Команда устанавливает графический 8-битовый режим одинарной плотности. Общее количество столбцов в графической строке при этом составит n1 + (n2 * 256).
ESC L n1 n2 Выбор графического режима с двойной плотностью
1Bh 4Ch n1 n2
Epson, IBM
Команда устанавливает графический 8-битовый режим двойной плотности, печать будет выполняться с низкой скоростью. Общее количество столбцов в графической строке при этом составит n1 + (n2 * 256).
ESC Y n1 n2 Выбор скоростного графического режима с двойной плотностью
1Bh 59h n1 n2
Epson, IBM
Команда устанавливает графический 8-битовый режим двойной плотности, печать будет выполняться с высокой скоростью. Общее количество столбцов в графической строке при этом составит n1 + (n2 * 256).
ESC Z n1 n2 Выбор графического режима с учетверенной плотностью
1Bh 5Ah n1 n2
Epson, IBM
Команда устанавливает графический 8-битовый режим учетверенной плотности. Общее количество столбцов в графической строке при этом составит n1 + (n2 * 256).
ESC * Печать в графическом режиме
1Bh 2Ah m n1 n2
Epson
Полный формат команды графической печати:
ESC "*" m n1 n2 data
В этой команде параметр m задает режим печати:
m Режим
0 Одинарная плотность, 60 точек на дюйм,
8-битовая графика
1 Двойная плотность, 120 точек на дюйм,
8-битовая графика
2 Двойная плотность, печать с высокой,
скоростью, 120 точек на дюйм,
8-битовая графика
3 Учетверенная плотность, 240 точек на
дюйм,
8-битовая графика
4 Режим CRT I, плотность 80 точек
на дюйм,
8-битовая графика
5 Режим плоттера, плотность 72 точек
на дюйм, масштаб 1:1,
8-битовая графика
6 Режим CRT II, плотность 90 точек
на дюйм,
8-битовая графика
7 Режим плоттера, плотность 144 точек
на дюйм, масштаб 1:1,
8-битовая графика
ESC ? s n Переназначение графических режимов
1Bh 3Fh s n
Epson
Команда позволяет заменить один графический режим на другой. Параметр s - это символ (K, L, Y, Z), который назначается графическому режиму, заданному параметром n (0...6).
ESC ^ Выбор 9-битового графического режима
1Bh 5Eh m n1 n2
Epson
Команда позволяет использовать для графической печати все 9 иголок печатающей головки. Параметр m определяет плотность печати:
0 - одинарная плотность;
1 - двойная плотность.
Параметры n1 и n2 определяют общую длину графической строки (т.е. количество распечатываемых столбцов). Эта длина вычисляется по формуле: n1+(n2*256). В 9-битовом графическом режиме на каждый столбец требуются два байта графических данных.
В настоящее время существует несколько вариантов кодировки русских букв (кириллицы) для операционной системы MS-DOS - основная, альтернативная, минская и т.д. Они отличаются, в основном, расположением русских букв и символов псевдографики. Однако наибольшее распространение получила альтернативная таблица кодировки, особенно после того, как в 1989 году эта таблица была принята IBM в качестве стандартной для Советского Союза. Локализованная версия MS-DOS 4.01 содержит соответствующую кодовую страницу:
/* SYSP.H - include-файл для примеров, приведенных в книге */
/**
*.Name FP_MAKE
*
*.Title Макро для составления FAR-указателя
*
*.Descr Макро составляет FAR-указатель, пользуясь
* значениями сегмента и смещения
*
*.Params FP_MAKE(seg,off)
* seg - сегмент;
* off - смещение
*
*.Return FAR-указатель seg:off
**/
#define FP_MAKE(seg,off) ((void far *) \
((((unsigned long) (unsigned)(seg)) << 16L) | \
((unsigned long) (unsigned) (off))))
/* Структура векторной таблицы связи DOS */
#pragma pack(1)
typedef struct _CVT_ {
unsigned mcb_seg;
void far *dev_cb;
void far *file_tab;
void far *clock_dr;
void far *con_dr;
unsigned max_btbl;
void far *disk_buf;
void far *drv_info;
void far *fcb_tabl;
unsigned fcb_size;
unsigned char num_bdev;
unsigned char lastdriv;
} CVT;
/* Блок управления памятью MCB */
typedef struct _MCB_ {
unsigned char type;
unsigned owner;
unsigned size;
char reserve[11];
} MCB;
/* Префикс программного сегмента PSP */
typedef struct _PSP_ {
unsigned char int20h[2];
unsigned mem_top;
unsigned char reserv1;
unsigned char call_dsp[5];
void far *term_adr;
void far *cbrk_adr;
void far *crit_err;
unsigned parn_psp;
unsigned char file_tab[20];
unsigned env_seg;
void far *ss_sp;
unsigned max_open;
void far *file_tba;
unsigned char reserv2[24];
unsigned char disp[3];
unsigned char reserv3[9];
unsigned char fcb1[16];
unsigned char fcb2[20];
unsigned char p_size;
unsigned char parm[127];
} PSP;
/* Блок управления устройством DOS */
typedef struct _DDCB_ {
unsigned char drv_num;
unsigned char drv_numd;
unsigned sec_size;
unsigned char clu_size;
unsigned char clu_base;
unsigned boot_siz;
unsigned char fat_num;
unsigned max_dir;
unsigned data_sec;
unsigned hi_clust;
unsigned char fat_size;
char reserv1;
unsigned root_sec;
void far *drv_addr;
unsigned char media;
unsigned char acc_flag;
struct _DDCB_ far *next;
unsigned reserv2;
unsigned built;
} DDCB;
/* Управляющий блок DOS для файлов */
typedef struct _DFCB_ {
unsigned handl_num;
unsigned char access_mode;
unsigned reserv1;
unsigned dev_info;
void far *driver;
unsigned first_clu;
unsigned time;
unsigned date;
unsigned long fl_size;
unsigned long offset;
unsigned reserv2;
unsigned reserv7;
unsigned reserv3;
char reserv4;
char filename[11];
char reserv5[6];
unsigned ownr_psp;
unsigned reserv6;
unsigned last_clu;
char reserv8[4];
} DFCB;
/* Таблица файлов DOS */
typedef struct _DFT_ {
struct _DFT_ far *next;
unsigned file_count;
DFCB dfcb;
} DFT;
/* Управляющий блок дискового буфера BCB */
typedef struct _BCB_ {
struct _BCB_ far *next;
unsigned char drive;
unsigned char flag;
unsigned sect_num;
unsigned reserv1;
DDCB far *ddcb;
unsigned reserv2;
} BCB;
/* Информация о диске */
typedef struct _DINFO_ {
char path[64];
unsigned reserv1;
unsigned reserv2;
unsigned char reserv3;
DDCB far *ddcb;
unsigned cdir_clu;
unsigned reserv4;
unsigned reserv5;
unsigned reserv6;
unsigned char reserv7[7];
} DINFO;
/* Заголовок EXE-программы */
typedef struct _EXE_HDR_ {
unsigned signature;
unsigned part_pag;
unsigned file_size;
unsigned rel_item;
unsigned hdr_size;
unsigned min_mem;
unsigned max_mem;
unsigned ss_reg;
unsigned sp_reg;
unsigned chk_summ;
unsigned ip_reg;
unsigned cs_reg;
unsigned relt_off;
unsigned overlay;
} EXE_HDR;
/* таблица расположения сегментов EXE-программы */
typedef struct _RELOC_TAB_ {
unsigned offset;
unsigned segment;
} RELOC_TAB;
/* конфигурация дисковой подсистемы */
typedef struct _DISK_CONFIG_ {
int n_floppy;
int n_hard;
int t_floppy1;
int t_floppy2;
int t_hard1;
int t_hard2;
} DISK_CONFIG;
/* таблица параметров дискеты */
typedef struct _DPT_ {
unsigned char srt_hut;
unsigned char dma_hlt;
unsigned char motor_w;
unsigned char sec_size;
unsigned char eot;
unsigned char gap_rw;
unsigned char dtl;
unsigned char gap_f;
unsigned char fill_char;
unsigned char hst;
unsigned char mot_start;
} DPT;
/* таблица параметров диска */
typedef struct _HDPT_ {
unsigned max_cyl;
unsigned char max_head;
unsigned srwcc;
unsigned swpc;
unsigned char max_ecc;
unsigned char dstopt;
unsigned char st_del;
unsigned char fm_del;
unsigned char chk_del;
unsigned char reserve[4];
} HDPT;
/* Элемент таблицы разделов */
typedef struct _PART_ENTRY_ {
unsigned char flag;
unsigned char beg_head;
unsigned beg_sec_cyl;
unsigned char sys;
unsigned char end_head;
unsigned end_sec_cyl;
unsigned long rel_sec;
unsigned long size;
} PART_ENTRY;
/* Главная загрузочная запись */
typedef struct _MBOOT_ {
char boot_prg[0x1be];
PART_ENTRY part_table[4];
unsigned char signature[2];
} MBOOT;
/* Расширенный блок параметров BIOS */
typedef struct _EBPB_ {
unsigned sectsize;
char clustsize;
unsigned ressecs;
char fatcnt;
unsigned rootsize;
unsigned totsecs;
char media;
unsigned fatsize;
unsigned seccnt;
unsigned headcnt;
unsigned hiddensec_low;
unsigned hiddensec_hi;
unsigned long drvsecs;
} EBPB;
/* Загрузочная запись для MS-DOS 4.01 */
typedef struct _BOOT_ {
char jmp[3];
char oem[8];
EBPB bpb;
char drive;
char reserved;
char signature;
unsigned volser_lo;
unsigned volser_hi;
char label[11];
char fat_format[8];
char boot_code[450];
} BOOT;
/* Время последнего обновления файла */
typedef struct _FTIME_ {
unsigned sec : 5, min : 6, hour : 5;
} FTIME;
/* Дата последнего обновления файла */
typedef struct _FDATE_ {
unsigned day : 5, month : 4, year : 7;
} FDATE;
/* Дескриптор файла в каталоге */
typedef struct _FITEM_ {
char name[8];
char ext[3];
char attr;
char reserved[10];
FTIME time;
FDATE date;
unsigned cluster_nu;
unsigned long size;
} FITEM;
/* Формат трека для GENERIC IOCTL */
typedef struct _TRK_LY_ {
unsigned no;
unsigned size;
} TRK_LY;
/* Параметры устройства для GENERIC IOCTL */
typedef struct _DPB_ {
char spec;
char devtype;
unsigned devattr;
unsigned numofcyl;
char media_type;
EBPB bpb;
char reserved[6];
unsigned trkcnt;
TRK_LY trk[100];
} DPB;
/* Параметры для форматирования функцией GENERIC IOCTL */
typedef struct _DPB_FORMAT_ {
char spec;
unsigned head;
unsigned track;
} DPB_FORMAT;
/* Параметры для чтения/записи функцией GENERIC IOCTL */
typedef struct _DPB_WR_ {
char spec;
unsigned head;
unsigned track;
unsigned sector;
unsigned sectcnt;
void _far *buffer;
} DPB_WR;
/* Идентификатор BIOS */
typedef struct _BIOS_ID_ {
char date[8];
unsigned reserve;
char pc_type;
} BIOS_ID;
// Состояние мыши
typedef struct _MOUSE_STATE_ {
unsigned bottoms;
unsigned x;
unsigned y;
} MOUSE_STATE;
typedef struct _SYSTIMER_ {
char hour;
char min;
char sec;
unsigned year;
char month;
char day;
char daylight_savings;
} SYSTIMER;
#pragma pack()
void far *get_cvt(void); /* получить адрес
векторной таблицы связи */
CVT far *get_mcvt(void); /* получить адрес
векторной таблицы связи */
MCB far *get_fmcb(CVT far *); /* получить адрес
первого MCB */
MCB far *get_nmcb(MCB far *); /* получить адрес
следующего MCB */
DDCB far *get_fddcb(CVT far *); /* получить адрес
первого DDCB */
DDCB far *get_nddcb(DDCB far *); /* получить адрес
следующего DDCB */
DDCB far *get_ddcb(unsigned char); /* получить адрес
DDCB для диска */
DFT far *get_fdft(CVT far *); /* получить адрес первой DFT */
DFT far *get_ndft(DFT far *); /* получить адрес следующей DFT */
BCB far *get_fbcb(CVT far *); /* получить адрес первого BCB */
BCB far *get_nbcb(BCB far *); /* получить адрес следующего BCB */
int get_exeh(EXE_HDR *,RELOC_TAB **, FILE *); /* прочитать
заголовок EXE */
char unsigned pc_model(void); /* получить модель
компьютера */
void disk_cfg(DISK_CONFIG*); /* определить конфигурацию
дисковой подсистемы */
DPT _far *get_dpt(void); /* получить адрес DPT */
HDPT _far *get_hdp1(void); /* получить адрес
первой HDPT */
HDPT _far *get_hdp2(void); /* получить адрес
второй HDPT */
BIOS_ID _far *getbiosi(void); /* получить адрес
идентификатора BIOS */
int ms_init(int *); // Инициализация мыши
void ms_on(void); // Включение курсора
void ms_off(void); // Выключение курсора
void ms_setcr(int, int); // Установка курсора
int ms_querp(MOUSE_STATE *, int); // Определение состояния мыши
// при нажатии на клавишу
void ms_rangx(int xmin, int xmax); // Задать диапазон
// перемещений курсора
// по горизонтали
void ms_rangy(int ymin, int ymax); // Задать диапазон
//перемещений курсора
// по вертикали
void ms_gform(int xt, int yt, char _far *form); // определение
//формы курсора
// в графическом режиме
void ms_tform(int type, int mask1, int mask2); // определение
// формы курсора
// в текстовом режиме
MOUSE_STATE *ms_querm(MOUSE_STATE *state); // определение
// относительного
// перемещения в миках
void ms_seth(int mask, void (far *hand)()); // установка
// драйвера событий
// Системные часы реального времени
#define RTC_GET_TIME 2
#define RTC_SET_TIME 3
#define RTC_GET_DATE 4
#define RTC_SET_DATE 5
#define RTC_SET_ALARM 6
#define RTC_CLEAR_ALARM 7
int timer(char, SYSTIMER *); // работа с часами
// реального времени
void tm_delay(int); // формирование задержки по таймеру
void tm_sound(int, int); // формирование тона заданнной
// длительности с использованием
// таймера
void rnd_set(int); // инициализация генератора
// случайных чисел
int rnd_get(void); // получение случайного числа
typedef struct _AUX_MODE_ {
union {
struct {
unsigned char len : 2, // длина символа
stop : 1, // число стоп-битов
parity : 2, // контроль четности
stuck_parity : 1, // фиксация четности
en_break_ctl : 1, // установка перерыва
dlab : 1; // загрузка регистра делителя
} ctl_word;
char ctl;
} ctl_aux;
unsigned long baud; // скорость передачи данных
} AUX_MODE;
int aux_init(AUX_MODE *, int, int); // инициализация
// асинхронного адаптера
void aux_stat(AUX_MODE *, int); // определение режима
// асинхронного адаптера
void aux_outp(char, int); // вывод символа в
// асинхронный адаптер
char aux_inp(int); // ввод символа из асинхронного
// адаптера
// Прототипы функций для работы с расширенной
// памятью.
unsigned XMM_Installed();
long XMM_Version(void);
long XMM_RequestHMA(unsigned);
long XMM_ReleaseHMA(void);
long XMM_GlobalEnableA20(void);
long XMM_GlobalDisableA20(void);
long XMM_EnableA20(void);
long XMM_DisableA20(void);
long XMM_QueryA20(void);
long XMM_QueryLargestFree(void);
long XMM_QueryTotalFree(void);
long XMM_AllocateExtended(unsigned);
long XMM_FreeExtended(unsigned);
long XMM_MoveExtended(struct XMM_Move *);
long XMM_LockExtended(unsigned);
long XMM_UnLockExtended(unsigned);
long XMM_GetHandleLength(unsigned);
long XMM_GetHandleInfo(unsigned);
long XMM_ReallocateExtended(unsigned,unsigned);
long XMM_RequestUMB(unsigned);
long XMM_ReleaseUMB(unsigned);
struct XMM_Move {
unsigned long Length;
unsigned short SourceHandle;
unsigned long SourceOffset;
unsigned short DestHandle;
unsigned long DestOffset;
};
// Прототипы функций для работы с дополнительной
// памятью.
int ems_init(void);
int ems_stat(void);
int ems_fram(unsigned *);
int ems_page(unsigned *, unsigned *);
int ems_open(int, int *);
int ems_clos(int *);
int ems_map(int, int, int);
int ems_ver(char *);
;
; Это макроопределение печатает символы на экране
;
@@out_ch MACRO c1,c2,c3,c4,c5,c6,c7,c8,c9,c10
mov ah,02h
IRP chr,<c1,c2,c3,c4,c5,c6,c7,c8,c9,c10>
IFB <chr>
EXITM
ENDIF
mov dl,chr
int 21h
ENDM
ENDM
@@out_str MACRO
mov ah,9
int 21h
ENDM
; Макро для выдачи звукового сигнала
BEEP MACRO
mov bx,0
mov ax, 0E07h
int 10h
ENDM
State87 struc
cr dw ?
sr dw ?
tg dw ?
cmdlo dw ?
cmdhi dw ?
oprlo dw ?
oprhi dw ?
st0 dt ?
st1 dt ?
st2 dt ?
st3 dt ?
st4 dt ?
st5 dt ?
st6 dt ?
st7 dt ?
State87 ends
FLD src Загрузка вещественного числа
st(0) <- src (mem32/mem64/mem80)
FILD src Загрузка целого числа
st(0) <- src (mem16/mem32/mem64)
FBLD src Загрузка десятичного числа
st(0) <- src (mem80)
FLDZ Загрузка нуля
st(0) <- 0.0
FLD1 Загрузка единицы
st(0) <- 1.0
FLDPI Загрузка числа Pi
st(0) <- Pi
FLDL2T Загрузка log2(10)
st(0) <- log2(10)
FLDL2E Загрузка log2(e)
st(0) <- log2(e)
FLDLG2 Загрузка log10(2)
st(0) <- log10(2)
FLDLN2 Загрузка loge(2)
st(0) <- loge(2)
FST dest Запись вещественного числа
dest <- st(0) (mem32/mem64)
FSTP dest Запись вещественного числа с извлечением
его из стека численных регистров
dest <- st(0) (mem32/mem64/mem80)
FIST dest Запись целого числа
dest <- st(0) (mem32/mem64)
FISTP dest Запись целого числа с извлечением
его из стека численных регистров
dest <- st(0) (mem16/mem32/mem64)
FBST dest Запись десятичного числа
dest <- st(0) (mem80)
FBSTP dest Запись десятичного числа с извлечением
его из стека численных регистров
dest <- st(0) (mem80)
FCOM Сравнение вещественных чисел
Установка флагов по результатам операции
st(0) - st(1)
FCOM op Сравнение вещественных чисел
Установка флагов по результатам операции
st(0) - op (mem32/mem64)
FCOMP op Сравнение вещественных чисел с извлечением
из стека
Установка флагов по результатам операции
st(0) - op (mem32/mem64)
FCOMPP Сравнение вещественных чисел с двойным извлечением
из стека численных регистров
Установка флагов по результатам операции
st(0) - st(1)
FICOM op Сравнение целых чисел
Установка флагов по результатам операции
st(0) - op (mem16/mem32)
FICOMP op Сравнение целых чисел с извлечением
из стека численных регистров
Установка флагов по результатам операции
st(0) - op (mem16/mem32)
FTST Сравнение с нулем
Сравнивается st(0) и 0.0
FUCOM st(i) Неупорядоченное сравнение (только 80486)
Содержимое st(0) сравнивается с st(i)
FUCOMP st(i) Неупорядоченное сравнение (только 80486)
с извлечением из стека численных регистров
Содержимое st(0) сравнивается с st(i)
FUCOMPP st(i) Неупорядоченное сравнение (только 80486)
с двойным извлечением из стека численных регистров
Содержимое st(0) сравнивается с st(i)
FXAM Проверка верхушки стека
По состоянию st(0) устанавливаются коды условий
FADD Сложение вещественных чисел
st(0) <- st(0) + st(1)
FADD src Сложение вещественных чисел
st(0) <- st(0) + src (mem32/mem64)
FADD st(i),st Сложение вещественных чисел
st(i) <- st(i) + st(1)
FADDP st(i),st Сложение вещественных чисел с извлечением
из стека численных регистров
st(i) <- st(i) + st(1)
FIADD src Сложение целых чисел
st(0) <- st(0) + src (mem16/mem32)
FSUB Вычитание вещественных чисел
st(0) <- st(0) - st(1)
FSUB src Вычитание вещественных чисел
st(0) <- st(0) - src
FSUB st(i),st Вычитание вещественных чисел
st(i) <- st(i) - st(1)
FSUBP st(i),st Вычитание вещественных чисел с извлечением
из стека численных регистров
st(i) <- st(i) - st(1)
FSUBR st(i),st Вычитание вещественных чисел обратное
st(0) <- st(i) - st(0)
FSUBRP st(i),st Вычитание вещественных чисел обратное
с извлечением из стека численных регистров
st(0) <- st(i) - st(0)
FISUB src Вычитание целых чисел
st(0) <- st(0) - src (mem16/mem32)
FISUBR src Вычитание целых чисел обратное
st(0) <- src (mem16/mem32) - st(0)
FMUL Умножение вещественных чисел
st(0) <- st(0) * st(1)
FMUL st(i) Умножение вещественных чисел
st(0) <- st(0) * st(i)
FMUL st(i),st Умножение вещественных чисел
st(i) <- st(0) * st(i)
FMULP st(i),st Умножение вещественных чисел с извлечением
из стека численных регистров
st(i) <- st(0) * st(i)
FIMUL src Умножение целых чисел
st(0) <- st(0) * src (mem16/mem32)
FDIV Деление вещественных чисел
st(0) <- st(0) / st(1)
FDIV st(i) Деление вещественных чисел
st(0) <- st(0) / st(i)
FDIV st(i),st Деление вещественных чисел
st(i) <- st(0) / st(i)
FDIVP st(i),st Деление вещественных чисел с извлечением
из стека численных регистров
st(i) <- st(0) / st(i)
FIDIV src Деление целых чисел
st(0) <- st(0) / src (mem16/mem32)
FDIVR st(i),st Деление вещественных чисел обратное
st(0) <- st(i) / st(0)
FDIVRP st(i),st Деление вещественных чисел обратное
с извлечением из стека численных регистров
st(0) <- st(i) / st(0)
FIDIVR src Деление целых чисел обратное
st(0) <- src (mem16/mem32) / st(0)
FSQRT Извлечение квадратного корня
st(0) <- v st(0)
FSCALE Масштабирование на степень числа 2
st(0) <- 2 | st(0)
FXTRACT Извлечение экспоненты
st(0) <- значение экспоненты st(0)
FPREM Вычисление частичного остатка
st(0) <- st(0) MOD st(1)
FPREM1 Вычисление частичного остатка в стандарте IEEE,
только для 80486
st(0) <- st(0) MOD st(1)
FRNDINT Округление до ближайшего целого
st(0) <- INT(st(0))
FABS Вычисление абсолютного значения
st(0) <- ABS(st(0))
FCHS Изменение знака
st(0) <- -st(0)
FCOS Вычисление косинуса
st(0) <- COS(st(0))
FPTAN Вычисление частичного тангенса
st(0) <- TAN(st(0))
FPATAN Вычисление частичного арктангенса
st(0) <- ATAN(st(0))
FSIN Вычисление синуса
st(0) <- SIN(st(0))
FSINCOS Вычисление синуса и косинуса
st(1) <- SIN(st(0))
st(0) <- COS(st(0))
F2XM1 Вычисление выражения 2x-1
st(0) <- 2st(0)-1
FYL2X Вычисление Y * log2(X)
Y = st(0), X = st(1)
st(0) <- Y * log2(X)
FYL2XP1 Вычисление Y * log2(X+1)
Y = st(0), X = st(1)
st(0) <- Y * log2(X+1)
FINIT Инициализация арифметического сопроцессора
FSTSW AX Запись слова состояния
AX <- MSW
FSTSW dest Запись слова состояния
dest (mem16) <- MSW
FLDCW src Загрузка управляющего слова
CW <- src (mem16)
FSTCW dest Запись управляющего слова
dest (mem16) <- CW
FCLEX Сброс флагов особых случаев
FSTENV dest Запись содержимого всех регистров
сопроцессора, кроме численных
FLDENV src Загрузка содержимого всех регистров
сопроцессора, кроме численных
FSAVE dest Запись содержимого всех регистров
сопроцессора
FRSTOR src Загрузка содержимого всех регистров
сопроцессора
FINCSTP Увеличение указателя стека численных
регистров на 1
st(6) <- st(5)
st(5) <- st(4)
st(4) <- st(3)
st(3) <- st(2)
st(2) <- st(1)
st(1) <- st(0)
st(0) <- пустой
FDECSTP Уменьшение указателя стека численных
регистров на 1
st(0) <- st(1)
st(1) <- st(2)
st(2) <- st(3)
st(3) <- st(4)
st(4) <- st(5)
st(5) <- st(6)
st(6) <- st(7)
st(7) <- пустой
FFREE Освобождение регистра st(i)
Команда помечает численный регистр st(i)
как неинициализированный, записывая в
соответствующее поле регистра тегов значение 11
FNOP Холостая команда
st(0) <- st(0)
WAIT/FWAIT Синхронизация центрального процессора и
арифметического сопроцессора
Центральный процессор будет находиться
в состоянии ожидания до тех пор, пока
сопроцессор не завершит выполнение текущей команды.
FSETPM Установить защищенный режим работы
Процессор переходит в защищенный режим работы,
возврат в реальный режим возможен только
при сбросе сопроцессора.
Одинарная точность
1 бит 8 бит 23 бита
---T-------T--------------------¬
|Зн|Порядок| Мантисса |
L--+-------+---------------------
Двойная точность
1 бит 11 бит 52 бита
---T---------T--------------------------------¬
|Зн| Порядок | Мантисса |
L--+---------+---------------------------------
Расширенная точность
1 бит 15 бит 64 бита
---T-------------T------------------------------------¬
|Зн| Порядок | Мантисса |
L--+-------------+-------------------------------------
В любом представлении старший бит "Зн" определяет знак вещественного числа:
0 - положительное число;
1 - отрицательное число.
Возможные значения вещественных чисел:
Положительный нуль
--T---------T------------------¬
|0| 0...0 | 0...0 |
L-+---------+-------------------
Отрицательный нуль
--T---------T------------------¬
|1| 0...0 | 0...0 |
L-+---------+-------------------
Наименьшее положительное число
--T---------T------------------¬
|0| 0...01 | 0...0 |
L-+---------+-------------------
Наибольшее отрицательное число
--T---------T------------------¬
|1| 0...01 | 0...0 |
L-+---------+-------------------
Наибольшее положительное число
--T---------T------------------¬
|0| 11...10 | 1...1 |
L-+---------+-------------------
Наименьшее отрицательное число
--T---------T------------------¬
|1| 11...10 | 1...1 |
L-+---------+-------------------
Положительная бесконечность
--T---------T------------------¬
|0| 1...1 | 0...0 |
L-+---------+-------------------
Отрицательная бесконечность
--T---------T------------------¬
|1| 1...1 | 0...0 |
L-+---------+-------------------
Нечисло
--T---------T------------------¬
|1| 1...1 | х...х |
L-+---------+-------------------
Неопределенность
--T---------T------------------¬
|1| 1...1 | 10...0 |
L-+---------+-------------------
Возможные значения целых чисел:
Нуль
-------------------¬
| 0...0 |
L-------------------
Наименьшее положительное число
-------------------¬
| 0...1 |
L-------------------
Наибольшее отрицательное число
-------------------¬
| 1...1 |
L-------------------
Наибольшее положительное число
-------------------¬
| 01...1 |
L-------------------
Наименьшее отрицательное число
-------------------¬
| 10...01 |
L-------------------
Неопределенность
-------------------¬
| 10...00 |
L-------------------
Упакованное десятичное число:
|1-й байт | Девять байтов |
+--T------+---T---T---T---T---+
|Зн|000000|n17|n16|...|n1 |n0 |
L--+------+---+---+---+---+----