Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

1 МЕНЮ

14. ПРИЛОЖЕНИЕ

14.1. Коды клавиатуры

14.2. Регистры часов реального времени

14.3. Частоты нот для второй октавы

14.4. Разводка разъема последовательного порта

14.5. Порты адаптера принтера

14.6. Разводка разъемов принтерного порта

14.7. Команды принтера Epson LQ-2550

14.8. Команды принтеров Epson FX-850/1050

14.9. Альтернативная таблица кодировки

14.10. Содержимое файла sysp.h

14.11. Содержимое файла sysp.inc

14.12. Команды сопроцессоров 8087/80287/80387

14.13. Форматы данных сопроцессора

14.1. Коды клавиатуры

Таблица скан-кодов для клавиатуры IBM PC/XT:

----------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---------¦----------¦------------¦-------------¦----------------



Таблица расширенного ASCII-кода:

г--------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-------------¦------------------¦-------------------



14.2. Регистры часов реального времени

РегистрНазначение
0счетчик секунд

  • 1
  • регистр секунд будильника
  • 2
  • счетчик минут
  • 3
  • регистр минут будильника
  • 4
  • счетчик часов
  • 5
  • регистр часов будильника
  • 6
  • счетчик дней недели (1 - воскресенье)
  • 7
  • счетчик дней месяца
  • 8
  • счетчик месяцев
  • 9
  • счетчик лет (последние две цифры текущего года)
  • 0aH регистр состояния A

    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 означает готовность
                               данных для чтения.
    
    
    

    0bH регистр состояния B

    7 6 5 4 3 2 1 0
    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, это означает,       что разрядился
            аккумулятор, питающий КМОП-память.
    
    
    
    

    14.3. Частоты нот для второй октавы

    В этой таблице приведены частоты нот для второй октавы.

    При повышении (понижении) тона на октаву частота соответствующей ноты умножается (делится) на 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

    14.4. Разводка разъема последовательного порта

    Приведем разводку разъема порта последовательной передачи данных 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)
    
    
    
    

    14.5. Порты адаптера принтера

    Порт 378h.

    Этот порт предназначен для записи выводимого на принтер байта данных. Возможно также чтение только что записанного байта.

    Порт 37Ah.

    Порт управления принтером, доступен для чтения и записи:

     7 6 5 4 3 2 1 0
    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.

    Порт 379h

    Порт состояния принтера, доступен только для чтения:

    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.
    
    
    
    

    14.6. Разводка разъемов принтерного порта

    Таблица назначения контактов разъемов принтерного порта (контакт 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
    
    
    
    

    14.7. Команды принтера Epson LQ-2550

    Управление принтером

    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 - зеленый.
    
    
    
    

    14. 8. Команды принтеров Epson FX-850/1050

    Управление принтером

    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-битовом графическом режиме на каждый столбец требуются два байта графических данных.
    
    
    
    

    14.9. Альтернативная таблица кодировки

    В настоящее время существует несколько вариантов кодировки русских букв (кириллицы) для операционной системы MS-DOS - основная, альтернативная, минская и т.д. Они отличаются, в основном, расположением русских букв и символов псевдографики. Однако наибольшее распространение получила альтернативная таблица кодировки, особенно после того, как в 1989 году эта таблица была принята IBM в качестве стандартной для Советского Союза. Локализованная версия MS-DOS 4.01 содержит соответствующую кодовую страницу:


    14.10. Содержимое файла sysp.h

    /* 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 *);
    
    
    
    

    14.11. Содержимое файла sysp.inc

    ;
    ; Это макроопределение печатает символы на экране
    ;
    @@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
    
    
    
    

    14.12. Команды сопроцессоров 8087/80287/80387

    Загрузка данных в стек

    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          Установить защищенный режим работы
    
                            Процессор переходит в защищенный режим работы,
                            возврат в реальный режим возможен только
                            при сбросе сопроцессора.
    
    
    
    

    14.13. Форматы данных сопроцессора

    Одинарная точность
    
    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--+------+---+---+---+---+----
    


  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте