Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Листинг 3.1. Чтение кнопок джойстика#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 показывает код, который все это делает.
|