|
|
3 J1 O, p/ _$ V4 r! A7 F) F: x
很快速的整理我自己常用的指令2 @+ [" p" r# D/ a4 J
) F) P# Q9 Z! \3 h# v% l! Z! Z{:4_112:}
- t* C) |1 }" R! g7 {8 H, |4 R' J- F8 K
MAME DEBUG常用指令+ v2 U; ^2 X v; P( F! m1 h. h
e5 g4 y( y8 L( N+ T/ h! i; E
内存搜寻: ci, cn, cl
! ~. c. }4 C. ~% w6 b3 j( @. t4 ]6 Q' {! E. m$ j6 U
ci. T, T/ M; e% D# o
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
: s; Y3 x; j: t" f9 a0 L; }. L$ f" m' M' \4 ]/ @# v+ E
cn
, m3 O( s+ A8 Y7 x& N* l; x 搜寻指令5 b- b! `$ l) q: s# ^
例子:
! V& @- r# k; U! [. [ cn eq,60
4 \. n1 U2 z; J4 V- a8 } S 搜寻目标等于60 (十六进制)
P5 t0 W, w+ x* v$ e! u7 _ ; L( o6 E; J0 ]3 Z* h
cn eq,#96
6 K* A9 x. R+ S0 C- k 搜寻目标等于96 (十进制)7 c8 y- C$ P- ?" S" X9 |5 G
- J( h+ X2 I5 T8 u- K cn eq* X. w3 |2 I1 I8 Y
搜寻目标的数值没有变化
" ]+ E9 b& h" \5 X; y- ~
# Q2 C/ j( ]3 f9 s$ A8 v; e cn ne
0 r) p s/ U( b5 { 搜寻目标的数值有变化3 \0 R" s2 T& ~0 \
8 r3 O- m) ^* X" q! J4 x, E8 W
cn +; l2 z0 i6 F0 J' @8 ^( e
搜寻目标的数值增加7 t2 z# [8 d8 [# S7 m- a& a. q
: v$ e( t* e0 H- l; f6 g
cn -* z4 ]$ \3 |5 ]
搜寻目标的数值减少
( U) t6 s; f' {* F. ?' S
" w# w/ \4 ~0 O" Q3 d cn +,3
3 O5 a1 S# L% Y. w 搜寻目标的数值增加3 (十六进制)4 P& ]9 J; |4 @3 f
* m, H/ K( Y0 v
cl
3 Y9 o' Z5 u y$ @9 j- ^1 Q7 i" [# L0 { 列出所有搜寻结果
+ T) W) Z$ s# @( K3 a% ]& s+ X) o$ Y- F" T7 F
cl xxx.txt
+ [2 W6 o# S' ~/ z/ s6 M* L 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
1 ^* @& d$ n6 A1 O" t# A& b1 w$ k+ g7 _5 I, N* T
0 a: s. L" w7 M n- B& @内存监视点指令: wp, wplist, wpclear
+ O% ~! R% f4 o& ^ 例子:
4 u/ g- b( ?( X# c4 s wp 1234,1,r
" u; ?7 T' S; p E$ F3 c6 f9 a8 j 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
% w1 B: b Q4 V; s
; Q, W0 D, [7 x h$ t! M4 G wp 1234,2,w
. R0 s9 y5 w0 j1 o" j8 { 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2) |: |& I' X$ S0 }3 A5 f
+ v/ y0 R, v. o
wp 1234,6,rw: ?; C% }7 ^/ J( \# {4 `
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6* `7 ^: g2 o0 @( }8 ~2 m
! v& Z% n7 Q: B+ R6 b wp 23456,a,w,wpdata == 1
- R% c1 F& G* ~3 C1 |, L8 s, i* k/ t 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1- ~7 n4 Z3 ?! I7 U' T
m1 T+ x, u7 z4 l) T# ~" z9 I
wplist
; H4 @8 N* w& w! |4 s 列出所有监视点
5 j8 D4 l9 Z. J7 k1 e" C: w% I
' z8 q7 ~8 H* r3 r1 u wpclear 3
2 j9 U; J. k# G2 i1 k 删除编号3的监视点
* B" H) l7 \5 r) F5 H
) {8 O k9 D7 Y3 ~9 J1 I5 T5 l wpclear% V7 [ N9 W+ H. i
删除所有监视点
3 r/ m- V) P* P# V
8 F P4 @* p& P+ Q" H# Z) @ ) A" y0 m' [% e' t& `
9 O, u% M4 Z& P2 c) J3 k! W% [* g程序断点指令: bp, bplist, bpclear' ?. M; l" K! i% F
例子:
& ~, x: K( g$ P F" S0 m% @ bp 1234
6 y7 I3 E# J$ y7 {5 n8 D7 e 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
0 [) Q9 O2 ]2 W) q
; ?& Q" |2 H5 x `4 A2 J' Z bp 23456,a0 == 0 && a1 == 0; r! l/ I1 b6 I" W+ ]8 v2 P
在地址23456下断, 且中断条件为a0等于0以及a1等于0
% r @+ c2 z3 R$ K3 A8 |4 c6 ~* o- G6 k/ e' R8 w2 ~0 H, v% P
bplist
8 o {6 g2 b8 D/ r 列出所有断点/ G5 F1 E+ |4 I4 R" ]
6 p6 w) \; F/ C
bpclear 3
+ N% H3 q# i* \' U 删除编号3的断点
2 x! X3 z" W0 B6 j" m" j$ u/ W4 g/ o5 V# F- [$ @$ ?
bpclear# T4 r% G" m1 @ B
删除所有断点
5 x4 U" V, X: J6 y
# c/ L7 f7 E- G. p. n# T 3 q* |' \9 c5 i K' E, ~
, B. t% h# Q/ a5 ~) F! D2 P/ D跟蹤紀錄指令: trace. W* l/ k4 |7 j
例子:
0 a3 p5 }1 t3 v' j/ p9 F8 e: H ~. k trace 01.txt
: t7 F$ E% ]/ _" ?' y7 ]5 Q 跟踪当前CPU运行的所有代码, 输出至文件01.txt
( N6 Q6 r9 G6 q/ e7 ^4 ~! L7 M+ s3 S5 j* h7 S9 u( A
trace off
/ j% F: `( t s: l 停止跟踪, 并且关闭文件
- \5 x- r+ q3 q) s& Z! {
8 R+ V& D% U" F Y1 D$ Y, d" @! _ trace 01.txt,0& [) C' ]1 z4 @6 c) k# W n1 D$ B
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt# n& X. Z/ h% ~& T) z$ D! F
( U2 _7 z( Q( \; ~5 \% p
trace off,05 N/ t7 \% c+ y# b; V+ e
停止跟踪编号为0的CPU, 并且关闭文件2 J3 h% K& P3 x, ~6 ~
( n& F3 X( `2 [- Y7 G( O trace 01.txt,0,{tracelog "A=%02X ",a}
E! f9 ]+ \; W; w! A 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
& E j# ]) Z( ]- J) r4 \ 并且在每一行的前面, 写上"A=a "
2 b. M& L$ T1 @: N0 p+ b "A=%02X ",a为一个C语言printf函数常用的输出格式: ^$ k$ X( S3 o
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入- W- a& P2 j8 _6 d5 W" @
X表示为大写十六进制数3 b% ~4 E8 w2 t, O: m9 O. r$ n5 @7 A
. p' T d ?6 K1 O( N* M5 `' M9 L7 D, `2 l# ^
0 N5 A {3 V0 \$ R, r [
内存直接写入指令: maincpu2 J8 {: B' W* _2 b
格式为 maincpu.[][]@地址=数据9 Y# V. N+ K" A6 z( R
第一个[]:
* |* Q x; `! J$ p6 d& r o 表示ROM地址8 y# k! N$ ]; U; n' h# e- G
p 表示RAM地址 X3 l- j* @ [# [/ m' h2 l$ T8 k+ b
4 p! l9 z5 G* ]$ r+ A& H' O& S 第二个[]:# U4 v$ I) s! L; Z0 U: n2 r
d 表示4字节9 i1 X1 p& T6 g: [ p7 I' r
w 表示2字节: f$ h; E/ X( ]$ ]& v& j
b 表示1字节# v: k) g& c' T3 m2 O8 I) Y
6 y2 u$ N. s | |( V6 l6 l% C
例子:# Q" B3 y3 I: Q( ] t
maincpu.ob@1234=FF
0 \' I) r' b. J% W# f6 Z* v 在ROM地址1234处, 写入FF一个字节
8 {0 R& j+ M+ w' F
- l# |5 [' ^$ c, B, t5 { maincpu.ow@1234=4E71( n! ^1 G I0 D6 L
在ROM地址1234处, 写入4E 71两个字节- T u1 ^ L! k7 [; p# q
. t8 e8 d; d9 ?0 b# k maincpu.od@1234=600A4E712 r/ p4 p: `+ D1 W/ O
在ROM地址1234处, 写入60 0A 4E 71四个字节) D! e0 C2 q$ c9 d2 V
3 F9 x6 k+ B6 I8 {% o 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
; h8 |( k' b1 |( b4 | M . _. C! l9 {4 V" i* E
) R3 c. `( G( \+ v
其他:% _& _' f9 D2 ~* R& W9 H
dasm 输出档案名,地址,长度, m' ^; J9 Y9 d% ~. y3 O. R
输出程序的反汇编代码
9 J# y1 Z& w9 D) N* T2 v2 c 例子:
9 l& m; M+ ^& v3 Z* g dasm 01.txt,0,1000004 I0 Q( }+ R9 j" G V+ c3 g
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt. ]& ~ i6 k1 f" I7 z4 z
/ l3 | T$ I5 ] softreset. F$ F. v) j0 R8 c |. k* Z
游戏重启, 但不重新载入ROM
' }* V% M+ L1 l8 h% y- C
& y/ X2 ~! S$ q H- w6 d& i hardreset+ v) w9 s, O+ m9 G! l
游戏重启, 且重新载入ROM# V. E( ?) [0 O$ @9 |
, j# q e3 L4 f/ ?+ i0 @
snap xxx.png: @: P* z+ w* `$ i9 ~( B! Q
截图为xxx.png0 G8 d7 B+ N& e, A8 h0 L* ^- g
( W1 p" y9 O" y4 }- V. P: A- P
; ^5 U8 y( [! U8 o! y! Q8 [
) X. t5 ^$ z9 s$ v5 n
. Z5 n8 W0 ?6 [! z. X) R热键:
/ t5 ]4 H! x$ Y F a7 k; g. ` ~ 中断游戏
; w8 [' u( R v9 U F5 运行游戏1 z! m6 ^. u9 F( n. C
F12 运行游戏且隐藏调试窗口 R8 ?* r# r& D3 g
F11 步入, 单步执行, 会进入子程序
, _1 u8 S5 t& w% a F10 步过, 单步执行, 不会进入子程序/ ~8 X2 Q7 c( _7 L! @$ _
Shift+F11 执行到子程序返回
" E4 L# Y+ f6 q$ S& U Ctrl+M 内存浏览窗口5 E$ e7 D/ H" G+ ~3 b3 o; T
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
# s" t* C( P3 `. B( Q9 i
3 C' w( W" I9 V7 {( b3 K{:4_94:} 9 O) y% R. s# W) k9 R$ K6 d$ b
6 ~" p7 _; |9 G: |% h8 E4 x5 ? |
评分
-
1
查看全部评分
-
|