尝试写了一个 Gameboy 模拟器,支持在命令行下“云游戏串流”游玩 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
AaronLiu00
V2EX    分享创造

尝试写了一个 Gameboy 模拟器,支持在命令行下“云游戏串流”游玩

  AaronLiu00
PRO
HFO4 2019-05-01 09:47:47 +08:00 7330 次点击
这是一个创建于 2360 天前的主题,其中的信息可能已经有所发展或是发生改变。

效果

传统的 Gameboy 游戏模拟:

EJV1sO.png

当然,正如标题描述,只需要一条命令,无需额外安装软件,你就能在命令行下游玩 Gameboy 游戏了:

telnet gameboy.live 1989 

EJVJdH.gif

要注意的是,云游戏只能在支持 ANSI 标准和 UTF-8 编码的终端下游玩。Windows 下可以在 WSL 里玩。如果提示命令未找到,安装 telnet 就行了。

源代码

GitHub: https://github.com/HFO4/gameboy.live

(刚好赶上成为平成最后的 Gameboy 模拟器)

为什么要写这个,以及一些体会...

这个项目呢,并不是为了模拟器本身,毕竟更完善更稳定的模拟器有不少。完成这个项目更偏向是自我学习吧,楼主目前大二,上学期刚学了汇编和计组,老师也劝我们大学期前写一点成型的项目出来,再加上我是个任天堂粉丝,虽然没有经历过那个时代,但又对老式家用机和掌机有着额外的兴趣,特别是 Gameboy。给 Gameboy 写模拟器一直算是我的一个梦想吧,之前也稍微研究过 Gameboy 通信接口(有关相机和打印机外设的,有兴趣的可以去看下之前写的文章:用树莓派模拟 Game Boy 打印机及相机外设),对 Gameboy 硬件有了基本的了解,那个时候突然发现用刚学的计组好像...可以对模拟器原理理解个大概了,然后就跳入了这个深坑。

开始写代码之前我构思了很久,虽然大概理解了基本结构,但是具体的实现还是无从下手。但是我偶然间看到一篇关于 Gameboy 模拟器的 Tutorial,看完后感到醍醐灌顶,思路上就很清晰了。

真正写代码的过程,真的一言难尽。大体上就是写半小时代码,Debug 一整天。模拟器这玩意儿 Debug 起来挺麻烦的,我采用的办法是和其他模拟器对比,单步执行每条指令,在对比寄存器和各种状态,缩小锁定出现偏差的位置。有好几天我在梦里都在用人脑模拟 CPU,基本上除了上课吃饭睡觉,别的时间都在搞这个了 QAQ 最难的部分不是 CPU,也不是图形,而是声音的模拟。因为没有相关知识储备,看着文档里的 envelope sweep 这些词不知所措。弄了好久最后终于算是能听的级别了,但是跟真机相比还是有区别。

总的来说写这个收获真的很大,原本以为用不到的汇编和计组课程知识在这里也派上了用场。第一次看到游戏画面展示出来的那一刻,真的很爽。

42 条回复    2019-06-10 15:38:43 +08:00
oott123
    1
oott123  
   2019-05-01 09:54:49 +08:00 via Android
模拟器不错,命令行串流太天才了(不知道 FPS 有没有 5 …
AaronLiu00
    2
AaronLiu00  
OP
PRO
   2019-05-01 09:55:45 +08:00 via Android
@oott123 命令行我锁了 10fps,网络理想情况下大概 5-10 之间吧(肉眼观测)
BreezeInWind
    3
BreezeInWind  
   2019-05-01 09:56:27 +08:00 via Android   13
呵呵呵就这破玩意,不是我吹,给我五百年我也整不明白
1daydayde
    4
1daydayde  
   2019-05-01 10:00:13 +08:00
好顶赞! 已 star
pakro888
    5
pakro888  
   2019-05-01 10:04:14 +08:00 via Android
厉害厉害 支持一下
shihira
    6
shihira  
   2019-05-01 10:23:28 +08:00 via Android
才大二就做出这种东西好厉害啊,我大二的时候他妈都在干什么。已星
Mayuri
    7
Mayuri  
   2019-05-01 10:33:30 +08:00 via Android
支持!!
AaronLiu00
    8
AaronLiu00  
OP
PRO
   2019-05-01 10:36:00 +08:00
vanishcode
    9
vanishcode  
   2019-05-01 10:46:29 +08:00 via Android
嘻嘻,喜欢你的树洞外链,很方便
一看头像就知道是你~
Tink
    10
Tink  
PRO
   2019-05-01 11:19:37 +08:00 via iPhone
大佬
ikw
    11
ikw  
   2019-05-01 11:24:48 +08:00 via iPhone
真是个人才,已 star,研究一下能不能回味一下水浒神兽
acupnocup
    12
acupnocup  
   2019-05-01 11:41:16 +08:00 via iPhone
我大二在干嘛...
在玩骨头
YuuuZeee
    14
YuuuZeee  
   2019-05-01 11:48:22 +08:00 via Android
大佬大佬 居然才大二
abmin521
    15
abmin521  
   2019-05-01 11:49:53 +08:00 via Android
大佬
Doodlister
    16
Doodlister  
   2019-05-01 12:05:25 +08:00 via Android
很厉害 支持支持
zhihaofans
    17
zhihaofans  
   2019-05-01 12:26:38 +08:00 via Android
厉害
isnowify
    18
isnowify  
   2019-05-01 13:02:03 +08:00 via iPad
哈哈哈标签页很皮啊 是怎么实现的呢
AaronLiu00
    19
AaronLiu00  
OP
PRO
   2019-05-01 14:24:48 +08:00 via Android
@isnowify 标签页指的是?
kidtest
    20
kidtest  
   2019-05-01 14:25:48 +08:00
厉害
isnowify
    21
isnowify  
   2019-05-01 14:39:16 +08:00 via iPad
@AaronLiu00 切换到其他选项卡后 你的网站标题栏会故意乱码
AaronLiu00
    22
AaronLiu00  
OP
PRO
   2019-05-01 14:40:57 +08:00 via Android
@isnowify 哦哦这个 可以参考 https://diygod.me/2153/
tony601818
    23
tony601818  
   2019-05-01 15:03:18 +08:00 via Android
太厉害了,赶紧 star
zuokanyunqishi
    24
zuokanyunqishi  
   2019-05-01 15:12:22 +08:00 via Android
厉害,star
Mantext1989
    25
Mantext1989  
   2019-05-01 18:07:13 +08:00 via Android
这也太强了
Mystic
    26
Mystic  
   2019-05-01 18:09:12 +08:00 via Android
nb
Archeb
    27
Archeb  
   2019-05-01 18:21:24 +08:00
厉害,star 了
FDKevin
    28
FDKevin  
   2019-05-01 18:58:34 +08:00 via Android
Star
daweii
    29
daweii  
   2019-05-01 19:10:11 +08:00 via iPhone
居然是命令行显示,lz 厉害了
daweii
    30
daweii  
   2019-05-01 19:24:44 +08:00 via iPhone
“但是我偶然间看到一篇关于 Gameboy 模拟器的 Tutorial ”

能发一下地址吗
AaronLiu00
    31
AaronLiu00  
OP
PRO
   2019-05-01 19:29:22 +08:00 via Android   1
@daweii Reference 下面的几个都挺不错的。我这里指的是这个: http://www.codeslinger.co.uk/pages/projects/gameboy/beginning.html
zhanwh9
    32
zhanwh9  
   2019-05-01 21:28:36 +08:00 via Android
好强。。佩服
Ayersneo
    33
Ayersneo  
   2019-05-02 03:31:47 +08:00 via Android
C...Cloudreve
kyokuheishin
    34
kyokuheishin  
   2019-05-02 08:13:06 +08:00
恭喜上榜 Github Trending
AaronLiu00
    35
AaronLiu00  
OP
PRO
   2019-05-02 08:20:54 +08:00 via Android
@kyokuheishin 一觉醒来,看到这个惊呆了
YiferHuang
    36
YferHuang  
   2019-05-02 10:46:53 +08:00
太强了
Dawnki
    37
Dawnki  
   2019-05-02 17:25:01 +08:00
哈哈哈,这个有意思! star 了!
good1uck
    38
good1uck  
   2019-05-03 11:30:52 +08:00 via Android
什么是串流?(真诚问
GitHubDaily
    39
GitHubDaily  
   2019-05-03 23:28:47 +08:00
厉害,已推荐到微博 https://weibo.com/5722964389/Hsrt1vVMt
zhensjoke
    40
zhensjoke  
   2019-05-05 09:35:52 +08:00
前段时间还在看 JS 的 nes 模拟器。
没想到这个更厉害。
sailei
    41
sailei  
   2019-05-08 15:44:21 +08:00
NB
1ychee
    42
1ychee  
   2019-06-10 15:38:43 +08:00
人才啊 ...
关于     帮助文档     自助推广系统     博客     API       Solana     3209 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 27ms UTC 11:20 PVG 19:20 LAX 04:20 JFK 07:20
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86