|
|
+ ]5 N4 O* k9 d' v \7 {: @
很快速的整理我自己常用的指令
. v7 S" T( E! M9 N' \( K2 m- N
# x9 m8 u9 J- H' n$ |( m1 [{:4_112:}
" @* Q. T2 |; y$ c& w' ]& S4 I
) f" B& I* ^3 z' j) Y! RMAME DEBUG常用指令% V. y5 }0 D9 [" w
! T& g7 n- ?! f0 I& r8 l
内存搜寻: ci, cn, cl3 l M h' b G% h
. |4 L/ Z4 ]+ D/ m. a" ^* m
ci0 _& M/ M4 I6 S& I" h
搜寻任务初始化, 每次搜寻一开始一定要输入这指令3 n8 `- T1 P* q# `/ C( D
( Z5 n; b) M2 w& @% y! L
cn o7 z- p4 f2 _) P6 U. U: p) s3 s6 c
搜寻指令; _: c3 b1 X3 G: K
例子:2 Q3 _" I( Q/ }8 ?3 ^* l
cn eq,60
7 p7 ~1 V6 D8 R% |' T. o& D 搜寻目标等于60 (十六进制)
% T* @) n1 C& {( w6 ]6 M
, [' a0 e* Y! d! G cn eq,#964 T" `' C6 r$ s5 O
搜寻目标等于96 (十进制)% n$ ?5 L' x. C- t
& M, D) l0 q5 y, |7 W
cn eq) Z) P9 U, e# \- }7 K
搜寻目标的数值没有变化; c& X7 O8 ^& `. b# F* E
- u. J1 H+ p, W* h0 N+ J cn ne
" c( j* g. d; y# V 搜寻目标的数值有变化
+ B. Q' H9 m) s . K' y- k/ {! E9 }; i8 m! d
cn +# h; _) g1 w7 O6 O, U
搜寻目标的数值增加, t# e) m. O. s3 y% Q
. \9 n8 v2 U, Q }! X$ q* z8 c cn -. }+ [- w0 c3 e1 p
搜寻目标的数值减少
: _3 Z1 q9 g" N2 V! f
5 O# U4 h3 d; s$ T! b* a" T! x9 } cn +,3
m6 R$ f c- \+ Z3 W e 搜寻目标的数值增加3 (十六进制)
) ~/ V7 {- J; j$ l5 Y6 v' u6 W( E. k: {3 S m; u+ c! _
cl
6 o5 ` ]4 b$ Y3 F 列出所有搜寻结果
- I5 l! B# J$ C# l% W) G+ G3 F s/ n8 _
cl xxx.txt5 {5 N8 I' Z g1 o4 q5 I5 |
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
* i( [/ n: g' s; }1 n% g& _2 S+ w$ j; r
% U9 {' \. c) q) \, C R% A内存监视点指令: wp, wplist, wpclear1 }9 n7 W2 A. s' j2 {
例子:
5 ~3 V3 ?, S/ n+ O wp 1234,1,r
) j3 ]9 i7 T. j% p6 A5 \ 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
0 T: j" ^# { z
% V. x$ q- C# e6 e8 {# N; J wp 1234,2,w
9 G7 ]/ ]% M, k6 N) T 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2 A; c+ ]( H* Y7 ]* ^
( a; C) D" ]# _. a9 j1 D' | wp 1234,6,rw
9 M: j4 M% h# x# i4 l; v 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6+ |+ L- b! ^+ R% _& A0 ]+ f. ?# {' P
% W* ]& X+ F- O* t4 x2 k' l2 Y
wp 23456,a,w,wpdata == 11 B* A, \$ H! d$ x0 [/ G/ ]( c
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1& D; m+ ^' G- n) a7 V3 ^% Q8 M! N
; J: F r! z; f" ? k$ F
wplist( v1 u, h$ @$ E- f8 E) }
列出所有监视点
1 B& Y+ L! ]* ~! ?/ _# o' f( W* I7 M$ Y% U! u l! @6 D( M
wpclear 3
- l- j! T3 f, i" G 删除编号3的监视点
2 w5 `) n5 M- J0 [5 q, {: t+ D4 z2 i- M* X) a! F, p
wpclear3 |9 {- ^0 u# R, k3 e4 U+ f' M
删除所有监视点
: \& Q- H3 j U. ?
2 i- k. u+ X& K9 R% F* D5 k ! n! R) h9 @0 q* ~1 `4 G1 t- h
, L7 T- u: n8 y& n1 A程序断点指令: bp, bplist, bpclear
" o5 {2 ?! E( F* l 例子:
: Z3 E- c; t7 @. I2 b bp 1234
. m# l: l2 r+ Q: Q* v% J) m 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断* X' L8 p& @# W2 F
3 Y# E% c7 m. r# ^/ \8 v+ I bp 23456,a0 == 0 && a1 == 0- c$ Y5 a7 m1 _$ {; p# t( m3 t% W0 F
在地址23456下断, 且中断条件为a0等于0以及a1等于0
' M: j) D, Q: x5 W" o7 l$ n" R8 {1 K* v5 h6 Q! }
bplist
* L: j, O f! y9 E* ~# x 列出所有断点1 G9 A. N; Y* X2 ]9 W8 b
9 F2 G* _6 |8 t! Z9 Q6 H( ?+ S
bpclear 3
7 r6 ]2 j3 ?, f! ~. q: v 删除编号3的断点
# N, r7 I( z$ \, w3 ^* q+ Q+ X* Y) a6 r2 l8 l B" s5 E, ? s
bpclear
" q" R3 h+ N% w* ~3 a! l: E 删除所有断点% v- [& } Y7 `0 Y- { b% {
r3 }% ~6 P+ _
6 ?# a, K9 ]' `0 R: w J ' I- V. S S: n! o& m. K9 P$ |
跟蹤紀錄指令: trace% r& h3 U) K/ S
例子:
; S; @) N9 {5 s6 o4 \% ^ trace 01.txt6 m0 l6 o" D: Q" @6 b
跟踪当前CPU运行的所有代码, 输出至文件01.txt
/ F ]2 ], \4 j" B4 t* @9 E$ Q8 a+ J% n3 m& ^8 g
trace off
" g! _1 W, M) D0 K3 o4 \3 x% ^! k 停止跟踪, 并且关闭文件3 j) K* T. v; f( R4 L& J$ s
1 y0 k( }6 P& U+ l3 \1 ]7 ~
trace 01.txt,0
4 i2 x, |& T/ @ 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
; r2 T' m. R6 }* h) s% H. @# g, k% V9 t
trace off,0
1 ~) V9 e- C7 R1 {0 Q: i! H( m 停止跟踪编号为0的CPU, 并且关闭文件# l! z0 s) g0 f2 _8 E
7 K5 c3 V! Z, F
trace 01.txt,0,{tracelog "A=%02X ",a}
5 k" C8 l8 @" J 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
2 t0 A8 c6 ^ s; ^" r- q8 j 并且在每一行的前面, 写上"A=a "
4 N" [! U' {3 i- ]; J1 ` "A=%02X ",a为一个C语言printf函数常用的输出格式3 E) z, D1 i1 f" r) ?
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入- X7 O0 {2 Q! L% W0 X s9 Q
X表示为大写十六进制数
+ T* d$ w! e* f& G+ W7 }1 \/ p( Y k" M5 g
. z Z: c' t/ Y. N( K% L5 w
! Y0 h7 I7 `+ D+ b8 {, p* G内存直接写入指令: maincpu* B Y' N% i# Y! k
格式为 maincpu.[][]@地址=数据
1 G) B C9 {& d% e 第一个[]:# }5 J9 Q8 c! ? E/ ~
o 表示ROM地址
& V& } t3 m, V4 `/ b- N+ R" l p 表示RAM地址
( j5 a( G/ d- r9 J% ?6 |
7 \- s" y J h$ t& c! H 第二个[]:
S+ c, B$ B3 }3 s/ q d 表示4字节: _- I0 C: C \
w 表示2字节: W: M6 D# X7 d
b 表示1字节9 y; Y* Q: F, y- x& Q: P( Y" A' ^5 M
0 k1 x3 l4 _' h# } {) e8 U
例子:
8 |8 m8 j; X) ^/ x$ R/ i maincpu.ob@1234=FF
7 ~; Q, W0 }, C# Z7 h! V 在ROM地址1234处, 写入FF一个字节- t/ L9 i) M6 I9 ~* o( M& o/ [
1 w. N7 o- k1 \" X2 ]: [ maincpu.ow@1234=4E71
, K3 z3 V! f2 C 在ROM地址1234处, 写入4E 71两个字节
" @9 G9 K. o7 R6 a, ~# c, l- H# T; l) c) L# B1 I; ~
maincpu.od@1234=600A4E71
- I. B8 w: }6 q8 K. f+ \- U 在ROM地址1234处, 写入60 0A 4E 71四个字节
8 d, u+ O2 W, C' [+ w5 D' t9 Y
* ?6 o$ f9 n) ^( h 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
+ W4 f: P$ ~9 e
+ T) \0 O: F& C- W9 ?4 H; M
5 N, k5 a& e3 y# A; j. J% G( N其他:' S) ^, {! o1 G2 `
dasm 输出档案名,地址,长度0 O6 K: r+ H7 p z! I- t+ w
输出程序的反汇编代码( v% a/ H; w' G- f2 o
例子:. c" y& d) t0 I' W$ Y5 U
dasm 01.txt,0,1000008 O7 F% t3 K7 ^/ T
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
( i2 _/ F) @1 U t0 a3 `* F; y0 h& l( B V! I2 m8 x8 f9 Z
softreset* d0 w2 W0 ?( z7 C' C- B
游戏重启, 但不重新载入ROM6 Q. S) R+ W5 }4 ?3 m) q! d9 l
: q2 t3 V+ r4 e6 [* } hardreset, c- |6 G; C/ w0 E
游戏重启, 且重新载入ROM! k* ~3 G7 _. |
8 Z- G9 |- l6 Z
snap xxx.png
1 K2 i& {8 U9 s 截图为xxx.png
3 S- v# I, U0 @% t: H
4 {) x* ?' B) C% e$ @1 k6 @( \7 f . h! R4 Y- j2 k+ x3 y8 c" R
4 b& o' ~- s5 u9 }( q
" m- a& _( b7 M7 Y+ N& r6 N
热键:
4 U8 h4 u4 Q4 t2 } ~ 中断游戏
$ a) L- B# i* K F5 运行游戏
: g) ?# d' P. q; p4 N F12 运行游戏且隐藏调试窗口' j! i8 N$ F0 l( T2 c) Q
F11 步入, 单步执行, 会进入子程序: _0 G0 ^4 K: J- }
F10 步过, 单步执行, 不会进入子程序
3 P' c* M6 t5 k Shift+F11 执行到子程序返回
- z/ _1 P" M! e& L% X Ctrl+M 内存浏览窗口 _$ J) E( G: S( I, k
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
# B' y2 G' f) }6 o; w3 l& [" \" V6 ^3 g; H" G! u. R- L
{:4_94:}
4 n# K8 P4 ` W5 A# X* `( N& c# k
|
评分
-
1
查看全部评分
-
|