xiong_online 发表于 2020-10-26 16:16:04

【讨论】关于FC&MD&SFC&GB游戏的修复问题

本帖最后由 xiong_online 于 2026-4-5 22:58 编辑

03楼 & 12楼,FC修复Header(unh格式,nes格式,unf格式)
02楼 & 13楼,MD修复checksum(md格式,smd格式,bin格式)
04楼 & 06楼 & 07楼 & 08楼 & 09楼 & 14楼,SFC修复checksum(sfc格式,smc格式)
10楼,GB修复checksum(gb格式,gbc格式)
15楼,GBA相关
16楼,NDS相关

相关工具:uCON64
使用命令:ucon64 --chk ROM文件名
工具链接:https://ucon64.sourceforge.io

xiong_online 发表于 2020-10-26 16:18:27

本帖最后由 xiong_online 于 2026-4-7 22:53 编辑

MD测试:
模拟器:Kega Fusion v3.64
测试ROM:TinHead(USA) (Hack)6AB8A2EF.bin
Kega Fusion跳过红屏步骤:[选项] → [设置] → 选项 → [自动修正校验](红屏是由ROM文件实现的)

checksum是通过将每两个字节(16位,从$200到ROM末尾)相加得出的。
然后将其与存储在 $18E 中的值进行比较,如果值不同,游戏将显示红色屏幕并停止运行。

MD格式是将BIN格式的数据进行了插值排列,GEN格式等于MD格式
SMD格式就是在MD格式上添加了512字节的Header数据,每16KB为一组进行了插值排列

修复工具:FixCheckSum(多重保护的没效)
修复步骤:单击按钮打开ROM文件,点击按钮,直到按钮变成灰色
相关链接:https://en.wikibooks.org/wiki/Genesis_Programming
工具链接:https://www.romhacking.net/utilities/683
https://s41.ax1x.com/2026/03/17/peZzD0I.jpg

xiong_online 发表于 2020-10-26 16:21:24

本帖最后由 xiong_online 于 2026-4-7 22:53 编辑

FC测试:
模拟器:VirtuaNES v0.0.6.7
测试ROM:Alien 3 (USA) (v1.1) 70506F6F.nes
【FC文件前十六字节(16 bytes)内容】
(字节0到3必须为以下内容,用来识别文件)
0 = 4E(N)
1 = 45(E)
2 = 53(S)
3 = 1A(字符中断,必要!)
(字节4到8或15,可以.修改)
4 = PRG(ROM的大小 / 16)
5 = CHR(VROM的大小 / 8,0表示卡带板子使用了VROM)
6 = D0:1 表示垂直镜像,0 表示水平镜像
       D1:1 表示有电池记忆,SRAM地址$6000-$7FFF
       D2:1 表示在$7000-$71FF有一个512字节的trainer
       D3:1 表示4屏幕VRAM布局
       D4-D7:ROM Mapper的低4位
7 = D0-D3:保留,必须是0(其中D3 = 1 ,为NES 2.0标识符)
       D4-D7:ROM Mapper的高4位
8 = PRG-RAM的大小(很少使用的扩展)
9 = 电视系统(很少使用的扩展)
10 = 电视系统,PRG-RAM的存在(非官方的,很少使用的扩展)
11到15 = 未使用,应全部为零(部分ripper会把他们的名字放在7-15之间)
相关链接:https://www.nesdev.org/wiki/INES
工具链接:https://www.romhacking.net/utilities/683

【例子】
PRG:128K,CHR:128K,MAPPER:4
PRG = 128 / 16 = 8,十六进制为 08
CHR = 128 / 8 = 16,十六进制为 10
MAPPER = 4,十六进制为 04
则FC文件前十六字节内容为:4E 45 53 1A 08 10 40 00 00 00 00 00 00 00 00 00

https://s41.ax1x.com/2026/03/17/peeSVud.jpg

疾风之狼 发表于 2020-10-26 17:03:39

MD有的MD游戏有多重checksum保护,对于有多重checksum保护的游戏FixCheckSum工具是没效的。

SFC修复checksum比较麻烦,因为SFC ROM HEADER存放位置并不是固定,不同SFC ROM的HEADER存放位置不一样。

SFC HEADER结构看附件文档。

疾风之狼 发表于 2020-10-26 22:46:44

回xiong_online:
FC HEADER修复建议去NESBBS问老龙。

xiong_online 发表于 2020-10-26 22:58:18

本帖最后由 xiong_online 于 2026-4-7 22:54 编辑

SFC测试:
模拟器:Snes9X v1.43
测试ROM:Mujintou Monogatari (Japan) (Fix) 5DC5BD2A.sfc
校验不通过,游戏开始会有bad checksum提示
Check Sum是通过将每个字节(8位)相加得出的;Complement Check是Check Sum的位逆。
Complement Check + Check Sum = FFFFh
SMC格式就是在SFC格式上添加了512字节的Header数据,转换工具:SNESTool、GoodSNES、inSNESt

修复工具:SNESTool、IPSandSUM
修复步骤:
1.使用十六进制编辑器查看前200h数据是否有大量的00(可选)
2.使用SNESTool移除Header(SMC转SFC,新文件比之前小512字节)
3.使用IPSandSUM修复checksum( → ,有时候需要扩容)
4.使用模拟器运行(测试是否正常)
相关链接:https://en.wikibooks.org/wiki/Super_NES_Programming/SNES_memory_map
相关链接:https://sneslab.net/wiki/SNES_ROM_Header
工具链接:https://www.romhacking.net/utilities/18
工具链接:https://www.romhacking.net/utilities/499
https://s41.ax1x.com/2026/03/17/peeS08U.jpg





疾风之狼 发表于 2020-10-26 23:42:41

xiong_online 发表于 2020-10-26 22:58
核实一下,SFC的修复checksum有没有工具?ChecksumFixer吗?

相关链接:https://www.ppxclub.com/fo ...

uCON64有个--chk参数可修复ROM checksum,你可以试试

注意:uCON64是个命令行工具

uCON64 SOURCEFORGE页面:https://sourceforge.net/projects/ucon64/

xiong_online 发表于 2020-11-16 14:28:54

本帖最后由 xiong_online 于 2026-4-5 14:57 编辑

SFC详细修复教程(删除文件头&修复checksum)
模拟器:Snes9X v1.43
测试ROM:Metal Max Returns (Japan) (v0.95) (Fix) 1D70F60E.smc
修复工具:CrystalTile、SNESTool、IPSandSUM

1、使用模拟器运行ROM,有bad checksum提示
https://s41.ax1x.com/2026/04/05/pet73Cj.jpg

2、观察文件大小:4194816字节,不能被1024整除,可以判断为有Header

3、使用十六进制编辑器查看前200h数据,有大量的00
https://s41.ax1x.com/2026/04/05/pet7G2n.jpg

4、使用SNESTool移除Header
https://s41.ax1x.com/2026/04/05/pet7Jvq.jpg

5、使用IPSandSUM修复(最终CRC32:B8E36EDF)
https://s41.ax1x.com/2026/04/05/pet7tK0.jpg

6、使用模拟器运行,OK
https://s41.ax1x.com/2026/04/05/pet7NrV.jpg

xiong_online 发表于 2020-11-16 14:56:13

本帖最后由 xiong_online 于 2026-4-6 19:38 编辑

SFC详细修复教程(修改中间文件头&修复checksum)
模拟器:Snes9X v1.43
测试ROM:Wonder Project J - Mechanical Boy Pino (USA) (v20180510) 94F1E44F.sfc
修复工具:CrystalTile、IPSandSUM

1、使用模拟器运行ROM,有bad checksum提示
https://s41.ax1x.com/2026/04/06/peNJhJ1.jpg

2、观察文件大小:3.12 MB (3,276,800 字节),使用CT扩容到4 MB,填充00
https://s41.ax1x.com/2026/04/06/peNf5sU.jpg

3、使用十六进制编辑器查看前200h数据,没有大量的00,判断为sfc文件

4、修改FFC0h中间文件头(ROM标题修改为:WONDERPROJECT J,其余填充20;快速HiROM,30修改为31;美版,00修改为01)
https://s41.ax1x.com/2026/04/06/peNfvQK.jpg

5、使用IPSandSUM修复(最终CRC32:1CEA842D)
https://s41.ax1x.com/2026/04/06/peNfxsO.jpg

6.使用模拟器运行,OK
https://s41.ax1x.com/2026/04/06/peNfzLD.jpg

xiong_online 发表于 2022-12-7 16:49:30

本帖最后由 xiong_online 于 2026-4-7 22:54 编辑

GB测试:
模拟器:BGB v1.5.6
测试ROM:Kiteretsu Daihyakka - Bouken Ooedo Juraki (Japan) D5AB832C.gb
014D:Header Checksum
通过将每个字节(8位,从0x134到0x14C)相加得出的。

014E-014F:Global Checksum
通过将每两个字节(16位,除了0x14E和0x14F)相加得出的。

修复工具:BGB
修复步骤:[文件] → [载入ROM...] → 按打开调试器 → [文件] → [修复校验码] → [保存ROM到...]
相关链接:https://gbdev.gg8.se/wiki/articles/The_Cartridge_Header
https://s41.ax1x.com/2026/03/18/pee77j0.jpg
https://s41.ax1x.com/2026/03/18/pee7buV.jpg

7899 发表于 2022-12-8 16:54:19

学到了新知识

xiong_online 发表于 2026-3-17 21:32:21

本帖最后由 xiong_online 于 2026-4-4 17:56 编辑

FC补充说明:
模拟器:FCEUX v2.3.0
测试ROM:Super Mario Bros. (World)D445F698.unh、Super Mario Bros. (World)3337EC46.nes、Super Mario Bros. (World)393A432F.nes
unh格式:无Header,即无文件头
nes格式:使用iNES 1.0标准,包含Header(16 bytes)
unf格式:为了比iNES 1.0更好的描述Mapper,后来被NES 2.0取代
nes格式:使用NES 2.0标准,包含Header(16 bytes),是对iNES 1.0的扩展

修复工具:FCEUX
修复步骤:[文件] → [打开] → [调试] → → [版本] → [另存为...]
相关链接:https://www.nesdev.org/wiki/INES
相关链接:https://www.nesdev.org/wiki/UNIF
相关链接:https://www.nesdev.org/wiki/NES_2.0
https://s41.ax1x.com/2026/03/18/pee72B8.jpg

xiong_online 发表于 2026-3-17 21:33:39

本帖最后由 xiong_online 于 2026-4-4 21:26 编辑

MD修复教程:
修复工具:AFS FIX CheckSum MD 32X(多重保护的没效)
修复步骤:点击按钮打开文件,勾上,点击按钮
工具链接:https://www.romhacking.net/utilities/1610
https://s41.ax1x.com/2026/03/18/pee70tH.jpg

xiong_online 发表于 2026-3-17 21:35:44

本帖最后由 xiong_online 于 2026-4-4 21:26 编辑

SFC修复教程:
修复工具:Advanced SNES ROM Utility
修复步骤:SFC转SMC,点击按钮;SMC转SFC,点击按钮;
扩容点击按钮;栏修改信息;
HiROM转LoROM,点击按钮;修复checksum,点击按钮
工具链接:https://www.romhacking.net/utilities/1638
https://s41.ax1x.com/2026/03/18/pee7yct.jpg

xiong_online 发表于 2026-4-4 16:25:28

本帖最后由 xiong_online 于 2026-4-6 22:06 编辑

GBA相关:
GBA游戏卡带的几种记忆类型:https://tieba.baidu.com/p/1513244819
SRAM补丁、免电补丁、时钟补丁:https://www.bilibili.com/read/cv39330573

一、时钟补丁
时钟补丁,是一种为了解决盗版卡带没有时钟芯片,无法在游戏内正常触发时间事件而出现的功能补丁

测试ROM:Pocket Monsters - Ruby (Japan) (386) B1BC56F6.gba
修复工具:GBA Tool Advance
修复步骤:[...]打开ROM文件,切换到[时钟补丁]选项,点击[打补丁]按钮,同目录生成“output-”开头的同名gba文件
工具链接:https://www.romhacking.net/utilities/601
https://s41.ax1x.com/2026/04/04/petQFfS.png

绿宝石时钟补丁
虚拟时钟(FTC):根据游戏的运行时间来计算,关机或拔卡则停止
真实时钟(RTC):硬件级时钟,与现实时间同步,关机或拔卡依然运行
真实时钟补丁(jirachiwish):http://tieba.baidu.com/p/2819889371
虚拟时钟补丁(enler):https://tieba.baidu.com/p/5314611312
虚拟时钟项目(enler):https://github.com/enler/EmeraldRTCPatchTool

二、SRAM补丁
非1M Flash存档类型的大部分游戏,通过GBA Tool Advance打上SRAM补丁后,烧录进卡带才能正常存档

测试ROM:Summon Night - Craft Sword Monogatari - Hajimari no Ishi (Japan) (v1.1) (Fix) 03103EA0.gba
修复工具:GBA Tool Advance
修复步骤:[...]打开ROM文件,切换到选项,点击[打补丁]按钮,同目录生成“output-”开头的同名gba文件
注意事项:[打补丁]按钮为灰色,表示ROM存档类型为SRAM或已打补丁;选项存档类型处显示(Patched),表示已打补丁
相关链接:https://www.romhacking.net/utilities/601
https://s41.ax1x.com/2026/04/04/petQlfU.png
https://s41.ax1x.com/2026/04/04/petQG6J.png

1M Flash转1M SRAM
修复工具:Flash1M Repro SRAM Patcher
修复步骤:把ROM文件拖动到程序上即可,程序会自动在同目录生成“output_”开头的同名gba文件
工具链接:https://github.com/bbsan2k/Flash1M_Repro_SRAM_Patcher

三、免电池补丁
免电池补丁是一种在没有电池的情况下保存游戏存档的技术

修复工具:gba auto batteryless
修复步骤:首先打SRAM补丁,然后把ROM文件拖动到程序上即可,0为自动备份(每次游戏存档都会自动将存档复制到ROM内),1为手动备份(按下L+R+Start+Select组合键,将存档复制到ROM内)
注意事项:提示ROM alraedy max size. Cannot expand. Cannot install payload,游戏ROM容量已达最大,没有空闲区域安装免电池补丁
工具链接:https://github.com/metroid-maniac/gba-auto-batteryless-patcher




xiong_online 发表于 7 天前

本帖最后由 xiong_online 于 2026-4-6 22:23 编辑

NDS相关:
一、反烧录
开发商用来防止盗版烧录卡的一种方法

方法1、手动给ROM打补丁,适用于烧录卡、模拟器、nds-bootstrap
相关教程:https://tieba.baidu.com/p/8866483169
相关项目:https://github.com/Intervencion/OpenPatch-NDSGameList
工具链接:https://gbatemp.net/download/retrogamefan-nds-rom-tool-v1-0_b1215.35735

方法2、使用金手指的Anti-Piracy Bypass Code回避代码,原理是修改内存
相关链接:https://tieba.baidu.com/p/9156637917

方法3、添加nds-bootstrap的反烧录补丁文件,原理类似修改内存,只适用于nds-bootstrap
相关链接:https://github.com/DS-Homebrew/nds-bootstrap

二、金手指库
你需要使用解密(Decrypt)后的GAME ID来编辑cheat.dat、usrcheat.dat文件

编辑工具:eNDryptS、R4CCE
编辑步骤:使用eNDryptS得到解密ROM,打开R4CCE,点击[...]打开ROM,查得8位码,添加金手指,金手指信息请自行查找
相关教程:https://forum.romulation.org/threads/tutorial-amateurs-guide-how-to-use-ttdt-exe-and-r4cce-exe.56257
工具链接:https://gbatemp.net/download/endrypts-advanced-v1-2.219
工具链接:https://gbatemp.net/download/r4cce.30227
https://s41.ax1x.com/2026/04/05/peNZ30f.png

三、反烧录数据库
您需要使用加密(Encrypt)后的GAME ID来编辑extinfo.dat、infolib.dat、savlib.dat文件

编辑工具:eNDryptS、R4CCE、TTdT
编辑步骤:使用eNDryptS得到加密ROM,打开R4CCE,点击[...]打开ROM,查得8位码,打开TTdT,添加数据,反烧录信息请自行查找
注意事项:2011年左右的ROM ID存在偏移,请从偏移后的ROM取得8位码
相关链接:https://www.ds-scene.net/?s=viewtopic&id=4003
相关教程:https://forum.romulation.org/threads/tutorial-amateurs-guide-how-to-use-ttdt-exe-and-r4cce-exe.56257
偏移教程:https://tieba.baidu.com/p/7331225574
工具链接:https://gbatemp.net/download/endrypts-advanced-v1-2.219
工具链接:https://gbatemp.net/download/ttdt.36159
https://s41.ax1x.com/2026/04/05/peNZ1nP.png

四、NDSi模式
NDSi模式游戏多了一些功能,比如使用摄像头、WPA2网络等

编辑工具:TinkeDSi
注意事项:修复后请自行反烧录,部分汉化ROM可能不适用,某些烧录卡和模拟器可能不适用
相关教程:https://gbatemp.net/threads/fixing-dsi-mode-for-rom-hacks-with-tinke-dsi.663337
相关教程:https://tieba.baidu.com/p/9917183082
工具链接:https://github.com/R-YaTian/TinkeDSi




feihu1965 发表于 5 天前

虽然看不懂,但是大受震撼。
页: [1]
查看完整版本: 【讨论】关于FC&MD&SFC&GB游戏的修复问题