Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

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

ОСНОВЫ ЯЗЫКА АССЕМБЛЕРА | Листинг 2.1. Прототип процедуры для MASM 5.0 и более старших версий. | Листинг 2.2. Простая процедура сложения. | Листинг 2.3. Модифицированная версия Add_Int. | Листинг 2.4. Корректировка регистра SP. | Листинг 2.5. Программа Timer. | Листинг 2.7. Ассемблерная часть примера. | Листинг 2.9. Си-функция, тестирующая видеорежим (SETMOPEC.C). | Листинг 2.11, Программа на Си для тестирования программы 2.10 (FILLC.C). | ОСНОВЫ РАБОТЫ С УСТРОЙСТВАМИ ВВОДА |


Читайте также:
  1. III. Чтение инструкции для выпускников
  2. Puc. 2. Позиции ног и рук
  3. Quot;CXR" - (аналогично нажатию F7): случайное позиционирование с чтением
  4. TOUR С IV ПОЗИЦИИ
  5. TOUR С V ПОЗИЦИИ
  6. Аксиома позиции 1 Наша позиция определяет наш подход к жизни
  7. Аксиома позиции 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 она обладает лучшей совместимостью, легче переносима и умеет производить само­калибровку. Я думаю, что и вы будете пользоваться ею.

Калибровка джойстика

Теперь разберемся с калибровкой джойстика. Как я уже говорил ранее, резуль­тат, который мы получим от чтения джойстика в цикле, будет разным на разных ПК. На одних компьютерах значения по оси Х окажется в пределах от 0 до 255, на других - от 0 до 10000.

Таким образом, нам надо нормализовать эти данные или масштабировать их. Стандартным приемом в данных случаях может служить калибровка джой­стика самим игроком в setup'e игры. Во время этой процедуры игрок двигает джойстиком, а программа считывает и запоминает данные калибровки где-ни­будь на диске для дальнейшего использования.

Для того чтобы проанализировать джойстик, программа должна:

§ Найти значения максимального и минимального отклонения по осям Х и Y;

§ Сохранить эту информацию;

§ Использовать полученные данные для выяснения, на какой угол игрок отклонил ручку джойстика.

Например, джойстик был откалиброван и мы обнаружим, что ось Х имеет значения от 0 до 255. Затем, если значение джойстика, например, по координате Х окажется равным 128, то можно с уверенностью сказать, что рукоятка находится в среднем положении (кстати, в процессе калибровки средняя пози­ция также запоминается).

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

Я думаю, что мы уже сказали о джойстиках все. Теперь напишем небольшую программку, в, которой используем функции из Листингов 3.1 и 3.2. При старте она просит игрока:

§ Подвигать джойстиком;

§ Установить джойстик в среднее положение;

§ Понажимать на кнопки.

Затем, программа сохраняет результаты процедуры калибровки в глобальных переменных.


Дата добавления: 2015-07-12; просмотров: 74 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Листинг 3.1. Чтение кнопок джойстика.| Листинг 3.3. Программа работы с джойстиком (JOY.C).

mybiblioteka.su - 2015-2024 год. (0.007 сек.)