Files
x86-bare-metal-examples/in_beep_illinois.S
Ciro Santilli 61f0ad8dda Remove END
2015-10-05 16:58:44 +02:00

48 lines
729 B
ArmAsm

/*
Originally from: https://courses.engr.illinois.edu/ece390/books/labmanual/io-devices-speaker.html
Same as the kernel version.
*/
#include "common.h"
BEGIN
start:
PUTC($0x61)
mov $0xb6, %al
out %al, $0x43
mov $4560, %ax
out %al, $0x42
mov %ah, %al
out %al, $0x42
in $0x61, %al
/* TODO why or, while Linux kernel sets it to 3? */
or $0b00000011, %al
out %al, $0x61
/*
Pause for duration of note.
Busy loop of `25 * 2 ^ 16 - 1`
*/
mov $25, %bx
.pause1:
mov $65535, %cx
.pause2:
dec %cx
jne .pause2
dec %bx
jne .pause1
in $0x61, %al
/* TODO why Reset bits 1 and 0. */
and $0b11111100, %al
out %al, $0x61
jmp start