gba吧 关注:147,884贴子:1,634,206

教你如何自制适配D商卡带的rom

只看楼主收藏回复

这段时间研究了D商芯片记忆卡带中,魔改rom的存档代码,总算是有所心得。好东西不独吞,故起草此文。
本教程目前仅适合,存档方式为FLASH 128KB的,此类rom多数为口袋妖怪及其改版。
其他存档方式(如EPPROM),目前还没解决,有成果了会立即在此贴跟进。
那么在一切开始之前,先说一件重要的事。
导出卡带里的原rom做备份!
导出卡带里的原rom做备份!
导出卡带里的原rom做备份!
完毕,接下来请看图。

上面两种卡带,是按此教程魔改rom后烧入并测试通过的。rom包括蓝绿宝石、究绿、漆黑魅影、火红、无界以及激进红。
观察一下自己的卡带构造是否与上述图中相仿,不相仿也没事,我在此帖2楼放了魔改蓝宝石rom以供测试(仅8M烧录快)。
如果魔改蓝宝石rom不能在你的卡带上正常存档与读档,那么到此为止,此教程暂不适合你。
接下来请前往该帖3楼。


IP属地:上海1楼2023-11-20 00:26回复
    测试用魔改蓝宝石链接。
    链接:https://pan.baidu.com/s/12_YlcdcSzy98HV0ytVpdAQ
    提取码:jnse


    IP属地:上海2楼2023-11-20 00:26
    回复
      本教程涉及到的工具已整合成压缩包放在4楼,仅供PC端使用,请先下载后解压并安装。
      首先,你得学会一个叫“地址”的概念。


      用Hexcmp打开rom文件,鼠标左键点中任一处数据,在状态栏处(图中红框)就会显示该数据在文件中的“地址”。
      例如图一中的数据“DA”的地址就是“0x324515”(图中红框)。
      例如图二中的数据“AE”的地址就是“0x1324515”(图中红框)。
      如果rom中有程序需要访问该数据,那么该数据的“地址”就会被“反过来写”留在rom中(图中黄框)。
      例如图一中的数据“DA”,如果程序需要访问它,那么rom中就会有“15453208”(图中黄框)。
      例如图二中的数据“AE”,如果程序需要访问它,那么rom中就会有“15453209”(图中黄框)。
      学会这些就够了,其余的不用想太多,接下来前往该帖5楼继续教程。


      IP属地:上海3楼2023-11-20 00:28
      回复
        教程涉及到的工具包链接。
        链接:https://pan.baidu.com/s/1EcvzdY8XjdIivAiUcaOV-Q
        提取码:czg6


        IP属地:上海4楼2023-11-20 00:28
        收起回复
          我们直接拿“火红2012汉化版”开刀。
          用Winhex打开“D商存档代码”文件,在开头的数据处鼠标右键“选块开始”,在末尾的数据处鼠标右键“选块结尾”,那么整块数据都被你选中了。
          Tips:“D商存档代码”的这段数据是提取出来的,它原本的“地址”位于魔改rom中的“0xFE00000”。
          再用Winhex打开“火红b2012汉化版”的rom,在工具栏中的选项卡点击“位置”→“转到偏移地址”,输入FE0000后跳转,鼠标滚轮往下翻几次,发现数据全呈“FF”字样,那么说明这块数据是空白的,你可以直接使用。
          Winhex回到“D商存档代码”,在选中的整块数据上鼠标右键“编辑”→“复制选块”→“标准”。再来到“火红2012汉化版”,在“地址0xFE0000”的数据上鼠标右键“编辑”→“剪贴板数据”→“写入”,保存文件并关闭Winhex即完成代码的转移。
          接下来前往该帖7楼继续教程。
          可倘若你修改的是改版rom,在“地址0xFE0000”有非“FF”字样的数据不能使用,那么前往该帖6楼继续教程。


          IP属地:上海5楼2023-11-20 00:29
          回复
            既然此处不能用那就换一处,看看“地址0xFD0000”行不行?或者看看“0x1FE0000”行不行?这个只能自己去找,毕竟地球范围内的改版rom实在太多。建议小白还是找“地址”后4位为“0000”的,方便后续对“D商存档代码”的改动(高手请无视)。

            好现在假设你把“D商存档代码”换到了“地址0xFA0000”,那么用Winhex把所有“FE08”字样的数据敲键盘修改为“FA08”(对照图中红框)。
            又或者你换到了“地址0x1F40000”,那么把所有“FE08”字样的数据修改为“F409”(对照图中红框)。
            保存文件并关闭Winhex即完成代码的转移。
            原理就是3楼中提到的地址概念,不过多阐述。
            接下来前往该帖7楼继续教程。


            IP属地:上海6楼2023-11-20 00:30
            回复
              用GBAtoolAdvance打开刚才移植完“D商存档代码”的rom,打上“Sram补丁”后导出。
              用Hexcmp,在工具栏中的选项卡点击“文件”→“打开第一个文件”,打开“移植完D商存档代码的rom”,再在选项卡点击“文件”→“打开第二个文件”,打开“移植完D商存档代码并打上Sarm补丁的rom”,然后键盘上按“Ctrl+←”或者“Ctrl+→”,会跳转到两个rom之间不同的数据处(有红色标记)。
              用Hexcmp,跳转两个rom最开始不同的数据处,然后往前看,找到“054BAA21”字样的数据块。紧接着鼠标左键数据块中的“05”字样的数据,记下它的“地址”。
              关闭Hexcmp,对“移植完D商存档代码的rom”进行备份。
              用Winhex,打开“魔改flash存档程序”文件,选中整个数据块并复制,随后打开“移植完D商存档代码的rom”,跳转到上面记下的“地址”,将刚才复制的数据块置入,保存文件后关闭Winhex。
              用Hexcmp,打开第一个文件“移植完D商存档代码并魔改flash存档程序的rom”,打开第二个文件“备份的移植完D商存档代码的rom”。
              看图。

              图中红框标记的数据不同处要留下别动,而图中未标记的、却在Hexcmp显示有数据不同的,键盘按“Ctrl+↑”全部从第二个文件还原覆盖到第一个文件。
              不要关闭Hexcmp,接下来前往该帖8楼继续教程。


              IP属地:上海7楼2023-11-20 00:30
              回复
                用Hexcmp,找到rom中你存放“D商存档代码”的位置,假设这个位置在“地址0xFE0000”。
                从代码开头往后看16行左右,有一段“1FB40A490A4A0B4B”字样的数据块,鼠标左键数据块中的“B4”字样的数据,记下它的“地址”。假设这个“地址”是“0xFE0109”。
                用Hexcmp,回到rom中的存放“魔改flash存档程序”的位置,键盘按“Ctrl+←”或者“Ctrl+→”来依次寻找数据不同处,当发现“22222222”字样的数据块时,把刚才记下的“地址”反过来写入此处。
                例如刚才假设的“地址”是“0xFE0109”,那么这个“22222222”字样的数据块就写为“0901FE08”。
                用Hexcmp,回到rom中你存放“D商存档代码”的位置,从代码末尾往前看5行左右,有一段“10B41049AA250D70”字样的数据块,鼠标左键数据块中的“B4”字样的数据,记下它的“地址”。假设这个“地址”是“0xFE0421”。
                用Hexcmp,回到rom中的存放“魔改flash存档程序”的位置,键盘按“Ctrl+←”或者“Ctrl+→”来依次寻找数据不同处,当发现“33333333”字样的数据块时,把刚才记下的“地址”反过来写入此处。
                例如刚才假设的“地址”是“0xFE0421”,那么这个“33333333”字样的数据块就写为“2104FE08”。
                写完后不要急着动,再往前看3行左右,有一段“6846FFF7”字样的数据块,鼠标左键数据块中的“46”字样的数据,记下它的“地址”。假设这个“地址”是“0x2E1F79”。
                用Hexcmp,回到rom中你存放“D商存档代码”的位置,在代码末尾有一段“44444444”字样的数据块,把刚才记下的“地址”反过来写入此处。
                例如刚才假设的“地址”是“0x2E1F79”,那么这个“44444444”字样的数据块就写为“791F2E08”。
                保存文件并关闭Hexcmp,接下来前往该帖9楼继续教程。


                IP属地:上海8楼2023-11-20 00:31
                回复
                  用GBAToolAdvance打开刚才你手动写入数据块的rom,点击工具栏的“去除片头”选项卡,有一栏信息是“开始偏移量”,记下它右边输入框中显示的数据块,这个数据块即片头的“地址”。假设这个“地址”是“0x08000204”。
                  用Hexcmp打开刚才你手动写入数据块的rom,回到rom中你存放“D商存档代码”的位置,从代码开头往后看15行左右,有一段“55555555”字样的数据块,把刚才记下的“地址”反过来写入此处。
                  例如刚才假设的“地址”是“0x08000204”,那么这个“55555555”字样的数据块就写为“04020008”。
                  保存文件并关闭Hexcmp。
                  至此,适配D商卡带的、非绿宝石的rom就已自制成功,可以刷入卡带享受下劳动成果了。
                  可倘若你的rom是绿宝石,或者是基于绿宝石的改版,那么接下来前往该帖10楼继续教程。


                  IP属地:上海9楼2023-11-20 00:32
                  回复
                    给绿宝石rom单开一楼的原因,还是因为它惊险刺激的通关掉档机制。
                    用Hexcmp打开刚才写入“开始偏移量”的rom,回到rom中你存放“D商存档代码”的位置,从代码开头往后看21行左右,有一段“FFB42048”字样的数据块,鼠标左键数据块中的“B4”字样的数据,记下它的“地址”。
                    用Hexcmp跳转到“地址0x000005E8”,写入“00480047”,紧随其后把刚才记下的“地址”反过来写入。
                    回到rom中你存放“D商存档代码”的位置,从代码开头往后看20行左右,有一段“FF21090101”字样的数据块,鼠标左键数据块中的“21”字样的数据,记下它的“地址”。
                    用Hexcmp跳转到“地址0x0002FB00”,写入“00490847”,紧随其后把刚才记下的“地址”反过来写入。
                    回到rom中你存放“D商存档代码”的位置,从代码开头往后看31行左右,有一段“F0BC0249”字样的数据块,鼠标左键数据块中的“BC”字样的数据,记下它的“地址”。
                    用Hexcmp跳转到“地址0x00152784”,写入“00490847”,紧随其后把刚才记下的“地址”反过来写入。
                    至此,适配D商卡带的绿宝石rom就已自制成功,可以刷入卡带享受下劳动成果了。
                    其实这里楼主偷懒了,因为几乎全部绿宝石改版都是基于绿宝石美版,所以直接给出了绿宝石美版的“地址”。可如果是用早期D商的绿宝石日版,那“地址”就不在“0x000005E8”、“0x0002FB00”或者“0x00152784,得你自己去寻找了。


                    IP属地:上海10楼2023-11-20 00:33
                    回复
                      PS:刷入你自己魔改火红rom,提示“已载入备份存档”。或者刷入你自己魔改绿宝石rom在存档时死机。那么可能原因如下:
                      1.该教程不适配你的卡带硬件。
                      2.你的卡带只有一个记忆芯片(即单牛屎)。
                      3.你的卡带有两个记忆芯片(即双牛屎),但其中一个记忆芯片坏了。(这种情况昨日发现于某吧友,他的卡带购买仅个把月而且也没用几次,自认倒霉)
                      题外话:楼主如此大费周折,除了不想做通用补丁,也有让大家了解D商卡带工作原理的想法。
                      包括从卡带导出的rom是自带存档的那种,其存档代码更为复杂,远不是打个Sram补丁或者免电池补丁就能解决的。
                      鄙人本职与计算机毫无关系,不具备任何专业知识。能做到这步仅仅只是在做口袋妖怪改版时熟能生巧、侧类旁通而已,希望本幼稚教程能抛砖引玉引来真正的大神,帮助解决更多D商卡带问题。
                      另外,以FLASH 128K作为存档方式的gba游戏基本是口袋妖怪一家独大。更多的gba游戏存档方式是EPPROM,例如火焰纹章、拳皇等。希望手里有,以EPPROM作为存档方式的芯片记忆卡带的吧友,在这里分享一下rom供楼主完善研究。
                      尾声:如果有吧友按此教程自制rom并实机测试通过,希望能分享一下成果。倘若能附上卡带电路板照片,那更是锦上添花。感谢!


                      IP属地:上海11楼2023-11-20 00:34
                      收起回复
                        厉害


                        IP属地:广东来自iPhone客户端12楼2023-11-20 00:35
                        回复
                          前排学习


                          IP属地:江苏来自Android客户端13楼2023-11-20 01:33
                          回复
                            牛逼


                            IP属地:浙江来自iPhone客户端14楼2023-11-20 07:23
                            回复
                              牛逼了


                              IP属地:广东来自Android客户端15楼2023-11-20 07:41
                              回复