文章摘要
开发者AJenbo提交了一个Pull Request,为SDL库添加了对DOS平台(DJGPP)的支持。该请求编号为#15377,旨在扩展SDL的跨平台兼容性。
文章总结
SDL 添加 DOS 平台支持 (DJGPP)
主要内容概述
该 Pull Request 为 SDL (Simple DirectMedia Layer) 库添加了对 DOS 平台的支持,使用 DJGPP 工具链进行开发。这是由 AJenbo 发起,多位贡献者共同完成的合并请求。
主要特性
已实现功能
- 视频: 支持 VGA 和 VESA 1.2+ 帧缓冲,RGB 和 8 位索引色模式,支持 VGA DAC 调色板编程,带垂直同步的硬件页面翻转,退出时保存/恢复 VBE 状态
- 音频: 支持 Sound Blaster 16 (16 位立体声,最高 44.1 kHz)、Sound Blaster Pro (8 位立体声,最高 22 kHz) 和 Sound Blaster 2.0/1.x (8 位单声道),均通过 IRQ 驱动的 DMA 和双缓冲自动初始化
- 输入: 支持带扩展扫描码的 PS/2 键盘,INT 33h 鼠标接口,通过 BIOS INT 15h 自动校准的游戏手柄
- 线程: 使用
setjmp/longjmp和栈修补的协作式调度器 - 定时器: 基于 PIT 的定时器,使用 DJGPP 的
uclock()提供约 1.19 MHz 分辨率 - 文件系统: 通过 DJGPP 的
searchpath()实现GetBasePath/GetPrefPath,回退到 POSIX 文件系统操作 - 构建: 提供 CMake 交叉编译工具链文件,DJGPP CI 作业,预填充缓存以加快配置
未实现功能
- 音频录制功能(仅支持播放)
- 原生
SDL_TIME实现(复用 Unixgettimeofday) - 共享库加载支持(无
SDL_LoadObject)
构建方法
bash
cmake -S. -Bbuild-dos \
-DCMAKE_TOOLCHAIN_FILE=build-scripts/i586-pc-msdosdjgpp.cmake \
-DCMAKE_BUILD_TYPE=Release
cmake --build build-dos -j$(nproc)
贡献者
该功能是多人协作的成果,主要贡献者包括: - @icculus - @madebr - @glebm - @jayschwa - @ccawley2011 - AJenbo(负责最终完善和稳定性修复)
测试情况
该端口已在 DOSBox 中通过 DevilutionX 进行了广泛测试,但尚未在真实硬件上进行测试。大多数演示程序都能正常工作,但自动化测试中仍有一些格式化函数相关的问题。
后续工作
合并后可能需要进一步优化和改进,特别是: - 光标透明度处理 - 页面翻转功能在某些 NVIDIA GPU 上的兼容性问题 - 性能优化
该功能计划作为 SDL 3.6.0 版本的特性发布,不会回溯到 3.4.x 版本。
评论总结
总结评论内容如下:
对DOS环境下运行SDL的期待与兴奋
- 多位用户表达了对SDL支持DOS的积极态度,认为这将扩展游戏运行环境。
- 引用:"All that's left now is SDL for UEFI, and then all our games can run in a pre-OS environment." (ronsor)
- 引用:"Good - now we can play more DOS games again!" (shevy-java)
对技术实现的讨论
- 用户提到已有类似技术(如HXDOS)能够通过模拟DirectDraw支持SDL运行。
- 引用:"Technically this already worked with HXDOS, which emulated DirectDraw well enough that SDL could use it." (Dwedit)
- 引用:"This is an especially funny screenshot as DosBOX itself is built on SDL." (alnwlsn)
对实际用途的质疑
- 部分用户质疑现代是否还有人需要DOS环境运行SDL,认为其应用场景有限。
- 引用:"Uhm... excuse me? Why? Is there anyone even using DOS for anything serious these days?" (jan_Sate)
对开源项目维护的信任
- 用户认为SDL作为开源项目,已有多个移植版本,对其维护能力表示信任。
- 引用:"But they already have a lot of ports, so I trust they know what they're getting themselves into." (looneysquash)
其他观点
- 个别用户表达了困惑或幽默,如误读标题或调侃技术栈的复杂性。
- 引用:"I got really confused and thought this was sdf, I only read the comments and none of them made sense" (dwedge)
- 引用:"Perfect! I was just doing some Turbo C development inside DOSBox-X inside Debian GNU/Linux inside VMware Fusion inside macOS this morning." (jlokier)
总结:评论整体对SDL支持DOS持积极态度,但对其实际需求和维护能力存在不同看法,同时包含一些技术讨论和幽默调侃。