漫谈卡带

游戏卡带(Cartridge, 或者 ROM)指保存 Game Boy 游戏内容的介质. Game Boy 的 Cartridge 和光盘等存储介质并不相同. Cartridge 除了存储有游戏内容外, 还可能包含玩家的游戏存档(可读写的一块存储空间), 一枚电池, 一个定时器甚至是一个光敏原件. 比起单纯的数据存储设备, 它更像是一个专用于 Game Boy 游戏机的外设, 就像今天的鼠标和键盘之于 PC 一样.

在本章节, 读者将学习到如何解析 Cartridge 的内容, 理解 Game Boy 的 Cartridge 数据存储结构, 真正开始实现 Game Boy 仿真器的第一步.

卡带最初被应用在早期的家用电脑中, 此时的家用电脑使用特殊的总线端口, 能够将内含软件的卡带插入该端口, 其所存储的数据可以被直接内存映射到系统地址空间. 但大多数情况下, 卡带端口的设计相当简陋, 地址和数据总线通过边缘连接器完全暴露在外. Game Boy 的游戏卡带也是如此, 如下图所示, 这是一盒被拆开的《精灵宝可梦银》的卡带(1999年发售), 图片下方一排的黄色触点便是插槽端口.

img

在那个年代玩游戏是一件奢侈的事情, 在小心翼翼的躲避父母和老师的视线后, 有时也无法让人尽兴: 当把游戏卡带插入插槽后, 游戏在运行的时候却莫名其妙的花屏. 这个时候有经验的小伙伴就会使出灵魂技能"吹气"朝卡带插口吹气. 虽然那个时候不知道原理是什么, 但十有八九能解决问题. 笔者小时候甚至总结出了一些"吹气"经验, 比如在吹的过程中口腔需要保持干燥, 一次只能吹三下等. 其实细究其原因, 无非是长时间暴露在空气中的插口和插槽被细小的灰尘污染导致了接触不良, 通过吹气可以达到清洁作用.

相比于软盘, 光盘等其他介质, 将软件储存在卡带上有其优势和劣势. 由于卡带能被映射到系统的标准地址空间, 因此其存储的软件能像常规内存一样被系统及时读取, 而不必从较慢的存储器中读取数据, 再传输到内存中执行. 这能降低软件对内存的需求, 剩余更多的可用内存空间. 但是卡带通常比光盘等其他存储介质有着更小的容量且成本更高, 虽然有一些技术比如 Bank Switching 可以缓解这些问题, 但是之后随着程序的体积越来越庞大, 更大容量且更低成本的光盘逐渐占据了绝对的上风.

在现代, 由于磁盘和 NAND 储存器(包括 Flash 卡, SD 卡, SSD 硬盘等)技术的发展成熟, 卡带逐渐从个人电脑和游戏主机中消失, 但仍然在特定范围内被使用, 比如一些掌上游戏机, 例如 Nintendo DS, Nintendo 3DS, Sony PlayStation Vita 和 Nintendo Switch.