看这几天浏览器里的 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 每月流量给打爆吧。。。
1
terrytw 2018-09-15 10:13:09 +08:00
性能太差了...
|
2
drquest 2018-09-15 13:26:49 +08:00
支持!流量的事情不是太用担心,有时间可以集成到 emularity 就可以利用 BrowserFS 加载 ZIP 档案了,这样游戏下载的流量就能少很多。
|
4
yksoft1 OP @drquest 其实只要把.wasm 和.data 在 HTTP 服务器上开 gzip 就能省了。.data 我存储的是完全不压缩的
|
5
yksoft1 OP @terrytw 请使用没有修复 meltdown/spectre 之前的 Chromium,或者高版本的 Firefox,速度会快很多
|
6
yksoft1 OP @drquest 不知道 DOS 下有没有什么快,而且压缩率高于 DEFLATE 的打包软件( ARJ、LZH 都不能满足要求)。可以在 Dosbox-X 内部直接解压,你有科学,我有神功
|
7
discrete 2018-09-15 22:34:16 +08:00 via iPad
性能挺好的啊,我在 iPad Pro 上都很顺
|
9
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 |
10
yksoft1 OP @drquest
我把我用的 TH1-5 给你。都被我手工修改过。 https://drive.google.com/open?id=1rN7Qrok247gCRP5s0IGiQBhLZbnnoAH3 另外这种办法貌似不错,我试试看。 |
12
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 |
13
yksoft1 OP @drquest 另外你在 twitter 上说 joncampbell123 的原 repo 没啥用,我的改动都在自己不规范 fork 的那个 repo 里面
|
14
drquest 2018-09-16 18:36:13 +08:00
@yksoft1 了解,当时 Jason 跟我要 original 的我就把 joncampbell123 的 repo 给他了,我后来在跟 Jason Scott 的私信和 IRC 里面留了你的 GitHub,你要能用 IRC 的话,到 EFnet 的#jsmess 频道,emularity 的维护者 db48x 也在里面。
|
15
mytry 2018-09-17 11:35:25 +08:00
github 的带宽又少又慢,只适合放比较小的加载器。大文件还是放在 CDN,或者把资源打包在图片里放到图床相册里吧~
|
16
drquest 2018-09-17 15:26:24 +08:00
我向 Emularity 提 PR 了,应该很快就会合并
https://github.com/db48x/emularity/pull/42 |
17
yksoft1 OP @drquest 难。现在我那个 branch 都没有一个能用的 autotools 配置,只能靠那个 build_em.txt ,那帮洋人就怕他们编译不出来,直接说还不到合并的时机
|
18
drquest 2018-09-17 16:11:47 +08:00
@yksoft1 我倒是比较乐观,Jason Scott (@textfiles )是 Internet Archive 的历史学家,现在全职在推进这些事情。之前中华学习机 CEC-I 也是他们加进 MAME 主分支的。
|
19
yksoft1 OP @drquest 但是我可不想处理推到我 repo 里面来的 pr。。。自己改得太乱了,而且 Dosbox-X 本来就一团糟,无数没用的东西一直在里面
|
20
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 了。 |
21
yksoft1 OP @drquest DOSBox 的发展历程是
DOSBox 0.74 - DOSBox Daum (已经被弃坑)的某版本 - joncampbell123 接盘后,一顿乱改乱加,CPU 核心都改乱了 - 加入 PC-98 支持 - 现在的 DOSBox-X |
22
yksoft1 OP |
23
yksoft1 OP np2kai 跑是可以跑了,问题很多很多。。
https://github.com/yksoft1/NP2kai/tree/emscripten |
24
yksoft1 OP |
25
drquest 2018-09-18 15:36:27 +08:00
@yksoft1 厉害了!其实现阶段网页模拟器最好的也就跑到 Pentium 60 左右的速度,而且都不是完整模拟硬件的情况,V86 或者 jsLinux 差不多已经是上限了。
|
31
yksoft1 OP @drquest 我试了一下用 emularity 弄 np21kai,但是没有成功。似乎 emularity 里面把文件映射到 / 的方式对 np21kai 不适用。
|
32
drquest 2018-09-23 14:45:29 +08:00
@yksoft1 emularity 挂载文件系统的基础库是 browserFS
https://github.com/jvilk/BrowserFS 可以先尝试直接集成 BrowserFS,再尝试集成 emularity |
34
yksoft1 OP @drquest 感觉从 C 语言这一边根本改不了 Emscripten 的文件系统那些东西,要改还要把 Emscripten 里面的那些 js 的库开始
|
35
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 |