儿时玩的经典游戏机已经越来越少,为了不使其频率灭绝,牛人们想出了使用高运算能力的CPU模拟之前的游戏机CPU。简单的说就是使用编程语言描述游戏机CPU运算过程。
在平板还没有面世的时候,手上拿一个掌上游戏机是不是很爽。就是在平板还没有面世的前夕,我被老板叫到了办公室,分派我一个任务,让在网上找找看有什么开源的游戏模拟器可以移植到我们硬件平台的。当时公司和我对游戏模拟器这块还是一个空白。
说做就做,开始网上收集资料。最流行的开源模拟器就是MAME了,支持的最全,最稳当。很多PC端的模拟器都是在它的内核中演变过来了,MAME的强大也带来了他的复杂,对于我这个新手来说还是得找一个简单的模拟器来上手。网络的强大不得不让人佩服,我在google代码里面发现了gnuboy is a Game-Boy/Game-Boy Color Emulator,该模拟器是模拟早期8位机的游戏机,还记得玛丽奥吗? 耳边有它熟悉的游戏音乐吗?将源码下来,第一步做的事情就是,读,使劲的读源码。读的过程中你可以体会大牛们是怎么构架,这对我的Coding生涯有很大的帮助。打开源码cpu.c你可以发现怎么用C语言模拟早期的CPU指令。
移植模拟器你不得不了解SDL,这是一个开放源代码的跨平台多媒体开发库,使用C语言写成。绝大数游戏模拟器都是使用这个库,进行设备的输入输出,声音视频的模拟。如果你要将模拟器移植到嵌入式系统,也不需要移植SDL,只要摸清模拟器哪里是键盘输入,声音视频输出,再结合自己的平台实现这些功能就OK了。
拿到源码我没有急于移植到嵌入式系统,而是先移植到Microsoft Visual Studio 2010调试,只到可以跑起来。这样的好处是调试方便,不需要在嵌入式系统上烧写程序,节约了很多时间。调试的过程中自己也对整个框架流程也知道不少,再移植到嵌入式系统就只是copy的过程了。
模拟器移植成功了,该模拟器只能跑GB和GBC游戏。当时在老板面前show我们经典的玛丽奥的时候,看到他的喜悦不知道是童年怀旧的还是金钱的......
有了这个模拟器的基础,我后来还移植了著名的开源模拟器 VBA ,支持任天堂的游戏GBA,还有很多其他的格式。这个模拟器唯一不爽的是,对CPU的速度要求很高,我们的CPU平台速度是384M, 跑VBA游戏模拟器只能跑到30%速度。后来不停的优化,C++的用C语音实现,做一些跳帧处理...... 少部分游戏可以跑80%,基本流畅,其他复杂的游戏还是不行。
再后来准备移植MAME的,做了一些准备工作,和领导评估了一下时间,难道和可行性,结果被否决了。周期长,我们CPU速度跟不上。再加上平板的来临,这种掌机在中国几乎没有什么市场了。
感谢大牛,感谢模拟器!