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.