Skip to content

Repository files navigation

LUMENCD

LUMENCD.SYS 是面向 DOS 实模式的 16 位 ATAPI CD-ROM 设备驱动。一个 SYS 同时覆盖 8088/8086、80286、80386、80486 及以上处理器,并在启动时选择安全的 CPU 专用传输路径。

驱动主体使用 C++ 编写;汇编只承担 DOS Strategy/Interrupt ABI、私有栈、入口级重入保护、CPU 检测、端口批量传输、PCI BIOS 和 VDS 调用。项目不使用堆、STL、异常、RTTI、虚函数、递归或全局构造器,采用 MIT 许可证。

当前发布状态:

  • PIO、双光驱、多子单元注册、MSCDEX 请求协议、SHSUCDX、cooked/raw 读取、跨 64 KiB 传输、无介质与托盘控制已经在 DOSBox-X 完成四档 CPU 端到端验证。
  • PCI Bus Master DMA 是 386+、仅由 /DMA 显式启用的真实硬件功能。算法、PRDT、VDS 清理和故障回退已做宿主测试,但尚未在真实控制器上验证;DOSBox-X 测试不会发送其不支持的 ATAPI DMA packet。

正式二进制请从 GitHub Releases 下载;仓库内 dist 目录同时保存 SYS、标准 360 KiB FAT12 软盘镜像与 SHA-256 清单。

安装

把 LUMENCD.SYS 复制到 DOS 目录,在 CONFIG.SYS 中加入:

DEVICE=C:\DOS\LUMENCD.SYS /D:MSCD001

然后在 AUTOEXEC.BAT 中加载 CD-ROM 扩展管理器:

MSCDEX /D:MSCD001 /L:D

也可以使用:

SHSUCDX /D:MSCD001 /L:D

扩展管理器不包含在本项目中。

使用 360 KiB 软盘镜像时,可在模拟器中把 LUMENCD-360K.IMG 挂载为 A:,或写入一张 5.25 英寸 360K 软盘,然后执行:

COPY A:\LUMENCD.SYS C:\DOS\LUMENCD.SYS

镜像是数据盘,不包含 DOS 系统文件。

单文件多代 CPU

CPU 自动路径 行为
8088 / 8086 兼容基线 只执行 8086 指令,展开 IN AX / STOSW 循环
80286 286 优化 REP INSW
80386 386 优化 16 位端口读取与 32 位内存合并
80486+ 486 优化 进一步展开循环,降低分支开销

所有通用 C++ 对象以 8086 指令集生成;后续 CPU 指令只存在于经过运行时检测保护的汇编分派路径。8088 主机仍需具备能以端口 I/O 访问的 IDE/ATAPI 控制器,CPU 兼容不代表早期 PC 原机自带 ATAPI。

安全边界

  • 默认只使用有限超时的 PIO,不在探测时复位 IDE 通道。
  • 探测前后保存并恢复设备选择,识别同通道 ATA peer。
  • 错误恢复最多对当前选中的 ATAPI 设备执行一次 DEVICE RESET;失败后该单元离线。
  • 00h、FFh、永久 BSY、异常 DRQ、短传输和设备消失都返回明确错误。
  • 请求长度、命令、子单元、地址模式、扇区范围和远指针范围均经过验证。
  • 汇编入口在切换私有栈之前处理嵌套请求,避免覆盖正在执行的栈帧。

MSCDEX 与多盘

一个设备头最多公开 8 个 ATAPI 子单元,每个单元独立维护介质代次、音频、sense、DMA 状态和诊断计数。实现范围包括:

  • 初始化、打开、关闭、输入刷新;
  • 输入和输出 IOCTL;
  • READ LONG cooked/raw、实际预取和寻道;
  • 介质状态、容量、托盘弹出/装入和锁定;
  • TOC、音轨、Q 子通道、原始 P-W 子通道、UPC/EAN;
  • 音频播放、暂停、恢复、停止和声道控制;
  • HSG/LBA、绝对 Red Book MSF 与 Q 子通道相对 MSF。

不支持的命令或设备可选能力返回 DOS/MSCDEX 错误,不伪造成功。

读取、缓存与 DMA

  • cooked 请求最多按 31 × 2048 字节分块,raw 请求最多按 26 × 2352 字节分块。
  • 8 KiB 全局 cooked 滑动窗口以单元号、LBA 和介质代次为标签;大块读取直接传输。
  • 换盘、弹出、Unit Attention、复位和读取失败使相关缓存失效。
  • /DMA 只接受标准 PCI IDE Bus Master I/O BAR,通过 PCI BIOS 访问配置空间,不访问 CF8h/CFCh。
  • PRDT 最多 16 项、4 字节对齐,每项不跨 64 KiB 物理窗口;V86 环境通过 VDS 锁定。
  • 首次 DMA 读取用 PIO 影子扇区校验。任意 DMA、VDS、设备或校验异常都会清理资源、PIO 重读并在本次启动期间隔离该单元的 DMA。

参数

参数 作用
/D:name 1–8 字符设备名,默认 MSCD001
/DMA 显式启用实验性 PCI Bus Master DMA
/BM /DMA 的兼容别名
/PIO 强制使用 PIO
/PIO0 … /PIO4 请求指定 ATA PIO 模式
/P:port,irq 添加或覆盖 IDE 通道
/S:port,irq /P 的兼容别名
/N:1 … /N:8 限制公开单元数量
/NOPCI 禁止 PCI BIOS 探测
/I 显式允许 PCI BIOS 探测;默认已启用
/V 显示详细初始化状态
/Q 静默安装
/C 在合适的 80 列彩色文本模式中使用状态颜色
/DIAG 执行非破坏性 PIO 就绪与容量诊断

参数按完整 token 匹配。未知、格式错误或互相冲突的选项会终止安装并显示简短用法。

字符界面

/V /C 显示纯 ASCII 的 LUMEN 标题、CPU 路径、单元数、设备名、传输状态和光驱列表。界面不清屏、不等待按键,不包含光盘图标、在线横条、底部设备图案、构建工具或协助信息。

构建与测试

构建步骤见 BUILD.md,兼容边界见 COMPATIBILITY.md,本次验证结果见 TEST-REPORT.md

tests/read_iso.asm 会生成 READISO.COM,用于模拟器内回读测试 ISO。它不会链接进 LUMENCD.SYS,也不属于发布驱动。

许可证

MIT,详见 LICENSE

About

16-bit DOS ATAPI CD-ROM driver for 8088 through 486+, with MSCDEX multi-drive support

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages