你的眼睛不会欺骗你。从 5.0-14690 开始,Dolphin 现在直接内置了 mGBA,作为处理 Game Boy Advance 与 GameCube 游戏连接的新方法。对于那些不知道的人来说,mGBA 是这个时代最著名、最准确的 GBA 模拟器,并且自问世以来一直在迅速改进。最近,我们写了关于 mGBA 添加对我们的 TCP GBA 协议的支持,但这是全新的东西。通过 bonta 完成的集成和同步工作,现在可以大大简化将您最喜爱的 GameCube 游戏与 Game Boy Advance 的多人游戏和其他奖励功能连接起来。当设置为一个或多个控制器端口时,称为集成 GBA 的精简版 mGBA 将与 Dolphin 一起启动。这些 mGBA 实例与 GameCube 仿真时钟同步,以实现无可挑剔的连接稳定性。通过将这两个模拟器整合到一个包中,GBA 连接功能现在可以与流行的功能(如保存状态、输入录音和网络播放)一起使用!所有这一切都伴随着改进的性能和兼容性的额外好处。如果您不相信我们,请自己检查一下!达到这一点是跨越几代开发人员和模拟器的试验。如果我们要讲述模拟 GBA 到 GCN 通信背后的完整故事,我们必须从头开始。作为 GameCube 的一项功能,Game Boy Advance 的连接性在系统早期在 E3、杂志和电视广告等活动中得到了很大程度的推动。来自 Sonic Team USA、Nintendo EAD、The Pokemon Company 和其他公司的才华横溢的开发人员发布了可以利用该功能的游戏,很容易看到其潜力。最好的情况是,GBA 连接游戏非常有趣,并提供您在任何其他控制台上都找不到的相当独特的体验。拥有 GameCube 的人都知道,这些体验很少。该功能被留在了一个尴尬的地方,它很昂贵,需要很多游戏来证明成本是合理的,但由于用户群很小,大多数开发人员不愿意在 GBA 连接功能上投入大量精力。有一些不可否认的宝石,但通常 GBA 连接功能作为某种复选框功能被添加得很差。现在设置库后,我们可以将 GBA 连接功能的类型分为五个粗略的类别。多人游戏 - 这些游戏严重依赖 GBA <-> GCN 连接来为每个玩家提供独特的信息或他们自己的屏幕,有时可以玩。这包括塞尔达传说:四剑历险记、最终幻想水晶编年史和吃豆人大战。奖励积分归于因素 5,因为它允许 Rogue Squadron III 中的玩家在竞技多人游戏中链接 GBA 以用作隐藏命令的额外屏幕,即使它的数量不多。可转移小游戏 - 这些游戏可让您将可分离游戏转移到 GBA。有时是奖励 NES 游戏,有时是您正在玩的游戏的微型版本。有时是... Crash Blast。具有此功能的游戏示例包括 Nintendo Puzzle Collection、Animal Crossing 和技术上的 Crash Bandicoot: Wrath of Cortex。奖励模式或额外内容 - 游戏还可以在单人游戏环境中使用 GBA 来解锁主游戏中的奖励内容。 Animal Crossing 的 GBA 岛、洛克人 X:指挥任务的宝藏追踪器和 Wind Waker 的 Tingle Tuner 就是很好的例子。这似乎是一个相当昂贵的奖励功能,但至少它不是解锁快速翘曲的 amiibo,对吧?
与 GBA 游戏的连接 - 标题还可以与特定的 GBA 游戏连接以解锁内容或在一个或两个游戏之间执行操作。许多游戏都这样做,包括 Harvest Moon: A Wonderful Life、Sonic Adventure 2: Battle 和 Metroid Prime。请注意,Sonic Adventure 2:Battle 也可以连接到没有游戏的 GBA,因为它的功能略低。口袋妖怪游戏 - 我们将其分为一个单独的类别,因为在这种情况下 GBA 游戏是主要产品。 Pokemon Colosseum、Pokemon XD: Gale of Darkness、Pokemon Box 以及它们的奖励光盘都可以连接到各种第 3 代 Pokemon GBA 游戏以获得奖励、交易和战斗。 Pokemon Box 还可以让您存储 Pokemon 并具有冒险模式,您可以在没有 Game Boy Player 的情况下在大屏幕上玩 GBA 游戏。尽管如此,真正支持 GBA 连接的少数游戏还是带来了有趣的仿真挑战。多年来,一些开发人员开始执行多系统任务。最早记录的 GBA 连接仿真实现可以追溯到 2009 年左右,该功能首先在 Dolphin r2578 中发现。虽然我们不知道将最早版本连接到 GBA 模拟器背后的确切细节,但我们确实从开发人员帐户中知道,围绕该时代最好的 GBA 模拟器 VBA-M 对多个想法进行了试验。但在我们可以连接到另一个模拟器之前,我们需要了解连接的实际工作方式。 GameCube 游戏实际上会加密发送到各种游戏的 GBA 二进制文件,它这样做的方式实际上在早期给 Dolphin 带来了一些问题。加密过程在数字信号处理器 (DSP) 上以我们称为 GBA 微码的特殊微码进行。现在这听起来可能很奇怪,因为大多数人认为 GameCube/Wii 的数字信号处理器 (DSP) 专门用于音频模拟,但有时它也可以用于其他任务。在这种情况下,它用于将发送到 GBA 的可执行文件编码为一种弱混淆形式。这个过程中最值得注意的部分是 GBA BIOS 用于解密的密码包括一个步骤,其中数据与其作者的昵称 kawasedo 进行异或。这指的是 Tomohiro Kawasae,他最终还编写了 NES 仿真功能,这些功能将用于 GBA 连接游戏,如动物之森、银河战士 Prime 等。所有这些都在初始连接期间发生一次,并且只需要一帧的一小部分。之后,游戏会在您甚至听到音频中断之前迅速跳回之前的微码。需要特别说明的是,某些第一方任天堂游戏跳过了这一步并且从不交换微码。在这些罕见的情况下,游戏(或服务盘)将直接在 PowerPC 代码中实现加密过程。这包括塞尔达传说:风之杖、动物之森和一些可能的服务光盘。
除了那一点点曲线球之外,GCN 与 GBA 通信的协议非常简单。 GBA 链路电缆连接到 GBA 的数据端口并插入 GameCube 上的控制器端口。在 GameCube 端,通信由串行接口 (SI) 处理。主要问题是找出一种在两个完全不同的模拟器之间实现通信的好方法。虽然我们知道尝试了多种方法,但那个时代幸存的实现使用传输控制协议 (TCP) 来桥接 GameCube 和 GBA 模拟器之间的通信。虽然使用网络通信协议似乎是一个奇怪的选择,但做出这一决定是为了保持将多个独立设备连接到 GameCube 的体验。这个想法是,如果需要,您仍然可以在同一台 PC 上连接 VBA-M,或者您可以从同一网络上的另一台计算机连接它。这些努力由 shuffle2 带头,虽然旧的支持日志似乎表明该功能只是一个框架并且功能很少,但用户确实声称可以进入 Animal Crossing 的 GBA 岛。想拿就拿吧。虽然最初的 GBA 控制器选项出现在 2009 年,但真正可玩性的第一个证据出现在 2010 年初,shuffle2 的开发帖子解释了如何在 VBA-M 中使用新的 Joybus 选项以及在 Dolphin 中该做什么。当然,他还包含了一些会让潜在玩家惊叹的屏幕截图。 GBA 连接终于开始工作了,但性能却很糟糕。这是由于我们之前提到的混淆。 Dolphin 的 DSP-HLE 不支持 GBA 微码,迫使用户退回到 DSP-LLE。这不是我们今天喜欢的 DSP-LLE Recompiler。不,这是 DSP-LLE 解释器。 shuffle2 对该项目失去了兴趣,表示在解决极端性能问题之前,做任何事情都没有多大意义。这最终将通过 shuffle2 开发的 GBA 微码的 DSP-HLE 实现来解决。有了 DSP-HLE 的支持,少数可以运行的游戏的性能猛增,但并没有解决核心可用性问题和低兼容性问题。 2011 年,对该功能进展缓慢感到沮丧,最终导致 VBA-M 和 Dolphin 开发人员之间的关系紧张。这出戏导致 shuffle2 对 VBA-M 对 Dolphin 连接项目失去兴趣,但这并不是他最后一次涉足该领域GBA 连通性。他于 2014 年返回,这次使用 Higan GBA 核心作为他新实验的催化剂。在考虑最好的 GBA 模拟器时,使用 Higan 的 GBA 内核从表面上看似乎很奇怪,尤其是在 2014 年。它相当不成熟,无法与 VBA-M 的高兼容性或性能相提并论。但这不是他需要的。 Higan 的 GBA 核心提供了 VBA-M 绝对不能提供的东西:一个干净、现代化的代码库,更容易使用和集成。他还放弃了 TCP 通信实现。 shuffle2 反而写了一个新的共享内存通信方法。这是一种较低开销的进程间通信方法,允许更紧密的同步,但意味着您将无法在单独的机器上运行 GBA。看到在 LAN 上运行 GBA 模拟器对前一种方法的工作有多大问题后,他不再认为这是一个可行的想法。这些更改产生了立竿见影的效果,因为性能和兼容性都有了巨大的明显改进。塞尔达传说:四剑历险记(和四剑+!)现在变得流畅且反应灵敏。还有大量新游戏也有效,例如塞尔达传说:风之杖、任天堂拼图合集、动物之森和洛克人 X:指挥任务。现在有超过六款游戏支持。甚至更令人印象深刻?所有这些游戏都在全速运行!我们在博客上对这个功能感到非常兴奋,我们制作了一个视频,期待它的最终发布!对于那些跟随开发的人来说,你已经知道这个实现永远不会被合并。正如我们在博客上痛苦地了解到的那样,有时最困难的部分不是证明某些东西可以工作,而是清理它并使其完成的过程。兼容性和性能都很好,但使用起来很困难,而且有很多方法会导致崩溃。还有一个小问题,在原型中一次只能连接一个 GBA 模拟器,并且实现被锁定在 Windows 机器上。虽然所有这些问题都可以通过足够的时间和精力来解决,但该项目最终停滞不前,永远不会看到曙光。
随着 Higan Dolphin 共享内存项目的永久暂停,GBA 连接仿真处于生命支持状态。早期的协议只支持几款游戏,并没有多大用处。它缓慢,繁琐,更糟糕的是,双方的许多开发人员都对支持的连接项目表示不屑。由于 VBA-M 开发人员甚至制定了从官方版本中删除该功能的计划,看起来好像一切都在崩溃......直到它没有。事情能够在艰难时期保持一致的一个关键原因是一个名为skidau的开发人员。他们是 Dolphin 和 VBA-M 的贡献者,还帮助了 2010 年实施的 GBA 方面。在那之后的几年里,他们提供支持并帮助用户获得 GBA 连接功能。凭借这一经验,他们对大湾区连通性方面的问题和挑战有了深入的了解。与 shuffle2 使用他们从 2010 年实现中学到的东西来创建新协议不同,skidau 接受了他们学到的东西并试图改善当前的 TCP GBA 情况。 2015 年,他们的劳动成果随着对 Dolphin 和 VBA-M 的大量更改而交付。一夜之间,Dolphin 从能够连接到几个游戏到至少与大多数 GBA 连接库有一定的兼容性。这是通过一个聪明的系统实现的,该系统使模拟器以最少的同步进行通信。其中的关键组成部分是 GBA 模拟器在等待来自 Dolphin 的数据包时保持暂停状态。 Dolphin 会在连接时将数据包发送到 GBA 仿真器,告诉 GBA 它在仿真中的位置以及预计下一个回复的时间。然后,GBA 模拟器将在模拟无上限之前立即回复数据包中报告的访客时间。如果此时它没有收到另一个命令,GBA 仿真器将暂停并等待下一个数据包。解决方案相当粗糙,帧速度也不是很好,但它奏效了。这个核心思想将成为未来几年 Dolphin 中 GBA 连接的基础,即使现在该实现中的一些代码仍在使用!正是在这一点上,天平开始倾斜,GBA <-> GCN 连接性不仅仅是一种实验性的好奇心。通过使用 Dolphin 和 VBA-M,您可以访问流行游戏中的 GBA 连接功能,例如风之杖和塞尔达传说:四剑大冒险中的多人游戏。大量其他游戏也可以运行,甚至《最终幻想水晶编年史》也可以连接……至少在某种程度上是这样。大多数其他功能较小的游戏都可以运行,但这里和那里有一些例外。事情终于走到了一起,但该功能并没有发挥其全部潜力。首先需要澄清的是,虽然 TCP 是一种网络通信协议,但 TCP GBA 在网络上的工作效果并不好。事实上,像使用 WiFi 这样简单的事情就足以将延迟推得太高以维持连接。有线局域网可以在某些游戏中工作,但即便如此,它也非常接近。该功能仅在一款游戏《塞尔达传说:四剑大冒险》中真正适用于局域网,并增加了大量的性能影响。说到性能,使用 TCP GBA 的 CPU 要求对很多用户来说是一个巨大的破坏。在最基础上,与仅运行基础游戏相比,所有的暂停和等待意味着您需要一台更强大的计算机来保持全速运行。请记住,早在 2015 年,您很可能会使用 LLE(重新编译器)音频来连接您的 GBA,因为 HLE 音频限制兼容性的众多问题。只有最强大的计算机才能在像塞尔达传说:四剑大冒险这样同时连接多个 VBA-M 实例的游戏中保持全速运行。无论您尝试做什么,最终幻想水晶编年史都会因输入丢失而缓慢。但这些游戏至少在大部分时间都可以连接和运行。 2015 年实施的最大问题之一是一些相当大的游戏难以连接。我们正在谈论 Pokemon Colosseum 和 XD 以及他们的奖励光盘。对于许多用户来说,这是 GBA 连接最大的失望。多年来,聪明的用户已经想出了一些技巧来让它有时连接起来。战斗更加一致,因为它有重试连接选项,但交易几乎不可能。
是什么导致了所有这些问题,尤其是考虑到协议实际上有多简单?关键在于 TCP GBA 如何与 Dolphin 保持联系。这些游戏特别喜欢发送大量命令,有时每帧发送 200 多个命令。这暴露了 TCP GBA 协议中一个相当严重的缺陷。也就是说,如果他们在继续向前模拟以赶上前一个命令的点时收到命令,他们可能会被绊倒。这可能会重复发生,直到 GBA 远远落后以至于 GameCube 得到没有意义的响应。此时,游戏将停止与 GBA 对话,并且会发生某种通信错误。更糟糕的是,如果通信错误没有得到妥善处理,其中一个或两个模拟器可能会完全冻结,因为每个模拟器都会陷入困境,等待另一个的响应。超时功能通常会在崩溃时完全阻止,但肯定有时一切都会发生灾难性的错误。虽然指责糟糕的模拟很容易,但游戏并没有让事情变得简单。许多游戏都依赖于比赛条件,甚至在控制台上也存在计时问题!在 2015 年 TCP GBA 实施之后的几年里,改进几乎没有那么显着,但不断使情况好转一些。大多数改进都在实际协议之外。最值得注意的是修复 HLE 音频,允许连接多个 TCP GBA,从而在这些情况下显着提高性能。对逆向工程 DSP-LLE 的添加允许在挑剔的游戏中进行连接,而无需专门从 GameCube 或 Wii 转储 DSP 文件。虽然 GameCube 方面的情况没有改变,但 GBA 的格局正在发生范式转变。 VBA-M 现在是一个传奇的仿真器,它牢牢地载入了仿真历史的史册,但是新一代的仿真器已经出现。很快,mGBA 不断改进并成为具有大量高级功能的强大、准确的替代方案。随着用户看到支持更多硬件外围设备,许多人想知道 Joybus 支持和与 Dolphin 的连接是否最终会出现。事实证明,用户并不是唯一感兴趣的人; endrift 还想实现对 Joybus 的支持,甚至向 Dolphin 提交了修复程序以准备支持。不幸的是,mGBA 的其他功能和工作导致事情一次又一次地延迟。最后,在 2021 年,mGBA 0.9 中添加了对 Dolphin 连接的支持! mGBA 更准确的仿真立即对兼容性产生了影响。在《塞尔达传说:四剑+》等 GBA 连接游戏中困扰 VBA-M 的音频问题在 mGBA 中没有发生。 Endrift 对 Dolphin 的其他修复还修复了与《索尼克大冒险 2:战斗》和《最终幻想水晶编年史》等游戏的连接。除了正确播放音频之外,endrift 和 bonta 修复了塞尔达传说:四剑 + 中回合之间的关键挂起。更令人印象深刻的是,所有这些更改都是在 2015 协议的范围内进行的!向后兼容性不受影响,VBA-M 不需要任何更改。然而,在所有的准备和开发过程中,另一个项目揭开了面纱,一个不受 TCP GBA 协议限制的项目。在开发渠道的讨论中,bonta 注意到一些开发人员正在与 endrift 讨论对 GBA <-> GCN 协议的潜在改进。考虑到他的个人项目可能会引起人们的兴趣,他决定直言不讳并宣布他一直致力于将 mGBA 直接集成到 Dolphin 中。他甚至声称这些内部 GBA 与 netplay 兼容。
大承诺很容易实现......