Здравствуйте! Вопрос в следующем, как узнать, что в данный момент пищит динамик? Или лучше как перехватить момент, когда начинает он пищать? Нужно я так понял с помощью таймера следить за каким-то прерыванием? Помогите пожалуйста, наставьте на путь истинный. Или дайте примерчик какой-нибудь. Заранее спасибо.
Начиная с P6 процессоры позволяют устанавливать точки останова при чтении/записи в порт ввода/вывода. Эта возможность доступна в случае, когда CR4.DE установлен в 1. Правда, надо еще быть уверенным, что взаимодействие с динамиком идет именно через порты ввода/вывода. Я думаю, это так, но не уверен. Если дело происходит в ring0, то можно CR4.DE выставить самому, а потом поставить точку останова на запись в порт (кажется, взаимодействие с динамиком осуществляет контроллер 8042). Если же работа происходит из ring3, то отладочные регистры можно установить с помощью SEH. Про отладочные регистры можно почитать в Intel Manual 3B, первая глава в этом томе.
иммется в виду карта разрешения ввода\вывода? если не сложно можно примерчик использования отладочных регистров в юзермоде?
vortx64 Что-то типа этого наверное должно быть... Код (Text): .model small .stack 100h .386 .data old_INT dd ? .code main proc mov ax, @data mov ds, ax push 0 pop es mov eax, dword ptr es:[1Ch*4] mov old_INT, eax pushf cli mov dword ptr es:[1Ch*4], offset oclock mov dword ptr es:[1Ch*4+2], seg oclock popf mov al, 00000000b out 61h, al mov si, 0 n1: mov ah, 01h int 21h inc si cmp si, 4 mov al, 0B6h out 61h, al jne n1 push 0 pop es pushf cli mov eax, dword ptr old_INT mov dword ptr es:[1Ch*4], eax popf mov ax, 4C00h int 21h main endp oclock proc in al, 61h and al, 00000110b cmp al, 06h jne rrr mov ah, 0Eh mov al, 10h mov bh, 0 mov bl, 0Fh int 10h rrr: iret oclock endp end main
По поводу speaker'а: заметил интересную вещь: при вызове ф-ии Beep происходит исключение 0х000006ВА, которое успешно обрабатывается. Не знаю, правда, это особенность только ф-ии Beep или нет.
Хм, буду дома, проверю сию фичу) а ответом на мой вопрос собственно являлось всего лишь это: Код (Text): mov dx,0061h in al,dx and al,03h xor al,03h jnz exit <динамик пищит!!!> :exit вобщем мне нужно было знать значение регистра по адресу 0061h при работе спикера и при простое Вопрос закрыт, всем спасибо за помощь!)