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

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

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

Помните, я имею в виду BIOS Speakers

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

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

Производил звук из динамика, а не биос

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

-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.

};
}
1

Другие решения

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

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

0

Попробуйте включить эту процедуру в вашу 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.
};
}
-1