BIOS - описание, руководство программиста,  OS CP/M-80 V2.2

Работа с BIOS в ДОС на Орионе Про, документация программиста

Продаю платы и наборы микросхем, куплю микросхемы Платы и комплектующие на ПК Орион-128

E:250997                                (C) 1990-1997 ORIONSOFT

---------------------------------------------------------------

                     КОМПЬЮТЕР "ORION-PRO"

                          ОПИСАНИЕ BIOS

                    Руководство программиста

---------------------------------------------------------------

                          1. АННОТАЦИЯ

                               В данном руководстве описан интерфейс стандартных подпрограмм  Базовой Системы Ввода/Вывода (BIOS) версии 2.00,  а также распределение системной памяти при работе компьютера  в  режиме "Orion-Pro".

Примеры использования BIOS, руководство программиста

                        2. СТРУКТУРА BIOS

       Под Базовой  Системой  Ввода  /  Вывода  (BIOS) компьютера "Orion-Pro" будем понимать  набор  подпрограмм,  обеспечивающих взаимодействие  программ  пользователя  с аппаратными ресурсами компьютера.

     Доступ к стандартным подпрограммам BIOS осуществляется через таблицу  векторов,  расположенную в непереключаемой области оперативной памяти по адресам 0F800H..0F865H (смотри П.3).

     Каждый вектор занимает в таблице 3 байта:  первый байт содержит  команду  процессора "JP" (код 0C3H),  второй и третий - соответственно младший и старший байты адреса перехода.  Местоположение каждого вектора в таблице и интерфейс соответствующей подпрограммы строго определены и не изменяются  при  доработках BIOS.

     Так как таблица векторов расположена в ОЗУ, адреса перехода  на  их обработку могут быть "перехвачены" программистом для подключения внешних подпрограмм.

      BIOS можно условно разделить на три составные части: 

     "ROM1-BIOS" - размещается в ПЗУ "ROM1" объемом 8  Кбайт  и

                   содержит стартовый   блок,  набор  драйверов

                   (клавиатуры,  мыши и пр.) и прочие специаль-

                   ные программы;

     "ROM2-BIOS" - размещается в ПЗУ "ROM2" объемом не менее 32

                   Кбайт  и  содержит  драйвер дисплея "TV-PRO"

                   (первые 8 Кбайт  используются  для  хранения

                   внутренней  системы  ORDOS  для режима "Ori-

                   on-128", а собственно "TV-PRO" занимает сле-

                   дующие 24 Кбайта);

     "RAM -BIOS" - размещается в непереключаемой области ОЗУ  и

                   содержит таблицу векторов, резидентные подп-

                   рограммы обращения к  ОЗУ,  ПЗУ,  портам,  а

                   также рабочие ячейки.  Эта часть формируется

                   из "ROM1" и  "ROM2"  при  "холодном"  старте

                   компьютера.

     В качестве  рабочей  области BIOS используется сегмент ОЗУ1FH,  что должно учитываться при разработке программ для исключения    конфликтных   ситуаций.   По   относительным   адресам 3000H..3FFFH этого сегмента находится  непереключаемая  область ОЗУ (0F000H..0FFFFH),  распределение которой приведено в Приложении 1, а по адресам 1000H..2FFFH - дополнительная рабочая область драйвера  "TV-PRO"  (смотри  описание  "TV-PRO").  Адреса 0000H..0FFFH  в  сегменте  1FH  зарезервированы  для дальнейших расширений.

     Заметим, что прямое обращение к рабочим ячейкам BIOS,  минуя стандартные подпрограммы, запрещено, поэтому конкретные адреса этих ячеек и их назначение не объявляются.

                    3. ТАБЛИЦА ВЕКТОРОВ BIOS

      Доступ к   стандартным   подпрограммам   BIOS   в   режиме "Orion-Pro" возможен через таблицу векторов:

      0F800H (RESET)  - перезагрузка системы в режиме "Pro"

     0F803H (KBRD)   - ввод символа с клавиатуры

     0F806H (KBDCTL) - управление клавиатурой

     0F809H (TVC)    - вывод символа на экран

     0F80CH (SCRCTL) - управление экраном

     0F80FH (SYMCTL) - управление выводом символа и курсора

     0F812H (KBSTAT) - опрос состояния клавиатуры

     0F815H (HEX)    - вывод байта в шестнадцатиричной форме

     0F818H (MSG)    - вывод сообщения на экран

     0F81BH (INKEY)  - опрос кода нажатой клавиши

     0F81EH (RCUR)   - получение позиции курсора

     0F821H (PRINT)  - вывод на печать

     0F824H (NUMKEY) - опрос номеров нажатых клавиш

     0F827H (INFAST) - быстрый опрос клавиш курсора, спецклавиш

     0F82AH (GRAPH)  - вывод графики

     0F82DH (MEMORY) - система динамического распределения ОЗУ

     0F830H (FILL)   - заполнение страницы ОЗУ константой

     0F833H (MOVBL)  - перенос блока кодов

     0F836H (RRAM)   - чтение байта из страницы ОЗУ

     0F839H (WRAM)   - запись байта в страницу ОЗУ

     0F83CH (WCUR)   - установка позиции курсора

     0F83FH (SOUND)  - синтез звука

     0F842H (RDWIN)  - чтение портов диспетчера в ОЗУ

     0F845H (WRWIN)  - восстановление портов диспетчера из ОЗУ

     0F848H (JPWIN)  - установка варианта диспетчера и переход

     0F84BH (OPCLW)  - открыть/закрыть окно ОЗУ, ПЗУ

     0F84EH (MOUSE)  - опрос порта мыши

     0F851H (MSCTL)  - управление мышью

     0F854H (RDSEC)  - чтение сектора с диска

     0F857H (WRSEC)  - запись сектора на диск

     0F85AH (SYSCTL) - управление системой

     0F85DH (VERS)   - получение номера версии ROM1/ROM2

     0F860H (KBSND)  - формирование звука при нажатии клавиши

     0F863H (KBSIG)  - сигнализация переключения флагов клавиатуры

      Перечень всех стандартных подпрограмм BIOS с кратким  описанием их интерфейса приведен в Приложениях 2,3,4,5.

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

      Вектор RESET (0F800H) не имеет параметров  и  используется для перезапуска компьютера в режиме "Orion-Pro". Это единственный вектор,  не являющийся подпрограммой,  т.е. для обращения к нему необходимо использовать команду процессора JP 0F800H.

      Вектора KBRD (0F803H),  KBDCTL (0F806H),  KBSTAT (0F812H), INKEY (0F81BH),  NUMKEY  (0F824H),   INFAST   (0F827H),   KBSND (0F860H) и KBSIG (0F863H) предназначены для обслуживания клавиатуры и описаны отдельно в П. 4.

      Подпрограмма TVC (0F809H) выводит на экран символ, код которого задан в регистре C.  В состав  драйвера  дисплея  входят также следующие управляющие вектора:

      SCRCTL (0F80CH) - управление экраном: режимы, цвета, окна;

     SYMCTL (0F80FH) - управление выводом символа и курсора;

     GRAPH  (0F82AH) - вывод графики;

     MEMORY (0F82DH) - система динамического распределения сегментной динамической памяти.

      Каждый из указанных векторов выполняет целый набор функционально объединенных подпрограмм (функций),  причем для обращения к требуемой функции в регистр A необходимо поместить ее номер. Перечень функций "TV-PRO" и их интерфейс приведен в Приложении 5.

     Подробное описание  данных векторов приведено в документации на драйвер "TV-PRO".      Приложение 6 содержит набор управляющих кодов, поддерживаемых подпрограммой TVC.

      Подпрограмма HEX  (0F815H) используется для вывода байта в шестнадцатиричной форме на экран, указанного в регистре A.      Подпрограмма MSG (0F818H) служит для вывода на экран сообщения, адрес начала которого задан в регистровой паре HL (признаком конца сообщения является байт 00H).

      Заметим, что для вывода символов в подпрограммах HEX и MSG используется подпрограмма с адресом TVC.

      Подпрограмма RCUR  (0F81EH)  возвращает символьную позицию курсора: в регистре H - по Y, в регистре L - по X, причем левому верхнему углу экрана (Home) соответствуют координаты (0,0).

     Подпрограмма WCUR (0F83CH) выполняет обратную функцию: устанавливает  курсор  в позицию экрана,  заданную значениями регистров H и L.

 

     Подпрограмма PRINT (0F821H) предназначена для обслуживания печатающего устройства и выполняет две функции.

     Если входное значение регистра A=0,  то подпрограмма PRINT выводит символ с кодом,  указанным в регистре C,  на печать.  В регистре A на выходе возвращается  байт  состояния  печатающего устройства со следующими значениями битов:

      D0     - отсутствие бумаги в принтере,

     D1     - признак ошибки ERROR,

     D2     - признак отсутствия готовности BUSY,

     D3..D7 - нули.

      Таким образом,  признаком готовности принтера является выходное значение A=0.

     При входном значении регистра A=1 подпрограмма PRINT выдает байт состояния принтера (как и при печати символа).

      Подпрограмма FILL (0F830H) заполняет заданную область указанной страницы ОЗУ константой.  В регистре A указывается номер страницы ОЗУ,  в регистре C - записываемый байт, в регистрах HL - начальный адрес ОЗУ, DE - длина заполняемой области.

     Подпрограмма MOVBL  (0F833H) копирует блок данных из одной страницы памяти в другую. В регистре A указываются номера обеих страниц (старшие 4 разряда - "откуда", младшие - "куда"), в регистрах HL - начальный адрес "откуда",  DE  -  начальный  адрес "куда", BC - число копируемых байт.      Подпрограмма RRAM (0F836H) считывает в регистр C  содержимое ячейки по адресу HL из страницы ОЗУ с номером,  указанным в регистре A.

     Подпрограмма WRAM  (0F839H) записывает значение регистра C по адресу HL в страницу ОЗУ с номером, указанным в регистре A.

      Подпрограмма SOUND (0F83FH) предназначена для формирования звукового сигнала.  В регистровой паре BC задается длительность в миллисекундах,  в DE - частота в герцах.  Так  как  генерация звука осуществляется программным способом,  данная подпрограмма выдает сигнал с усредненной частотой.  Если значение  DE=0,  то формируется пауза заданной длительности.

      Вектора RDWIN  (0F842H),  WRWIN  (0F845H),  JPWIN (0F848H) предназначены для оперативного управления памятью компьютера.      Подпрограмма RDWIN  считывает  (сохраняет) в ОЗУ состояние портов диспетчера,  для чего используется  специальная  таблица (буфер) с адресом HL длиной 6 байт. Значения портов сохраняются в указанном буфере в следующем порядке:

 

     порт 04H (номер сегмента ОЗУ в окне 0)

     порт 05H (номер сегмента ОЗУ в окне 1)

     порт 06H (номер сегмента ОЗУ в окне 2)

     порт 08H (номер страницы ОЗУ)

     порт 09H (номер сегмента ROM2)

     порт 0AH (состояние диспетчера).

      Подпрограмма WRWIN  выполняет "зеркальную" функцию - восстанавливает состояние перечисленных портов из буфера ОЗУ, адрес которого задан в регистровой паре HL.

     Ограничение: буфер для сохранения / восстановления  портов должен находиться в непереключаемой области памяти, в противном случае он  может  быть  "потерян"  при  переключении  сегментов (страниц) ОЗУ.

     Подпрограмма JPWIN предназначена  для  установки  значений портов из таблиц (аналогично WRWIN) с последующей передачей управления.  Данная подпрограмма позволяет работать с несколькими предварительно настроенными таблицами, каждая из которых состоит из 8 байт: первые 6 байт содержат значения портов, последние 2 байта - адрес перехода. Адрес начала всего блока таблиц задается в регистровой паре HL при первоначальном вызове  JPWIN  со значением аккумулятора A=0FFH. Для выполнения функции настройки диспетчера памяти с передачей управления в  регистре  A  должен быть указан номер таблицы (номер канала), по которой JPWIN формирует состояние портов и выполняет команду перехода (JP).

     Подпрограмма OPCLW (0F84BH) используется для открытия (при A=1) и закрытия (при A=0) окон в памяти.

      В регистре C задается номер окна:

          0 - окно 0 ОЗУ,

          1 - окно 1 ОЗУ,

          2 - окно 2 ОЗУ,

          3 - окно ROM2,

          4 - окно ROM1.

      В регистре  B  для функции открытия окна указывается номер сегмента ОЗУ (ПЗУ).

      Подпрограммы RDSEC (0F854H) и WRSEC (0F857H)  используются для чтения / записи сектора гибкого диска,  при этом на входе в регистровой паре HL указывается адрес начала буфера сектора,  а результат операции  возвращается  в регистре A (A=0 - успешно). Регистровая пара DE на выходе содержит адрес конца буфера +  1, а HL не изменяется.

      Подпрограммы MOUSE (0F84EH) и MSCTL (0F851H) предназначены для обслуживания мыши. Они описаны в П.5.

      Подпрограмма SYSCTL (0F85AH) выполняет функции  управления системой. Номер функции задается в регистре A:

      A=0 - инициализация рабочих ячеек "ROM1-BIOS";

     A=1 - инициализация портов диспетчера  памяти  (отключение      всех окон);

     A=2 - освобождение оверлейной  области  ОЗУ,  используемой      драйвером "TV-PRO";

     A=3 - проверка занятости оверлейной области ОЗУ, используемой  драйвером "TV-PRO" ("Z" - область свободна для

           размещения внешних данных,  "NZ"  -  область  занята   данными "TV-PRO").

      Подпрограмма VERS  (0F85DH)  используется  для определения номеров версий "ROM1-BIOS" и "ROM2-BIOS":

      H - двоично-десятичный N версии "ROM1-BIOS",

     L - двоично-десятичный N версии "ROM2-BIOS" ("TV-PRO").

      Для ROM-BIOS  V2.00  в  регистрах HL возвращается значение 2020H.

4. ОСОБЕННОСТИ ДРАЙВЕРА КЛАВИАТУРЫ

     Драйвер клавиатуры рассчитан на обслуживание клавиатур типа РК-86 и МС7007.

      Подпрограмма KBRD (0F803H) используется для ввода  символа с  клавиатуры  (с ожиданием нажатия клавиши и выводом курсора). Для клавиатуры МС7007 поддерживается старое и новое распределение спецклавиш. Обеспечивается работа в 4-х кодировках: альтернативной,  КОИ-8, КОИ-7 / Н2 (большие латинские и большие русские  буквы),  КОИ-7  /  Н1,  Н0 (большие и маленькие латинские, большие и маленькие  русские).  Функционирование  клавиатуры  в различных режимах описано в Приложении 6.

     В данной  подпрограмме  предусмотрена  возможность работы с внутренним буфером клавиатуры,  рассчитанным на хранение 15 кодов клавиш. Буфер организован по принципу очереди (FIFO - "первым пришел - первым ушел"). Подпрограмма KBRD при вызове проверяет наличие данных в буфере и выталкивает первый находящийся в нем байт на выход. Если же буфер пуст, осуществляется переход к вводу с клавиатуры очередного символа.

     Наличие буфера KBRD дает возможность использования функциональных клавиш. Кроме того, пользователь в своих программах может  заполнять буфер клавиатуры требуемыми кодами для автоматического выполнения некоторых команд.

     Заметим, что драйвер клавиатуры использует еще  один  внутренний буфер NUMKEY с кодами сканирования нажатых клавиш (смотри описание подпрограммы NUMKEY).

     Принцип обработки функциональных клавиш состоит  в  следующем.  При нажатии такой клавиши (отдельно или совместно с одной из клавиш УПР, SHIFT) соответствующая ей строка кодов заносится в  буфер,  откуда  будет посимвольно выдаваться при последующих вызовах KBRD.

     Функциональной может быть назначена  любая  клавиша,  кроме спецклавиш УПР (УС), SHIFT (СС), ФИКС (РУС/ЛАТ), ГРАФ, АЛФ. Коды сканирования функциональных клавиш  задаются  в  специальных таблицах вместе с соответствующими генерируемыми строками.  Таких таблиц может быть три:

     для отдельно нажатых клавиш,

    для клавиш, нажатых совместно с УПР (УС),

    для клавиш, нажатых совместно с SHIFT (СС), причем клавиши во всех таблицах могут быть выбраны разные.

     Наличие  данных  в  любой  из  этих  таблиц   не    является обязательным: все таблицы вообще могут быть  пустыми  -  в  этом случае KBRD работает без функциональных клавиш.

     Каждая из указанных таблиц имеет следующую структуру: 

         ┌───┬───────────────────────────────────────┐

         │ n │ Список кодов сканирования клавиш      │

         ├───┼───────────────────────────────────────┤

         │ L1│ Строка для 1-й клавиши длиной L1 байт │

         ├───┼───────────────────────────────────────┤

         │ L2│ Строка для 2-й клавиши длиной L2 байт │

         ├───┼───────────────────────────────────────┤

         │...│                 . . .                 │

         ├───┼───────────────────────────────────────┤

         │ Ln│ Строка для n-й клавиши длиной Ln байт │

         └───┴───────────────────────────────────────┘

    Первый байт таблицы задает число  n  клавиш,  которые  будут функциональными, т.е. определяет длину списка клавиш.

     Список кодов сканирования клавиш включает n байт,  при этом значению n=0 соответствует пустая таблица (она  будет  состоять всего из 1 байта).

     Далее в таблице (если она не пустая) располагаются n следующих друг за другом строк,  предваряемых байтом  длины  L1..Ln. При нажатии функциональной клавиши соответствующая строка будет заноситься в буфер клавиатуры.

     Адреса таблиц функциональных клавиш могут быть установлены/получены с помощью вектора KBDCTL.

      Подпрограмма KBDCTL (0F806H) используется  для  управления клавиатурой.  В зависимости от номера функции, задаваемой в регистре A,  она позволяет устанавливать и получать значения следующих параметров:

 

     - код режима  (KBMODE) и байт флагов (KBFLAG)  клавиатуры,  которые  действуют для векторов KBRD и INKEY;

     - константы задержки автоповтора  и  мигания  курсора  для  вектора KBRD;

     - коды клавиш управления курсором (в том числе при нажатии клавиш УПР и SHIFT) для векторов KBRD и INKEY;

     - функциональные  клавиши  и соответствующие им последовательности кодов для вектора KBRD;

     - коды  клавиш включения/выключения псевдографического режима для клавиатуры РК-86.

      Режим клавиатуры (KBMODE) описывается состоянием следующих битов:

     D7     - признак  старого распределения специальных клавиш     для  клавиатуры  MC7007  (при  единичном значении этого бита управление MC7007 совпадает с РК-86);

     D1,D0  - определяют тип кодировки клавиатуры:

              00 - альтернативная;

              01 - КОИ-8;

              10 - КОИ-7/Н2;

              11 - КОИ-7/Н1,0.

      В байте флагов клавиатуры  (KBFLAG)  имеется  5  временных флагов,  устанавливаемых  каждый  раз  после вызова подпрограмм KBRD, INKEY и NUMKEY, и 3 триггерных флага, устанавливаемых нажатием комбинаций спецклавиш в подпрограмме KBRD:

     а) временные флаги - сигнализируют о нажатии  соответствующих клавиш:

        D0 - нажата клавиша УПР   (УС);

        D1 - нажата клавиша SHIFT (СС);

        D2 - нажата клавиша ФИКС  (РУС/ЛАТ);

        D3 - нажата клавиша АЛФ   (для МС7007);

        D4 - нажата клавиша ГРАФ  (для МС7007);

     б) триггерные  флаги  - определяют текущий режим ввода:

        D5 - режим CAPS LOCK (1 - большие буквы);

        D6 - режим РУС/ЛАТ   (1 - русские);

        D7 - режим ГРАФ/АЛФ  (1 - псевдографика).

         Бит CAPS LOCK действует во всех кодировках, кроме КОИ-7/Н2 (там нет больших и малых букв),  бит РУС/ЛАТ  -  во    всех кодировках,  кроме КОИ-7 /Н1,  Н0,  бит ГРАФ/АЛФ -       только в альтернативной кодировке и КОИ-8.  Путем принудительной   установки   триггерных  флагов  пользователь может переводить  клавиатуру  в  требуемое    состояние.

      При вызове  подпрограммы  KBDCTL  в регистре A указывается номер функции:

      A=0 - Установка режима клавиатуры

           На входе:

              E  - код режима  (KBMODE);

              D  - байт флагов (KBFLAG);

      A=1 - Получение режима клавиатуры

           На выходе:

              E  - код режима  (KBMODE);

              D  - байт флагов (KBFLAG);

              HL - адрес буфера NUMKEY  с номерами клавиш после       последнего вызова KBRD, INKEY, NUMKEY;

              A  - число нажатых клавиш в буфере NUMKEY;

              C  - номер последней клавиши в буфере NUMKEY (если буфер пуст,  то C=0FFH, и на выходе установлен флаг "Z");

      A=2 - Установка констант задержки

           На входе:

              HL - константа автоповтора;

              DE - константа мигания курсора;

      A=3 - Получение констант задержки

           На выходе:

              HL - константа автоповтора;

              DE - константа мигания курсора;

      A=4 - Установка кодов клавиш курсора

           На входе:

              C - влево

              B - вправо

              E - вверх

              D - вниз

      A=5 - Получение кодов клавиш курсора

           На выходе:

              C - влево

              B - вправо

              E - вверх

              D - вниз

      A=6 - Установка кодов клавиш курсора при нажатой УПР

           На входе:

              C - влево  + УПР

              B - вправо + УПР

              E - вверх  + УПР

              D - вниз   + УПР

      A=7 - Получение кодов клавиш курсора при нажатой УПР

           На выходе:

              C - влево  + УПР

              B - вправо + УПР

              E - вверх  + УПР

              D - вниз   + УПР

      A=8 - Установка кодов клавиш курсора при нажатой SHIFT

           На входе:

              C - влево  + SHIFT

              B - вправо + SHIFT

              E - вверх  + SHIFT

              D - вниз   + SHIFT

      A=9 - Получение кодов клавиш курсора при нажатой SHIFT

           На выходе:

              C - влево  + SHIFT

              B - вправо + SHIFT

              E - вверх  + SHIFT

              D - вниз   + SHIFT

     A=10 - Установка адреса таблицы функциональных клавиш

           На входе:

              C  - номер сегмента ОЗУ с таблицей,

              HL - адрес таблицы в сегменте

     A=11 - Получение адреса таблицы функциональных клавиш

           На выходе:

              C  - номер сегмента ОЗУ с таблицей,

              HL - адрес таблицы в сегменте

     A=12 - Установка адреса таблицы функциональных клавиш при

           нажатой УПР

           На входе:

              C  - номер сегмента ОЗУ с таблицей,

              HL - адрес таблицы в сегменте

     A=13 - Получение адреса таблицы функциональных клавиш при

           нажатой УПР

           На выходе:

              C  - номер сегмента ОЗУ с таблицей,

              HL - адрес таблицы в сегменте

     A=14 - Установка адреса таблицы функциональных клавиш при

           нажатой SHIFT

           На входе:

              C  - номер сегмента ОЗУ с таблицей,

              HL - адрес таблицы в сегменте

     A=15 - Получение адреса таблицы функциональных клавиш при

           нажатой SHIFT

           На выходе:

              C  - номер сегмента ОЗУ с таблицей,

              HL - адрес таблицы в сегменте

     Следует заметить,  что устанавливаемые коды клавиш  курсора действуют  как для подпрограммы KBRD,  так и для INKEY,  а коды функциональных клавиш - только для KBRD,  причем приоритет последних  выше,  т.е.  если клавиша управления курсором выбрана в качестве функциональной, то при ее нажатии на выходе KBRD будет сформирована строка кодов.

     A=16 - Запись символа в буфер KBRD

           На входе:

              C   - код символа;

           На выходе:

             "CY" - признак переполнения буфера

     A=17 - Чтение символа из буфера KBRD

           На выходе:

             "CY" - буфер пуст, иначе:

              C   - код символа.

     A=18 - Обнуление буфера KBRD

     A=19 - Проверка буфера клавиатуры

           На выходе:

             "CY" - буфер пуст, иначе содержит символ(ы).

     A=20 - Установка кодов клавиш включения алфавитного и псев-

           дографического режимов на РК86:

           На входе:

              L - для включения алфавитного режима;

              H - для включения псевдографического режима;

     A=21 - Получение кодов клавиш включения алфавитного и псев-

           дографического режимов на РК-86:

           На выходе:

              L - для включения алфавитного режима (^O);

              H - для включения псевдографического режима (^N);

     Наличие функций 20,  21 позволяет назначать другие  клавиши для включения / выключения псевдографики на клавиатуре РК-86 (и МС7007 в "старом режиме") и освободить комбинации  ^O,  ^N  для других целей. Например, если установить H=L=07H, то включение и выключение псевдографики будет осуществляться в триггерном  режиме нажатием ^G.

     Сводный перечень функций вектора KBDCTL приведен в Приложении 3.

      Подпрограмма KBSTAT  (0F812H) возвращает A=0 (и флаг "Z"), если ни одна клавиша не нажата, и A=0FFH (флаг "NZ") - если нажата  хотя  бы одна клавиша,  при этом клавиши УПР (УС),  SHIFT (СС),  ФИКС (РУС/ЛАТ) не опрашиваются (для клавиатуры MC7007 не опрашиваются также клавиши АЛФ и ГРАФ).

      Подпрограмма INKEY (0F81BH) предназначена для опроса  кода нажатой клавиши. Код нажатой клавиши возвращается в регистре A, при этом дополнительно устанавливается флаг "CY" и A=0FFH, если ни одна клавиша не нажата,  нажата одна  из спецклавиш  (SHIFT, УПР) или недопустимая комбинация спецклавиш.

      В остальных случаях на выходе  INKEY  формируется  признак "NC",  а  в  аккумуляторе - код клавиши с учетом нажатия клавиш УПР (УС),  SHIFT (СС), АЛФ и ГРАФ (для МС7007). Кроме того, при определении кода  клавиши  учитывается  текущее состояние байта триггерных флагов клавиатуры (KBFLAG). Эти флаги могут быть изменены  нажатием  соответствующих комбинаций спецклавиш как при вызове KBRD, так и при вызове INKEY.

      Подпрограмма NUMKEY (0F824H) опрашивает клавиатуру с определением номеров (кодов сканирования) нескольких нажатых клавиш и может использоваться  для  разработки  собственных  драйверов клавиатуры. Номера нажатых клавиш в порядке возрастания помещаются в специальный  внутренний  буфер  NUMKEY,  адрес  которого возвращается в регистровой паре HL.

 

    *00 - 9 цифр.   *16 - . цифр.    2C - М M        42 - Г G

    *01 - 8 цифр.   *17 - , цифр.    2D - DEL        43 - О O

     02              18 - K1        *2E - ИСП (КОМ)  44 - Ь X

     03              19 - 1 !        2F - ПОМ (ПС)   45 - . >

     04 - SHIFT      1A - Ц C        30 - 4 $        46 - : *

    *05 - 4 цифр.    1B - Ы Y        31 - Е E        47 - - =

    *06 - 5 цифр.    1C - Ч ^        32 - П P        48 - 7 '

    *07 - 6 цифр.   *1D - 1 цифр.    33 - И I        49 - Ш [

     08 - АР2       *1E - 2 цифр.    34 - SPACE      4A - Л L

     09 - TAB       *1F - 3 цифр.    35 -  &         4B - Б B

     0A - УПР        20 - K2         36 - ENTER      4C -  '

    *0B - ГРАФ       21 - 2 "        37 - / ?        4D - Э \

    *0C - АЛФ        22 - У U        38 - K4         4E - Х H

    *0D - + цифр.    23 - В W        39 - 5 %        4F - 0

    *0E - - цифр.    24 - С S        3A - Н N        50 - 8 (

    *0F - ВВОД цифр.*25 - 7 цифр.    3B - Р R        51 - Щ ]

     10 - + ;        26 - УСТ        3C - Т T        52 - Д D

     11 - Й J        27 - СБРОС      3D -  )         53 - Ю @

     12 - Ф F        28 - K3         3E -  (         54 - , <

     13 - Я Q        29 - 3 #       *3F -   _        55 - Ж V

     14 - ФИКС       2A - К K        40 - K5         56 - З Z

    *15 - 0 цифр.    2B - А A        41 - 6 &        57 - 9 )

 

     Значком "*" отмечены клавиши, отсутствующие на  клавиатуре РК-86.

    В регистре A подпрограмма NUMKEY выдает количество  нажатых клавиш,  а  в регистре C - номер нажатой клавиши,  записанный в буфере последним (если ни  одна  клавиша  не  нажата,  то  A=0, C=0FFH, и на выходе устанавливается флаг "Z").      Кроме того, NUMKEY устанавливает пять младших битов в байте (KBFLAG) при нажатии соответствующих клавиш.     На основе  подпрограммы  NUMKEY  разработаны  подпрограммы KBRD  и  INKEY,  поэтому после их вызова можно получить текущее состояние буфера NUMKEY с номерами нажатых клавиш (смотри функцию A=1 вектора KBDCTL).

     Нумерация клавиш осуществляется в соответствии с их расположением  в  матрице клавиатуры MC7007 (для РК-86 номера клавиш преобразуются в кодировку MC7007):

      Подпрограмма INFAST (0F827H) выполняет быстрое  сканирование матрицы клавиатуры с целью определения факта нажатия клавиш управления курсором и спецклавиш УПР  (УС),  SHIFT  (СС),  ФИКС (РУС/ЛАТ).

     В  регистре  A  возвращаются  признаки  нажатия  указанных клавиш:

        D7 - курсор вниз,           D3 - резерв,

       D6 - курсор вправо,         D2 - ФИКС  (РУС/ЛАТ),

       D5 - курсор вверх,          D1 - SHIFT (СС),

       D4 - курсор влево,          D0 - УПР   (УС).

     Если ни одна из указанных клавиш не нажата, устанавливается флаг "Z".

     Подпрограмы KBSND (0F860H) и KBSIG (0F863H)  являются  служебными векторами драйвера клавиатуры:

     0F860H (KBSND) - формирование  звука  при  нажатии  клавиши (вызывается в векторе 0F803H);

           На вход этой подпрограммы при вызове передаются следующие параметры:

            A - код нажатой клавиши;

           D - байт флагов клавиатуры (KBFLAG);

           E - байт режима клавиатуры (KBMODE);

     Подменой этого вектора можно формировать звук,  отличный от стандартного, при этом необходимо, чтобы новая подпрограмма обработки вектора не попадала в область адресов окна ROM1.

     0F863H (KBSIG) - сигнализация переключения флагов клавиатуры (вызывается в векторах 0F803H, 0F81BH).

           На вход этой подпрограммы передаются:

            A - байт флагов клавиатуры (KBFLAG) до  переключения  флагов;

            D - байт флагов клавиатуры (KBFLAG) после переключения (при этом необязательно A<>D);

            E - байт режима клавиатуры (KBMODE).

    Данный вектор вызывается при нажатии комбинаций спецклавиш, предназначенных для переключения флагов клавиатуры,  и его подменой можно включать соответствующий звуковой сигнал или  отображать флаги клавиатуры, например, в правом верхнем углу экрана (в исходном состоянии стоит "заглушка" RET). Требования по размещению подпрограммы обработки этого вектора - такие же,  как и для вектора 0F860H (вне окна ROM1).

     Заметим, что  в  подпрограммах  обработки  обоих   векторов 0F860H, 0F863H запрещается использовать вектора,  реализованные в ROM1: 0F803H, 0F806H, 0F812H, 0F81BH, 0F827H, 0F851H, 0F85AH.

5. ДРАЙВЕР МЫШИ

     Для поддержки  мыши  в  BIOS  имеются  два вектора:  MOUSE (0F84EH) и MSCTL (0F851H).  После вызова указанных векторов все регистры сохраняются, за исключением AF.

     Вектор MOUSE  предназначен  для  непосредственного  опроса порта мыши (1EH) и возвращает в регистре A его состояние:

      D7 - резерв (1)

     D6 - резерв (1)

     D5 - /правая кнопка

     D4 - /левая кнопка

     D3 - /вверх

     D2 - /вниз

     D1 - /вправо

     D0 - /влево

      Активному состоянию какого-либо разряда соответствует уровень лог.0 (исходное состояние всех разрядов - единичное).      Вектор MSCTL выполняет  несколько  функций  по  управлению

мышью.  Номер функции задается в регистре A перед вызовом подпрограммы 0F851H:

      A=0 - Перемещение указателя мыши в окне до нажатия кнопки

           - на входе:

              BC  - исходная позиция Y мыши;

              DE  - исходная позиция X мыши;

           - на выходе:

             "CY" - признак нахождения исходных значений  X,Y

                    вне окна, или признак переполнения буфера

                    сохранения информации под указателем;

           - иначе:

              BC  - выходная позиция Y мыши;

              DE  - выходная позиция X мыши;

              A   - код нажатой кнопки:

                    80H - нажата левая кнопка;

                    40H - нажата правая кнопка.

      При вызове  функции A=0 на экране появляется указатель мыши, который перемещается до тех пор, пока не нажата хотя бы одна из ее кнопок.  Указатель мыши может перемещаться также с помощью клавиш управления курсором;  клавиша ВК соответствует нажатию левой кнопки мыши, клавиша АР2 - правой кнопки.

      Цвет указателя мыши зависит от установленного режима отображения мыши (смотри ниже) и от текущих цветов фона и переднего плана (смотри описание драйвера "TV-PRO").

      Замечание

     ---------

     Данная функция  A=0  использует  вектор MOUSE (0F84EH) для опроса состояния мыши.  При написании собственной  подпрограммы обработки вектора MOUSE (например,  в случае использования нестандартной мыши) следует учитывать, что адрес размещения ее кодов должен быть больше 1FFFH, так как она вызывается из ROM1.

      A=1 - Установка режима отображения указателя мыши

           На входе:

              C  - код режима:

                   D7 - признак  перемещения  по  всему  экрану

                        (при D7=0 - в пределах текущего окна);

                   D3 - признак  сохранения  информации  экрана

                        под указателем мыши;

                   D2 - признак инверсии (цвета фона и передне-

                        го плана меняются местами);

                   D1,D0 - режим наложения указателя:

                      00 - с полной заменой фона и изображения;

                      01 - наложение по ИЛИ  (цветом  переднего

                           плана закрашиваются те точки экрана,

                           которым в шаблоне указателя мыши со-

                           ответствуют единицы);

                      10 - наложение по И (цветом фона закраши-

                           ваются  те  точки экрана,  которым в

                           шаблоне указателя мыши соответствуют

                           нули);

                      11 - наложение по исключающему ИЛИ (неза-

                           висимо  от текущих цветов фона и пе-

                           реднего плана инвертируется цвет то-

                           чек экрана, которым в шаблоне указа-

                           теля мыши соответствуют единицы);

 

     Рекомендуемые режимы отображения указателя мыши:  по ИЛИ -09H (89H), или по XOR - 03H (83H).

      A=2 - Получение режима отображения указателя мыши

           На выходе:

              C - код режима;

      A=3 - Установка размеров указателя мыши

           На входе:

              E - высота указателя мыши в пикселях;

              D - ширина указателя мыши в пикселях;

              C - шаг перемещения мыши по Y;

              B - шаг перемещения мыши по X;

              L - смещение шаблона указателя  мыши  в  пределах

                  левого столбца байтов (0..7);

      A=4 - Получение размеров указателя мыши

           На выходе:

              E - высота указателя мыши в пикселях;

              D - ширина указателя мыши в пикселях;

              C - шаг перемещения мыши по Y;

              B - шаг перемещения мыши по X;

              L - смещение шаблона указателя  мыши  в  пределах

                  левого столбца байтов (0..7);

      A=5 - Установка адреса размещения шаблона мыши

           На входе:

              C  - номер сегмента с шаблоном указателя;

              HL - начальный адрес размещения шаблона в сегмен-

                   те (в пределах сегмента или в пределах стра-

                   ницы ОЗУ);

      A=6 - Получение адреса размещения шаблона мыши

           На выходе:

              C  - номер сегмента с шаблоном указателя;

              HL - начальный адрес размещения шаблона в сегмен-

                   те (в пределах сегмента или в пределах стра-

                   ницы ОЗУ);

      A=7 - Установка  адреса  буфера сохранения  информации под указателем мыши

           На входе:

              CBED - номера сегментов для сохранения информации

                     экрана под указателем мыши (C - для монох-

                     ромного и псевдоцветного режимов доступно-

                     го  экрана,  CB  - для 4-цветного режима и

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

                     ем,  CBE  - для 8-цветного режима,  CBED -

                     для 16-цветного режима);

              HL   - начальный  адрес  буфера  в  сегментах (во

                     всех сегментах одинаковый);

      A=8 - Получение адреса буфера  сохранения  информации  под указателем мыши

           На выходе:

              CBED - номера сегментов для сохранения информации

                     экрана под указателем мыши (C - для монох-

                     ромного и псевдоцветного режимов доступно-

                     го экрана,  CB - для 4-цветного  режима  и

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

                     ем,  CBE - для 8-цветного режима,  CBED  -

                     для 16-цветного режима);

              HL   - начальный адрес  буфера  в  сегментах  (во

                     всех сегментах одинаковый);

      A=9 - Получение длины буфера,  необходимой  для сохранения   информации под указателем мыши

           На выходе:

              DE - длина буфера, необходимая для сохранения ин-

                   формации  под указателем мыши (одинакова для

                   всех сегментов буфера);

     A=10 - Поиск выбранного объекта по базе

           На входе:

              BC - координата Y объекта;

              DE - координата X объекта;

              HL - адрес начала таблицы с описанием базы;

           На выходе:

             "CY"- объект не найден,

                   иначе:

              A  - порядковый номер объекта (0,1,..);

              HL - адрес начала описания объекта в базе.

      Таблица с описанием базы объектов имеет следующую структуру:

 

     TAB:DB n   ;Число объектов в базе

         ;

         DW x1  ;X,Y левого верхнего угла 0-го объекта

         DB y1

         DW dx1 ;Размеры 0-го объекта

         DB dy1

         ;

         . . .

         DW xn  ;X,Y левого верхнего угла (n-1)-го объекта

         DB yn

         DW dxn ;Размеры (n-1)-го объекта

         DB dyn

  EOFTAB:       ;Конец таблицы

         ;

      Первый байт  таблицы  содержит количество объектов в базе. Далее следует соответствующее число описателей объектов, каждый из которых занимает 6 байт.  Заметим, что количество объектов в базе:     n = [ EOFTAB - TAB - 1 ] / 6.

 

     Сводный перечень функций вектора MSCTL приведен в Приложении 4.

Приложение 1

           РАСПРЕДЕЛЕНИЕ НЕПЕРЕКЛЮЧАЕМОЙ ПАМЯТИ В РЕЖИМЕ "PRO"

         ===================================================

 

    0FFFFH ┌─────────────────────────────────────────────┐

           │                                             │

           │           Резидентная часть BIOS            │

           │                                             │

    0F866H ├─────────────────────────────────────────────┤

           │                                             │

           │            Таблица векторов BIOS            │

           │                                             │

    0F800H ├─────────────────────────────────────────────┤

           │                                             │

           │             Служебный стек BIOS             │

           │                                             │

    0F7C0H ├─────────────────────────────────────────────┤

           │                                             │

           │          Рабочий стек "Orion-Pro"           │

           │                                             │

    0F710H ├─────────────────────────────────────────────┤

           │       Таблица адресов подпрограмм ISR       │

           │                                             │

    0F700H ├─────────────────────────────────────────────┤

           │                                             │

           │          Рабочие ячейки "TV-PRO"            │

           │                                             │

    0F5C0H ├─────────────────────────────────────────────┤

           │                                             │

           │        Оверлейная область "TV-PRO"          │

           │                                             │

    0F3C0H ├─────────────────────────────────────────────┤

           │░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│

           │░░░░░░░░░░ Свободная область ОЗУ ░░░░░░░░░░░░│

           │░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│

    0F000H ├─────────────────────────────────────────────┤

           │░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│

        Примечания:

       -----------

    1. Область ОЗУ,  отмеченная символами ( ░ ),  свободна  для данных пользователя.

 

    2. Оверлейная область драйвера дисплея "TV-PRO" может  быть освобождена для временного размещения  данных  пользователя  (с помощью функции A=2 вектора 0F85AH) до тех пор, пока  указанная область не понадобится драйверу. Программа  пользователя  может проверить, занял ли драйвер оверлейную область  своими  данными (с помощью функции A=3 вектора 0F85AH).

 

    Таким образом, участок памяти 0F3C0H..0F5BFH может быть использован  в  оверлейном режиме  совместно  с драйвером дисплея  "TV-PRO".

                                                 Приложение 2

     ТАБЛИЦА ВЕКТОРОВ СТАНДАРТНЫХ ПОДПРОГРАММ В РЕЖИМЕ "PRO"

     =======================================================

 

╔════╤════════╤═══════════════════════════════════════════════╗

║F800│ RESET  │ Перезагрузка системы в режиме "Pro"           ║

╠════╪════════╪═══════════════════════════════════════════════╣

║F803│ KBRD   │ Ввод символа с клавиатуры                     ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ A - код нажатой клавиши       ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F806│ KBDCTL │ Управление клавиатурой                        ║

╟────┴────────┴───────────────────────────────────────────────╢

║ A - номер функции, BC, DE, HL - параметры                   ║

╠════╤════════╤═══════════════════════════════════════════════╣

║F809│ TVC    │ Вывод символа на экран                        ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C - код символа             │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F80C│ SCRCTL │ Управление экраном                            ║

╟────┴────────┴───────────────────────────────────────────────╢

║ A - номер функции, BC, DE, HL - параметры                   ║

╠════╤════════╤═══════════════════════════════════════════════╣

║F80F│ SYMCTL │ Управление выводом символа и курсора TV-PRO   ║

╟────┴────────┴───────────────────────────────────────────────╢

║ A - номер функции, BC, DE, HL - параметры                   ║

╠════╤════════╤═══════════════════════════════════════════════╣

║F812│ KBSTAT │ Опрос состояния клавиатуры                    ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ A=0FFH - нажата, A=0,"Z"- нет ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F815│ HEX    │ Вывод байта в шестнадцатиричном формате       ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ A - выводимый байт          │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F818│ MSG    │ Вывод сообщения на экран                      ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ HL - адрес начала сообщения │                               ║

║      (00H - конец сообщения)│                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F81B│ INKEY  │ Опрос кода нажатой клавиши                    ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │  A   - код нажатой клавиши    ║

║                             │ "CY" - дополнительный флаг    ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F81E│ RCUR   │ Получение позиции курсора                     ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ H - символьная позиция Y      ║

║                             │ L - символьная позиция X      ║

╚═════════════════════════════╧═══════════════════════════════╝

  

╔════╤════════╤═══════════════════════════════════════════════╗

║F821│ PRINT  │ Управление печатающим устройством             ║

╟────┴────────┴───────────────────────────────────────────────╢

║               A=0 - вывод символа на печать                 ║

╟─────────────────────────────┬───────────────────────────────╢

║ C - код печатаемого символа │ А= 0 - символ принят          ║

║                             │ A<>0 - принтер не готов:      ║

║                             │        D0=1 - ERROR           ║

║                             │        D1=1 - нет BUSY        ║

╟─────────────────────────────┴───────────────────────────────╢

║               A=1 - чтение байта состояния принтера         ║

╟─────────────────────────────┬───────────────────────────────╢

║                             │ А= 0 - символ принят          ║

║                             │ A<>0 - принтер не готов       ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F824│ NUMKEY │ Опрос номеров нажатых клавиш                  ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │  HL - адрес начала очереди    ║

║                             │  A  - число нажатых клавиш    ║

║                             │  C  - номер последней клавиши ║

║                             │       (C=0FFH - нет нажатых,  ║

║                             │       при этом уст.флаг "Z")  ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F827│ INFAST │ Быстрый опрос клавиш курсора и спецклавиш     ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │  A - признаки клавиш:         ║

║                             │      D7 - курсор вниз         ║

║                             │      D6 - курсор вправо       ║

║                             │      D5 - курсор ввверх       ║

║                             │      D4 - курсор влево        ║

║                             │      D2 - ФИКС  (РУС/ЛАТ)     ║

║                             │      D1 - SHIFT (СС)          ║

║                             │      D0 - УПР   (УС)          ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F82A│ GRAPH  │ Вывод графики                                 ║

╟────┴────────┴───────────────────────────────────────────────╢

║ A - номер функции, BC, DE, HL - параметры                   ║

╠════╤════════╤═══════════════════════════════════════════════╣

║F82D│ MEMORY │ Система распределения динамического ОЗУ       ║

╟────┴────────┴───────────────────────────────────────────────╢

║ A - номер функции, DE, HL - параметры                       ║

╠════╤════════╤═══════════════════════════════════════════════╣

║F830│ PFILL  │ Заполнение заданной страницы ОЗУ константой   ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ A  - номер страницы ОЗУ     │                               ║

║ C  - записываемый байт      │                               ║

║ HL - начальный адрес        │                               ║

║ DE - длина                  │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F833│ MOVBL  │ Перемещение блока из одной страницы в другую  ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ A  - старший ниббл - откуда │                               ║

║      младший ниббл - куда   │                               ║

║ HL - начальный адрес: откуда│                               ║

║ DE - начальный адрес: куда  │                               ║

║ BC - количество байт        │                               ║

╚═════════════════════════════╧═══════════════════════════════╝

 

╔════╤════════╤═══════════════════════════════════════════════╗

║F836│ RRAM   │ Чтение байта из страницы ОЗУ                  ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ A  - номер страницы         │ C - считанный байт            ║

║ HL - адрес                  │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F839│ WRAM   │ Запись байта в страницу ОЗУ                   ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ A  - номер страницы         │                               ║

║ HL - адрес                  │                               ║

║ C  - записываемый байт      │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F83C│ WCUR   │ Установка позиции курсора                     ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ H - символьная позиция Y    │                               ║

║ L - символьная позиция X    │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F83F│ SOUND  │ Формирование звукового сигнала                ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - длительность, ms       │                               ║

║ DE - частота, Hz            │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F842│ RDWIN  │ Сохранение состояния портов диспетчера в ОЗУ  ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ HL - Адрес буфера (6 байт): │                               ║

║      порт 04H - сегм.окна 0 │                               ║

║      порт 05H - сегм.окна 1 │                               ║

║      порт 06H - сегм.окна 2 │                               ║

║      порт 08H - стр.ОЗУ     │                               ║

║      порт 09H - сегм. ROM2  │                               ║

║      порт 0AH - диспетчер   │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F845│ WRWIN  │ Восстановление портов диспетчера из ОЗУ       ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ HL - Адрес буфера (6 байт)  │                               ║

║      (аналогично RDWIN)     │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F848│ JPWIN  │ Установка окон и диспетчера с передачей упр.  ║

╟────┴────────┴───────────────────────────────────────────────╢

║               A=0FFH - установка адреса таблиц состояния    ║

╟─────────────────────────────┬───────────────────────────────╢

║ HL - адрес блока таблиц по  │                               ║

║      8 байт каждая:         │                               ║

║      порт 04H - сегм.окна 0 │                               ║

║      порт 05H - сегм.окна 1 │                               ║

║      порт 06H - сегм.окна 2 │                               ║

║      порт 08H - стр.ОЗУ     │                               ║

║      порт 09H - сегм. ROM2  │                               ║

║      порт 0AH - диспетчер   │                               ║

║      2 байта  - адрес JP... │                               ║

╟─────────────────────────────┴───────────────────────────────╢

║               A<0FFH - установка портов по номеру таблицы   ║

╟─────────────────────────────┬───────────────────────────────╢

║ A - номер таблицы (0..N)    │ JP по адресу в конце таблицы  ║

╚═════════════════════════════╧═══════════════════════════════╝

  

╔════╤════════╤═══════════════════════════════════════════════╗

║F84B│ OPCLW  │ Открыть/закрыть окно                          ║

╟────┴────────┴───────────────────────────────────────────────╢

║               A=1 - открыть окно                            ║

╟─────────────────────────────┬───────────────────────────────╢

║ C - номер окна:             │                               ║

║     0 - окно 0 ОЗУ;         │                               ║

║     1 - окно 1 ОЗУ;         │                               ║

║     2 - окно 2 ОЗУ;         │                               ║

║     3 - окно ROM2;          │                               ║

║     4 - окно ROM1;          │                               ║

║ B - номер сегмента          │                               ║

╟─────────────────────────────┴───────────────────────────────╢

║               A=1 - закрыть окно                            ║

╟─────────────────────────────┬───────────────────────────────╢

║ C - номер окна              │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F84E│ MOUSE  │ Опрос состояния порта мыши                    ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ A - байт состояния порта мыши ║

║                             │     D7 - не используется      ║

║                             │     D6 - не используется      ║

║                             │     D5 - /правая кнопка ─┐┌─  ║

║                             │     D4 - /левая кнопка   └┘   ║

║                             │     D3 - /вверх               ║

║                             │     D2 - /вниз                ║

║                             │     D1 - /вправо              ║

║                             │     D0 - /влево               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F851│ MSCTL  │ Управление мышью                              ║

╟────┴────────┴───────────────────────────────────────────────╢

║ A - номер функции, BC, DE, HL - параметры                   ║

╠════╤════════╤═══════════════════════════════════════════════╣

║F854│ RDSEC  │ Чтение сектора с флоппи-диска                 ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ HL - начальный адрес буфера │ А - байт состояния            ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F857│ WRSEC  │ Запись сектора на флоппи-диск                 ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ HL - начальный адрес буфера │ А - байт состояния            ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F85A│ SYSCTL │ Управление системой                           ║

╟────┴────────┴───────────────────────────────────────────────╢

║               A=0 - инициализация ячеек "ROM1-BIOS"         ║

╟─────────────────────────────────────────────────────────────╢

║               A=1 - отключение всех окон                    ║

╟─────────────────────────────────────────────────────────────╢

║               A=2 - освобождение оверлейной памяти "TV-PRO" ║

╟─────────────────────────────────────────────────────────────╢

║               A=3 - проверка оверлейной памяти "TV-PRO"     ║

╟─────────────────────────────┬───────────────────────────────╢

║                             │ "Z"  - память занята "TV-PRO" ║

║                             │ "NZ" - память свободна.       ║

╠════╤════════╤═══════════════════════════════════════════════╣

║F85D│ VERS   │ Получение номера версии "ROM1" и "ROM2"       ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ H  - номер версии "ROM1"      ║

║                             │ L  - номер версии "ROM2"      ║

╚═════════════════════════════╧═══════════════════════════════╝

 

╔════╤════════╤═══════════════════════════════════════════════╗

║F860│ KBSND  │ Формирование звука при нажатии клавиши        ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ A - код нажатой клавиши;    │ Формируется звук заданной то- ║

║ D - байт флагов клавиатуры; │ нальности и длительности в    ║

║ E - байт режима клавиатуры. │ зависимости от вх.параметров  ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║F863│ KBSIG  │ Сигнализация переключения флагов клавиатуры   ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ A - исходный байт флагов;   │ Изменение флагов клавиатуры   ║

║ D - байт после переключения;│ сигнализируется звуком или    ║

║ E - байт режима клавиатуры. │ отображением на экране        ║

╚═════════════════════════════╧═══════════════════════════════╝

                                                 Приложение 3

 

     ФУНКЦИИ ВЕКТОРА УПРАВЛЕНИЯ КЛАВИАТУРОЙ KBDCTL (0F806H)

     ======================================================

 

╔════╤════════╤═══════════════════════════════════════════════╗

║A= 0│ SETKBM │ Установка режима клавиатуры                   ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ E - код режима              │                               ║

║ D - байт флагов             │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 1│ GETKBM │ Получение режима клавиатуры                   ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ E  - код режима               ║

║                             │ D  - байт флагов              ║

║                             │ HL - адрес буфера NUMKEY      ║

║                             │ A  - число клавиш в буфере    ║

║                             │ С  - номер последней клавиши  ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 2│ SETKTM │ Установка констант задержки клавиатуры        ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ HL - автоповтора            │                               ║

║ DE - мигания курсора        │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 3│ GETKTM │ Получение констант задержки клавиатуры        ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ HL - константа автоповтора    ║

║                             │ DE - константа мигания курсора║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 4│ SETCCD │ Установка кодов клавиш курсора                ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ CBED - влево,вправо,верх,низ│                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 5│ GETCCD │ Получение кодов клавиш курсора                ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ CBED - влево,вправо,верх,низ  ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 6│ SETCCT │ Установка кодов клавиш курсора + УПР          ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ CBED - влево,вправо,верх,низ│                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 7│ GETCCT │ Получение кодов клавиш курсора + УПР          ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ CBED - влево,вправо,верх,низ  ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 8│ SETCSF │ Установка кодов клавиш курсора + SHIFT        ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ CBED - влево,вправо,верх,низ│                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 9│ GETCSF │ Получение кодов клавиш курсора + SHIFT        ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ CBED - влево,вправо,верх,низ  ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=10│ SETFCD │ Установка адреса таблицы функциональных клавиш║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C  - номер сегмента ОЗУ     │                               ║

║ HL - адрес табл. в сегменте │                               ║

╚═════════════════════════════╧═══════════════════════════════╝

  

╔════╤════════╤═══════════════════════════════════════════════╗

║A=11│ GETFCD │ Получение адреса таблицы функциональных клавиш║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C  - номер сегмента ОЗУ       ║

║                             │ HL - адрес таблицы в сегменте ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=12│ SETFCT │ Установка таблицы функциональных клавиш + УПР ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C  - номер сегмента ОЗУ     │                               ║

║ HL - адрес табл. в сегменте │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=13│ GETFCT │ Получение таблицы функциональных клавиш + УПР ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C  - номер сегмента ОЗУ       ║

║                             │ HL - адрес таблицы в сегменте ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=14│ SETFSF │ Установка таблицы функциональных клавиш +SHIFT║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C  - номер сегмента ОЗУ     │                               ║

║ HL - адрес в сегменте       │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=15│ GETFSF │ Получение таблицы функциональных клавиш +SHIFT║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C  - номер сегмента ОЗУ       ║

║                             │ HL - адрес таблицы в сегменте ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=16│ WRBUF  │ Запись кода клавиши в буфер клавиатуры        ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C  - код                    │"CY" - буфер заполнен          ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=17│ RDBUF  │ Чтение кода клавиши из буфера клавиатуры      ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C   - код                     ║

║                             │"CY" - буфер пуст              ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=18│ CLRBUF │ Очистка буфера клавиатуры                     ║

╠════╪════════╪═══════════════════════════════════════════════╣

║A=19│ TSTBUF │ Проверка буфера клавиатуры                    ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │"CY" - буфер пуст              ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=20│ GETG86 │ Получение клавиш управления п/графикой РК86   ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ L - клавиша вкл псевдографики ║

║                             │ H - клавиша выкл псевдографики║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=21│ SETG86 │ Установка клавиш управления п/графикой РК86   ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║L - клавиша вкл псевдографики│                               ║

║H - клавиша вык псевдографики│                               ║

╚═════════════════════════════╧═══════════════════════════════╝

                                                 Приложение 4

  

        ФУНКЦИИ ВЕКТОРА УПРАВЛЕНИЯ МЫШЬЮ MSCTL (0F851H)

        ===============================================

 

╔════╤════════╤═══════════════════════════════════════════════╗

║A= 0│ MSWND  │ Перемещение мыши в окне до нажатия кнопки     ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - исходная координата Y  │"CY" - исходные X, Y вне окна, ║

║ DE - исходная координата X  │       или переполнение буфера ║

║                             │       сохранения   информации ║

║                             │       под указателем          ║

║                             │ иначе:                        ║

║                             │ BC  - выходная координата Y   ║

║                             │ DE  - выходная координата X   ║

║                             │ A   - код нажатых кнопок мыши:║

║                             │     80H - нажата левая кнопка,║

║                             │     40H - нажата правая кнопка║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 1│ SETMSM │ Установка режима отображения мыши             ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C  - код режима:            │                               ║

║ C7 - признак вывода мыши на │                               ║

║      весь экран             │                               ║

║ C3 - признак сохранения ин- │                               ║

║      формации  экрана  под  │                               ║

║      указателем мыши        │                               ║

║ С2 - признак инверсии цветов│                               ║

║ C1,C0 - режим наложения:    │                               ║

║      00 - с полной заменой  │                               ║

║      01 - по OR             │                               ║

║      10 - по AND            │                               ║

║      11 - по XOR            │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 2│ GETMSM │ Получение режима отображения мыши             ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C  - код режима               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 3│ SETMSZ │ Установка размеров указателя мыши             ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ E  - высота указателя мыши  │                               ║

║ D  - ширина указателя мыши  │                               ║

║ C  - шаг перемещения по Y   │                               ║

║ B  - шаг перемещения по X   │                               ║

║ L  - смещение шаблона в ле- │                               ║

║      вом столбце байтов     │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 4│ GETMSZ │ Получение размеров указателя мыши             ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ E  - высота указателя мыши    ║

║                             │ D  - ширина указателя мыши    ║

║                             │ C  - шаг перемещения по Y     ║

║                             │ B  - шаг перемещения по X     ║

║                             │ L  - смещение шаблона в ле-   ║

║                             │      вом столбце байтов       ║

╚═════════════════════════════╧═══════════════════════════════╝

  

╔════╤════════╤═══════════════════════════════════════════════╗

║A= 5│ SETMSP │ Установка адреса шаблона мыши                 ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C  - номер сегмента ОЗУ,    │                               ║

║ HL - адрес начала шаблона в │                               ║

║      сегменте               │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 6│ GETMSP │ Получение адреса шаблона мыши                 ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C  - номер сегмента ОЗУ,      ║

║                             │ HL - адрес начала шаблона в   ║

║                             │      сегменте                 ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 7│ SETMBF │ Установка буфера сохранения инф.под указателем║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ CBED - номера сегментов ОЗУ │                               ║

║        для сохранения;      │                               ║

║ HL   - адрес начала буфера  │                               ║

║        в сегментах;         │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 8│ GETMBF │ Получение буфера сохранения инф.под указателем║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ CBED - номера сегментов ОЗУ   ║

║                             │        для сохранения;        ║

║                             │ HL   - адрес начала буфера    ║

║                             │        в сегментах;           ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 9│ GETMLN │ Получение длины буфера для сохранения инф.    ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ DE - требуемая длина буфера   ║

║                             │      для сохранения информа-  ║

║                             │      ции под указателем;      ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=10│ SRCMS  │ Поиск выбранного объекта по базе              ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - Y объекта              │"CY"- объект не найден в базе, ║

║ DE - X объекта              │      иначе:                   ║

║ HL - адрес таблицы объектов │ A  - порядковый номер объекта,║

║                             │ HL - адрес начала его описания║

╚═════════════════════════════╧═══════════════════════════════╝

Приложение 5

         ПЕРЕЧЕНЬ ФУНКЦИЙ ДРАЙВЕРА ГРАФИЧЕСКОГО ДИСПЛЕЯ

        ==============================================

           1. ВЕКТОР УПРАВЛЕНИЯ ЭКРАНОМ SCRCTL (0F80CH)

         --------------------------------------------

 

╔════╤════════╤═══════════════════════════════════════════════╗

║A= 0│ SETDM  │ Установка режима доступного экрана            ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C - номер режима            │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 1│ GETDM  │ Получение режима доступного экрана            ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C - номер режима              ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 2│ SETVM  │ Установка режима видимого экрана              ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C - номер режима            │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 3│ GETVM  │ Получение режима видимого экрана              ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C - номер режима              ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 4│ SETDS  │ Установка номера доступного экрана            ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C - номер экрана            │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 5│ GETDS  │ Получение номера доступного экрана            ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C - номер экрана              ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 6│ SETVS  │ Установка номера видимого экрана              ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C - номер экрана            │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 7│ GETVS  │ Получение номера видимого экрана              ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C - номер экрана              ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 8│ OFFVID │ Выключение изображения видимого экрана        ║

╠════╪════════╪═══════════════════════════════════════════════╣

║A= 9│ ONVID  │ Включение изображения видимого экрана         ║

╠════╪════════╪═══════════════════════════════════════════════╣

║A=10│ SETBKG │ Установка текущего цвета фона                 ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C - код цвета фона          │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=11│ GETBKG │ Получение текущего цвета фона                 ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C - код цвета фона            ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=12│ SETCOL │ Установка текущего цвета изображения          ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C - код цвета изображения   │                               ║

╚═════════════════════════════╧═══════════════════════════════╝

╔════╤════════╤═══════════════════════════════════════════════╗

║A=13│ GETCOL │ Получение текущего цвета изображения          ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C - код цвета изображения     ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=14│ SETPAL │ Установка палитры видимого экрана             ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C - код палитры             │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=15│ GETPAL │ Получение палитры видимого экрана             ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C - код палитры               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=16│ SETWND │ Установка параметров текущего окна вывода     ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C  - смещение левого верхне-│ "CY" - признак ошибки входных ║

║      го угла окна по Y;     │        параметров             ║

║ DE - смещение левого верхне-│                               ║

║      го угла окна по X;     │                               ║

║ B  - высота окна;           │                               ║

║ HL - ширина окна.           │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=17│ GETWND │ Получение параметров текущего окна вывода     ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C  - смещение левого верхне-  ║

║                             │      го угла окна по Y;       ║

║                             │ DE - смещение левого верхне-  ║

║                             │      го угла окна по X;       ║

║                             │ B  - высота окна;             ║

║                             │ HL - ширина окна.             ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=18│ CLRWND │ Очистка окна цветом фона                      ║

╠════╪════════╪═══════════════════════════════════════════════╣

║A=19│ SETWBF │ Установка адреса буфера сохранения окна       ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ CBED - номера сегментов ОЗУ │                               ║

║        для сохранения окна; │                               ║

║ HL - начальный адрес разме- │                               ║

║      щения данных в сегмен- │                               ║

║      тах  (во всех одинако- │                               ║

║      вый).                  │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=20│ GETWBF │ Получение адреса буфера сохранения окна       ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ CBED - номера сегментов ОЗУ   ║

║                             │        для сохранения окна;   ║

║                             │ HL - начальный адрес разме-   ║

║                             │      щения данных в сегмен-   ║

║                             │      тах  (во всех одинако-   ║

║                             │      вый).                    ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=21│ GETWLN │ Определение длины буфера для сохранения окна  ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ DE - длина буфера (для всех   ║

║                             │      сегментов одинакова)     ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=22│ SAVWND │ Сохранение содержимого текущего окна          ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C=0/0FFH -флаг сдвига буфера│ "CY" - переполнение буфера    ║

╚═════════════════════════════╧═══════════════════════════════╝

╔════╤════════╤═══════════════════════════════════════════════╗

║A=23│ RSTWND │ Восстановление содержимого текущего окна      ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C=0/0FFH -флаг сдвига буфера│ "CY" - признак выхода за пре- ║

║                             │        делы буфера            ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=24│ SCRLUP │ Скроллинг содержимого окна вверх              ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ H - высота скроллируемой    │ "CY" - признак ошибки входных ║

║     части окна;             │        параметров             ║

║ L - величина сдвига окна    │                               ║

║     (высота строки);        │                               ║

║ C - смещение скролируемой   │                               ║

║     части окна сверху;      │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=25│ SCRLDN │ Скроллинг содержимого окна вниз               ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ H - высота скроллируемой    │ "CY" - признак ошибки входных ║

║     части окна;             │        параметров             ║

║ L - величина сдвига окна    │                               ║

║     (высота строки);        │                               ║

║ C - смещение скролируемой   │                               ║

║     части окна сверху;      │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=26│ CLREOL │ Очистка цветом фона до конца строки           ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - смещение очищаемой час-│ "CY" - строка вне окна        ║

║      ти строки по Y (B=0);  │                               ║

║ DE - смещение очищаемой час-│                               ║

║      ти строки по X;        │                               ║

║ L  - высота очищаемой строки│                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=27│ CLREOW │ Очистка цветом фона до конца окна             ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - смещение очищаемой час-│ "CY" - строка вне окна        ║

║      ти строки по Y (B=0);  │                               ║

║ DE - смещение очищаемой час-│                               ║

║      ти строки по X;        │                               ║

║ L  - высота очищаемой строки│                               ║

╚═════════════════════════════╧═══════════════════════════════╝

 

  2. ВЕКТОР УПРАВЛЕНИЯ ВЫВОДОМ СИМВОЛА И КУРСОРА SYMCTL (0F80FH)

 --------------------------------------------------------------

 

╔════╤════════╤═══════════════════════════════════════════════╗

║A= 0│ TVSYM  │ Вывод символа в очередную позицию курсора     ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C - код символа             │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 1│ OUTSYM │ Вывод символа в заданную позицию окна         ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - графическая позиция Y  │ "CY" - символ вне окна        ║

║      левого верхнего угла   │                               ║

║      символа;               │                               ║

║ DE - графическая позиция X  │                               ║

║      левого верхнего угла   │                               ║

║      символа;               │                               ║

║ L  - код символа;           │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 2│ OUTCUR │ Отображение курсора в заданной позиции окна   ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - графическая позиция ку-│ "CY" - курсор вне окна        ║

║      рсора по Y;            │                               ║

║ DE - графическая позиция ку-│                               ║

║      рсора по X;            │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 3│ ERACUR │ Стирание курсора в заданной позиции окна      ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - графическая позиция ку-│ "CY" - курсор вне окна        ║

║      рсора по Y;            │                               ║

║ DE - графическая позиция ку-│                               ║

║      рсора по X;            │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 4│ CTRLFN │ Выполнить управляющую функцию                 ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║  C - Номер функции:         │                               ║

║  0 - Home                   │                               ║

║  1 - Left                   │                               ║

║  2 - Right                  │                               ║

║  3 - Up                     │                               ║

║  4 - Down                   │                               ║

║  5 - Tab [8]                │                               ║

║  6 - Carriage Return        │                               ║

║  7 - Line Feed              │                               ║

║  8 - Back Space             │                               ║

║  9 - Set Window             │                               ║

║      E = X, D = Y,          │                               ║

║      L = Ширина, H = Высота │                               ║

║ 10 - Clear Window           │                               ║

║ 11 - Clear End Of Window    │                               ║

║ 12 - Clear End Of Line      │                               ║

║ 13 - Scroll Up              │                               ║

║ 14 - Scroll Down            │                               ║

║ 15 - Insert Line            │                               ║

║ 16 - Delete Line            │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 5│ SETCUR │ Установка символьной позиции курсора          ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ H - номер позиции по Y;     │                               ║

║ L - номер позиции по X;     │                               ║

╚═════════════════════════════╧═══════════════════════════════╝

╔════╤════════╤═══════════════════════════════════════════════╗

║A= 6│ GETCUR │ Получение позиции курсора                     ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ H - символьная позиция по Y;  ║

║                             │ L - символьная позиция по X;  ║

║                             │ BC - графическая позиция Y;   ║

║                             │ DE - графическая позиция X;   ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 7│ SETSM  │ Установка режима вывода символов              ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C  - код режима:            │                               ║

║ С6 - разрешение скроллинга; │                               ║

║ С5 - разрешение автоперевода│                               ║

║      строки;                │                               ║

║ C4 - разрешение управляющих │                               ║

║      функций 00H..1FH;      │                               ║

║ C2 - признак инверсии;      │                               ║

║ C1,C0 - режим наложения:    │                               ║

║      00 - с полной заменой; │                               ║

║      01 - по OR;            │                               ║

║      10 - по AND;           │                               ║

║      11 - по XOR;           │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 8│ GETSM  │ Получение режима вывода символов              ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C - код режима                ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 9│ SETSSZ │ Установка размеров графических символов       ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ D - ширина символа;         │                               ║

║ E - высота символа;         │                               ║

║ B - шаг вывода символов по  │                               ║

║     X;                      │                               ║

║ C - шаг вывода символов по  │                               ║

║     Y;                      │                               ║

║ L - смещение левого столбца │                               ║

║     битов  шаблона в  левом │                               ║

║     столбце байтов 0..7;    │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=10│ GETSSZ │ Получение размеров графических символов       ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ D - ширина символа;           ║

║                             │ E - высота символа;           ║

║                             │ B - шаг вывода символов по    ║

║                             │     X;                        ║

║                             │ C - шаг вывода символов по    ║

║                             │     Y;                        ║

║                             │ L - смещение левого столбца   ║

║                             │     битов  шаблона в  левом   ║

║                             │     столбце байтов 0..7;      ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=11│ SETCHG │ Установка адреса знакогенератора              ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C  - номер сегмента ОЗУ со  │                               ║

║      знакогенератором;      │                               ║

║ HL - адрес начала ЗГ в пре- │                               ║

║      делах сегмента ОЗУ;    │                               ║

║ DE - шаг шаблонов в байтах; │                               ║

╚═════════════════════════════╧═══════════════════════════════╝

 

╔════╤════════╤═══════════════════════════════════════════════╗

║A=12│ GETCHG │ Получение адреса знакогенератора              ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C  - номер сегмента ОЗУ со    ║

║                             │      знакогенератором;        ║

║                             │ HL - адрес начала ЗГ в пре-   ║

║                             │      делах сегмента ОЗУ;      ║

║                             │ DE - шаг шаблонов в байтах;   ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=13│ UNPCHG │ Распаковка стандартного знакогенератора       ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C  - номер сегмента для рас-│ DE - длина знакогенератора с  ║

║      паковки;               │      учетом длины шаблона ку- ║

║ HL - начальный адрес ЗГ в   │      рсора (если B6=1);       ║

║      сегменте;              │ "CY" - признак переполнения   ║

║ B  - код распаковки:        │                               ║

║ B7 - признак активизации ЗГ │                               ║

║      после распаковки (и ус-│                               ║

║      тановки курсора в виде │                               ║

║      черточки для B6=1);    │                               ║

║ B6 - признак добавления  в  │                               ║

║      конец ЗГ шаблона стан- │                               ║

║      дартного курсора;      │                               ║

║ B3 - признак высоких букв;  │                               ║

║ B2 - признак широких букв;  │                               ║

║ B1,B0 - кодировка:          │                               ║

║      00 - ALT;              │                               ║

║      01 - КОИ-8;            │                               ║

║      10 - КОИ-7/Н2;         │                               ║

║      11 - КОИ-7/Н1;         │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=14│ SETСM  │ Установка режима вывода курсора               ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C  - код режима:            │                               ║

║ С6 - вывод курсора при выво-│                               ║

║      де символа в TVC;      │                               ║

║ С5 - вывод курсора при вводе│                               ║

║      с клавиатуры в KBRD    │                               ║

║      (C5=C6=1 запрещено);   │                               ║

║ С4 - мигание при вводе с    │                               ║

║      клавиатуры в KBRD;     │                               ║

║ C3 - признак сохранения ин- │                               ║

║      формации под курсором; │                               ║

║ C2 - признак инверсии;      │                               ║

║ C1,C0 - режим наложения:    │                               ║

║      00 - с полной заменой; │                               ║

║      01 - по OR;            │                               ║

║      10 - по AND;           │                               ║

║      11 - по XOR;           │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=15│ GETCM  │ Получение режима вывода курсора               ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C - код режима                ║

╚═════════════════════════════╧═══════════════════════════════╝

 

╔════╤════════╤═══════════════════════════════════════════════╗

║A=16│ SETCSZ │ Установка размеров графического курсора       ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ D - ширина курсора;         │                               ║

║ E - высота курсора;         │                               ║

║ B - смещение по X относите- │                               ║

║     льно графической пози-  │                               ║

║     ции курсора;            │                               ║

║ C - смещение по Y относите- │                               ║

║     льно графической пози-  │                               ║

║     ции курсора;            │                               ║

║ L - смещение шаблона курсора│                               ║

║     в левом  столбце байтов │                               ║

║     0..7;                   │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=17│ GETCSZ │ Получение размеров графического курсора       ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ D - ширина курсора;           ║

║                             │ E - высота курсора;           ║

║                             │ B - смещение по X относите-   ║

║                             │     льно графической пози-    ║

║                             │     ции курсора;              ║

║                             │ C - смещение по Y относите-   ║

║                             │     льно графической пози-    ║

║                             │     ции курсора;              ║

║                             │ L - смещение шаблона курсора  ║

║                             │     в лев.столбце байтов 0..7;║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=18│ SETCRP │ Установка адреса шаблона курсора              ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C - номер сегмента шаблона; │                               ║

║ HL - адрес начала шаблона в │                               ║

║      пределах сегмента;     │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=19│ GETCRP │ Получение адреса шаблона курсора              ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C - номер сегмента шаблона;   ║

║                             │ HL - адрес начала шаблона в   ║

║                             │      пределах сегмента;       ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=20│ SETCBF │ Установка адреса буфера сохр.инф.под курсором ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ CBED - номера сегментов ОЗУ │                               ║

║        для сохранения;      │                               ║

║ HL - адрес начала буфера в  │                               ║

║      сегментах;             │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=21│ GETCBF │ Получение адреса буфера сохр.инф.под курсором ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ CBED - номера сегментов ОЗУ   ║

║                             │        для сохранения;        ║

║                             │ HL - адрес начала буфера в    ║

║                             │      сегментах;               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=22│ GETCLN │ Определение длины буфера для курсора          ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ DE - требуемая длина буфера   ║

║                             │      для сохранения информа-  ║

║                             │      ции под курсором;        ║

╚═════════════════════════════╧═══════════════════════════════╝

            3. ВЕКТОР ВЫВОДА ГРАФИКИ GRAPH (0F82AH)

           ---------------------------------------

 

╔════╤════════╤═══════════════════════════════════════════════╗

║A= 0│ PSETC  │ Засветка точки заданным цветом                ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - координата Y;          │ "CY" - точка вне окна         ║

║ DE - координата X;          │                               ║

║ L  - код цвета;             │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 1│ PSET   │ Засветка точки текущим цветом изображения     ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - координата Y;          │ "CY" - точка вне окна         ║

║ DE - координата X;          │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 2│ PRESET │ Гашение точки текущим цветом фона             ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - координата Y;          │ "CY" - точка вне окна         ║

║ DE - координата X;          │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 3│ PXOR   │ Инверсия точки                                ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - координата Y;          │ "CY" - точка вне окна         ║

║ DE - координата X;          │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 4│ PCOL   │ Получение кода цвета точки                    ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - координата Y;          │ "CY" - точка вне окна;        ║

║ DE - координата X;          │ "NZ" - точка засвечена  (для  ║

║                             │        реж.группового кодир.) ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 5│ SETLXY │ Установка координат начала линии              ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - координата Y;          │                               ║

║ DE - координата X;          │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 6│ GETLXY │ Получение координат начала линии              ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ BC - координата Y;            ║

║                             │ DE - координата X;            ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 7│ LINE   │ Вывод линии заданным цветом                   ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - координата Y конца ли- │                               ║

║      нии;                   │                               ║

║ DE - координата X конца ли- │                               ║

║      нии;                   │                               ║

║ L  - код цвета;             │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 8│ LINX   │ Вывод линии с инверсией                       ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - координата Y конца ли- │                               ║

║      нии;                   │                               ║

║ DE - координата X конца ли- │                               ║

║      нии;                   │                               ║

╚═════════════════════════════╧═══════════════════════════════╝

 

╔════╤════════╤═══════════════════════════════════════════════╗

║A= 9│ LINP   │ Вывод пунктирной линии                        ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - координата Y конца ли- │                               ║

║      нии;                   │                               ║

║ DE - координата X конца ли- │                               ║

║      нии;                   │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=10│ SETLM  │ Установка режима вывода пунктирной линии      ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C - код режима:             │                               ║

║ C2 - признак инверсии;      │                               ║

║ C1,C0 - режим наложения:    │                               ║

║      00 - с полной заменой; │                               ║

║      01 - по OR;            │                               ║

║      10 - по AND;           │                               ║

║      11 - по XOR;           │                               ║

║ HL - маска линии;           │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=11│ GETLM  │ Получение режима вывода пунктирной линии      ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C - код режима;               ║

║                             │ HL - маска линии;             ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=12│ RECTAN │ Вывод прямоугольника (рамки) заданным цветом  ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - Y одного из углов;     │ "CY" - прямоугольник вне окна ║

║ DE - X одного из углов;     │                               ║

║ L  - код цвета;             │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=13│ RECTXR │ Вывод прямоугольника (рамки) инверсией /XOR/  ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - Y одного из углов;     │ "CY" - прямоугольник вне окна ║

║ DE - X одного из углов;     │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=14│ BAR    │ Вывод столбца, закрашенного заданным цветом   ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - Y одного из углов;     │ "CY" - столбец вне окна       ║

║ DE - X одного из углов;     │                               ║

║ L  - код цвета;             │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=15│ CIRCLE │ Вывод окружности заданным цветом              ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - координата Y центра;   │                               ║

║ DE - координата X центра;   │                               ║

║ H  - радиус по X;           │                               ║

║ L  - код цвета;             │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=16│ FILSHP │ Заполнение ограниченной области               ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - координата Y начала;   │ "CY" - начальная точка нахо-  ║

║ DE - координата X начала;   │        дится вне окна         ║

║ H  - код цвета границы;     │                               ║

║ L  - код цвета заполнения;  │                               ║

╚═════════════════════════════╧═══════════════════════════════╝

  

╔════╤════════╤═══════════════════════════════════════════════╗

║A=17│ SETFM  │ Установить режим заполнения                   ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ C  - код режима:            │                               ║

║      0 - вверх/вниз;        │                               ║

║      1 - вправо/влево;      │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=18│ GETFM  │ Получить режим заполнения                     ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ C  - код режима:              ║

║                             │      0 - вверх/вниз;          ║

║                             │      1 - вправо/влево;        ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=19│ GETIMA │ Перенос спрайта с экрана в буфер              ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - координата Y спрайта;  │ "CY","Z"  - выход за пределы  ║

║ DE - координата X спрайта;  │             окна;             ║

║ H  - высота спрайта;        │ "CY","NZ" - переполнение бу-  ║

║ L  - ширина спрайта;        │             фера.             ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=20│ PUTIMA │ Перенос спрайта из буфера на экран            ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ BC - координата Y спрайта;  │ "CY","Z"  - выход за пределы  ║

║ DE - координата X спрайта;  │             окна;             ║

║ H  - высота спрайта;        │ "CY","NZ" - выход за пределы  ║

║ L  - ширина спрайта;        │             буфера;           ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=21│ SETIBF │ Установка адреса буфера для сохранения спрайта║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ CBED - номера сегментов ОЗУ │                               ║

║        для сохранения;      │                               ║

║ HL - адрес начала буфера в  │                               ║

║      сегментах;             │                               ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=22│ GETIBF │ Получение адреса буфера для сохранения спрайта║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ CBED - номера сегментов ОЗУ   ║

║                             │        для сохранения спрайта;║

║                             │ HL - начальный адрес разме-   ║

║                             │      щения данных в сегмен-   ║

║                             │      тах  (во всех одинако-   ║

║                             │      вый).                    ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A=23│ GETILN │ Определение длины буфера для спрайта          ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║                             │ DE - длина буфера (для всех   ║

║                             │      сегментов одинакова)     ║

╚═════════════════════════════╧═══════════════════════════════╝

 

  3. ВЕКТОР ДИНАМИЧЕСКОГО РАСПРЕДЕЛЕНИЯ ОЗУ  MEMORY (0F82DH)

  ----------------------------------------------------------

╔════╤════════╤═══════════════════════════════════════════════╗

║A= 0│ INIMEM │ Инициализация динамической памяти             ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ DE - адрес ТОС с заполненны-│ A - код завершения:           ║

║      ми последними 6 байта- │   0 - ССО инициализирован ус- ║

║      ми; должен быть создан │       пешно;                  ║

║      СНС и зарезервирована  │   2 - переполнение ССО;       ║

║      память под ССО;        │   3 - повторный сегмент в СНС;║

║                             │   4 - недоп.номер сегмента;   ║

║                             │   5 - недопустимая длина СНС. ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 1│ CHKMEM │ Проверка занятости области памяти             ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ DE - адрес ТОС;             │ A - код завершения:           ║

║ HL - адрес ТОО с параметрами│   0 - указанная область пол-  ║

║      области;               │       ностью свободна;        ║

║                             │   1 - область полностью занята║

║                             │       или вообще отсутствует в║

║                             │       системе;                ║

║                             │   2 - область занята частично;║

║                             │   3 - недопустимое значение   ║

║                             │       размерности области в   ║

║                             │       ТОО (вне диапазона 1-4).║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 2│ MRKMEM │ Принудительное выделение области памяти       ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ DE - адрес ТОС;             │ A - код завершения:           ║

║ HL - адрес ТОО с параметрами│   0 - указанная область выде- ║

║      области, для которой   │       лена успешно и переведе-║

║      необходимо установить  │       на в разряд занятых;    ║

║      признак занятости;     │   1 - указанная область уже   ║

║                             │       полностью занята или    ║

║                             │       вообще отсутствует в    ║

║                             │       системе;                ║

║                             │   2 - область занята частично;║

║                             │   3 - недопустимое значение   ║

║                             │       размерности области в   ║

║                             │       ТОО (вне диапазона 1-4);║

║                             │ 255 - нарушена целостность    ║

║                             │       системы.                ║

╠════╤════════╤═══════════════╧═══════════════════════════════╣

║A= 3│ GETMEM │ Выделение памяти по запросу                   ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ DE - адрес ТОС;             │ A - код завершения:           ║

║ HL - адрес выходной ТОО с   │   0 - указанная область выде- ║

║      первыми тремя заполнен-│       лена успешно;           ║

║      ными байтами (размер-  │   1 - нет свободной памяти    ║

║      ностью и длиной);      │       для выделения требуемой ║

║                             │       области;                ║

║                             │   2 - переполнение ССО;       ║

║                             │   3 - недопустимое значение   ║

║                             │       размерности области в   ║

║                             │       ТОО (вне диапазона 1-4);║

║                             │ 255 - нарушена целостность.   ║

║                             │ При A=0 полностью формируется ║

║                             │ ТОО с параметрами области.    ║

╚═════════════════════════════╧═══════════════════════════════╝

  

╔════╤════════╤═══════════════════════════════════════════════╗

║A= 4│ FREMEM │ Освобождение указанной области памяти         ║

╟────┴────────┴───────────────┬───────────────────────────────╢

║ DE - адрес ТОС;             │ A - код завершения:           ║

║ HL - адрес ТОО освобождаемой│   0 - указанная область осво- ║

║      области;               │       бождена успешно;        ║

║                             │   1 - указанная область не    ║

║                             │       была ранее выделена     ║

║                             │       (является полностью или ║

║                             │       частично свободной);    ║

║                             │   2 - переполнение ССО;       ║

║                             │   3 - недопустимое значение   ║

║                             │       размерности области в   ║

║                             │       ТОО (вне диапазона 1-4);║

║                             │   4 - недопустимый номер сег- ║

║                             │       мента в ТОО (отсутству- ║

║                             │       ет в СНС);              ║

║                             │ 255 - нарушена целостность    ║

║                             │       системы.                ║

╚═════════════════════════════╧═══════════════════════════════╝

       ПРИМЕЧАНИЕ:

     -----------

      СНС - список номеров сегментов ОЗУ, используемых в системе динамического распределения памяти;

      ССО - список свободных областей памяти, который отслеживается системой (каждый элемент списка состоит из 5 байт и содержит длину свободной области, адрес ее начала в сегменте и номер сегмента, в котором находится свободная область);

     ТОС - таблица описания системы распределения памяти,  состоящая из 7 байт: текущей длины ССО (1 байт), максимальной длины ССО (1 байт),  адреса размещения ССО в ОЗУ (2 байта),  длины СНС (1 байт) и адреса размещения СНС в ОЗУ (2 байта).  ТОС формируется один раз в момент инициализации системы вместе с СНС и

ССО.

     ТОО - таблица описания распределяемой области памяти, имеющая длину  от 6 до 9 байт:  размерность области 1..4 (1 байт), длина области 1..4000H (2 байта),  начальный  адрес  области  в пределах сегмента 0..3FFFH (2 байта) и номера сегментов ОЗУ,  в которых расположены плоскости области (1..4 байта в зависимости от размерности области). ТОО используется для указания параметров области,  с которой необходимо выполнить операцию распределения памяти.

                                                 Приложение 6

            УПРАВЛЯЮЩИЕ КОДЫ ДРАЙВЕРА ДИСПЛЕЯ "TV-PRO"

           ==========================================

                      для вектора 0F809H

    07H - BELL     (звуковой сигнал);

   08H - LEFT     (курсор влево);

   09H - TAB      (табуляция на 8);

   0AH - LF       (перевод строки, ПС);

   0CH - CLS+HOME (очистка окна и курсор в левый верхний угол);

   0DH - CR       (возврат каретки, ВК);

   10H - CTRL     (префикс перед символами с кодами 00-1FH);

   18H - RIGHT    (курсор вправо);

   19H - UP       (курсор вверх);

   1AH - DOWN     (курсор вниз);

   1BH - ESC      (начало ESC-последовательности, АР2);

   1FH - CLS+HOME (очистка окна и курсор в левый верхний угол);

  

                   ESC-ПОСЛЕДОВАТЕЛЬНОСТИ

 

   ESC '2' - вкл. автоперевод при выводе в посл.позицию строки;

   ESC '3' - выкл.автоперевод при выводе в посл.позицию строки;

   ESC '4' - вкл. скроллинг при выводе LF в последней строке;

   ESC '5' - выкл.скроллинг при выводе LF в последней строке;

   ESC '6' - включение  инверсии символов;

   ESC '7' - выключение инверсии символов;

   ESC '8' - включение  подчеркивания символов (курсором);

   ESC '9' - выключение подчеркивания символов;

   ESC ':' - включение  непрерывного отображения курсора в TVC;

   ESC ';' - выключение отображения курсора;

   ESC '<' - включение  мигания курсора при вводе в KBRD;

   ESC '=' - выключение мигания курсора при вводе в KBRD;

   ESC 'A' - UP    (курсор вверх);

   ESC 'B' - DOWN  (курсор вниз);

   ESC 'C' - RIGHT (курсор вправо);

   ESC 'D' - LEFT  (курсор влево);

   ESC 'E' - CLS   (очистка окна);

   ESC 'F',C1,C2 - уст.цветов фона C1 и изображения C2;

   ESC 'H' - HOME     (курсор в левый верхний угол окна);

   ESC 'J' - стирание текста от курсора до конца окна;

   ESC 'K' - стирание текста от курсора до конца строки;

   ESC 'L' - вставка строки;

   ESC 'M' - удаление строки;

   ESC 'R',Byte  - установка толщины курсора;

   ESC 'S',Num   - уст.номера доступного и видимого экранов;

   ESC 'T',Pal   - установка палитры видимого экрана;

   ESC 'U',Mode  - уст.режима доступного и видимого экранов;

   ESC 'V',Flag  - вкл./выкл. изображения видимого экрана;

   ESC 'Y',Lin+20H,Col+20H - уст.курсора в позицию Col,Lin.

                                                   Приложение 7

  

       ТАБЛИЦА СООТВЕТСТВИЯ ДЕЙСТВИЙ УПРАВЛЯЮЩИХ КЛАВИШ

                       КЛАВИАТУРЫ РК-86

                  (И МС7007 В СТАРОМ РЕЖИМЕ)

  

┌───────────┬───────────────────────────────────────────────┐

│ Нажатые   │        Режим клавиатуры (кодировка)           │

│ клавиши   ├───────────┬───────────┬───────────┬───────────┤

│           │   АЛТ     │   КОИ-8   │КОИ-7 / Н2 │КОИ-7 /Н0,1│

├───────────┼───────────┴───────────┴───────────┼───────────┤

│  РУС/ЛАТ  │Переключение с фиксацией РУС/ЛАТ,  │Перекл. с  │

│  (ФИКС)   │кроме спецсимволов                 │фик.БОЛ/МАЛ│

│           │                                   │кроме спец.│

├───────────┼───────────────────────┬───────────┼───────────┤

│ CC+СИМВОЛ │Переключение без фикса-│Перекл.без │Перекл.без │

│ (SHIFT+   │ции БОЛ/МАЛ, спецсимво-│фик.РУС/ЛАТ│фик.БОЛ/МАЛ│

│    СИМВОЛ)│лов, наборов псевдогр. │и спецсимв.│и спецсимв.│

├───────────┼───────────────────────┼───────────┼───────────┤

│  УС+СС    │Переключение с фикса-  │Перекл. с  │Перекл. с  │

│  (УПР+    │цией БОЛ/МАЛ, наборов  │фик.РУС/ЛАТ│фик.БОЛ/МАЛ│

│     SHIFT)│псевдогр.,кроме спец.  │кроме спец.│кроме спец.│

├───────────┼───────────────────────┼───────────┴───────────┤

│* УС+N     │Переключение с фикса-  │           -           │

│(УПР+N,ГРФ)│цией в псевдографику   │                       │

├───────────┼───────────────────────┼───────────────────────┤

│* УС+О     │Переключение с фикса-  │           -           │

│(УПР+O,АЛФ)│цией в буквен. режим   │                       │

├───────────┼───────────────────────┴───────────────────────┤

│ УС+БУКВА  │Формирование управляющих кодов независимо от   │

│(УПР+БУКВА)│регистра и алфавита                            │

└───────────┴───────────────────────────────────────────────┘

  

 Примечание: значком "*" отмечены комбинации клавиш,  которые

             могут быть перепрограммированы с помощью вектора

             KBCTL (0F806H).

       ТАБЛИЦА СООТВЕТСТВИЯ ДЕЙСТВИЙ УПРАВЛЯЮЩИХ КЛАВИШ

               КЛАВИАТУРЫ МС7007 В НОВОМ РЕЖИМЕ

 

┌───────────┬───────────────────────────────────────────────┐

│ Нажатые   │        Режим клавиатуры (кодировка)           │

│ клавиши   ├───────────┬───────────┬───────────┬───────────┤

│           │   АЛТ     │   КОИ-8   │КОИ-7 / Н2 │КОИ-7 /Н0,1│

├───────────┼───────────┴───────────┴───────────┴───────────┤

│ ФИКС      │                       -                       │

├───────────┼───────────────────────────────────┬───────────┤

│ АЛФ+БУКВА │Переключение без фиксации РУС/ЛАТ, │     -     │

│           │кроме спецсимволов                 │           │

├───────────┼───────────────────────────────────┼───────────┤

│ АЛФ+ФИКС  │Переключение с фиксацией РУС/ЛАТ,  │Перекл. с  │

│           │кроме спецсимволов                 │фик.БОЛ/МАЛ│

│           │                                   │кроме спец.│

├───────────┼───────────────────────┬───────────┴───────────┤

│ ГРАФ+БУКВА│Переключение без фикса-│           -           │

│           │ции ГРАФ/БУКВЫ         │                       │

├───────────┼───────────────────────┼───────────────────────┤

│ ГРАФ+ФИКС │Переключение с фикса-  │           -           │

│           │цией ГРАФ/БУКВЫ        │                       │

├───────────┼───────────────────────┼───────────┬───────────┤

│ SHIFT+    │Переключение без фикса-│Перекл.без │Перекл.без │

│   СИМВОЛ  │ции БОЛ/МАЛ, спецсимв.,│фик.РУС/ЛАТ│фик.БОЛ/МАЛ│

│           │наборов псевдографики  │и спецсимв.│и спецсимв.│

├───────────┼───────────────────────┼───────────┼───────────┤

│ SHIFT+ФИКС│Переключение с фикса-  │Перекл. с  │Перекл. с  │

│           │цией БОЛ/МАЛ, наборов  │фик.РУС/ЛАТ│фик.БОЛ/МАЛ│

│           │псевдографики, кроме   │кроме спец.│кроме спец.│

│           │спецсимволов           │           │           │

├───────────┼───────────────────────┴───────────┴───────────┤

│ УПР+БУКВА │Формирование управляющих кодов независимо от   │

│           │регистра и алфавита                            │

└───────────┴───────────────────────────────────────────────┘

 

             РАЗМЕЩЕНИЕ ПСЕВДОГРАФИЧЕСКИХ СИМВОЛОВ

                 (ФРАГМЕНТ КЛАВИАТУРЫ МС7007)

 

     ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐

     │┌ ╔│┬ ╦│┐ ╗│╒ ╓│╤ ╥│╕ ╖│ї ░│° ▀│Ї ▒│· √│─ ═│   │ё Ё│

     └┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┘

      │├ ╠│┼ ╬│┤ ╣│╞ ╟│╪ ╫│╡ ╢│ў ▌│  ■│Ў ▐│№ ¤││ ║│

      └┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┘

       │└ ╚│┴ ╩│┘ ╝│╘ ╙│╧ ╨│╛ ╜│Є ▓│∙ ▄│є █│

       └───┴───┴───┴───┴───┴───┴───┴───┴───┘

 *** ORIONSOFT ***

 

 

 

Купить платы, наборы микросхем на Орион-128, КР565РУ5В, КР565ру7В, к565ру5г AU, к565ру7г Au в позолоте, куплю микросхемы, Z80, микропроцессоры и микроконтроллеры

 

Полезные и интересные статьи

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