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


Частота


4DAEh

19886

60Hz

965C

39722

30Hz

E90B

59659

20Hz

Таким образом, нам следует перепрограммировать счетчик 0 таким образом, чтобы он генерировал прерывания с более подходящей для нашей игры частотой - так, чтобы наша игра могла контролировать события чаще чем 18.2 раза в секунду.

Давайте посмотрим, каким образом можно задать соответствующее значение счетчика. Нас интересуют порты ввода/вывода 40h и 43h (все, о чем мы будем говорить, относится к ним): счетчик 0 и соответствующий управляющий регистр. Значения битов управляющего регистра, показаны в таблице 12.4.

Из таблицы 12.4 видно, что в нашем распоряжении много параметров. Впрочем, нам сейчас все они не нужны, нам надо всего-навсего изменить начальное значение счетчика 0. При этом значения других битов должны быть следующими:

§

Режим работы - 2, генератор частоты;

§          Метод подсчета - двоичный;

§          Запись регистра счетчика осуществляется при помощи операции «Прочитать/записать младший байт, а затем старший байт счетчика».

Таким образом, все что мы должны сделать, это записать управляющее слово в порт 43h, а затем выполнить две операции записи в порт 40h. В ходе первой операции записи мы установим значение младшего байта нового значения счетчика, а при второй — значение старшего байта. В том, где какие байты аппаратные средства разберутся сами, поэтому вам об этом волноваться не надо. В Листинге 12.5 приведен текст функции, программирующей таймер.

Листинг 12.5. Перепрограммируем системные часы (OUTATIME.C).

// ВКЛЮЧАЕМЫЕ ФАЙЛЫ /////////////////////////////////////

#include<stdio.h>

#include<conio.h>

// ОПРЕДЕЛЕНИЯ //////////////////////////////////////////

#define CONTROL_8253 0х43 // управляющий регистр 6253

#define CONTROL_WORD

0хЗС // управляющее слово, задающее режим 2,

// двоичный подсчет, запись

// младший/старший байт

#define COUNTERED     0х40 // счетчик




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



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