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


Использование функций драйвера для проигрывания VOC-файлов - часть 4


Драйвер должен быть инициализирован прежде, чем мы сможем его использовать. Это очевидное требование. Делать это мы должны с помощью функции 3, «Инициализировать драйвер». Листинг 9.3 содержит текст программы этой функции.

Листинг 9.3. Инициализация драйвера.

int Voc_Init_Driver(void)

{

// инициализация драйвера функция возвращает слово состояния

int status;

_asm

{

mov bx,3        ; функция инициализации драйвера имеет номер 3

call driver_ptr ; вызов

драйвера

mov status,ax   ; сохранение номера версии

} // конец ассемблерной вставки

// возвратить слово состояния

printf("\nDriver Initialized");

return(status);

} // конец

функции

Другая важная функций сообщает драйверу адрес переменной для передачи слова cостояния операции. Текст программы, которая устанавливает эту переменную (я назвал ее ct_voice_status), содержится в Листинге 9.4.

Листинг 9.4. Установка переменной слова состояния драйвера.

Voc Set_Status_Addr(char _far *status)

{

unsigned segm, offm;

segm = _FP_SEG(status);

offm = _FP_OFF(status) ;

asm{

mov bx,5        ; функция задания переменной слова состояния

; имеет номер 5

mov es,segm     ; в регистр ES

загружается сегмент переменной

mov di,offm   ; в регистр DI

загружается смещение переменной

call driver_ptr ; вызов

драйвера

} // конец ассемблерной вставки

} // конец функции

Наконец, посмотрим реализацию функции 6, «Начать вывод», которая используется для проигрывания звука, хранящегося в памяти. Листинг 9.5 содержит текст этой программы.

Листинг 9.5. Проигрывание VОС-файла из памяти.

int Voc_Play_Sound(unsigned char far *addr,

unsigned char header_length)

{

// проигрывает загруженный в память VOC-файл

unsigned segm, offm;

segm = _FP_SEG(addr);

offm = _FP_OFF(addr) + header_length;

_asm{

mov bx,6        ; функция 6 - воспроизведение VOC-файла

mov ax,segm

mov es,ax       ; в регистр ES

загружается сегмент

mov di,offm     ; в регистр DI загружается смещение

call driver_ptr; вызов

драйвера

} // конец ассемблерной вставки




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