Смекни!
smekni.com

Программа воспроизведения произвольного звукового файла с использованием звукового адаптера (формат - wav) (стр. 4 из 4)

add dx, 1000h ; для DMA

mov ds, dx

mov dx, 0 ; DS:DX - адрес буфера

int 21h ; чтение файла

pop 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

; процедура program_dma

; настраиваетканал 1 DMA

program_dma proc near

mov al, 5 ; замаскируемканал 1

out 0Ah, al

xor al, al ; обнулимсчётчик

out 0Ch, al

mov al, 49h ; установим режим передачи

; (используйте 59h для автоинициализации)

out 0Bh, al

push cs

pop dx

and dh, 0F0h

add dh, 10h ; вычислим адрес буфера

xor ax, ax

out 02h, al ; запишем младшие 8 бит

out 02h, al ; запишем следующие 8 бит

mov al, dh

shr al, 4

out 83h, al ; запишем старшие 4 бита

mov ax, 27459 ; длина данных в tada.wav

dec ax ; DMA требует длину-1

Код исходной программы(заключение)

out 03h, al ; запишем младшие 8 бит длины

mov al, ah

out 03h, al ; запишем старшие 8 бит длины

mov al, 1

out 0Ah, al ; снимем маску с канала 1

mov bl, 14h ; команда 14h

call dsp_write ; 8-битное простое DMA-воспроизведение

mov bx, 27459 ; размер данных в tada.wav

dec bx ; минус 1

call dsp_write ; запишем в DSP младшие 8 бит длины

mov bl, bh

call dsp_write ; истаршие

ret

program_dma endp

end start

Заключение

С момента рождения языка Assembler прошло много времени, появились новые языки и в особенности языки высокого уровня. И казалось бы что такой неудобный, грамосткий, трудно отлаживаемый язык Assembler исчезнет на всегда. Но время показало обратное – он до сих пор пользуется большой популярностью. Ведь благодаря ему можно написать высоко скоростной код, использующий полностью возможности операционной системы, взаимодействовать с внешними устройствами на уровне портов и многое другое. Программирование современных звуковых плат – весьма сложное занятие, требующее уверенное владение языком. В данной работе я попытался описать и показать методы работы со звуковой картой.

Список литературы

Assembler для DOS, Windows и UNIX. – Зубков С.В. ”ДМК” Москва 2000г.

Искусство программирования на Ассемблере. – Голубь Н.Г. ”DiaSoft” 2002г.

Ассемблер для Windows. – Пирогов В.Ю. 2002г.

Windows Assembly Language and Systems Programming.- Barry Kauler. (перевод).

Секреты системного программирования в Windows 98. - Мэтт Питрек. К., 1996

Сайт www.wasm.ru.