中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-26 01:30
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » [原创]SDLPal DOS版发布 查看 142 回复 0
楼 主 [原创]SDLPal DOS版发布 发表于 2026-07-24 01:31 ·  中国 香港 新界 荃湾区 IPXO
初级用户
积分 174
发帖 16
注册 2003-10-12 00:00
22年会员
UID 11101
性别 男
状态 离线
不太清楚这个帖是发开发区还是游戏区更应景,若有不便,还望版主挪下帖 :-)
相信大家应该都玩过《仙剑》。SDLPal 作为它的开源引擎重实现,能跑官方 DOS/98 原版资源,这些年也添了不少新功能。一晃十几年过去,从 Windows 出发,Linux、Android、macOS、iOS,还有各种掌机主机,基本都覆盖到了。但最让人意难平的是,作为起点的 DOS 平台却一直缺席。
去年暑假,我终于没忍住,以jayschwa的SDL2 DOS版为基础,自己动手开搞 DOS 移植。这个SDL2是 DJGPP 的,在 DOSBox 上通过 VBE2 能显示真彩画面,但一到实机就各种翻车。在 VirtualBox/QEMU 里折腾了好久总算把自己真机画面点亮了,还没来得及高兴,接下来的声音又难倒了我——DOS 驱动现代音频硬件本来就够头痛,SDL 的音频模型还依赖多线程,这在 DOS 下几乎是死路一条。
于是接下来,我选择绕开 SDL,先把原版那种“时钟 ISR 里发 OPL 指令”的老路走通。幸好前几年 SBEmu 和 VSBHDA 横空出世,现代系统上总算也能用这个办法了。用了相当久的业余时间,之前 SDLPal 中为软件合成做的 OPL 增强终于被我磕磕绊绊地backport到了硬件上(幸亏了PalMusicFan 设计、Louyihua 实现的单 OPL3 FM 立体声),顺便也给 Windows/Linux 加了直接利用硬件 OPL 的路径——比如 CMI8738 这张在 Win11 x64 下居然还有驱动的老声卡。macOS 本来也想顺便搞了,但苹果那边 x86 路线说停就停,只好作罢。
然后,一个意外惊喜砸过来了:AJenbo 搞定了 SDL3 的 DOS 后端并进了上游!不但补全了 VGA 模式,还把之前我觉得不可能的“多线程”(靠手搓协程实现的黑科技)和音频(通过 SoundBlaster API 直连 SBEmu/VSBHDA)都给补齐了。万事俱备,我赶紧把之前写好的那套 ISR hook 框架搬到 SDL3 上,适配了原版的VGA视频模式,又给 SDL3 提了几个补丁完善调色板动画之类的优化。
于是现在 SDLPal 终于能在 DOS 上跑了。配置嘛,从奔腾1到zen3 5600 都试过没问题(有模拟有实机)。更低或更高的配置也可能跑得动——就算没浮点协处理器的 CPU 都可以用 djgpp 的 emu387 顶着——但性能就不好说了。如果你是 UEFI Only、没有 CSM 的机器,也可以试试用 CSMWrap 来启动进 DOS——不过目前还没听说有人成功跑进sdlpal,欢迎挑战。
跟原版 DOS 仙剑比起来,主要有这些变化:
能用官方的 Win95 版资源在 DOS 上跑,这是开天辟地头一回(但AVI解码对奔腾1就有点过于费劲了,最低也得MMX166这个级别才能解得比较顺)。但毕竟是现代逆向移植,最低配置做不到原版的 386 级别。但好处是不再受 580K 常规内存限制——DJGPP 能用 4G 空间,就算常规内存只剩 100K(主要是 SB DMA 占的,用 realopl 还能再省 50K),照样全功能运行。不过前提是总内存要大于 12M。
显示方面,低端机上默认用原版 VGA 模式,对 98 版 AVI 做了兼容处理,每个视频预生成调色板和 LUT,但 VGA 下颜色还是差点意思,这个确实没办法。机器好一点的,可以在配置里关掉 DOSForceMode13h 切到 VESA 模式,这个模式下AVI可以原样呈现了;分辨率可以自己试,我最高试到 1080P,看 log 就知道你的显卡支持哪些(但DOS下IO瓶颈颇为严重,平时最好是别把LogLevel开到0,也就是Debug)。但有一点,DOS 下全是软渲染,分辨率越高 CPU 越累,而且除了AVI什么变化都不会有。至于其他平台上高分辨率上最大的优势GLSL支持——也研究了一下有没有可能通过mesa llvmpipe支持,但测试结果表示单核无SIMD环境还是别想这么多了(哪位兄台折腾出了DOS上的真多核并发的话务必知会我一声)
音乐方面,现在可以在OPL3上播放立体声版的原版RIX(原版是在OPL2模式里播的,左右声道一样)。REALOPL(OPLCore=REAL)是默认,有硬件 OPL 的老机器能跑,用 SBEmu/VSBHDA 的新机器也能跑。CMI8738 这张卡甚至可以直接免驱用高位 I/O 端口: 用 Craig Hart 的 PCI.exe 查出基址,加上偏移 0x50(CMI8738 的硬件手册有写),填进 RealOPLPort 就行。CPU 够劲的话,Nuked(最精确也最吃配置)/DBINT/DBFLT/MAME 这些 OPL 软合成器、Timidity/TinySoundFont 波表 MIDI、MP3/Ogg/Opus 背景音乐替换,都能跟其他平台一样用。不过DOS原版的MPU-401支持还没有,留待以后了
文字方面,用了基于 Unicode/Unifont 的通用字库,也支持 BDF 扩充。翻译上支持大部分非复杂排版语言,但目前只听说英文社区搞了一个语言包

致敬:
PalMusicFan——测试狂魔、灵感来源、精神支柱
SDL DOS补丁集合的全体作者
Vogons 上帮忙在实机测试的兄弟们
SDLPal全体开发者和贡献者
仙剑早期研究者
SBEmu / VSBHDA 开源项目
狂徒创作群
大宇资讯

使用方法:选择最新的build下载后,将解压后的sdlpal.exe放在pal.exe同层目录启动即可,游戏内正常退出后同目录会有配置文件sdlpal.cfg生成,后续按需要编辑使用即可(DOS版尚未实现配置的GUI修改)

推荐BGM:动力火车《终于明白》、Arika《Blan_》二选一
以此,告慰青春。
论坛跳转: