Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
Топ:
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Интересное:
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Дисциплины:
2020-03-31 | 124 |
5.00
из
|
Заказать работу |
|
|
В этом примере задействован обычный DMA-режим работы, в котором звуковая плата проигрывает участок данных, вызывает прерывание и, пока обработчик прерывания подготавливает новый буфер данных, программирует DMA и звуковую плату для продолжения воспроизведения, проходит некоторое время, что может звучать как щелчок. Этого можно избежать, если воспользоваться режимом автоинициалиэации, позволяющим обойтись без остановок во время воспроизведения.
FILESPEC equ 'C:\WINDOWS\MEDIA\TADA.WAV'
SBPORT equ 220h
SBIRQ equ 5 ; только IRQ0-IRQ7
.model tiny
.code
.186
org 100h; COM-программа
start:
call dsp_reset; инициализация DSP
jc no_blaster
mov bl,0D1h ; команда 0D1h
call dsp_write; включить звук
call open_file; прочитать файл в буфер
call hook_sbirq; перехватить прерывание
mov bl,40h ; команда 40h
call dsp_write; установка скорости передачи
mov bl,0B2h ; константа для 11025Hz/Stereo
call dsp_write
call program_dma; начнём DMA-передачу данных
main_loop: ; основной цикл
cmp byte ptr finished_flag,0
je main_loop; выход когда байт finished_flag = 1
call restore_sbirq; восстановить прерывание
no_blaster:
ret
old_sbirq dd?; адрес старого обработчика
finished_flag db 0; флаг окончания работы
filename db FILESPEC,0; имя файла
; обработчик прерывания звуковой карты
; устанавливает флаг finished_flag в 1
sbirq_handler proc far
push ax
mov byte ptr cs:finished_flag,1; установить флаг
mov al,20h ; послать команду EOI
Код исходной программы(продолжение)
out 20h,al ; в контроллер прерываний
pop ax
iret
sbirq_handler endp
; процедура dsp_reset
; сброс и инициализация DSP
dsp _ reset proc near
mov dx,SBPORT+6; порт 226h - регистр сброса DSP
mov al,1; запись в него единицы запускает инициализацию
out dx,al
mov cx,40; небольшая пауза
dsploop:
in al,dx
loop dsploop
mov al,0 ; запись нуля завершает инициализацию
out dx,al; теперь DSP готов к работе
|
add dx,8 ; порт 22Eh - бит 7 при чтении указывает на
занятость
mov cx,100; буфера записи DSP
check_port:
in al,dx; прочитаем состояние буфера записи
and al,80h; если бит 7 ноль
jz port_not_ready; порт ещё не готов
sub dx,4 ; иначе: порт 22Ah - чтение данных из DSP
in al,dx
add dx,4 ; порт снова 22Eh
cmp al,0AAh; проверим, что DSP возвращает 0AAh при
; чтении - это сигнал его готовности к
; работе
je good_reset
port_not_ready:
loop check_port ; повторить проверку на 0AAh 100 раз
bad_reset:
stc ; если Sound Blaster не откликается
ret ; вернуться с CF=1
good_reset:
clc ; если инициализация прошла успешно
ret ; вернуться с CF=0
dsp_reset endp
; процедура dsp_write
; посылает байт из BL в DSP
dsp _ write proc near
mov dx,SBPORT+0Ch; порт 22Ch - ввод данных/команд DSP
write_loop: ; подождём готовности буфера записи DSP
in al,dx; прочитаем порт 22Ch
Код исходной программы(продолжение)
and al,80h; и проверим бит 7
jnz write_loop ; если он не ноль - подождём ещё
mov al,bl; иначе:
out dx,al; пошлём данные
ret
dsp_write endp
; процедура hook_sbirq
; перехватывает прерывание звуковой карты и разрешает его
hook_sbirq proc near
mov ax,3508h+SBIRQ; AH=35h, AL=номер прерывания
int 21h; получим адрес старого обработчика
mov word ptr old_sbirq,bx; и сохраним его
mov word ptr old_sbirq+2,es
mov ax,2508h+SBIRQ; AH=25h, AL=номер прерывания
mov dx,offset sbirq_handler; установим новый обработчик
int 21h
mov cl,1
shl cl,SBIRQ
not cl ; построим битовую маску
in al,21h ; прочитаем OCW1
and al,cl ; разрешим прерывание
out 21h,al ; запишем OCW1
ret
hook_sbirq endp
; процедура restore_sbirq
; восстановим обработчик и запретим прерывание
restore_sbirq proc near
mov ax,3508h+SBIRQ; AH=25h AL=номер прерывания
lds dx,dword ptr old_sbirq
int 21h; восстановим обработчик
mov cl,1
shl cl,SBIRQ; построим битовую маску
in al,21h ; прочитаем OCW1
or al,cl ; запретим прерывание
out 21h,al ; запишем OCW1
ret
restore_sbirq endp
; процедура open_file
; открывает файл filename и копирует звуковые данные из него,;считая что это - tada.wav, в буфер buffer
open_file proc near
mov ax,3D00h; AH=3Dh AL=00
mov dx,offset filename; DS:DX - ASCIZ-строка с именем файла
int 21h; открыть файл для чтения
jc error_exit; если не удалось открыть файл - выйти
|
mov bx,ax ; идентификатор файла в BX
|
|
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!