Курсовая работа: Программа воспроизведения произвольного звукового файла с использованием звукового адаптера (формат - wav)
and dx, 0F000h ; выровняем буфер на границу 4K-страницы
add dx, 1000h ; складываем dx и 1000h, необход. для DMA
mov ds, dx
mov dx, 0 ; DS:DX - адрес буфера
int 21h ; чтение файла
pop ds ; выгрузить из стека данные в ds
ret
error_exit: ; если не удалось открыть файл
mov ah, 9 ; AH=09h
mov dx, offset notopenmsg ; DS:DX = адрес сообщения об
; ошибке
int 21h ; вывод строки на экран
int 20h ; конец программы
notopenmsg db 'Could not open file', 0Dh, 0Ah ; сообщение об
; ошибке
db 'Exiting', 0Dh, 0Ah, '$'
open_file endp
Для компиляции будем использовать компилятор и линковщик Tasm и Tlink соответственно:
tasm /m wavdma.asm
tlink /t /x wavdma.obj
Код исходной программы(начало)
В этом примере задействован обычный DMA-режим работы, в котором звуковая плата проигрывает участок данных, вызывает прерывание и, пока обработчик прерывания подготавливает новый буфер данных, программирует DMA и звуковую плату для продолжения воспроизведения, проходит некоторое время, что может звучать как щелчок. Этого можно избежать, если воспользоваться режимом автоинициалиэации, позволяющим обойтись без остановок во время воспроизведения.
FILESPEC equ 'C:\WINDOWS\MEDIA\TADA.WAV'
SBPORT equ 220h
SBIRQ equ 5 ; только IRQ0-IRQ7
.model tiny
.code
.186
org 100h ; COM-программа