Курсовая работа: Программа воспроизведения произвольного звукового файла с использованием звукового адаптера (формат - wav)
Для чтения/записи 16-биткых значений из/в 8-битные порты 00h-08h. Очередной байт, переданный в эти порты, будет считаться младшим, а следующий за ним - старшим.
порт 0Dh/0DAh для записи: сброс контроллера DMA
Любая запись сюда приводит к полному сбросу DMA-контроллера, так что его надо инициализировать заново.
порт 0Dh/0DAh для чтения: последний переданный байт/слово.
порт 0Eh/0DCh для записи: любая запись снимает маскирующие биты со всех каналов
порт 0Fh/0DEh для записи: регистр маски всех каналов:
биты 3-0: маскирующие биты каналов 3/7, 2/6, 1/5, 0/4
Чаще всего внешнее устройство само инициализирует передачу данных, и все, что необходимо сделать программе, - это записать адрес начала буфера в порты, соответствующие используемому каналу, длину передаваемого блока данных минус один в регистр счетчика нужного канала, установить режим работы канала и снять маскирующий бит.
Описаниефункции Open_file
open_file proc near
mov ax, 3D00h ;Выполнить функцию DOS 3Dh: AH=3Dh, установим
режим доступа AL=00 – открыть для чтения
mov dx, offset filename ;Заносим в dx смещение filename и
теперь в DS:DX –полный адрес ASCIZ-
строки с именем файла
int 21h ;Передать управление операц. системе и открыть
файл для чтения
jc error_exit ; если не удалось открыть файл, перейти на
метку error_exit
mov bx, ax ; заносим идентификатор файла в BX,
необходимо для команды 42h
mov ax, 4200h ;Команда для перемещения указателя чтения/записи AH=42h,
AL=0 – от начала файла
mov cx, 0 ; CX:DX - новое значение указателя
mov dx, 38h ; по этому адресу начинаются данные в tada.wav
int 21h ; переместим файловый указатель
mov ah, 3Fh ; Чтение из файла AH=3Fh
mov cx, 27459 ; считать 27459 байтов в файле tada.wav
push ds ;заносим считанные данные в стек