中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 谁能编写Intel AC97软声卡在DOS下的驱动程序?
作者:
标题: 谁能编写Intel AC97软声卡在DOS下的驱动程序? 上一主题 | 下一主题
Michael
钻石会员





积分 10046
发帖 3039
注册 2002-11-11
状态 离线
『楼 主』:  谁能编写Intel AC97软声卡在DOS下的驱动程序? [已使用 LLM 解释]

用什么编写较好呢?
LLM 解释

在 DOS 环境下编写 Intel AC97 软声卡驱动,汇编语言(如 MASM/TASM)是最直接且实用的选择,其次是可嵌入汇编的 C 语言(如 Borland C++ 3.1)。这一结论的技术前提与限制如下:

1. 汇编语言的必要性

AC97 软声卡(如 Intel ICHx 芯片组集成的 AC'97 Controller)本质是硬件寄存器映射的 I/O 设备,驱动需直接操作:

  • I/O 端口:AC'97 控制器的配置端口(如 0x300-0x31F,具体由 BIOS 分配)、音频编解码器(Codec)的寄存器(通过控制器间接访问);
  • 中断:软声卡通常依赖 IRQ 10/11 处理音频数据传输(如 DMA 完成中断);
  • DMA:音频流需通过 DMA 通道(如 4/5/6/7)直接写入控制器的 FIFO,避免 CPU 轮询的低效。

这些操作需要精确控制硬件时序、寄存器位操作和中断响应,汇编语言能直接生成对应机器码,无高级语言的抽象开销或编译器优化带来的不确定性。当年的 DOS 驱动(如早期 Sound Blaster 驱动)几乎均由汇编编写,这是当时的标准实践。

2. C 语言的辅助作用

若需简化逻辑(如音频格式转换、缓冲区管理),可使用支持内联汇编的 C 编译器(如 Borland C++ 3.1、Microsoft C 6.0)。例如:

  • 用 C 实现音频数据的 PCM 格式转换(如 16 位转 8 位、立体声转单声道);
  • 用内联汇编完成 I/O 端口读写、中断向量注册等硬件操作。

但需注意:DOS 下的 C 编译器对硬件操作的支持依赖编译器扩展(如 Borland 的 _outp()/_inp() 函数),且生成的代码需关闭优化(避免破坏硬件操作的时序)。

3. 当年的技术限制与误解

  • 为何不用 Pascal/其他语言?
    Pascal(如 Turbo Pascal)对直接硬件操作的支持较弱(需通过 Inline 语句嵌入机器码),且生成的代码体积较大,不适合内存受限的 DOS 环境。当年的 Pascal 主要用于应用程序开发,而非底层驱动。
  • “软声卡”的误解
    当年部分用户认为“软声卡”可通过软件模拟实现,但实际上 AC97 软声卡仍需硬件控制器(ICH 芯片组的 AC'97 Controller)配合,驱动的核心是控制硬件,而非纯软件模拟音频输出。

4. 补充背景:AC97 驱动的核心挑战

即使选择汇编,编写 AC97 DOS 驱动仍面临两大难点(这也是当年 AC97 软声卡在 DOS 下兼容性差的原因):

  • BIOS 配置依赖:AC97 控制器的 I/O 端口、IRQ、DMA 通道由 BIOS 动态分配(而非固定如 Sound Blaster 的 0x220),驱动需通过PCI BIOS 调用(如 INT 0x1A 功能 0xB101)读取 PCI 设备的配置空间,获取实际资源分配——这需要对 PCI 规范有深入了解;
  • Codec 兼容性:AC97 控制器仅负责数据传输,音频解码由独立的 Codec 芯片完成(如 Realtek ALC650),不同 Codec 的寄存器定义存在差异,驱动需兼容多种 Codec 才能保证通用性。

当年 Wengier 提到的 newdos 论坛帖子(http://www2.zzu.edu.cn/ie/newdos/dispbbs.asp?boardID=6&ID=4555),其内容大概率涉及 AC97 寄存器映射或 PCI 配置的技术细节,这是驱动开发的关键参考。

结论

  • 首选汇编语言:直接控制硬件,适合编写驱动核心(寄存器操作、中断/DMA 管理);
  • 次选带内联汇编的 C:简化逻辑层,需依赖特定编译器的硬件支持;
  • 技术前提:需掌握 AC97 规范(如 Intel AC'97 1.0/2.0 文档)、PCI BIOS 调用、DOS 中断(如 INT 0x21 内存管理、INT 0x25 绝对磁盘读写)。

当年因 AC97 规范文档获取困难(多为厂商内部资料)、PCI 硬件知识普及度低,导致 DOS 下的 AC97 驱动极为罕见,多数用户依赖“声卡模拟补丁”(如将 AC97 模拟为 Sound Blaster)而非原生驱动。





简单就是美
2003-7-20 00:00
查看资料  发短消息  网志   编辑帖子  回复  引用回复
Dark-Destroy
元老会员





积分 8312
发帖 3551
注册 2003-3-22
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

建議你看一下MAME的源碼一下...




MSN:tiqit2@hotmail.com
2003-7-20 00:00
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27736
发帖 10521
注册 2002-10-9
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

看看这个项目吧:
http://www2.zzu.edu.cn/ie/newdos/dispbbs.asp?boardID=6&ID=4555




Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2003-7-20 00:00
查看资料  发送邮件  访问主页  发短消息  网志  OICQ (29206679)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: