妖猫村正 发表于 2006-6-11 03:47:05

[ZT]来谈谈EZ系列的存档设计,许多不为人知的秘密

首先,要指出的是,EZ全系列都是采用SRAM+可充电锂离子电池构成的记忆结构。然后下面我要根据存档机制把EZ系列分为两大阵营。

第一阵营就是EZ1和EZ2。第二阵营是EZ3和EZ4,以及EZ4L。

第一阵营在硬件共同点就是,全部都是才用norflash型芯片为储存载体。容量低,成本高,但读取速度和稳定性最高。也是最接近正版卡带的设计。

在这种设计之下,游戏的数量肯定是有限的。于是,存档的分配也较为容易。以256M的EZ2为例,他的存档芯片是2M的(1G则配以8M)。

由Loader根据不同的游戏的需要将存档芯片上的空间固定的分配给某个游戏。就好比固定了座位一样。无论这个游戏是否运行,这块空间都是由这个游戏占有。

但是这样的话就带来了两个问题

第一:溢出,一些自制程序的存档空间可不像商业游戏那么规矩。比如FC模拟器,他会无限制的占用存档芯片的空间,你装进模拟器的游戏越多,空间也就越大。而这个空间的大小程序是没有办法识别的。当运行的时候就会跑出自己的位置,去占用别人的位置。这样在他后面的游戏的空间就会被强占、重写。这样后面的那个游戏也就会“掉档”。遇到这类程序的方法,通常就是尽可能多的手工设置其存档大小。

第二:不足,宝灯一开始设计的时候,最大的游戏存档也就512K,2M的芯片足够了。可是后来的64M的SMA4居然用到了1M存档。于是256M的EZ2装两个这种1M存档的游戏就不能再装了。虽然norflash上还有空间,但存档空间却已经占满了。这个时候如果强行再加入游戏,就会互相占用存档空间,造成掉档。

这些问题后来都得到了一定程度上的解决,也就是EZ1/2加入了SMS功能,从平时的理解来看,这是一种存档备份功能。将SRAM里面的数据拷贝到norflash上面进行备份。这个时候norflash就好比一个仓库,将存档拷出来存放,等需要时再写回卡里。这样”固定”座位制,就变成了“轮流”制。谁需要谁就占用SRAM。当A游戏完毕时要将存档备份出来,然后接下去的B游戏继续使用同样的存档空间。当再次运行A游戏时,再将存档拷贝回SRAM。

无奈EZ1/2的硬件性能有限,SMS系统需要手工备份和还原。所以大多数人,以为把”选择使用SMS”选上就万年不掉档了。其实他们都没有真正的去使用……

于是来到了EZ3时代。也就是一个容量突飞猛进第二阵营的时代。

第二阵营的特点,存档同样是可充锂电+SRAM,游戏则是以PSRAM和NANDFLASH为主架构,辅助以最成熟稳定NORFLASH进行储存。两套方案并存,有效降低成本,同时保证稳定性。但有个缺点,开发难度太大……

拿EZ3来说,早在3年前就开始使用现在被普遍使用的Nand闪存为储存载体,与现在的SD卡相比,一个是内置一个是外置。并且EZ3还拥有压缩功能。

在这样的大容量之下,一张卡内存放数十个游戏都很平常。无论多大的存档芯片空间都显得力不从心。与是之前辅助用的手动SMS机能就得提到台面上来了。

也就是自动SMS机能。每次开机或软复位后,内核都会检验SRAM芯片里的数据是否发生变化,如果有,怎将之备份到储存卡(内置芯片)上。这样,无论多少个的游戏,存档空间都是足够用的。除非连储存卡的容量都用关了(笑)。

这样子在SRAM里面和卡片上各有一份相同的存档存在。当再次运行该游戏的时候,内核则将存档从卡上写入SRAM,然后再启动游戏。如果卡上没有文件,则游戏还是会从SRAM里读取数据。但要注意,这个时候你所玩的游戏没有改变,也就是说SRAM里面的数据依然是原先游戏的存档,那么才不会出现掉档的现象。假若玩过其他游戏,其他游戏就会向SRAM里面写入他自己的存档,而原先的存档就覆盖掉了。

EZ3和EZ4的备份思想是一致的。但处理上有些微妙的不同。

EZ3的内核处理方式是,新建/覆盖;就是说内核负责将SRAM里面的数据提取出来,然后再在闪存上创建相应的存档文件,如果原来有文件的存在,则用新文件覆盖。

EZ4的内核处理方式是,写入;内核不会创建文件,只会负责向原有的文件中写入数据,好处就是备份速度提高。因此,如果在转换NDS游戏时,没有将SAV文件一起拷贝到miniSD卡上。内核就不能正确地备份存档数据,所玩的游戏就会互相覆盖SRAM里面的数据,说白了就是掉档。所以一定要确保向miniSD卡上拷贝游戏时,别忘了带上由转换程序生成的存档文件。

目前NDS游戏最大的存档大小是2M,而EZ4所拥有的存档芯片大小是8M,基本可以应付今后出现更加巨大的存档。

以上内容转载自----http://www.tobitai.net/article.asp?id=501
页: [1]
查看完整版本: [ZT]来谈谈EZ系列的存档设计,许多不为人知的秘密