2009-12-12 50 views
2

我正在嘗試在ASM和C中編寫一個非常簡單的操作系統(NASM彙編程序) 我想直接訪問聲卡,無論是否帶驅動程序。 如果我不需要驅動程序,我怎樣才能訪問併發送示例音頻文件 到聲卡? (一個例子會很好) 如果我確實需要驅動程序,是否有接口,並從驅動程序調用函數 ?我如何訪問併發送示例音頻文件到 聲卡? (另一個例子會很好)NASM直接訪問聲卡(無操作系統)

+0

什麼是聲卡?你有權訪問該卡的註冊地圖嗎? – 2009-12-14 13:52:16

回答

3

我不想讓你灰心,但現代聲卡驅動程序是非常複雜的,正如你可能知道的,操作系統特定的。這是操作系統開發中的一個難題 - 驅動程序支持。這不是用簡單的代碼片段就可以實現的。

爲了加載文件,您需要一個文件系統。你有沒有實現呢?你使用「內核」標誌的事實表明你的操作系統還處於初級階段。我不確定我是否想要對操作系統的內核提供良好的支持。

這就是說,有一個很好的模擬器叫做Bochs,它有Sound Blaster 16 emulation。還有一些really old documentation如何編程。這可能是你最好的選擇。在一天之內訪問聲音硬件要容易得多。

+0

是的。但是,大量的聲卡/板載芯片組都與AC97兼容。直接編程比編程SB16更容易。有一點運氣,OP有這些芯片之一.. – 2009-12-12 02:51:25

+0

嗯....我其實正在考慮SB16。但是,現在你提到它了,AC97是我認識的東西。但是,我不知道如何編程該芯片組。:P我的板載聲卡是基於英特爾HDA的芯片組,支持AC97,這是完美的測試場地。 – 2009-12-12 03:03:34

1

當然,你需要一個驅動程序,當然還有沒有簡單的方法來與現有的驅動程序接口(有一個統一的操作系統無關的「統一驅動程序接口」的建議 - 但我不認爲它有任何地方) 。

因此,在您編寫代碼從硬盤讀取文件後,您需要打開自己的音頻驅動程序。

現在,我一段時間都沒有這樣做過,所以這可能已經過時了,但在90年代,你會用一些'out dx,al'(細節因聲卡而異)配置你的聲卡,並且然後設置DMA將數據從內存緩衝區發送到您的卡。該卡(或者它是DMA控制器?)會在中斷到達緩衝區的末尾時觸發中斷,該中斷將用於使用新數據填充緩衝區。

如果你的卡有一個可用的linux驅動程序,我會先看看它的代碼。否則,您將不得不逆向設計Windows驅動程序,Soft-Ice的bpio(斷開io端口訪問)日誌記錄對於該iirc是非常有用的。

祝你好運。

+0

「90年代」的界面類型就是我的想法。我聽說有人說新的聲卡可能(可能)支持SoundBlaster接口。問題是 - 我不知道如何讓它工作! :P我期待只支持ALSA驅動程序集。我不會去嘗試反彙編或記錄自己的專有驅動程序,因爲這對於一個特定的芯片組來說是浪費時間。也許我可以爲我的操作系統編譯ALSA ....? (我打算實現ELF兼容性。) – 2009-12-12 03:01:20

1

最好的辦法是看看Linux或FreeBSD聲卡驅動程序,看看它們的功能。除了最簡單的聲卡外,你不可能獲得更好的實現文檔...

這是一個難題。被警告:-p

+1

我知道。太糟糕的聲卡製造商並不專注於一種實現方式,而只是自己動手製作。 :P我想知道是否有可能將ALSA移植到我的內核中... – 2009-12-12 02:57:35