V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
AaronLiu00
V2EX  ›  分享创造

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

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

效果

传统的 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
   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
呵呵呵就这破玩意,不是我吹,给我五百年我也整不明白
0312birdzhang
    4
0312birdzhang  
   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
   2019-05-01 10:36:00 +08:00
vanishcode
    9
vanishcode  
   2019-05-01 10:46:29 +08:00 via Android
嘻嘻,喜欢你的树洞外链,很方便
一看头像就知道是你~
Tink
    10
Tink  
   2019-05-01 11:19:37 +08:00 via iPhone
大佬
zwpaper
    11
zwpaper  
   2019-05-01 11:24:48 +08:00 via iPhone
真是个人才,已 star,研究一下能不能回味一下水浒神兽
acupnocup
    12
acupnocup  
   2019-05-01 11:41:16 +08:00 via iPhone
我大二在干嘛...
在玩骨头🦴
jon
    13
jon  
   2019-05-01 11:45:07 +08:00
膜拜大佬
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
   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
   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
   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
   2019-05-02 08:20:54 +08:00 via Android
@kyokuheishin 一觉醒来,看到这个惊呆了😂
YiferHuang
    36
YiferHuang  
   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   ·   FAQ   ·   实用小工具   ·   2804 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 23ms · UTC 14:45 · PVG 22:45 · LAX 06:45 · JFK 09:45
Developed with CodeLauncher
♥ Do have faith in what you're doing.