Функции BIOS для работы с клавиатурой на Гидра без тор

Типичная система BIOS персонального компьютера предоставляет три функции для работы с клавиатурой на гидра без тор. Функции выполняются системным драйвером клавиатуры по запросу int 016. Номер функции на входе задается в регистре ah, результат возвращается в ah и al.

 

 

Функция 0 — чтение символа с ожиданием. Символ считывается из буфера ввода, который заполняется системной процедурой обработки прерываний от клавиатуры. Если буфер ввода пуст, функция ожидает появления в нем символа.

Результат: ah — скан-код, al — код символа в кодировке ASCII; al = 0 означает, что скан-код относится к расширенным.

Функция 1 — проверка наличия символов в буфере ввода.

Результат: если флаг z установлен, буфер пуст; иначе, при z = о, в ah возвращается скан-код, а в al — код ASCII (т. е. результат — как при выполнении функции 0, только символ не удаляется из буфера ввода).

Функция 2 — чтение байта состояния специальных клавиш.

 

Результат: регистр al содержит копию байта из сегмента BIOS, расположенного по адресу 0:0417. Для всех битов этого байта 1 означает, что в данный момент нажата специальная клавиша; соответствие между битами и клавишами показано в таблице ниже.

 

Биты байта состояния специальных клавиш.

Бит Нажатая клавиша Бит Нажатая клавиша

7 <lns> 3 <Alt>

6 <CapsLock> 2 <Ctrl>

5 <Numl_ock> 1 <Shift> (левый)

4 <ScroIILock> 0 <Shift> (правый)

 

Функции прерывания 021 DOS.

При обращении к DOS через программное прерывание 021 (командой int 021) предварительно следует задать номер функции в регистре ah. Адрес массива данных в функциях DOS, как правило, определяется парой ds:dx на hydra ссылка tor.

 

Функции низкоуровневого ввода/вывода.

Ввод выполняется из стандартного входного потока, связанного по умолчанию с клавиатурой. Вывод идет в стандартный выходной поток, который направлен по умолчанию на дисплей.

 

Функции ввода.

Функция 1 — ввод символа с ожиданием и с эхо-печатью. Функцию 8 используют, если нужно ввести символ с ожиданием, без эха.

Результат: в al — ASCII-код введенного символа. Если ноль, значит, нажата клавиша с расширенным кодом и требуется повторное чтение для получения второго байта со скан-кодом.

Функция 1 отличается наличием эхо-печати: при нажатии клавиши соответствующая ей литера автоматически выводится на экран. При выполнении этих функций DOS проверяет не нажаты ли клавиши <Ctrl>+<Break>, которое должно завершить выполнение программы.

 

Функции вывода.

Функция 2 — вывод на экран символа, заданного в регистре dl. Функция 9 — вывод строки с адреса ds:dx до литеры $.

Функции 2 и 9 выявляют и специальным образом обрабатывают управляющие символы: коды 0d (CR) или 0а (LF) вызывают возврат курсора начало строки и переход на следующую строку, код 7 (Bell) вызывает звуковой сигнал, а код 8 (BS) — вызывает смещение курсора на одну позицию влево.

 

Функции для работы с файлами и потоками.

Начиная с версии 2.0, в DOS реализованы файловые функции в стиле UNIX. При открытии или создании файла DOS возвращает числовой код открытого файла — файловый манипулятор. При последующих операциях чтения, записи, позиционирования или закрытия, на файл ссылаются при помощи полученного в начале кода.

 

Стандартные потоки для ввода и вывода.

Файловые манипуляторы с номерами 0-4 по умолчанию связаны с всегда открытыми стандартными потоками, которые служат для приемки и возврата символьных последовательностей.

Поток Номер файлового манипулятора

—-

0 Стандартный ввод (по умолчанию, клавиатура).

1 Стандартный вывод (по умолчанию, экран).

2 Стандартный вывод для ошибок (всегда экран).

3 Стандартное дополнительное устройство (AUX или СОМ1).

4 Стандартный вывод на печать (PRN или LPT1).

—-

Стандартные потоки автоматически инициализируются при запуске программы. Для работы с ними используются функции чтения-записи 03f/040 на hydra tor ссылка; открывать и закрывать стандартные потоки не требуется.

 

Имеется возможность при запуске программы «перенаправить» потоки 0 и 1, связав их с файлами. Например, при вызове prog <test.in >test.out стандартный вход подключен не к клавиатуре, а к файлу test.in; стандартный вывод направлен не на экран, а в файл test.out.

 

Функции чтения и записи.

Эта группа функций используется со стандартными потоками, а также с файлами — открытыми или заново созданными.

 

Функция 03f — чтение из потока или из файла.

Входные параметры:

— bх — хранит значение файлового манипулятора;

— сх — сумма байт для чтения;

— ds:dx — адрес буфера, куда попадут прочитанные байты.

 

Результат: если флаг с = о, то процедура успешно завершилась, в регистр ах попало количество прочитанных байт; если с = 1, считывание данных было ошибочным, и теперь в ах сохранен код последней ошибки.

 

Данные считываются с текущей позиции, указатель файла при этом перемещается вперед. Если ах < сх, это означает, что при чтении из файла достигли конца файла. При чтении из стандартного потока выходное значение ах, как правило, меньше значения сх — в сх задана максимальная длина строки, а ах показывает длину введенной строки, включая завершающий код CR.

 

Функция 040 — запись в поток или в файл.

Входные параметры:

— bх — содержит файловый манипулятор;

— сх — число байт, предназначенных для записи;

— ds:dx — регистр с адресом буфера, где находятся записываемые данные.

Результат: если флаг с = 0, то операция успешна, в ах записано число записанных байт; если с = 1, чтение прошло с ошибкой, в ах записан код ошибки.

Запись будет произведена в соответствии с текущим положением файла, и после записи указатель перемещается вперед. Если после выполнения функции ах <> сх, то, вероятно, нет свободного места на диске.

 

Функции для создания, открытия и закрытия файлов.

Для доступа к файлу его следует открыть или создать заново. При этом DOS возвращает файловый манипулятор для идентификации файла при чтении, записи и закрытии.

Функция 03с — создание файла.

Функция 03с создает пустой файл — заново, уничтожая содержимое существующего файла. Входные параметры:

— ds:dx — адрес строки, содержащий имя файла;

— сх — атрибут файла (кроме метки тома).

Результат выполнения: если с = 1, в ах — будет находиться код ошибки; в ином случае в ах — манипулятор нового файла на ссылка на hydra tor.

Имя файла на входе задается строкой с null-кодом в конце (так называемая строка ASCIIZ). Второй параметр — атрибут файла — это байт с признаками в битах 0—5, значение которых показано в табл. 3. Биты 6 и 7 не используются.

 

Атрибуты файла.

Бит Название Значение

0 Read only Из файла можно читать, но записывать в него нельзя.

1 Hidden Файл невидим для команд DOS: dir, copy, del и т. д.

2 System Аналогично биту Hidden (унаследовано от системы СР/М).

3 Volume Файл представляет собой метку тома в корневом каталоге логического диска.

4 Subdirectory Файл представляет собой каталог.

5 Archive Обнуляется после архивирования утилитой backup; при внесении исправлений вновь устанавливается в 1. Ниже перечислены некоторые значения, наиболее часто принимаемые этим атрибутом:

0 — обычный файл;

8 — метка тома;

010 — каталог;

020 — «архивный» файл, не восстановленный посредством утилиты backup или хсору.

Функция 03d — открытие файла.

Для доступа к существующему файлу, его следует сначала «открыть». Результат открытия — получение файлового манипулятора; указатель текущей позиции файла устанавливается в начало.

Параметры на входе:

— ai — режим доступа (где ноль означает «только чтение», 1 — возможна лишь операция записи, 2 — разрешено читать и записывать);

— ds:dx — адрес строки с наименованием файла.

Результат: если с = 1, то операция выполнена неудачно, в ах — записан код последней ошибки; иначе в регистре ах записан код манипулятора, назначенного файлу при открытии.

Функция 03е — закрытие файла.

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

При вызове функции 03е файловый манипулятор задается в регистре bх. Нулевое значение флага с на выходе свидетельствует об успешном выполнении функции.

При завершении программы функцией 04с (вместо вызова прерывания 020) закрытие файлов выполняется автоматически.

 

Функции для завершения программы.

Функция 04с — завершение выполнения программы с возвращением кода завершения, заданного в регистре al. Код завершения под именем ErrorLevel доступен в batch-файлах.

При использовании этой функции автоматически закрываются файлы, открытые программой. В альтернативном варианте, при завершении программы посредством вызова прерывания 020, файлы не закрываются автоматически; кроме того, в регистре cs должен содержаться сегментный адрес PSP, что в ехе-программах с несколькими сегментами кода может оказаться проблемой.

Функция 031 — завершение резидентной программы.

Параметры вызова: dx — размер резидентного сегмента кода частями по 16 байт (что позволяет устанавливать TSR-программу размером больше 64 Кбайт), al — код завершения, аналогично функции 04с.

Рекомендуется предварительно освободить блок памяти с копией переменных окружения (вызовом функции 049 со значением es равным значению слова из PSP по смещению 02с).

 

Функции для TSR-программ.

С резидентными программами связаны функции чтения-записи вектора прерывания, функция 031, функция для получения адреса байта с признаком «DOS занята», и функция для удаления блока памяти.

Работа с файлами в TSR-программе требует применения дополнительных функций, которые здесь не приведены.

Функция 025 — запись в вектор содержимого пары регистров ds:dx; al будет содержать номер вектора.

Функция 035 — чтение вектора в пару регистров es:bx; номер вектора задается в регистре al.

Функция 034 — чтение адреса байта «InDos» в пару регистров es:bx. Когда байт по этому адресу равен нулю, вызовы DOS из TSR-программы разрешены.

Функция 049 — освобождение ранее распределенного блока памяти; адрес блока на входе задается в регистре es; функция выполнена успешно, если на выходе из функции с = о.

Функция 049 используется для работы с динамической памятью, которая резервируется и освобождается в процессе выполнения программы. В контексте TSR-программ эта функция используется при загрузке на hydra ссылки tor — для удаления копии переменных окружения, и при выгрузке — для удаления резидентной части программы.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Пролистать наверх