哎呀這段技術(shù)貼看著好硬核啊,那我來(lái)用普通網(wǎng)友的口吻、口語(yǔ)化地改寫一下吧,盡量簡(jiǎn)潔明了,也加點(diǎn)網(wǎng)絡(luò)語(yǔ)言進(jìn)去:
以前老式的PC機(jī)里面有個(gè)專門用來(lái)計(jì)時(shí)的芯片,叫8253或者8254,它有三個(gè)通道。前兩個(gè)是管系統(tǒng)時(shí)鐘和內(nèi)存刷新的,咱就不說(shuō)了,重點(diǎn)講第三個(gè)通道,這個(gè)最有趣,跟電腦喇叭有關(guān)。
簡(jiǎn)單來(lái)說(shuō),圖4-1展示的就是PC發(fā)聲的完整電路。第三個(gè)定時(shí)器(也就是通道3)的G端連到了61H端口的bit0位上。如果你把61H端口的bit0設(shè)成1,那這個(gè)定時(shí)器就被激活了,然后就會(huì)從OUT端輸出一個(gè)可以控制頻率的信號(hào);如果bit0是0,那定時(shí)器就關(guān)了,OUT也會(huì)一直保持高電平1。
這個(gè)設(shè)計(jì)其實(shí)就像個(gè)開(kāi)關(guān),如果你同時(shí)把61H端口的bit0和bit1都設(shè)成1,那就是既打開(kāi)了定時(shí)器,又打開(kāi)了開(kāi)關(guān),這樣聲音就能傳到喇叭那邊,響起來(lái)。如果你只動(dòng)bit0,讓bit1為0,這時(shí)候即使定時(shí)器開(kāi)著,聲音也被堵住了,聽(tīng)不到。
這個(gè)現(xiàn)象可以用DEBUG驗(yàn)證一下:進(jìn)DEBUG之后,在提示符后面輸入O61 3,就能聽(tīng)到電腦喇叭一直在叫。(記得要在純DOS環(huán)境下測(cè)試)
這個(gè)時(shí)候往61H端口發(fā)送03,其實(shí)就是把定時(shí)器和開(kāi)關(guān)都打開(kāi),發(fā)出的聲音大概在896Hz左右,跟你開(kāi)機(jī)時(shí)候那個(gè)蜂鳴聲差不多。
有意思的是,一旦聲音開(kāi)始播放就不會(huì)自動(dòng)停,也不會(huì)影響你操作電腦。
想停這聲音只能再進(jìn)DEBUG,輸入O61 0(也可以是1或2),才能把它關(guān)掉。為什么會(huì)這樣?因?yàn)槎〞r(shí)器工作的時(shí)候不需要CPU盯著,CPU只要設(shè)置好參數(shù),啟動(dòng)之后就可以干別的去了。這種機(jī)制其實(shí)很有用,也為實(shí)現(xiàn)背景音樂(lè)打下了基礎(chǔ)。
那怎么調(diào)整聲音的頻率?注意定時(shí)器通道3還有一個(gè)CLK輸入端,這里接入了一個(gè)固定頻率的信號(hào),大約是1193181.6Hz。輸出頻率和這個(gè)輸入頻率之間的關(guān)系是這樣的:
F(OUT) = F(CLK) / N
就這樣啦,感覺(jué)像在給朋友講電腦底層是怎么整出聲音來(lái)的~
以前老式的PC機(jī)里面有個(gè)專門用來(lái)計(jì)時(shí)的芯片,叫8253或者8254,它有三個(gè)通道。前兩個(gè)是管系統(tǒng)時(shí)鐘和內(nèi)存刷新的,咱就不說(shuō)了,重點(diǎn)講第三個(gè)通道,這個(gè)最有趣,跟電腦喇叭有關(guān)。
簡(jiǎn)單來(lái)說(shuō),圖4-1展示的就是PC發(fā)聲的完整電路。第三個(gè)定時(shí)器(也就是通道3)的G端連到了61H端口的bit0位上。如果你把61H端口的bit0設(shè)成1,那這個(gè)定時(shí)器就被激活了,然后就會(huì)從OUT端輸出一個(gè)可以控制頻率的信號(hào);如果bit0是0,那定時(shí)器就關(guān)了,OUT也會(huì)一直保持高電平1。
這個(gè)設(shè)計(jì)其實(shí)就像個(gè)開(kāi)關(guān),如果你同時(shí)把61H端口的bit0和bit1都設(shè)成1,那就是既打開(kāi)了定時(shí)器,又打開(kāi)了開(kāi)關(guān),這樣聲音就能傳到喇叭那邊,響起來(lái)。如果你只動(dòng)bit0,讓bit1為0,這時(shí)候即使定時(shí)器開(kāi)著,聲音也被堵住了,聽(tīng)不到。
這個(gè)現(xiàn)象可以用DEBUG驗(yàn)證一下:進(jìn)DEBUG之后,在提示符后面輸入O61 3,就能聽(tīng)到電腦喇叭一直在叫。(記得要在純DOS環(huán)境下測(cè)試)
這個(gè)時(shí)候往61H端口發(fā)送03,其實(shí)就是把定時(shí)器和開(kāi)關(guān)都打開(kāi),發(fā)出的聲音大概在896Hz左右,跟你開(kāi)機(jī)時(shí)候那個(gè)蜂鳴聲差不多。
有意思的是,一旦聲音開(kāi)始播放就不會(huì)自動(dòng)停,也不會(huì)影響你操作電腦。
想停這聲音只能再進(jìn)DEBUG,輸入O61 0(也可以是1或2),才能把它關(guān)掉。為什么會(huì)這樣?因?yàn)槎〞r(shí)器工作的時(shí)候不需要CPU盯著,CPU只要設(shè)置好參數(shù),啟動(dòng)之后就可以干別的去了。這種機(jī)制其實(shí)很有用,也為實(shí)現(xiàn)背景音樂(lè)打下了基礎(chǔ)。
那怎么調(diào)整聲音的頻率?注意定時(shí)器通道3還有一個(gè)CLK輸入端,這里接入了一個(gè)固定頻率的信號(hào),大約是1193181.6Hz。輸出頻率和這個(gè)輸入頻率之間的關(guān)系是這樣的:
F(OUT) = F(CLK) / N
就這樣啦,感覺(jué)像在給朋友講電腦底層是怎么整出聲音來(lái)的~