Глава 7. Ввод/вывод.

Раздел 3. Использование специальных устройств ввода/вывода.

7.3.2 Чтение позиции светового пера.

Хотя очень немногие компьютеры оснащены световым пером, тем не менее это одно из немногих вспомогательных устройств, которое поддерживается как оборудованием, так и операционной системой. Световое перо работает с помощью небольшого оптического детектора на кончике пера. По ходу сканирования экрана электронным лучом инициируется импульс оптического детектора, когда пучок достигает точки экрана, над которой находится перо. Время возникновения этого импульса, относительно сигналов горизонтальной и вертикальной синхронизации, позволяет определить позицию светового пера.

Средний уровень.

Функция 4 прерывания 10H BIOS сообщает текущую позицию светового пера. У нее нет входных регистров. При возврате AX содержит 0, если перо не включено и 1 - если получены новые значения для его позиции. Возвращается два набора координат, позиции точки и позиции строки и столбца. Позиции символа содержатся в DX, причем DH содержит строку (0-24), а DL - столбец (0-79). Позиция точки содержится в CH и BX, причем CH содержит вертикальную координату (0-199), а BX - горизонтальную (0-319 или 0-639, в зависимости от режима терминала).
;---читаем и запоминаем положение светового пера
MOV AH,4 ;номер функции
INT 10H ;прерывание BIOS
CMP AH,1 ;новая позиция?
JE NO_READING ;если нет, то уходим
MOV COL,BX ;сохраняем горизонтальную координату
MOV CL,CH ;помещаем вертикальную координату
MOV CH,0 ;в CX
MOV ROW,CX ;сохраняем вертикальную координату

Hизкий уровень.

По своей сути световое перо является расширением видеосистемы и как таковое использует микросхему контроллера CRT 6845. Позиция светового пера дается одним 2-хбайтным значением, хранящимся в регистрах 10H (старший байт) и 11H (младший байт) микросхемы. В {4.1.1} объясняется как читать регистры микросхемы. Посмотрите пример. Порт с адресом 3DCH устанавливает задвижку светового пера, а с номером 3DBH - сбрасывает ее.
;---проверка светового пера и чтение его позиции
MOV DX,3DAH ;указываем на регистр статуса
IN AL,DX ;получаем информацию
TEST AL,4 ;проверяем выключатель
JNZ NOT_SET ;на выход
TEST AL,2 ;проверяем триггер
JZ NOT_SET ;на выход
SUB DX,7 ;указываем на регистр адреса 6845
MOV AL,10H ;запрос на старший байт позиции пера
OUT DX,AL ;посылаем запрос
INC DX ;указываем на регистр данных 6845
IN AL,DX ;получаем значение
XCNG AH,AL ;запоминаем его в AH
DEC DX ;возвращаемся к адресному регистру
MOV AL,11H ;теперь хотим получить младший байт
OUT DX,AL ;посылаем запрос
INC DX ;назад к регистру данных
IN AL,DX ;теперь это значение в AX


<~-7.3.1 Чтение/запись с кассетного магнитофона.
Содержание
7.3.3 Получение аналогового ввода через игровой порт.-~>

Сайт управляется системой uCoz