|
|
; K. s; b, D* O4 O
很快速的整理我自己常用的指令
# j; U' z* J+ j6 f. l! ?" B/ H6 `0 v2 [+ i9 \- L. V/ B
{:4_112:}
; b7 i; P/ x; M7 B/ r2 |/ ~
4 c2 Y, X$ c% \" X% gMAME DEBUG常用指令
/ c/ p0 ~) `; N; _# J
) n7 N- ]' f" N9 Y内存搜寻: ci, cn, cl
2 B4 k( V0 Z' h4 p( ]9 Y8 F5 x! N( g/ ~: I
4 ?( o& N3 `* d* d" i1 ]. {9 I ci' z7 x1 W$ H+ n
搜寻任务初始化, 每次搜寻一开始一定要输入这指令' c' C6 a8 `! J" r; n
* t) v: z2 N0 h# h; m; k& m cn) H; a1 S' ]( Q' F
搜寻指令
! `4 ?; ]1 G h& m; R 例子:
( O+ p6 ]8 B1 F, N, F W cn eq,60
1 [& Q- x. ]" P2 W9 P* X$ V0 N 搜寻目标等于60 (十六进制)
' k5 Y& K1 g5 f7 A/ s* c 6 a- i6 V V0 w2 d, w; W* E: _
cn eq,#96
" S' p+ T& z; H 搜寻目标等于96 (十进制)
& @0 x$ x, q) _4 q4 J5 m2 n9 @+ r! y3 Q5 ]% F" _
cn eq
% z# X+ D! {. K' | 搜寻目标的数值没有变化, @- o+ q& H+ w3 [8 B; s
) b' X) K- m4 ~( T2 h' \8 V
cn ne
% K A0 w+ f+ I" d+ _" F 搜寻目标的数值有变化
( B8 I- ?4 |- y7 a+ a x
% I: N7 L2 U# @8 B1 D cn +
* J0 _" p9 c" b* o$ i) D* s- k 搜寻目标的数值增加
$ F* h" F! p. S- [5 o5 p
/ p+ J- g3 i: K' I0 @ cn -/ s' A; r3 X6 H7 Q
搜寻目标的数值减少1 u* v( x* V; D8 y: G/ ^8 F
" U6 P( S+ v3 N+ ` cn +,3& r4 g9 M$ @6 E+ q4 Z
搜寻目标的数值增加3 (十六进制). O5 \1 E+ u* `* O6 Z/ E5 ~5 W
& ^" Q. C- i( ]+ I. E8 Y
cl& l7 H5 X; g. L. r: V/ y9 \
列出所有搜寻结果) n, g' ~" \7 F
, v& c- L$ J& u cl xxx.txt
% q. f, x) P0 d% v0 H5 x1 a 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式& T) e+ ]2 j3 i8 [* I" z; [7 N7 M
4 t) c) ]- ]/ q: q . Q7 x M' K i. |
内存监视点指令: wp, wplist, wpclear; i$ e* l3 w% _) M6 I
例子:( J$ C0 }- [- O3 t0 F- V: m
wp 1234,1,r
$ w0 I; b) ]* ]& j2 p 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1; y7 j# A' @- A4 z1 v# O( p
# a! p" v! e& R6 h5 X/ x wp 1234,2,w
$ ^& u2 A, Q) b& t 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度20 P! U, V6 o4 w( m4 N# m U
& H1 [" i& p* @5 o! r& \' s wp 1234,6,rw
0 `2 g6 Q }1 a 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6" p2 l# L& [6 q8 O& E! P0 N
9 V2 \2 X" j/ O$ G3 o: ?+ b- T4 C wp 23456,a,w,wpdata == 1
' p+ X( t8 Q: T3 e( m 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
w/ A4 O0 E) m
* R4 A$ Q; U8 d4 J wplist" s0 j% G$ N/ [3 W8 y! s' M" O* F
列出所有监视点/ H: `8 h5 n) Z. U+ i. P
W8 L [' k$ ]# x! I" Q! l wpclear 3
( y6 {- r" d$ G 删除编号3的监视点1 c) Z: h1 E' O8 l( }: S4 S
- u% ^& D+ X- p7 E2 B& z' N wpclear* j8 k* o) i# V* |7 z, y1 \0 l
删除所有监视点# F i, e3 j( m `; B
0 Q) y, L7 Q; g( V: L; a) q , N+ k ^1 m+ M1 C, n
7 ~& r; l' |% c- k程序断点指令: bp, bplist, bpclear
) L$ J$ o$ x. U( c/ l1 s 例子:1 n n% q$ {5 P9 ]
bp 1234& J L- ?+ H( t Q
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断% |- d$ _- \4 A! I7 u' |
! q$ h; h. m1 S
bp 23456,a0 == 0 && a1 == 0
/ q: L# { ?8 v8 \8 b4 l9 w, h, I 在地址23456下断, 且中断条件为a0等于0以及a1等于0" K' ^: K& ?( E" P
2 C4 y9 w8 ?$ w) l
bplist# m* @; b% |7 l* t* h
列出所有断点
3 w1 s, W+ G: b) Q! R$ b" b& ~$ k% C
bpclear 34 ]; w8 `- A6 ?! R$ B
删除编号3的断点
! w& I d* M, j: y" u* L* i# u2 z! r- I! b
bpclear
: Y% w1 R' c6 e) U3 o: Y 删除所有断点
1 t, |) z* o3 O; `: b" r S9 P; Z& f
E' \ g5 W! z3 c. y
: L4 k+ q- \- N! O
跟蹤紀錄指令: trace8 T9 a l3 p, ?! e( c
例子:/ X$ j4 M4 N) L( S
trace 01.txt$ W2 x6 H$ F4 k2 z. ]% i
跟踪当前CPU运行的所有代码, 输出至文件01.txt5 _8 }+ x0 G8 C/ O$ G, |
% n& I8 ~" U/ \& M; l/ S. e' G
trace off% y9 | ~' K+ Z: T8 I
停止跟踪, 并且关闭文件
/ k4 Y6 C2 p% a- v" Y$ s- q g' }6 e( r4 o# N* V
trace 01.txt,0
- A7 g4 U6 G8 d; ^+ b& O 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
( X5 G- W2 B, f! Z' P+ U7 B9 M' Q8 T `4 I
trace off,0
B1 }: X! g- S+ c# ~) g 停止跟踪编号为0的CPU, 并且关闭文件+ g5 n k- _1 S1 D- ~0 h
6 d: M' X4 L6 A# q6 }# k3 ?- [2 { trace 01.txt,0,{tracelog "A=%02X ",a}
% I' _& x9 _! k" e( i 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
) E7 v# H& f8 r z* ?9 m- t# H 并且在每一行的前面, 写上"A=a "1 r5 ?- F. Q5 }- m
"A=%02X ",a为一个C语言printf函数常用的输出格式
8 c) }3 C5 S. N; H 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入: b0 C5 _; y" Q/ m% f8 w0 k) F$ q
X表示为大写十六进制数6 ]. F# e( c# `/ i; D( [
4 H% ]& d4 M- g* a# F
, w# G8 q) _* y( _# u3 O
, Z5 _* a" j$ k9 S S# u内存直接写入指令: maincpu
5 C) r2 R$ R- I/ }% ?4 T 格式为 maincpu.[][]@地址=数据
- w* r( ~# q0 Y% d. `5 X 第一个[]:
' }. H x/ n5 V. E6 G o 表示ROM地址
# q1 Y, ]# S5 }& r% S p 表示RAM地址
8 j9 l+ L- @1 ~3 u/ g$ k7 A/ }) Q0 k/ R4 ^9 v$ b/ ]* H, I
第二个[]:
0 Y6 V. ?& [8 q) K6 F W. z d 表示4字节
3 D" [$ H2 x! q- g! g w 表示2字节2 C2 B( r% h; Q- _/ e
b 表示1字节5 C0 S- p) |* g8 J/ e
0 B/ W! L- Q# G1 i* a$ n 例子:
: s" v; e' {/ J" T# W( k5 t maincpu.ob@1234=FF4 W4 n- l" `5 m' d9 R
在ROM地址1234处, 写入FF一个字节( u# F4 k5 G" ? v
m' O8 X( _0 c( `4 r1 }; e maincpu.ow@1234=4E71
' d$ X5 W) {; Q 在ROM地址1234处, 写入4E 71两个字节
( x# c/ Z' V) [3 r2 `( T i/ X# o- i& U% V& a- D# S
maincpu.od@1234=600A4E71
: O* _$ g5 V2 R 在ROM地址1234处, 写入60 0A 4E 71四个字节 j$ |+ n. s$ b1 L$ M8 t! m
$ {9 h4 A) s) Y/ [- M Q% o& R 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
8 {/ e% t) W* h
: T6 V$ w* M0 S1 B. K$ [' [, a" m) ]7 j4 v
其他:* ~% [5 L+ L( H- R+ J
dasm 输出档案名,地址,长度
: i2 s9 p8 }5 H) {' P# ?' ^ 输出程序的反汇编代码0 `% Z$ A* w4 Y9 K5 R! c6 f
例子:
( H" @0 x" T3 N* G8 u dasm 01.txt,0,100000# k1 _: Z* l- f
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt! X. b2 A4 u" F( K
$ c2 P* U4 N6 A, M( b) O r softreset' O# |4 `$ T5 n. F& j5 a
游戏重启, 但不重新载入ROM
. Y% b" [8 q- B& R
7 f. t/ m0 P, v& r& b! E3 a hardreset
$ [' c8 _' i+ ~0 j- V 游戏重启, 且重新载入ROM7 {9 @. f; U' m2 y9 w1 ~" I
( H8 e$ J: E/ m9 `$ U# Z
snap xxx.png
4 r2 m7 \, N. U2 A! d, M% x( f 截图为xxx.png
" T4 j. i J. {. h* ~8 t1 M9 K5 q2 D F; _
7 W6 Z2 c% t4 @. C
/ n. f5 _0 [0 o; i
" b$ @/ S! U; T0 V7 M0 m4 p0 g' e热键:
5 c( q0 x6 D8 r8 C ~ 中断游戏1 t v& n8 L; n* m$ h% J4 e
F5 运行游戏( ?, t" c9 Y) s1 [' G3 M* N3 i$ ]
F12 运行游戏且隐藏调试窗口
1 w7 X, c/ E8 q) C* R) Q F11 步入, 单步执行, 会进入子程序9 y8 \+ g4 y& t
F10 步过, 单步执行, 不会进入子程序
7 m* W% }9 l0 n" h0 h! b2 A* M) { Shift+F11 执行到子程序返回
. Q1 L- b( t9 n' U7 r: E' a) E" i Ctrl+M 内存浏览窗口% V7 S% F/ W( Q) f: i5 k( h1 v" u7 M9 y
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU B. u# N# m/ u; `# u) [
5 `- n* {' W5 s& e6 H" k: o{:4_94:} : |2 w' m- D( \! n! N' @2 r* `( h/ e
4 ?2 f$ c, p2 j6 M7 m) X
|
评分
-
1
查看全部评分
-
|