精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>技术精解:内存、进程、线程等>>beep in win9x

主题:beep in win9x
发信人: 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

[关闭][返回]