gba吧 关注:147,885贴子:1,634,216

【教程】合卡游戏存档的导出和导入(使用nds或ndsl)

只看楼主收藏回复

这一两周在吧里翻了许多大佬的D卡烧录相关的帖子,恶补了不少D卡烧录的知识,自己也买了好几张D卡用ndsl实践了一番,买D卡花的钱其实都可以买张ez烧录卡了,玩得就是折腾嘛。。。(苦笑
吧里目前还没看到D合卡游戏的存档导出导入的相关帖子,自己试着折腾了下,已经可以现实将电脑上gba模拟器vba生成的存档和D合卡导出的存档互换,验证了两个游戏都已经成功,分别是《塞尔达传说:众神的三角神力&四之剑》和《银河战士:零点任务》,愿意折腾的吧友也可以试试其他游戏验证下。合卡的flash芯片烧录和dump速度很快,熟练操作后一次导入导出存档的操作10分钟内可以搞定。
合卡rom制作和烧录的过程,我就不赘述了,吧友们请移步到“daliu的1234”大佬的帖子去学习:https://tieba.baidu.com/p/8568658424


IP属地:上海1楼2023-11-10 13:19回复
    合卡存档导出导入操作的关键点:
    1、定位到想导入导出存档的游戏rom的位置(切分的第几个rom);
    2、定位到这个rom里你想要导出导入的存档的位置;
    3、定位存档位置需要预备些16进制地址换算的知识
    这里简单举个例子:地址0x1111000,‘0x’右边共7位数,记住左数第一个‘1’表示16MB,由于是16进制,则左数第二个‘1’表示16MB/16=1MB,左数第三个‘1’表示1MB/16=64KB,左数第四个‘1’表示64KB/16=4KB。


    IP属地:上海2楼2023-11-10 13:24
    回复
      下面开始正式的教程(上班能摸鱼的时候,不定时更新,可以等更新完再看)


      IP属地:上海3楼2023-11-10 13:29
      回复
        一、存档导出,以《银河战士:零点任务》为例

        1、定位到想导出存档的游戏rom的位置
        如上图,目标游戏rom起始在216MB位置,在192MB~224MB区间,属于切割rom的part7


        IP属地:上海4楼2023-11-10 13:53
        回复
          2、游玩下零点任务,记录下存档,一会儿存档放到电脑上用vba打开验证保存存档是否成功


          IP属地:上海5楼2023-11-10 14:03
          回复
            3、存档后,dump出part7的切割rom,起始位置选192MB,大小选32MB,dump完记住32MB rom的文件名。
            我这dump出的文件名为‘CASTLEVANIA2.gba’,可以发现就是rom 列表里的192MB位置开始存放的游戏。



            IP属地:上海6楼2023-11-10 14:15
            回复
              没想到我正在找教程,楼主就在实时更新


              IP属地:四川7楼2023-11-10 14:18
              收起回复
                4、将之前制作合卡烧录时(存档之前)的part7 rom 和存档后dump出的rom拷贝到电脑上,用16位文件比对软件进行比较(Beyond Compare 或者 UltraEdit),找到存档的起始地址。如下图,找到了零点任务的存档起始地址为0x01F80000


                IP属地:上海8楼2023-11-10 14:54
                回复
                  这里补充一点,带电池的合卡在制作合卡rom时,目录下生成的log已经标注了每个游戏的存档起始地址,那个地址可以直接使用,我也已经验证过了可行。不带电池的合卡需要上面的比对rom操作找到存档起始位置。


                  IP属地:上海9楼2023-11-10 15:06
                  回复
                    5、既然已经知道了存档起始地址,那么知道存档大小后,也可以定位到存档结束的地址。将游戏原rom拖进GBA Tool Advance,可看到零点任务的存档大小为256Kbit,除以8得32KB(位bit和字节Byte的换算)。再根据2楼的例子算下,左数第四个‘1’(右数第四位)表示4KB,那么如果‘1’换成‘8’,4KB*8=32KB,用16进制表示为0x00008000。最终我们从存档后dump出的rom里要找的存档位置起始于0x01F80000,向后偏移到0x01F88000(不包括0x01F88000地址的数据)。


                    IP属地:上海11楼2023-11-10 16:21
                    回复
                      6、打开Beyond Compare,选择16进制比较,将导出的rom拖进左边文本框,选择从存档起始地址到存档结束地址内的所有16进制数据,复制后粘贴到右边文本框中,然后保存成与电脑vba要运行验证的游戏的rom同名的.sav文件。(切记:数据包含起始地址,而不包含刚才计算的结束地址)。




                      IP属地:上海12楼2023-11-10 17:01
                      回复
                        7、电脑上vba打开游戏,vba会自动加载目录下和游戏rom同名的.sav文件,验证导出存档成功。


                        IP属地:上海13楼2023-11-10 17:05
                        回复
                          至此,存档导出的步骤已经结束。
                          了解了定位游戏rom和定位rom里的存档位置的方法,我想吧友应该也能想到怎么导入存档了吧。把要导入的存档数据替换rom里的存档位置,再把rom烧回合卡里的对应rom位置就行啦。导入的步骤我稍后再更新。


                          IP属地:上海来自iPhone客户端14楼2023-11-10 17:43
                          回复
                            支持,加油


                            IP属地:江苏15楼2023-11-10 18:37
                            回复
                              6。but我用带电池d卡直接gbabf导出就行


                              IP属地:辽宁来自iPhone客户端16楼2023-11-10 20:46
                              收起回复