浏览器里可跑的 东方旧作? 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 每月流量给打爆吧。。。

5945 次点击
所在节点    分享创造
37 条回复
yksoft1
2018-09-17 17:05:12 +08:00
@drquest DOSBox 的发展历程是
DOSBox 0.74 - DOSBox Daum (已经被弃坑)的某版本 - joncampbell123 接盘后,一顿乱改乱加,CPU 核心都改乱了 - 加入 PC-98 支持 - 现在的 DOSBox-X
yksoft1
2018-09-17 17:12:25 +08:00
@drquest 而且,我还在研究这个能不能 emscripten
https://github.com/AZO234/NP2kai/
现在程序已经可以在 emscripten 启动了
yksoft1
2018-09-17 22:27:52 +08:00
np2kai 跑是可以跑了,问题很多很多。。
https://github.com/yksoft1/NP2kai/tree/emscripten
yksoft1
2018-09-18 14:09:07 +08:00
np21kai 的演示。跑得很慢,NP21 跑到 486 20mhz 都难。。
https://yksoft1.github.io/np2kai-demo/np21kai.html
@drquest
drquest
2018-09-18 15:36:27 +08:00
@yksoft1 厉害了!其实现阶段网页模拟器最好的也就跑到 Pentium 60 左右的速度,而且都不是完整模拟硬件的情况,V86 或者 jsLinux 差不多已经是上限了。
yksoft1
2018-09-18 18:27:18 +08:00
@drquest NP21 用的是 MAME 的 CPU,慢也没有办法。你按 CTRL+F11 呼出菜单了吗?
yksoft1
2018-09-19 23:43:57 +08:00
@drquest 感觉这两个模拟器的移植还有很多很多的 bug。不过我感觉需要他人的帮助来解决这些问题了
drquest
2018-09-20 15:34:32 +08:00
@yksoft1 我这里菜单可以打开,有什么需要特别注意的地方?
yksoft1
2018-09-20 15:40:51 +08:00
@drquest 不要点 exit,一点就会挂。然后 FDD HDD 可以打开文件了
drquest
2018-09-21 15:13:53 +08:00
@yksoft1 明白,emularity 主分支合并 DOSBox-X 的支持了
yksoft1
2018-09-21 15:24:13 +08:00
@drquest 我试了一下用 emularity 弄 np21kai,但是没有成功。似乎 emularity 里面把文件映射到 / 的方式对 np21kai 不适用。
drquest
2018-09-23 14:45:29 +08:00
@yksoft1 emularity 挂载文件系统的基础库是 browserFS
https://github.com/jvilk/BrowserFS
可以先尝试直接集成 BrowserFS,再尝试集成 emularity
yksoft1
2018-09-23 19:44:37 +08:00
@drquest 到 /emulators 目录下的东西模拟器是能看到并能读出来的,就是那个映射不行。
yksoft1
2018-09-29 13:47:47 +08:00
@drquest 感觉从 C 语言这一边根本改不了 Emscripten 的文件系统那些东西,要改还要把 Emscripten 里面的那些 js 的库开始
drquest
2018-10-04 14:23:23 +08:00
@yksoft1 你可以先挂到 /emulators 目录底下,然后再在 JS 那边以创建软链接的方式挂到 Emscripten 的根目录下。
你看下这个针对 DOSBox-X 的改动
https://github.com/db48x/emularity/pull/42/commits/aa4072779ae2bbc5b06609578584bc6ab50f049b

里面这些行就是干类似的事情的
FS.symlink('./emulator/y/FONT.ROM', '/FONT.ROM');
FS.symlink('./emulator/y/2608_bd.wav', '/2608_bd.wav');
FS.symlink('./emulator/y/2608_hh.wav', '/2608_hh.wav');
FS.symlink('./emulator/y/2608_sd.wav', '/2608_sd.wav');
FS.symlink('./emulator/y/2608_rim.wav', '/2608_rim.wav');
FS.symlink('./emulator/y/2608_tom.wav', '/2608_tom.wav');
FS.symlink('./emulator/y/2608_top.wav', '/2608_top.wav');

这个 FS 是 Emscripten 的文件系统的 API
https://kripken.github.io/emscripten-site/docs/api_reference/Filesystem-API.html
yksoft1
2018-10-04 15:22:15 +08:00
@drquest 问题就是 NP2 使用的 C API 在 Emscripten 那边有问题。导致 FS.symlink 的文件在 NP2 里面是看不到的,FS.mount 的能看到
yksoft1ex
2019-01-04 14:34:08 +08:00
@drquest 主号 @yksoft1 被封,以后使用现在这个号交流。

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

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

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

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

© 2021 V2EX