Программирование игр для Windows. Советы профессионала

       

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


Чтение позиции джойстика — весьма утомительная, но вполне выполнимая задача. Все, что нам надо сделать, это послать джойстику простую команду. Это делается записью значения 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 она обладает лучшей совместимостью, легче переносима и умеет производить само­калибровку. Я думаю, что и вы будете пользоваться ею.



Содержание раздела