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

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

ВИДЕОИГРЫ. ПЕРВЫЕ ШАГИ... | ОСНОВЫ ЯЗЫКА АССЕМБЛЕРА | Листинг 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. Quot;CXR" - (аналогично нажатию F7): случайное позиционирование с чтением
  3. Аудирование, чтение, говорение
  4. Быстрое чтение и артикуляция несовместимы
  5. В скобках указано предпочтение данной марки в процентном соотношении из ряда предложенных аналогов).
  6. Выбор кнопок
  7. Выразительное чтение исходного текста

#define JOYPORT 0х201 // порт джойстика = 201h

#define BUTTON_1_A 0х10 // джойстик А, кнопка 1

#define BUTTON_1_B 0х20 // джойстик А, кнопка 2

#define BUTTON_2_A 0х40 // джойстик В, кнопка 1

#define BUTTON_2_B 0х80 // джойстик В, кнопка 2

#define JOYSTICK_1_X 0х01 // джойстик А, ось,Х

#define JOYSTICK_1_Y 0х02 // джойстик А, ось Y

#define JOYSTICK_2_X 0х04 // джойстик В, ось Х

#define JOYSTICK_2_Y 0х08 // джойстик В, ось Y

#define JOY_1_CAL 1 // эта команда калибрует джойстик А

#define JOY_2_CAL 2 // эта команда калибрует джойстик В

unsigned char Buttons(unsigned char button)

(

// эта функция читает статус кнопок джойстика

// сбрасываем содержимое порта 201h

outp (JOYPORT, 0);

// инвертируем прочитанное из порта значение и комбинируем

// его с маской

return (~inp(JOYPORT) & button);

}

unsigned char Buttons_Bios (unsigned char button)

{ // чтение кнопок через обращение к BIOS

union _REGS inregs, outregs;

inregs.h.ah == 0х84; // функция джойстика 84h

inregs.x.dx = 0х00; // подфункция 0h - чтение кнопок

// вызов BIOS

_int86 (0х15, &inregs, &outr.egs);

// инвертируем полученное значение и комбинируем его с маской

return(~outregs.h.al) & button);

}

Теперь посмотрим на детали Листинга 3.1.

§ Функция Buttons() и Buttons_Bios() возвращают одинаковый результат. Buttons() посылает 0 в порт джойстика (это делается для того, чтобы инициировать порт) и затем читает данные;

§ Как только данные получены, мы маскируем младшие четыре бита и инвертируем четыре старших;

§ Этот листинг включает также определение констант (#define), что делает интерфейс более удобным;

§ Buttons_Bios() для чтения джойстика использует BIOS. Как только выполняется вызов, результат помещается в регистр AL. В принципе, для таких простых вещей, как кнопки, я использую прямой доступ к портам. Я уже говорил, что использование функций BIOS более медлительно. Правда, по отношению к джойстику это, может быть, и не самый плохой подход. Если вы хотите читать с помощью BIOS - читайте.

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

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


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


<== предыдущая страница | следующая страница ==>
ОСНОВЫ РАБОТЫ С УСТРОЙСТВАМИ ВВОДА| Листинг 3.2. Чтение позиции джойстика.

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