我正在尝试在ASM和C中编写一个非常简单的操作系统。(NASM汇编程序) 我想直接访问声卡,有或没有驱动程序。 如果我不需要驱动程序,我如何访问和发送示例音频文件 到声卡? (一个例子很好) 如果我确实需要驱动程序,那么无论如何都要连接它们并调用函数 从司机?我如何访问并发送样本音频文件到 声卡? (另一个例子很好)
答案 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)
这是一个用所有程序集编写的免费开源操作系统。如果您不熟悉它,那么它是汇编内核编程的绝佳参考。