NASM直接访问声卡(无操作系统)

时间:2009-12-12 01:37:50

标签: c assembly audio kernel nasm

我正在尝试在ASM和C中编写一个非常简单的操作系统。(NASM汇编程序) 我想直接访问声卡,有或没有驱动程序。 如果我不需要驱动程序,我如何访问和发送示例音频文件 到声卡? (一个例子很好) 如果我确实需要驱动程序,那么无论如何都要连接它们并调用函数 从司机?我如何访问并发送样本音频文件到 声卡? (另一个例子很好)

4 个答案:

答案 0 :(得分:3)

我讨厌劝阻你,但现代声卡驱动程序非常复杂,而且你可能知道,特定于操作系统。这是OS开发中的一个难题 - 驱动程序支持。使用简单的代码片段无法实现这一点。

要加载文件,您需要一个文件系统。你实现了吗?您使用“内核”标志这一事实表明您的操作系统仍处于起步阶段。我不确定我是否希望将声音支持放入操作系统的内核中。

话虽如此,有一个名为Bochs的好模拟器有Sound Blaster 16 emulation。还有一些really old documentation用于编程。这可能是你最好的选择。白天访问声音硬件要容易得多。

答案 1 :(得分:1)

当然你需要一个驱动程序,当然没有简单的方法可以与现有的驱动程序进行交互(有一些关于统一操作系统不可知的“统一驱动程序接口”的建议 - 但我认为它没有任何地方)。

因此,在您编写代码以从硬盘驱动器中读取文件之后,您将需要自己推出音频驱动程序。

现在,我暂时没有这样做,所以这可能已经过时了,但是在90年代你会用几个'out dx,al'配置你的声卡(声卡上的细节各不相同),然后设置DMA以将数据从内存缓冲区发送到您的卡。卡(或它是DMA控制器?)会在到达缓冲区末尾时触发中断,用于填充缓冲区中的新数据。

如果您的卡有一个可用的Linux驱动程序,我首先要查看它的代码。否则,你将不得不对Windows驱动程序进行逆向工程,Soft-Ice的bpio(在io端口访问中断)记录曾经对那个iirc有好处。

祝你好运。

答案 2 :(得分:1)

您最好的选择可能是查看Linux或FreeBSD声音驱动程序并查看它们的作用。除了最简单的声卡之外,你不可能获得更好的实施文档...

这是一个难题。警告:-p

答案 3 :(得分:0)

这是一个用所有程序集编写的免费开源操作系统。如果您不熟悉它,那么它是汇编内核编程的绝佳参考。

http://www.menuetos.net/index.htm