Assembler - язык неограниченных возможностей


Средства BIOS - часть 3


    Бит 7: SysRq нажата

    Бит 6: CapsLock нажата

    Бит 5: NumLock нажата

    Бит 4: ScrollLock нажата

    Бит 3: Правая Alt нажата

    Бит 2: Правая Ctrl нажата

    Бит 1: Левая Alt нажата

    Бит 0: Левая Ctrl нажата

Оба этих байта постоянно располагаются в памяти, так что вместо вызова прерывания часто удобнее просто считывать значения напрямую. Более того, в эти байты можно записывать новые значения, и BIOS изменит состояние клавиатуры соответственно:

; nolock.asm ; самая короткая программа для выключения NumLock, CapsLock и ScrollLock ; запускать без параметров .model tiny .code org 100h ; СОМ-файл. АХ при запуске СОМ-файла без параметров ; в командой строке всегда равен 0 start: mov ds,ax ; так что теперь DS = 0 mov byte ptr ds:0417h,al ; байт состояния клавиатуры 1=0 ret ; выход из программы end start

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

Помимо этих двух байт BIOS хранит в своей области данных и весь клавиатурный буфер, к которому также можно обращаться напрямую. Буфер занимает 16 слов с 0h:041Eh no 0h:043Dh включительно, причем по адресу 0h:041Ah лежит адрес (ближний) начала буфера, то есть адрес, по которому располагается следующий введенный символ, а по адресу 0h:041Ch лежит адрес конца буфера, так что если эти два адреса равны, буфер пуст. Буфер действует как кольцо: если начало буфера — 043Ch, а конец — 0420h, то в буфере находятся три символа по адресам 043Ch, 041Eh и 0420h. Каждый символ хранится в виде слова — того же самого, которое возвращает функция 10h прерывания INT 16h. В некоторых случаях (если) буфер размещается по другим адресам, тогда адрес его начала хранится в области данных BIOS по адресу 0480h, а конца — по адресу 0482h. Прямой доступ к буферу клавиатуры лишь немногим быстрее, чем вызов соответствующих функций BIOS, и для приложений, требующих максимальной скорости, таких как игры или демо-программы, используют управление клавиатурой на уровне портов ввода-вывода.





Начало  Назад  Вперед