题图:我自己留存多年的GBA《最终幻想战略版Advance》D商卡带
一直想了解下GBA卡带的存储方式有多少种,搜了搜发现贴吧有大神分享了这样的一篇稿子,于是打算转载记录下来,如果原作者(maxzhou88)看到觉得不妥,可留言告知,我会进行删除。
下面的正文基本不会对原文进行修改,只做排版上的整理美化,对于里面一些技术方面的关键词,我会不定期加注必要说明,以便更好地理解。
一、EEPROM记忆方式

EEPROM记忆方式的卡带比较多,记忆容量分两种:512Byte 和 8K Byte,每个字节有10万次擦除寿命。EEPROM IC 有8个脚,他们分别连接到GBA卡匣总线(GamePak Bus)的ROMCS、RD、WR、AD0、A23、GND、GND、VDD上。
这种EEPROM是串口方式工作,其数据线D0接在卡匣总线的AD0,片选接在A23上,32MB(GBA单个ROM最大的空间)卡带ROM空间的高16MB被EEPROM占用,因此这种记忆类型的卡带最大只有16MB。为了可靠地读写EEPROM中的数据,其地址要映射到0xd000000,这是GamePak的Wait State 2区,这是最低速的卡带ROM读写区,同时读写操作用DMA3来进行,以保证传送时间的连续性。
早期的第三方卡带解码IC(Decoder)可以将这种电路通过硬件补丁映射到SRAM的地址空间0xe000000,这样就可以用SRAM加电池来代替EEPROM记忆,而且GBA ROM不需打软件补丁。后来有了如GBATA之类的软件补丁工具,可以预先将GBA ROM打SRAM记忆补丁,因此D商就可以用统一的SRAM记忆的电路做所有记忆类型的卡带。
二、Flash记忆方式

Flash记忆方式的卡带分为64K Byte和128K Byte,访问地址映射到0xe000000~0xe00ffff(这和SRAM的地址空间一样),这个空间只有64KB,对于128KB的Flash还得切Bank。
Flash记忆的好处是,比EEPROM的容量大(如口袋之类的RPG游戏),比SRAM安全,一般不会掉档。当然也有麻烦,就是不同厂家的Flash要用不同的驱动代码,一般来说开发人员要将不同厂家的驱动都放在软件中,通过读Flash的ID来判别厂家型号。
这些厂家是(下面的书写方式有待确认):
- SST 64KB 16x4KB Sectors
- Macronix 64K 或128K 16x4KB Sectors
- Panasonic 64K 16x4KB Sectors
- Atmel 64K 512x128 Sectors
Atmel的Flash有点特别,它是小扇区(Sector)Flash,但可以通过软件来模拟4KB的扇区,但老任好象与Atmel有仇似的,从来不用Atmel的东西,只是第三方卡带使用。
还有一个限制是,由于GBA的GamePak Bus是交换方式的总线(Switch data and address bus),16bit的ROM空间和8bit的Flash/SRAM空间在读数据时会有冲突,所以用来读0xe000000~0xe00ffff空间的程序必须放在RAM中而不能放在游戏ROM中,但写就没有这限制。
对于大于64KB的Flash记忆,可以用如下切Bank的方式(0
是数字零):
切Bank命令
- 0x00 -> 0xe005555
- 0x55 -> 0xe002aaa
- 0xb0 -> 0xe005555
选择Bank号
- 0或1 -> 0xe000000
和EEPROM记忆方式类似,早期的第三方卡带解码IC(Decoder)可以将这种电路通过硬件补丁来过滤Flash的操作命令,将实际要写入的数据直接写道SRAM中。后来有了SRAM补丁软件工具,D商就直接将游戏ROM打SRAM补丁来做这类卡带了。
三、SRAM记忆方式

SRAM记忆方式的卡带一般为32K Byte, 虽然其地址空间映射到0xe000000~0xe00ffff这个64KB空间中,但由于没有64KB这种规格的SRAM,所以一般用32KB的62256 SRAM,如果要用64K来做记忆(如GBA上的NES模拟器等),那只好用1Mbit的628128 SRAM来代替。
和Flash的限制一样,用来读0xe000000~0xe00ffff空间的程序必须放在RAM中而不能放在游戏ROM中,但写就没有这限制。
用SRAM来做记忆的好处是,读写速度比Flash来得快,寿命取决于电池,没有能写多少次的问题。但坏处也可想而知,比较容易掉档。大家注意没有,老任原装SRAM卡带的倒数第二脚要比其它脚短一点,这个脚在其它的(FeRAM也除外)记忆方式是和别的脚一样长,这就是原装卡带的SRAM记忆保护,是用软件中断来实现的,原作者的另一篇文章《关于GBA卡带SRAM的掉档防护》有具体介绍其机制。
可惜,D商们大都不懂这些,他们将SRAM记忆方式的卡带的脚都做成一样长。
四、(原帖此楼被删,正在与原作者联系,不知道能否找到相关资料)
五、NoSave无记忆方式

无记忆类型的游戏也很多,电路也最简单。大家看到没有 ,上面那个卡带就一颗MASK ROM,连解码IC(Decoder)也没有,奇怪吧?其实Decoder还是有的,GBA的单卡Decoder是一个地址计数器,老任将这电路做在MASK ROM中了,这也只有像老任这样的大公司才做的出来,老任是叫他的铁哥们- -台湾旺宏电子(MXIC)帮他开IC,旺宏又是开MASK ROM的大厂,他可不敢得罪老任,老任叫他怎么做他就得怎么做。
其实上面图片中所有的原装卡带的Decoder都是做在MASK ROM中,不象D商的卡带(无论是单卡还是合卡)都是用外接绑定Decoder来做卡带,所以大家看到D商的卡带都有颗黑胶(有人叫牛屎)。
六、带时钟电路的Flash(Flash with Clock)记忆方式

现在带时钟功能的卡带真是少见了,我(原作者)除了在烧录卡上还能看见有时钟功能的合卡外,我(原作者)手上只有一个有时钟功能的单卡(还是个坏的,时钟不动作,也许是假的吧?)。图上面的那个8脚IC就是时钟IC,内部的时间参数由电池维持。
实时时钟RTC的编程地址:80000Cx
七、D商(Bootleg)的Decoder+Flash-ROM+SRAM+Battery卡带

这就是现在大家还能卖到的D商卡带,包括合卡和单卡,Dcoder大多是黑胶(牛屎),记忆统一用SRAM+电池,游戏ROM用拆机旧片FLASH或Downgrade Flash COB (俗称排骨板),电池是非可充电型电池。游戏都用打过SRAM补丁的ROM,卡带插脚都做成一样长。
非常感谢maxzhou88大佬,贴吧原帖的第四种记忆方式那楼不见了,目前我在贴吧私信了大佬,不知道是否会回复,如果你恰好看到这篇文章,又恰好了解关于GBA记忆方式的内容,希望你能留言告诉我~万分感谢!
Comments | NOTHING