Сделать звуковой сигнал в BIOS

Когда компьютер начинает загружаться, раздается звуковой сигнал из динамика BIOS.

Как я могу сделать это в сборке или C++? Ясно, что я хочу сделать звуковой сигнал с помощью динамика BIOS.
Помните, я имею в виду динамики BIOS

Есть ли прерывание для этого? Я искал об этом, но ничего не нашел. Я использовал какое-то прерывание, но этого не сделал. следующий код:

int main(){
   cout<<"\a";
}

Воспроизведение звука из динамика, а не из биоса

Как я могу это сделать ? с любым прерыванием?


person Alireza378n A    schedule 18.04.2015    source источник
comment
какая у тебя ОС? окна?   -  person Jossef Harush    schedule 18.04.2015
comment
см. stackoverflow.com/q/10216931/3191896   -  person Jossef Harush    schedule 18.04.2015
comment
Любым другим путем ? В сборе?   -  person Alireza378n A    schedule 18.04.2015
comment
Насколько я знаю, Windows удалила поддержку встроенного динамика в Windows 7.   -  person user253751    schedule 18.04.2015
comment
@immibis: могу ли я написать для этого драйвер? :)   -  person Alireza378n A    schedule 18.04.2015
comment
@ Alireza378nA Если вы хотите написать драйвер .... чего вы, вероятно, не делаете.   -  person user253751    schedule 18.04.2015
comment
@immibis: конечно, это можно сделать с помощью VBE (расширения VESA BIOS), но должен быть другой способ мышления ....   -  person Alireza378n A    schedule 18.04.2015
comment
С выводом звонка ASCII(7)?   -  person Dirk Wolfgang Glomp    schedule 18.04.2015


Ответы (3)


Попробуйте добавить и этот код.

.pause1:
    mov     cx, 65535
.pause2:
    dec     cx
    jne     .pause2
    dec     bx
    jne     .pause1
    in      al, 61h         ; Turn off note (get value from
                            ;  port 61h).
    and     al, 11111100b   ; Reset bits 1 and 0.
    out     61h, al         ; Send new value.

Итак, результат:

void beep(){

    __asm{

      MOV al, 182         ; Prepare the speaker for the
      out     43h, al     ;  note.
      mov     ax, 2280    ; Frequency number (in decimal)
                          ;  for C.
      out     42h, al     ; Output low byte.
      mov     al, ah      ; Output high byte.
      out     42h, al 
      in      al, 61h     ; Turn on note (get value from
                          ;  port 61h).
      or      al, 00000011b   ; Set bits 1 and 0.
      out     61h, al         ; Send new value.
      mov     bx, 4       ; Pause for duration of note.


    .pause1:
       mov     cx, 65535
    .pause2:
       dec     cx
       jne     .pause2
       dec     bx
       jne     .pause1
       in      al, 61h         ; Turn off note (get value from
                               ;  port 61h).
       and     al, 11111100b   ; Reset bits 1 and 0.
       out     61h, al         ; Send new value.

   };
}
person Nicolò Favaretto    schedule 19.04.2015

Единственный способ реализовать это в любой современной ОС Windows — написать драйвер режима ядра. Причина в том, что инструкции in или out недоступны в пользовательском режиме, а API для бипера отсутствует.

Однако, если вы просто хотите покопаться в низкоуровневом программировании, рассмотрите возможность написания собственного загрузчика или даже собственного BIOS (используя виртуальную машину).

person Max Malysh    schedule 24.04.2015

Попробуйте включить эту процедуру в свою программу на C++.

void beep(){

    __asm{

      MOV al, 182         ; Prepare the speaker for the
      out     43h, al     ;  note.
      mov     ax, 2280    ; Frequency number (in decimal)
                          ;  for C.
      out     42h, al     ; Output low byte.
      mov     al, ah      ; Output high byte.
      out     42h, al 
      in      al, 61h     ; Turn on note (get value from
                          ;  port 61h).
      or      al, 00000011b   ; Set bits 1 and 0.
      out     61h, al         ; Send new value.
      mov     bx, 4       ; Pause for duration of note.
   };
}
person Nicolò Favaretto    schedule 18.04.2015
comment
in и out являются привилегированными инструкциями. Они не будут работать в приложении пользовательского режима. - person Daniel Kamil Kozar; 18.04.2015
comment
Возможно, ваш звуковой сигнал исходит из динамиков ПК или наушников; Не от PC BIOS Speaker. Так вы уверены, что ваше устройство не производит никакого звука? - person Nicolò Favaretto; 19.04.2015