发信人: wenbobo(灌了拂衣去)
整理人: wenbobo(2002-12-27 15:56:08), 站内信件
|
BYTE _inp(WORD port)
{
BYTE r;
asm{
push eax
push edx
mov ax, port
in ax, dx
mov r, al
pop edx
pop eax
}
return r;
}
void _outp(WORD port, BYTE value)
{
asm{
push eax
push edx
mov al, value
mov dx, port
out dx, al
pop edx
pop eax
}
}
//for fun :)
typedef struct {
short int pitch;
short int duration;
} NOTE;
NOTE notes[] =
{
{14, 200},
{16, 200},
{12, 200},
{0, 200},
{7, 400}
};
void setfreq(int hz)
{
hz = 1193180 / hz; // clocked at 1.19MHz
_outp(0x43, 0xb6); // timer 2, square wave
_outp(0x42, hz);
_outp(0x42, hz >> 8);
}
void playnote(NOTE note)
{
_outp(0x61, _inp(0x61) | 0x03); // start speaker going
setfreq((int)(400 * pow(2, note.pitch / 12.0)));
Sleep(note.duration);
_outp(0x61, _inp(0x61) & ~0x03); // stop that racket!
}
//endof music stuff
|
|