Н. Арбузов
Совет
Недавно прочитал в вашем журнале (8/1990) в статье Д.Ю. Усенкова "О некоторых периферийных устройствах для БК 0010" об устройстве ввода УВК-1 (мышь) и решил купить. Купил, подключил, набрал программу, приводимую в инструкции по эксплуатации, - мышь работает. Но как к ней обращаться программно, в инструкции не написано. Надо самим разбираться в приведённой программе. Для тех, кто знает коды, это просто. А для тех, кто не знает? Что им делать?
Чтобы они не мучились, хочу дать совет: Надо сначала инициировать порт ввода-вывода, заслав туда число, скажем, десять (в восьмеричной), только затем в ячейке с адресом 1777148 появляются коды поступающих от "мыши" сигналов. Привожу программу обращения к УВК.
10 X%=100% ' задание начальной координаты по X 20 Y%=100% ' задание начальной координаты по Y 30 C%=1% ' задание начального цвета 40 P%=&0177714 ' инициализация 50 L%=PEEK(P%) ' порта 60 POKE P%,0% ' ввода 70 POKE P%,&O10 ' вывода 80 IF L%=&01 THEN Y%=Y%-1% ' определения 90 IF L%=&04 THEN Y%=Y%+1% ' кода 100 IF L%=&010 THEN X%=X%-1% ' поступившего 110 IF L%=&02 THEN X%=X%+1% ' от 120 IF L%=&040 THEN C%=1% ' мыши 130 IF L%=&0100 THEN C%=0% 140 IF L%=&0140 THEN END 150 PSET (X%, Y%), C% ' установка точки 160 PSET (X%, y%), C% ' с координатами X, Y 170 GOTO 50
Тут же привожу таблицу кодов, поступающих от мыши
Манипуляция мыши |
Код на порту ввода-вывода |
---|---|
Вверх |
1 |
Вниз |
4 |
Вправо |
2 |
Влево |
108 |
Клавиша ‘Л‘ |
408 |
Клавиша ‘П‘ |
1008 |
Все остальные операции являются суммой предыдущих, например, при одновременном нажатии клавиш ‘Л‘ и ‘П' появляется код 1408, и т.д.
Так же, пользуясь случаем, хочу сказать несколько слов о спрайтах на БЕЙСИКе. В журнале ИНФО (2/1990) говорилось о спрайтах, но там написано, как их помещать в память, а как сделать так, чтобы они перемещались по экрану и не стирали изображения?
Ниже привожу программу, которая позволяет перемещать спрайты размером 8x8 с помощью клавиш управления курсором, не стирая при этом изображения нарисованного до этого.
Конечно, эту программу можно было бы уменьшить, заносить спрайт не прямо непосредственно в программу, а в оператор DATA или в какую-нибудь область ОЗУ, но для простоты и большего быстродействия привожу её не сокращённой.
Эту программу можно переделать на мышь, изменив и вставив некоторые строки...
70 K%=PEEK(&O177714) 71 POKE &O177714,0% 72 POKE &O177714,8%
Вот эта программа:
10 PRINT CHR$(140%)+CHR$(140%) 'установка экрана. 20 FOR Y%=1 TO 20 30 FOR X%=1 TO 26 STEP 6 40 PRINT AT (X%,Y%); "SPRITE;" 50 NEXT X% 60 NEXT Y% 70 K%=PEEK (&O177662) 80 IF K%=8% THEN I%=I%-2% 90 IF K%=25% THEN I%=I%+2 'опрос клавиатуры 100 IF K%=26% THEN I%=I%-128% 110 IF K%=27% THEN I%=I%+128% 120 IF &H5000+I%<&H400 THEN I%=I%+128% ' предохранение от 130 IF &H5000+I%>&H7E00 THEN I%=I%-128% ' наездов спрайта на ОЗУ 140 A1%=PEEK(&H5000+I%) 150 A2%=PEEK(&H5040+I%) 160 A3%=PEEK(&H5080+I%) 'запоминание предыдущего 170 A4%=PEEK(&H50C0+I%) 180 A5%=PEEK(&H5100+I%) 'изображения 190 A6%=PEEK(&H5140+I%) 200 A7%=PEEK(&H5180+I%) 210 POKE &H5000+I%,&HAEAE 220 POKE &H5040+I%,&HABAE 230 POKE &H5080+I%,&HAAEE 240 POKE &H50C0+I%,&HAABE 'запись спрайта на это место 250 POKE &H5100+I%,&HAAEE 260 POKE &H5140+I%,&HABAE 270 POKE &H5180+I%,&HAEAE 280 FOR M=1 TO 20 'пустой 290 NEXT M 'цикл 300 POKE &H5000+I%,&B00 310 POKE &H5040+I%,&B00 320 POKE &H5080+I%,&B00 'стирание спрайта 330 POKE &H50C0+I%,&B00 340 POKE &H5100+I%,&B00 350 POKE &H5140+I%,&B00 360 POKE &H5180+I%,&B00 370 POKE &H5000+I%,A1% 380 POKE &H5040+I%,A2% 390 POKE &H5080+I%,A3% 'запись изображения 400 POKE &H50C0+I%,A4% 410 POKE &H5100+I%,A5% 420 POKE &H5140+I%,A6% 430 POKE &H5180+I%,A7% 440 GOTO 70
Хочу поделиться полезным советом: чтобы лучше работала клавиатура, надо её смазать машинным маслом, после чего кнопки реже заедают, и чтобы с клавиш не стиралось изображение символов, их надо покрыть лаком, желательно мебельным.
Заключение рецензента
Предлагаемые программы представляют интерес для начинающего программиста.
Хотя имеются программы достаточно высокого уровня в кодах для обращения к "мыши" и для создания движущихся без стирания фона спрайтов (например, в статье О.Д. Любутова, серия ВТ 1/1991, с. 33), но для начинающего программиста предлагаемые простые программы на БЕЙСИКе полезны и поучительны. Желающие могут доработать вторую программу с тем, чтобы получить шаг перемещения спрайта не на ширину курсора, а па одну точку.
Ю. В. Кузьмин