2

我正在尝试用 ASM 和 C 编写一个非常简单的操作系统。(NASM 汇编程序)我想直接访问声卡,不管有没有驱动程序。如果我不需要驱动程序,我如何访问并将示例音频文件发送到声卡?(一个例子很好)如果我确实需要驱动程序,是否有接口它们并从驱动程序调用函数?以及如何访问示例音频文件并将其发送到声卡?(另一个例子会很好)

4

4 回答 4

3

我不想让您气馁,但是现代声卡驱动程序非常复杂,而且您可能知道,特定于操作系统。这是操作系统开发中的困难挑战之一——驱动程序支持。这不是一个简单的代码片段可以实现的。

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

话虽如此,有一个名为 Bochs 的优秀仿真器具有Sound Blaster 16 仿真。还有一些关于如何编程的非常古老的文档。这可能是你最好的选择。在过去,访问声音硬件要容易得多。

于 2009-12-12T02:07:14.490 回答
1

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

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

现在,我已经有一段时间没有这样做了,所以这可能已经过时了,但是在 90 年代你会用一些“out dx, al”(细节因声卡而异)配置你的声卡,然后将 DMA 设置为将数据从内存缓冲区发送到您的卡。卡(或者它是 DMA 控制器?)在到达缓冲区末尾时会触发中断,您将使用该中断来用新数据填充缓冲区。

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

祝你好运。

于 2009-12-12T02:10:33.923 回答
1

您最好的选择可能是查看 Linux 或 FreeBSD 声音驱动程序,看看它们做了什么。除了最简单的声卡之外,您不太可能获得更好的实现文档......

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

于 2009-12-12T02:14:07.303 回答
0

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

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

于 2010-01-14T05:51:58.307 回答