Секреты программирования игр


Чтение позиции джойстика


Чтение позиции джойстика — весьма утомительная, но вполне выполнимая задача. Все, что нам надо сделать, это послать джойстику простую команду. Это делается записью значения 0 в порт 201h. Затем мы ждем, когда установится нужный нам бит (0-3) порта джойстика. Во время ожидания мы должны включить счетчик. Когда нужный бит установлен, то число, которое мы насчи­таем, и есть позиция джойстика. Листинг 3.2 показывает код, который все это делает.

Листинг 3.2. Чтение позиции джойстика.

unsigned int Joystick{unsigned char stick)

{

asm {

cli                      ;запретить прерывания

mov ah,byte ptr stick    ;замаскировать АН,

                         ;чтобы выбрать джойстик

хоr аl,аl                ;обнулить AL

xor cx,cx                ;обнулить СХ

mov dx,JOYPORT           ;используем DX для ввода и вывода

out dx,al

discharge:

in al,dx                 ;читаем данные из порта

test al,ah               ;изменился ли бит запроса?

loopne discharge         ;если нет, повторяем чтение

sti                      ;разрешить прерывания

хог ах, ах               ;обнулить АХ

sub ах,сх,               ;теперь АХ содержит позицию джойстика

} // конец ассемблерного блока

// возвращаемое значение содержится в АХ

} // конец функции

(Кстати, встроенный ассемблер мне все больше и больше нравится.) Программа достаточно проста: при запуске программа обнуляет регистры АХ и СХ;

· Затем программа опрашивает порт джойстика;

·       Далее подсчитывается количество циклов в ожидании, пока установится нужный бит;

·       Подсчет выполняется в регистре СХ с помощью инструкции LOOPXX (в данном случае используется команда LOOPNE);

·       Инструкция TEST определяет установку бита;

·       Когда нужный бит установлен, программа выходит из цикла. Результат передается вызывающей программе, в регистре АХ.

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




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



Книжный магазин