Практикум по среде и языку QBasic____________________ ___ 171

0024 ОЗЕ7 RegDX DW 999 .память для значения DX

xchgM ENDP .конец текста подпрограммы Прежде всего обратите внимание на последнюю команду ret, которая обеспечивает возврат управления вызвавшей ее программе. Без нее ваша программа может "зависнуть" так крепко, что придется произвести "холодный" перезапуск компьютера (то есть выключить, подождать некоторое время и включить вновь). Директивы PROC и ENDP подсказывают транслятору, что это текст подпрограммы, а параметр far сообщает о необходимости использования команд дальнего вызова и возврата из подпрограммы. Смысл всех команд разъяснен в комментариях. Подпрограмма вместе с областью памяти отведенной для обмена параметрами занимает 38 байтов (30 байтов приходится на команды и 8 на числа). Содержимое 18 строк второго столбца и представляет подпрограмму «в кодах», которую нужно будет записать в область данных той программы, которая должна использовать мышь. Для этого удобно использовать шестнадцате-ричное представление данных:

DATA &Н50, SH53, &Н51, SH52, SH1E, &НОЕ, &H1F, &НА1, &Н1Е, &НОО DATA 6HCD, SH33, SH89, SH1E, &Н20, SHOO, &H89, &НОЕ, &Н22, SHOO DATA &H89, 6H16, &H24, SHOO, &H1F, SH5A, SH59, SH5B, SH58, SHCB

Для записи подпрограммы и обмена данными создается массив размером 38 байтов, в который и записываются 30 кодов.

DIM XCHGM (I TO 19) AS INTEGER

'массив для подпрограммы работы с мышью DEF SEG = VARSEG (XCHGM (1) )

'установка сегмента для подпрограммы работы с мышью MYMOUSES = VARPTR(XCHGM(1))

'смещение для подпрограммы работы с мышью FOR i% = 0 ТО 29

'начало цикла записи подпрограммы работы с мышью READ code% 'чтение очередного байта POKE MYMOUSE& + i%, code% 'запись в ОЗУ NEXT i% 'конец цикла записи подпрограммы работы с мышью

Дополним эту программу нижеследующими строками, предназначенными для проверки подпрограммы обращения к драйверу мыши из среды QBasic. При запуске этой программы можно в течение 60 секунд проверить какие числовые данные выдаются драйвером, а затем посмотреть каким образом изображение курсора выделяется на экране.

CLS 'очистка экрана FOR i% = О ТО 7 'начало цикла перебора цветов фона

FOR J% = 0 ТО 15 'начало цикла перебора цветов символа COLOR J%, i% 'изменение цвета PRINT " * "; 'вывод символов

NEXT J% 'конец цикла перебора цветов символа

PRINT : PRINT 'перевод на 2 строки вниз NEXT i% 'конец цикла перебора цветов фона COLOR 7, 0 'восстановление исходных цветов символа и фона XCHGM(16)=1 'номер функции показа курсора CALL ABSOLUTE(MXMOUSES) 'вызов подпрограммы показа курсора