[推荐]GBA高级游戏修改       ★★★★★ 【字体:
GBA高级游戏修改

先说明一下GBA核心ARM CPU指令集

在本文档的汇编语法中,用 # 前缀表示立即值,用 & 表示十六进制值,用 % 表示二进制值,用 {花括号} 表示指令中可选的设置字段或位。下面表格中粗体的指令是核心 ARM 指令,其他的是值得包含的位和片段、移位选项和汇编器助记码(mnemonic)... 还列出了协处理器指令。但是用于 RISC OS 机器的 ARM 处理器不支持协处理器,只在一个可访问的芯片中提供了实际上的协处理器功能。其中包括设置 ARM、cache、MMU 的设施,等...

指令 意义 最早的 CPU / 注释
ADC 带进位的加法 -
ADD 加法 -
AND 逻辑与 -
ASL 算术左移 这是一个选项,不是指令
ASR 算术右移 这是一个选项,不是指令
B 分支 -
BIC 位清除 -
BL 带连接的分支 -
BX 分支到 Thumb 代码 StrongARM SA1110 ?
CDP 协处理器数据操作 -
CMN 比较取负的值 -
CMP 比较值 -
EOR 异或两个值 -
LDC 装载内存到协处理器 -
LDM 装载多个寄存器 -
LDR 装载寄存器 -
LDRB 装载字节到寄存器 -
LDRH 装载半字到寄存器 StrongARM
LDRSB 装载有符号字节到寄存器 StrongARM
LDRSH 装载有符号半字到寄存器 StrongARM
LSL 逻辑左移 这是一个选项,不是指令
LSR 逻辑右移 这是一个选项,不是指令
MCR 协处理器寄存器传送 -
MLA 带累加的乘法 -
MOV 传送值/寄存器到一个寄存器 -
MRC 协处理器寄存器传送 -
MRS 传送状态标志到一个寄存器 ARM 6
MSR 传送一个寄存器的内容到状态标志 ARM 6
MUL 乘法 -
MVN 传送取负的(值) -
ORR 逻辑或 -
ROR 循环右移 这是一个选项,不是指令
RRX 带扩展的循环右移 这是一个选项,不是指令
RSB 反向减法 -
RSC 带借位的反向减法 -
SBC 带借位的减法 -
SMLAL 带累加的有符号长(64 位)乘法 StrongARM
SMULL 有符号长(64 位)乘法 StrongARM
STC 协处理器数据传送 -
STM 存储多个寄存器 -
STR 存储一个寄存器 -
STRB 存储一个字节(从一个寄存器) -
STRH 存储一个半字(从一个寄存器) StrongARM
STRSB 存储一个有符号字节(从一个寄存器) StrongARM
STRSH 存储一个有符号半字(从一个寄存器) StrongARM
SUB 减法 -
SWI 导致一个软件中断 -
SWP 交换寄存器与内存 ARM 3
TEQ 测试等价(概念上的 EOR) -
TST 测试并屏蔽(概念上的 AND) -
UMLAL 带累加的无符号长(64 位)乘法 StrongARM
UMULL 无符号长(64 位)乘法 StrongARM
================================================================================================================
用No$gba1.4C载入Contra_Advance_The_Alien_Wars_EX_USA_GBA-MODE7.ZIP载入后设置监视断点!
先说明一下如何用这个工具进行内存断点的设置!
下面是这个东西开发手册上说的!
This break-family allows to capture writes to specific memory addresses, or memory areas. Membreaks are defined by pressing Ctrl+B, and then entering conditions such like:
<按CTRL+B进行内存地址或内存区域的条件断点设置>
[02000100]! ;stops on any byte/halfword/word write to [2000100h]

[02000100]? ;stops only when writing new/changed data

[06000000..06003fff]! ;stops on any write to first 16Kbytes of VRAM

[02000000..02003fff]? ;stops only when writing new/changed data
Normal Breaks (F2-key)
<按f2设置或清除断点最多可以设置50个断点>
Normal breakpoints are set (or removed) by moving the code-window cursor onto the desired opcode, and then pushing the F2-key. Up to 50 breakpoints can be defined.

Run-to-Cursor (F4-key)
<按f4程序执行到当前鼠标处停止>
Hitting F4-key directly starts emulation, and stops when reaching the code window cursor. The break address is not memorized, ie. it is used only once.


开始跟踪分析
按CTRL+B 键入[03002C60]!点OK后点击右边的游戏窗口进行游戏!当你死掉一条人命后!
游戏中断来到下面的代码
08014EC2 2878 cmp r0,78h
08014EC4 D95D bls 8014F82h
08014EC6 8898 ldrh r0,[r3,4h]
08014EC8 2800 cmp r0,0h =========>比较R0寄存器是不是=0 如果是游戏终止也就是GAME OVER
08014ECA D05C beq 8014F86h =====>R0=0就跳转到GAME OVER
08014ECC 3801 sub r0,1h ======>不为0则R0=R0-1 剩下的不用我多说了吧!
08014ECE 8098 strh r0,[r3,4h]
08014ED0>8B18 ldrh r0,[r3,18h]
08014ED2 2800 cmp r0,0h
08014ED4 D001 beq 8014EDAh
根据上面的分析咱们只要吧8014ECC这句SUB R0,1修改就行了!我的改法是让他加+1而不是减-1!再这句上点鼠标的右键!
选择第6项CHANGE Instruction添入add r0,01确定后记下机器码3001然后用UltraEdit8.10打开rom文件!查找5CD00138
找到后改成5CD00130存盘即可!再打开试试!嘿嘿是不是死了加生命而不是减生命了吧!其实我写这篇文章只是个抛砖引玉
告诉大家怎么修改ROM!希望能对想修改游戏而又找不到门的朋友有所帮助!

文章录入:jack    责任编辑:jack 
  • 上一篇文章: 没有了

  • 下一篇文章:
  • 最新热点 最新推荐 相关文章
    没有相关文章