перехват динамика

Тема в разделе "WASM.BEGINNERS", создана пользователем vortx64, 22 сен 2007.

  1. vortx64

    vortx64 New Member

    Публикаций:
    0
    Регистрация:
    22 сен 2007
    Сообщения:
    6
    Здравствуйте!
    Вопрос в следующем, как узнать, что в данный момент пищит динамик? Или лучше как перехватить момент, когда начинает он пищать? Нужно я так понял с помощью таймера следить за каким-то прерыванием? Помогите пожалуйста, наставьте на путь истинный. Или дайте примерчик какой-нибудь.
    Заранее спасибо.
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Через отладочные регистры бряк на порты и логируй.
    Код не писал:)
     
  3. vortx64

    vortx64 New Member

    Публикаций:
    0
    Регистрация:
    22 сен 2007
    Сообщения:
    6
    Мда, не сильно понятно :) примера бряка нет никакого?
     
  4. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Начиная с P6 процессоры позволяют устанавливать точки останова при чтении/записи в порт ввода/вывода. Эта возможность доступна в случае, когда CR4.DE установлен в 1. Правда, надо еще быть уверенным, что взаимодействие с динамиком идет именно через порты ввода/вывода. Я думаю, это так, но не уверен. Если дело происходит в ring0, то можно CR4.DE выставить самому, а потом поставить точку останова на запись в порт (кажется, взаимодействие с динамиком осуществляет контроллер 8042). Если же работа происходит из ring3, то отладочные регистры можно установить с помощью SEH.

    Про отладочные регистры можно почитать в Intel Manual 3B, первая глава в этом томе.
     
  5. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    Обычный PC Спикер работает именно через порты.

    Конкретно через 61h

    out 61h,al
     
  6. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    иммется в виду карта разрешения ввода\вывода? если не сложно можно примерчик использования отладочных регистров в юзермоде?
     
  7. vortx64

    vortx64 New Member

    Публикаций:
    0
    Регистрация:
    22 сен 2007
    Сообщения:
    6
    вот как можно отследить, что в этот порт что-то поступило?
     
  8. Buggy

    Buggy New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2007
    Сообщения:
    3
    vortx64
    Что-то типа этого наверное должно быть...
    Код (Text):
    1. .model small
    2. .stack 100h
    3. .386
    4. .data
    5. old_INT dd ?
    6. .code
    7. main proc
    8.     mov ax, @data
    9.     mov ds, ax
    10.  
    11.     push 0
    12.     pop es
    13.     mov eax, dword ptr es:[1Ch*4]
    14.     mov old_INT, eax
    15.  
    16.     pushf
    17.     cli
    18.     mov dword ptr es:[1Ch*4], offset oclock
    19.     mov dword ptr es:[1Ch*4+2], seg oclock  
    20.     popf
    21.    
    22.     mov al, 00000000b
    23.     out 61h, al
    24.    
    25.     mov si, 0
    26. n1:
    27.     mov ah, 01h
    28.     int 21h
    29.     inc si
    30.     cmp si, 4
    31.    
    32.     mov al, 0B6h
    33.     out 61h, al
    34.    
    35.     jne n1
    36.    
    37.     push 0
    38.     pop es
    39.     pushf
    40.     cli
    41.     mov eax, dword ptr old_INT
    42.     mov dword ptr es:[1Ch*4], eax
    43.     popf
    44.    
    45.     mov ax, 4C00h
    46.     int 21h
    47. main endp
    48.  
    49. oclock proc
    50.     in al, 61h
    51.     and al, 00000110b
    52.     cmp al, 06h
    53.     jne rrr
    54.     mov ah, 0Eh
    55.     mov al, 10h
    56.     mov bh, 0
    57.     mov bl, 0Fh
    58.     int 10h
    59. rrr:
    60.     iret
    61. oclock endp
    62. end main
     
  9. vortx64

    vortx64 New Member

    Публикаций:
    0
    Регистрация:
    22 сен 2007
    Сообщения:
    6
    Спасибо! Буду разбираться :) как сделаю, отпишу
     
  10. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    rain
    Пример установки отладочного регистра из SEH на FASM:
     
  11. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    По поводу speaker'а: заметил интересную вещь: при вызове ф-ии Beep происходит исключение 0х000006ВА, которое успешно обрабатывается. Не знаю, правда, это особенность только ф-ии Beep или нет.
     
  12. vortx64

    vortx64 New Member

    Публикаций:
    0
    Регистрация:
    22 сен 2007
    Сообщения:
    6
    Хм, буду дома, проверю сию фичу) а ответом на мой вопрос собственно являлось всего лишь это:
    Код (Text):
    1. mov dx,0061h
    2. in al,dx
    3. and al,03h
    4. xor al,03h
    5. jnz exit
    6. <динамик пищит!!!>
    7. :exit
    вобщем мне нужно было знать значение регистра по адресу 0061h при работе спикера и при простое
    Вопрос закрыт, всем спасибо за помощь!)