|
& |% U9 x0 E/ p+ v- G/ g( g
很快速的整理我自己常用的指令
9 n* ~! h" E: {8 K% }. K& S
! E; x7 |+ {9 g{:4_112:}
r. ^* m+ o/ f5 P5 U
5 p0 f# _3 k# O( RMAME DEBUG常用指令% h) I( _: f! }( k" F0 y
# p4 b1 e1 f# J2 q+ F: |7 \2 y1 Q
内存搜寻: ci, cn, cl- Q( b4 @& M; }2 e, E0 m
) R b% r2 U; F+ l& j* Z ci
& R% l Z( y0 r1 `- m8 O 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
- X- n8 S2 P! r" i B" N
( ~; D4 w5 m, P/ a& y8 _: J& H' ] cn* B3 i. ?! x; r1 D# I5 i
搜寻指令
2 l, \% ]5 v9 i7 [) ^* S% b 例子:! x5 T" N* i( G; w, v7 y
cn eq,60
: e4 P* ]% r% o- {. ^' h0 P 搜寻目标等于60 (十六进制)
' p$ u6 I6 n2 l8 c( Z
: a+ Y2 \+ O6 }( o. ?" M cn eq,#96
1 g2 u2 w6 S! d3 N' G- \! O 搜寻目标等于96 (十进制)
' r1 s2 R$ Q( L8 P
3 C1 s8 {2 {& Y cn eq2 Q5 Q) U7 m* B& Q5 G- [$ b/ p
搜寻目标的数值没有变化
9 a F$ p5 E7 I( e$ o& _
- p2 n: m3 F) J cn ne
, j" o* b" O' l, k& i) Q 搜寻目标的数值有变化
# x# |1 Y1 D' A4 _9 b
2 |, D1 @" r( @7 I6 t1 e4 c' b cn +* r$ V! p1 U* C" Y# G# ~# j+ U% S
搜寻目标的数值增加
0 { b( }, R' U
0 Z+ }- i3 E+ g' O cn -
( [! p5 f4 O: b& D* _8 G7 U 搜寻目标的数值减少
& Y2 Q5 P- C) K2 e6 S- d # z2 A7 r5 l/ H1 @! Y7 L& R
cn +,3
8 i6 g' R4 \! V9 O( \5 D, `$ e 搜寻目标的数值增加3 (十六进制)
) E( ^$ {' b- y, N
; x: Z% ^9 m9 H2 \* h5 N# Y3 l cl# K1 O% p7 }& Z, u9 D1 f$ d3 M; C
列出所有搜寻结果
+ i; R7 n+ K$ @; k' `( n/ [" i9 @5 Y3 x; t( E7 T
cl xxx.txt2 Y9 Y6 i. w$ C8 F- q
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式% p2 d+ N/ v! g- Z8 L
- M( g4 j. r8 p, _5 T 2 j! p: C1 e7 u, g6 W
内存监视点指令: wp, wplist, wpclear
$ k# X6 @+ O. D! p$ f 例子:
* }9 G% P. R$ N wp 1234,1,r5 \; |2 @ N$ z2 v& l$ p
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
4 X) R: y% t- \! }. t" R" O8 |0 U/ Q0 ^) t
wp 1234,2,w
" G' S! M9 e1 h' h; m ~+ M 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度22 G7 o; D4 H, F+ C4 { A5 r& A! A8 O
( T# E+ \9 K" l+ O7 h wp 1234,6,rw
. N3 W; l# j+ _! [; k 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
2 g, C$ j. p) q+ l% f5 M/ v
3 c' q- P7 r; i# |) y wp 23456,a,w,wpdata == 1
$ }0 l' h- K+ k, Q4 l9 G 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1+ d/ Y8 j& H0 B! a0 u$ A' m
! s8 C# v: g7 M9 W) H, z6 z wplist2 R a7 }1 n6 X
列出所有监视点5 q4 u$ q% Z" q1 V7 `3 C
1 P6 J8 p# G% L% V- R' P2 g9 S
wpclear 3$ G- w+ l9 W) F
删除编号3的监视点! e9 N, z) T1 O" I+ z
" Q. \# H& ~6 A$ u5 j
wpclear
x0 @: H: m$ R: ~* L" Z 删除所有监视点
* u" j) [) i9 Q9 `
; Z( r' o. c% i$ U/ {& U% D
% t# b/ t, |3 H
9 ~6 P" @7 w' h2 {; s/ x* z程序断点指令: bp, bplist, bpclear! m( J: }4 r" z, s! s1 K% M- w
例子:% o2 h4 Z$ e6 c: R. q
bp 1234
, S# y; L/ x, l- |! f4 c; B 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
; [ m; ?8 ^- m4 B* m. I. y
2 Q2 j* @6 h! n9 u' p4 o, y bp 23456,a0 == 0 && a1 == 0$ ]- K6 @$ |+ E) E! v
在地址23456下断, 且中断条件为a0等于0以及a1等于05 n1 k# }. [# h7 w& }
4 }# h' f( }3 k; P9 K bplist) g5 N2 f% d; ~* [1 s
列出所有断点
1 M/ A3 g+ J, G/ S/ }) h: n1 t& D. \3 H! f, P# s- b! Z+ d: R
bpclear 3; n. V* l, N: Q
删除编号3的断点
3 u: ^! U1 i4 N) t/ n) }' T. x2 u. c2 H) {! @" ~' C
bpclear+ d7 v0 U" ^( I! D* l
删除所有断点
0 l; Z* s* t' o6 Q: g4 ]( ]& l5 M8 M+ x) D4 k$ i
! n# p/ U! J" I$ }7 K
6 p6 ~$ G# T4 h7 m6 F* Y: D' i( F1 z" R% ^
跟蹤紀錄指令: trace
! t3 M0 B+ L# m5 v 例子:6 Y& n9 D8 Q8 m* h
trace 01.txt* f$ Y* A' J! K9 X1 H! D- e# Z( p2 {; u
跟踪当前CPU运行的所有代码, 输出至文件01.txt& E6 X) J2 g3 r$ m2 R4 k
" T( ]' i+ T; c" ~2 } trace off
0 B6 _3 `( H S. \! Q5 j 停止跟踪, 并且关闭文件" Q9 ^1 S3 j. a6 P% g+ ~
. n" M( c( q% a2 c% ?3 N3 q trace 01.txt,0
/ {1 x0 E( J3 w% E' |2 o: H6 ? 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt: }, {$ [/ Y" e6 C( s7 a) {
' x0 T# Y* {& O2 s$ I trace off,0( E# ~- U! ]3 I; m2 h. _
停止跟踪编号为0的CPU, 并且关闭文件
- {9 u: F x* [* `
& R6 s4 V+ e# I; |/ r; ? trace 01.txt,0,{tracelog "A=%02X ",a}
& L( b! _8 O# V; O 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
8 {$ t. G2 Q5 [( }8 c1 e 并且在每一行的前面, 写上"A=a "/ h+ x- C8 o7 P5 s. v
"A=%02X ",a为一个C语言printf函数常用的输出格式; i4 k7 H& _9 P: G8 h0 j
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入! ^/ n7 a* D" ?0 |5 y3 u" j
X表示为大写十六进制数) C/ j8 _0 }% B. F5 T+ ^2 W0 r# w
4 F; u3 I1 ]7 B- Y9 r% r3 [' \% i8 N: F, I, x$ K) {3 d6 w% }. u
- d3 z: V, |: V- t+ T3 z
内存直接写入指令: maincpu
: e/ O5 W7 o+ R$ L$ B, K 格式为 maincpu.[][]@地址=数据5 F! v1 B4 i n, z5 ] W
第一个[]:0 A W1 {& g# N+ `) W& w
o 表示ROM地址9 {( Q6 g8 }8 s) o. t4 Q' } X
p 表示RAM地址% F7 m. Q9 Z5 l0 z
1 v: K5 h6 K2 z7 e/ X9 }$ n) G7 N
第二个[]:+ l8 [: d* x. W# l A$ q) l/ G
d 表示4字节
0 A i6 j \7 V! Y6 D2 j% _; S: y w 表示2字节3 T* i% j T- a" ^$ V' q
b 表示1字节
9 L! K0 R5 K7 P$ o2 S8 B! S8 }$ j8 h+ H1 N2 v
例子:+ ~ Y9 I7 b7 v( P7 f& `
maincpu.ob@1234=FF5 `* w, F0 r6 S2 a( R& L. M5 i; Q, i; `
在ROM地址1234处, 写入FF一个字节
* z% C' v+ k2 G6 A% v1 m7 ^1 `1 G' ?
maincpu.ow@1234=4E71% h/ _- [) H, Y' v- j8 Y
在ROM地址1234处, 写入4E 71两个字节
0 Y6 C! H9 f5 c' W$ q `5 g8 @ d% p! q
maincpu.od@1234=600A4E71! E% u+ R3 C, Q$ f
在ROM地址1234处, 写入60 0A 4E 71四个字节9 R+ q+ e. K* V
' R: E+ ?& f5 R) w% v E 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
1 h8 e- l7 U/ p
4 x' s3 \( N: l3 H5 K7 g) L( C7 {9 C% @& O7 `' O
其他:
* c' j" z+ ]7 F1 A, Q; Q! r8 k dasm 输出档案名,地址,长度' V- L5 _! i5 ], W3 ^
输出程序的反汇编代码+ Y% [9 y' @5 [
例子:
0 J6 k5 k+ f2 Y6 k! K% k dasm 01.txt,0,100000# C8 o8 _' d" B9 t% B4 m4 ?3 x
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt; i5 c3 g+ `+ c% {5 ?9 x3 E
. G5 A& |; ~5 s2 \* \9 W0 \5 K+ I: b softreset9 [( `) n( W- L- C B1 ?# z0 w9 W" s
游戏重启, 但不重新载入ROM
1 P3 L% f/ u$ y, e" }6 G
/ ]& e" X3 \0 i$ n hardreset5 P" k2 z/ s/ u5 U. U/ h
游戏重启, 且重新载入ROM
3 F! L5 i2 U+ Y/ \% J; L7 s7 q
9 U# {9 L/ |" H/ E) M3 s+ ? snap xxx.png
6 p+ B2 _, v( a+ f, L8 C u; e 截图为xxx.png
6 R: p+ e6 G# U4 f& N6 A" v+ B3 P M, z0 T# m
7 T0 \/ N) c0 z% L7 k
$ J- j T/ w- {: J6 m# v1 o e: v* v, B, [7 u8 F5 u( D( \3 G/ C
热键:
* Y- i+ Y g9 Q& x( S ~ 中断游戏$ B/ R' L" z* q% t% g
F5 运行游戏
, h/ i Q) c" b, ]3 b F12 运行游戏且隐藏调试窗口6 J! L, Y& o+ ^9 r$ N! k
F11 步入, 单步执行, 会进入子程序
2 c' @8 Y+ A! x+ m# [* |8 D F10 步过, 单步执行, 不会进入子程序
' S8 b. y( O1 J- s. V Shift+F11 执行到子程序返回6 V8 x! Q; c \$ h
Ctrl+M 内存浏览窗口
% u- [, U& B1 i0 g: ]; k- l F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU) ]( ]* N$ }3 \ g" b; {! |: ~/ D
7 d4 B; t+ U! E, |
{:4_94:} ! F J6 _. F# B( n3 a* u) P4 l
5 k; _2 \" ]5 Y* M& |* T% l |
评分
-
1
查看全部评分
-
|