浏览器里可跑的 东方旧作? Dosbox-X Emscripten 化取得初步成功

2018-09-14 15:52:39 +08:00
 yksoft1

看这几天浏览器里的 DOS 游戏 挺火,我也跟风搞了一个类似的。

其实就是根据 em-dosbox 对 dosbox 的第二种改法(用 Emterpreter 把主循环解释执行),把 Dosbox-X ( Dosbox 的一个支持 PC-98 模拟的 fork,我自己也 fork 了而且一直在跟)给弄到了 Emscripten 上。

链接的时候有问题(用-O3 参数,asm2wasm 会挂掉,也不是内存爆了,估计触发了 bug ),用-O1 参数生成的 wasm,导致图形部分卡得要死( SDL2 没有生成优化版本)。只是刚好能看而已。

其实昨天就搞定了类似之前的那个改 Dosbox 0.74-2 的,用暴力改 Dosbox-X 主循环为 Emscripten 主循环回调的版本,那个版本可以全优化,丝滑 60fps,但是一个瞬卡程序就可能跑飞,就可能把整个标签卡死在那里。这次没敢放出来。

demo 地址: https://yksoft1.github.io/dosboxxem-demo/

应该不会把 100G 每月流量给打爆吧。。。

6168 次点击
所在节点    分享创造
37 条回复
terrytw
2018-09-15 10:13:09 +08:00
性能太差了...
drquest
2018-09-15 13:26:49 +08:00
支持!流量的事情不是太用担心,有时间可以集成到 emularity 就可以利用 BrowserFS 加载 ZIP 档案了,这样游戏下载的流量就能少很多。
nfroot
2018-09-15 15:04:19 +08:00
@terrytw 性能差么,我电脑倒是挺稳定快速,普通办公电脑
yksoft1
2018-09-15 18:47:42 +08:00
@drquest 其实只要把.wasm 和.data 在 HTTP 服务器上开 gzip 就能省了。.data 我存储的是完全不压缩的
yksoft1
2018-09-15 18:49:13 +08:00
@terrytw 请使用没有修复 meltdown/spectre 之前的 Chromium,或者高版本的 Firefox,速度会快很多
yksoft1
2018-09-15 18:53:44 +08:00
@drquest 不知道 DOS 下有没有什么快,而且压缩率高于 DEFLATE 的打包软件( ARJ、LZH 都不能满足要求)。可以在 Dosbox-X 内部直接解压,你有科学,我有神功
discrete
2018-09-15 22:34:16 +08:00
性能挺好的啊,我在 iPad Pro 上都很顺
yksoft1
2018-09-16 00:26:04 +08:00
@discrete 但是只支持键盘啊。。
drquest
2018-09-16 11:39:44 +08:00
@yksoft1 如果从减少加载时间的角度看在 DOSBox 里解压缩很难划得来,因为 DOSBox 本身就比较慢。

我简单的改了一下 emularity,这样就可以支持 DOSBox-X 了
https://github.com/pengan1987/emularity
修改过的代码只有一个 commit

用 emularity 的好处还是挺多的,通过 BrowserFS 虚构出的文件系统,可以支持游戏存档,挂载 ZIP 包,虚拟机环境和游戏文件可以分开维护,每个游戏可以加载自己独立的 dosbox.conf,游戏文件放在 ZIP 里也相比 emscripten 的 data 文件更容易维护,多个游戏可以共用一份 wasm 和 js 文件,而且嵌入网页的代码也比较简明。

这是个集成好的例子,FONT.ROM 和 YM2612 的声音单独挂载在另一个 ZIP 里,这样添加不同的游戏只要添加新的游戏 ZIP 文件包和 html 文件就可以,也比较容易通过服务器脚本动态生成。
http://jsemu.oss-cn-shanghai.aliyuncs.com/pc98dosbox/pc98.html
yksoft1
2018-09-16 12:02:53 +08:00
@drquest
我把我用的 TH1-5 给你。都被我手工修改过。
https://drive.google.com/open?id=1rN7Qrok247gCRP5s0IGiQBhLZbnnoAH3

另外这种办法貌似不错,我试试看。
yksoft1
2018-09-16 13:33:10 +08:00
@drquest 你有准备提交 PR 给 emularity 官方吗?
drquest
2018-09-16 14:09:50 +08:00
@yksoft1 所有的游戏都配好了,都可以玩,模拟器引擎的 JS 和 WASM 是共享的,FONT.ROM 和 YM2608 文件也是共享的( font.zip 加载到 Y 盘),DOSBox 优先从游戏压缩包加载,没有的话就用 font.zip 盘里的
http://jsemu.oss-cn-shanghai.aliyuncs.com/pc98dosbox/th1.html
http://jsemu.oss-cn-shanghai.aliyuncs.com/pc98dosbox/th2.html
http://jsemu.oss-cn-shanghai.aliyuncs.com/pc98dosbox/th3.html
http://jsemu.oss-cn-shanghai.aliyuncs.com/pc98dosbox/th4.html
http://jsemu.oss-cn-shanghai.aliyuncs.com/pc98dosbox/th5.html

是的,我准备提 PR 到 emularity 上游,这个项目是互联网档案馆 archive.org 模拟器功能的核心组件,如果 archive.org 那边更新了就可以上传 PC-98 软件到那边了。
https://blog.archive.org/category/emulation/
https://archive.org/details/software
yksoft1
2018-09-16 18:24:34 +08:00
@drquest 另外你在 twitter 上说 joncampbell123 的原 repo 没啥用,我的改动都在自己不规范 fork 的那个 repo 里面
drquest
2018-09-16 18:36:13 +08:00
@yksoft1 了解,当时 Jason 跟我要 original 的我就把 joncampbell123 的 repo 给他了,我后来在跟 Jason Scott 的私信和 IRC 里面留了你的 GitHub,你要能用 IRC 的话,到 EFnet 的#jsmess 频道,emularity 的维护者 db48x 也在里面。
mytry
2018-09-17 11:35:25 +08:00
github 的带宽又少又慢,只适合放比较小的加载器。大文件还是放在 CDN,或者把资源打包在图片里放到图床相册里吧~
drquest
2018-09-17 15:26:24 +08:00
我向 Emularity 提 PR 了,应该很快就会合并
https://github.com/db48x/emularity/pull/42
yksoft1
2018-09-17 15:31:18 +08:00
@drquest 难。现在我那个 branch 都没有一个能用的 autotools 配置,只能靠那个 build_em.txt ,那帮洋人就怕他们编译不出来,直接说还不到合并的时机
drquest
2018-09-17 16:11:47 +08:00
@yksoft1 我倒是比较乐观,Jason Scott (@textfiles )是 Internet Archive 的历史学家,现在全职在推进这些事情。之前中华学习机 CEC-I 也是他们加进 MAME 主分支的。
yksoft1
2018-09-17 16:15:29 +08:00
@drquest 但是我可不想处理推到我 repo 里面来的 pr。。。自己改得太乱了,而且 Dosbox-X 本来就一团糟,无数没用的东西一直在里面
drquest
2018-09-17 16:38:42 +08:00
@yksoft1 其实这些模拟器项目差不多都是 fork 叠 fork 起来的,PCE 最早的 repo 是
https://github.com/jsdf/pce

然后四年没更新了,后来 http://retroweb.maclab.org/ 的主人更新了一版,加入了 Macintosh 的 Localtalk 支持和声音
https://github.com/marciot/retroweb-pcejs-jsdf

互联网档案馆里现在用的是这个 https://github.com/db48x/retroweb-pcejs-jsdf

你开了这个头就已经是很大的贡献了。
另外一个好消息就是今天早些时候 @TheMogMiner 把 SPARCstation 加入 MAME 里面去了,可以跑早期的 SunOS 了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/489374

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX