опубликован 04-01-2002 20:32 MSK
На счёт линукса не знаю, но...; Процедура Sound: генерация звука
; Вход: AX = частота звука (Гц)
Sound proc near
xchg bx,ax ; Частота
mov ax,34DDh
mov dx,12h ; (DX,AX)=1193181
cmp bx,dx ; Если Bx <= 18Гц, то выход
jbe Done ; Чтобы избежать переполнения
div bx ; AX=(DX:AX)/BX
xchg bx,ax ; Счетчик таймера
in al,61h ; Порт РВ
or al,3 ; Установить биты 0-1
out 61h,al
mov al,10110110b ; Управляющее слово таймера: канал 2, режим 3, двоичное слово
out 43h,al ; Вывод в регистр режима
xchg ax,bx
out 42h,al ; Младший байт счетчика
mov al,ah
out 42h,al ; Старший байт счетчика
Done: ret
Sound endp
;-------------------------------------------------;
; Процедура NoSound: выключение звука
NoSound proc near
in al,61h ; Порт РВ
and al,not 3 ; Сброс битов 0-1
out 61h,al
ret
NoSound endp