формацией по адресным шинам и шинам данных. Для обращения к плате используется ее адрес port% (число от 0 до 65535). Выдача команд и данных в плату производится процедурой OUT port%, data% (10.4)

Где: data% —числовое выражение (байт от 0 до 255), поскольку плата обычно содержит множество регистров, значение этого байта может задавать адрес регистра, записывае в регистр данные или команду, которая должна быть исполнена.

Чтение данных, выдаваемых платой, производится функцией INP (port%) (10.5).

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

Гораздо легче (и безопаснее для системных программ) воспользоваться готовыми драйверами, обеспечивающими взаимодействие с внешним устройством на уровне прерываний MS DOS. В этом случае необходимо составить подпрограмму на языке Ассемблера и обращаться к ней при помощи процедуры CALL ABSOLUTE. В качестве примера в книге рассмотрена подпрограмма работы с мышью.

3.11. ПРОГРАММИРОВАНИЕ ПРЕРЫВАНИЙ

Кроме передачи управления процедурам из заданного места в тексте программы язык QBasic предоставляет возможность вызова подпрограмм по некоторым событиям, то -есть программист имеет возможность запланировать реакцию программы на ожидаемые с некоторой вероятностью события. Конечно можно было бы ввести в программу цикл с ожиданием события, но при этом она уже не сможет делать ничего кроме проверки наступления этого события.

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

ON event GOSUB label (11.1)

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

event ON (11.2). Отслеживание события может быть приостановлено процедурой