ВУЗ:
Составители:
93
jnz beg1 ; Нет
; Восстановление старого вектора 1с и выход
mov dx,old_int1c_off ; Смещение старого вектора
mov ax,old_int1c_seg ; Сегмент старого вектора
mov ds,ax ; DS:DX – адрес устанавл. вектора
mov ax,251ch ; Установка старого вектора 1ch
int 21h ; Вызов функции DOS
int 20h ; Выход из программы
start endp ; Конец основной процедуры
; Новый обработчик прерывания 1ch
new_int1c proc far ; Дальняя процедура
pusha ; Сохранение всех регистров (для Intel286)
call muz ; Вызов процедура извлечения звука
popa ; Восстановление всех регистров
iret ;
Возврат из программы обработки прерывания
new_int1c endp ; Конец нового обработчика прерывания 1сh
muz proc near ; Процедура генерации звука
test byte ptr cs:iniflag,0ffh ; Проверка флага
jnz muz1 ; Продолжение
in al,61h ; Чтение системного порта В
and al,0fch ; Запрещение звучания (биты 0 и 1)
out 61h,al ; Запись в системный порт В
ret ; Выход, если флаг не взведен
muz1: ; Программирование делителя частоты 2 канала
mov ax,frequency ; Делитель частоты
out 42h,al ; Мл.байт частоты
⇒ канал 2 таймера
xchg al,ah ; AH
⇔ AL
out 42h,al ; Ст.байт частоты
⇒ канал 2 таймера
; Разрешение звучания
in al,61h ; Чтение системного порта В
or al,3 ; Разрешение звучания (биты 0 и 1)
out 61h,al ; Запись в системный порт В
ret ; Нормальный выход
muz endp ; Конец процедуры генерации звука
kbin proc near ; Ввод с клавиатуры и проверка на выбор игры
; Процедура совпадает с одноименной в задаче 2.4.2.1.
kbin endp
code ends ; Конец сегмента (кодового)
END Start ; Указание на точку входа
Задача 3.4.2.4. Написать программу, исполняющую три различные
мелодии при нажатии на клавиши '1', '2'и '3'. Для генерации звука следует
использовать выход канала 2 таймера. Выход из программы должен
осуществляться по нажатию клавиши 'q'. Использовать прерывание от
таймера.
93
jnz beg1 ; Нет
; Восстановление старого вектора 1с и выход
mov dx,old_int1c_off ; Смещение старого вектора
mov ax,old_int1c_seg ; Сегмент старого вектора
mov ds,ax ; DS:DX – адрес устанавл. вектора
mov ax,251ch ; Установка старого вектора 1ch
int 21h ; Вызов функции DOS
int 20h ; Выход из программы
start endp ; Конец основной процедуры
; Новый обработчик прерывания 1ch
new_int1c proc far ; Дальняя процедура
pusha ; Сохранение всех регистров (для Intel286)
call muz ; Вызов процедура извлечения звука
popa ; Восстановление всех регистров
iret ; Возврат из программы обработки прерывания
new_int1c endp ; Конец нового обработчика прерывания 1сh
muz proc near ; Процедура генерации звука
test byte ptr cs:iniflag,0ffh ; Проверка флага
jnz muz1 ; Продолжение
in al,61h ; Чтение системного порта В
and al,0fch ; Запрещение звучания (биты 0 и 1)
out 61h,al ; Запись в системный порт В
ret ; Выход, если флаг не взведен
muz1: ; Программирование делителя частоты 2 канала
mov ax,frequency ; Делитель частоты
out 42h,al ; Мл.байт частоты ⇒ канал 2 таймера
xchg al,ah ; AH ⇔ AL
out 42h,al ; Ст.байт частоты ⇒ канал 2 таймера
; Разрешение звучания
in al,61h ; Чтение системного порта В
or al,3 ; Разрешение звучания (биты 0 и 1)
out 61h,al ; Запись в системный порт В
ret ; Нормальный выход
muz endp ; Конец процедуры генерации звука
kbin proc near ; Ввод с клавиатуры и проверка на выбор игры
; Процедура совпадает с одноименной в задаче 2.4.2.1.
kbin endp
code ends ; Конец сегмента (кодового)
END Start ; Указание на точку входа
Задача 3.4.2.4. Написать программу, исполняющую три различные
мелодии при нажатии на клавиши '1', '2'и '3'. Для генерации звука следует
использовать выход канала 2 таймера. Выход из программы должен
осуществляться по нажатию клавиши 'q'. Использовать прерывание от
таймера.
Страницы
- « первая
- ‹ предыдущая
- …
- 91
- 92
- 93
- 94
- 95
- …
- следующая ›
- последняя »
