就在几周前,Sonic the Hedgehog 2被移植到了TI-84 Plus CE图形计算器上.
在计算器上玩复古游戏并不是什么新鲜事,俄罗斯方块、越狱,甚至超级马里奥兄弟3都有风扇制作的端口连接到德州仪器的流行计算器上.
然而,直到现在,还没有以蓝色刺猬为主角的游戏出现在小屏幕上.
GitHub的用户GRubbyplaya,也被称为GRUBYCORD,在设备上移植了1992年的S Sonic the Hedgehog 2,使它成为我们所知的第一个可以在计算器上使用的Sonic Platform游戏.
源代码和二进制文件已经发布.
是的,这完全是非官方的.
开发人员是在观看了This Does Not Compute YouTube频道关于计算器游戏历史的视频后才移植它的.
当这部迷你纪录片提到TI的一些计算器使用了8位Zilog Z80和16/32位摩托罗拉68000 CPU时,它引起了肮脏的编码者的注意.
这些芯片也被世嘉的Master System和Genesis(北美以外的人称为Mega Drive)使用,所以将Sonic从其中一台游戏机移植到TI计算器应该是相当有趣的事情.
这位程序员在他的端口文档中说:“这真的激起了我的兴趣,因为我已经知道世嘉的复古游戏机使用的处理器:用于Master System的Z80和用于Genesis的M68K.
除此之外,我还真的想制作我自己的计算器游戏,或者至少是现有的一个.
”“Deom太大了,放不进84 Plus CE的存储空间,这也是我坚持使用8位至16位游戏的部分原因.
当然,我后来确实排除了16位游戏的可能性.
”然而,GRubbycoder没有移植世嘉Genesis版本的Sonic 2.
相反,他使用了为8位世嘉Master系统和Game Gear设计的版本.
这是因为最大的基于68000处理器的TI计算器没有足够好的屏幕分辨率来支持基于68000的Genesis版本的游戏.
相比之下,带有Zilog eZ80芯片的TI-84 Plus CE(本质上是一个带有额外铃声和口哨的24位Z80)有320x240像素的显示屏,这对于8位Master系统和Game Gear版本来说已经足够了.
选择TI-84 Plus CE也意味着Grubycoder对Sonic游戏移植的选择有限.
如今,MASTER系统上唯一一款完全可拆卸的Sonic游戏是Sonic the Hedgehog 2,所以他选择了这款游戏.
“大多数其他人们真正想要的游戏,比如Sonic 1 8位和Sonic Triple Trouble,都只有部分可拆卸功能,”GRubbycoder说.
“如果我开始移植它们,我的大部分工作就是对整个游戏进行反向工程.
”从纸面上看,TI-84 Plus CE似乎非常适合8位Sonic游戏.
其eZ80的时钟频率为48 MHz,远高于主系统的Z80A的3.
58 MHz,内存为256KB,是主系统8KB内存和16KB VRAM总和的十倍多.
然而,这些硬件优势受到以下因素的影响:等待状态可能会将eZ80的实际时钟速度拉低至12 MHz.
每个文件的大小上限要求对任何超过64KB的数据使用多个文件.
以及完全没有任何控制台式的图形加速.
额外的处理能力需要用来填补这些空白.
此外,如果任何游戏代码试图访问世嘉游戏机上它预期的I/O端口,TI-84 Plus CE将崩溃-例如,如果游戏试图与游戏机的音频系统、调色板硬件和VRAM交谈.
这些IO访问需要在计算器上重新路由和转换,以防止崩溃并使Sonic 2按预期播放.
此外,GRubbycoder不得不为TI计算器使用汇编程序,而不是他的端口所基于的Sonic 2反汇编项目所使用的汇编程序,这带来了兼容性障碍,而且他既不是Z80也不是TI-84 Plus CE的专家.
“一开始,我只有非常初级的Z80汇编知识,这意味着我在处理一些后来会困扰我的东西时做出了一些非常愚蠢的决定,”他说.
“因为模拟Fea的复杂性随着主系统的发展,我最终对TI-84 Plus CE的工作原理有了中等水平的了解,“GRubbycoder告诉我们.
从反汇编源代码组装游戏是第一个任务,虽然对TI友好的spasm-ng汇编器做了大部分工作,但Grubycoder仍然必须检查20,000行代码以确保一切都与TI-84 Plus CE兼容.
事实证明,绕过I/O访问并不是特别困难,因为计算器的硬件支持内存映射的I/O请求.
该端口只需要进行调整,以便其I/O端口请求到达计算器的内存映射IO位置,并使用一些粘合代码作为兼容层.
这款游戏自认为是在世嘉硬件上运行并与之对话,但实际上是在与TI计算器交互.
格鲁比编码者说:“这主要是一个很小的不便.
”他指出,视频调色板是硬件转换层实现的最复杂的部分.
不幸的是,端口的两个部分真的无法像它们在Master系统上那样工作.
首先,由于老式游戏机一次只能寻址64KB的数据,而且游戏的容量要大得多,所以Master系统根据需要使用了只读存储器来调入和调出内存映射数据块.
在TI-84 Plus CE上,速度相对较慢,因为它依赖闪存在需要时将数据复制到RAM中,因为没有足够的空间,即使有256KB的RAM,也不足以同时将每个存储体都放入内存中.
另一个问题是渲染器,因为TI-84 Plus CE没有图形加速硬件可言.
在计算图形的位置方面,eZ80中的16位乘法指令帮助加速了软件中的精灵和瓷砖打印.
也就是说,处理基于瓷砖的背景是一个挑战.
世嘉的控制台硬件为快速排列和滚动Sonic的关卡提供了大量支持,这种加速需要在计算器的eZ80上进行仿真.
格鲁比编码器实现了这一点,在TI的VRAM中使用了56KB的帧缓冲区和缓存系统,将瓷砖渲染时间减少了八分之一,使游戏实际上可以玩.
虽然不是一个完美的转换,但总的来说,它运行起来是一个很酷的编程项目,甚至与原始版本没有太大区别.
“从技术上讲,84 Plus CE端口保留了原始8位Sonic 2代码的90%到95%,”GRubbycoder说.
此外,由于计算器没有扬声器,所以没有音频,删除音频代码和材料至少会使游戏变小.
这一帧速率低于Master系统用户原本可以享受的60 FPS.
这位开发人员说:“在84Plus基地上,这是测试中模拟的模型,游戏在正常版本下的运行速度约为53%.
”游戏有一个快速模型,运行速度为74%,但这个版本没有敌人、老板,甚至没有标志关卡结束的门柱,这意味着即使是第一关也无法完成.
格鲁比科德说:“速度减慢几乎完全是因为只读存储器,特别是换进了包含Sonic逻辑的银行,所有的Badnik,以及游戏中的每一个噱头.
如果计算器没有等待状态,那么这根本就不是问题,但其他解决方案包括将这些银行转换为以84 Plus CE的24位模式运行,这样它们就会被跳转到这些银行,而不是一次加载所有银行.
但从技术上讲,如果一个只有一个计算器可以摆弄的非常无聊的学生想要从头到尾击败Sonic the Hedgehog 2,并容忍有点糟糕的帧速率,这是非常有可能的.
虽然现在配备了ARM CPU核心的高端计算器,如Nspire,可以运行真正的Genesis游戏,但对于那些寻求最佳计算器游戏体验的人来说,Nspire可能是更好的选择.
尽管如此,开发商仍在寻求在2015年的TI-84 Plus CE中添加更多Sonic游戏.
“在未来,我想尝试为计算器重新制作一些更难懂的Sonic游戏,”他说,“它们不会是大家都熟悉的平台,而是一些.
”Tiger Electronics的LCD游戏和Sonic Adventure Gamebook系列是我最感兴趣的重制游戏." .