写在前面:
本文档为本人李东平(网络ID:小磊,朋朋,雷帕德,雷帕德安布雷拉,leopard.s.kennedy等等)于NESDEV论坛学习研究后所写,转载请注明作者。
概要:
茉莉大佬的Chisflash-MBC5,以及其他自制DIY单卡,D商黑豆卡,甚至是模拟器开启仅MBC5模式运行某些MBC1游戏时,会出现黑屏,白屏,花屏等等问题,此文档旨在解决这些游戏ROM的运行问题,修改需要对每个游戏进行判断分析和试验,没有统一的办法,但好在国外网友已经制作了不少相关补丁,以及分享了部分代码用于自行修改。
简述:
出现问题的游戏ROM分为三种情况:
1. (常见)游戏写入 3000-3FFF,6000-7FFF,甚至是2000-2FFF其中某个地址 以执行Bank切换,这与自制卡(DIY卡,D商黑豆卡)的固件有一定冲突。但问题不出在固件上,而是游戏厂商程序员有不周到的操作(没有考虑过MBC5的使用场景),或者反盗版机制刻意为之(比如大金刚3)。
2.(十分常见)游戏程序写入值“00”以执行Bank切换,本意是选址到MBC1/2/3卡上的Bank1,但是却在MBC5卡上选址到了Bank0,所以游戏崩溃。
3.(罕见,没遇到过)游戏写入大于 1F(MBC1)、F(MBC2)、7F(MBC3)的值以在 MBC5 上切换Bank,高位选择某个随机银行(Game writes a value greater than 1F (MBC1), F (MBC2), 7F (MBC3) to switch a bank on MBC5, the upper bits selecting some random bank.)
情况一:
解决办法:
1.Goodrom set 3.15b收录了一部分Bung卡修复的rom,这些rom后缀会有[BF]字样,这些是前人已经修复好了的镜像,直接使用即可。本文件夹附带有BF修复合集压缩包;
2.国外网友制作了一部分Bung Fix补丁,也在本文件夹附带有压缩包合集;
3.自己修改,教程如下
打开bgb模拟器,载入无法在自制卡运行的ROM,按下esc键呼出Debugger菜单,在上方菜单栏选“Debug”——“Watchpoints”,输入6000-7FFF,或者3000-3FFF,或者2000-2FFF,一般问题都出现在这些范围,可能性递减。点add;
点击菜单栏“Run”第一个“Run”,游戏会运行,它会跳回到Debugger界面,并告诉你是哪行代码在给你选中的范围内写入,比如下图找到的是:ld (2100), a
右键——“Copy Code”,填入3,就能将ld (2100),a复制到剪贴板,然后Ctrl+F,黏贴代码搜索,Ctrl+C可以搜索到所有相同代码的位置。右键——“Modify Code/Data”将他们全部替换为NOP;NOP;NOP
(本文件夹附带txt文件里面有所需要代码的文本。)
保存,再次测试,可以一次只改一类,比如只改6000-7FFF,或者3000-3FFF,或者2000-2FFF,缩小排除范围。
如果是属于情况一的,那么改好后应该就可以解决问题。每个游戏情况不同,没有统一的办法。
但如果不是属于情况一的,那么改好后,要么看不出什么变化,要么游戏就无法运行了。
情况二:
情况二的修改稍微麻烦一些,首先找到属于ROM0范围内的一段空白FF用来写入子程序,尽量选空白字段长一些的地方,最为安全稳妥。比如下图位置就很合适:
复制以下代码,或者去txt文档内复制:
此处隐藏内容请回复后再查看。
记住起始位置,比如下图中是3EE2:
然后搜索ld (2100),a,大部分情况下是这个,但不完全保证,将其替换为call XXXX
(上图是3EE2,所以替换为call 3EE2)
保存,测试,应该没有问题了。
情况三我没遇到过,不予讨论。
链接: https://pan.baidu.com/s/1ueMXbNIywk2eNGWpp_a3EA 提取码: iwjm
解压密码:
此处隐藏内容请回复后再查看。