|
|
9 r# S( M1 n1 F# s+ R很快速的整理我自己常用的指令
+ a: X" _! @! v Q% @
% r; j: P" F* a9 F$ m{:4_112:} # M; x% {% [* c6 P
( [' a" a' D+ {' i8 P
MAME DEBUG常用指令" M8 N3 p: c7 J2 l1 `* s
9 q% g3 _. z1 o Y/ E! i内存搜寻: ci, cn, cl
! W- n% L5 Y# U, b* f; D% S% M' K
ci' }' ]- j0 `) E4 W! T8 d
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
' ]5 e1 x/ N0 [' P. L3 j" C9 M3 i5 I3 P9 _+ E- e" G0 |
cn
8 D6 D! p$ r! K 搜寻指令
+ a; D: J( v! z6 V2 R 例子:
4 w! y: D/ Q1 _: c cn eq,60
& S* s3 R/ E& n0 s# {, k% P8 V R 搜寻目标等于60 (十六进制)
6 W0 Z& F+ U* Q 4 I/ R- x* j- m' I$ p
cn eq,#96
, e# t7 A c& A# {& t. d" { 搜寻目标等于96 (十进制)2 n) P/ |- I& j/ y" w8 h& H o& @
) f5 [9 r; Y3 B& k2 g cn eq
" O. N2 z3 e2 g' S. a \ 搜寻目标的数值没有变化% R) V2 O1 Z1 \2 d! M: C) |/ c
9 u) ]1 M; ?, n
cn ne+ h, r# N; M% l; B7 X1 H
搜寻目标的数值有变化
b& Y" j6 b3 s( P9 L" D ! l! j5 M5 H8 _8 L1 _
cn +3 e/ o' u) U: O: e4 S+ B
搜寻目标的数值增加9 C/ O2 W: O% c* ?) {: h
- `/ i& O$ K0 Z! U cn -
0 @8 d/ b1 v3 i0 O 搜寻目标的数值减少& c+ h, v% R0 X9 ?
( e0 E5 r) U$ U cn +,3; c0 Z% k" p0 A" K$ a6 g6 J, a6 t
搜寻目标的数值增加3 (十六进制)+ s$ H4 l/ S1 {; `+ _: R
/ Y7 o: }" q H2 v( J. Q2 I cl
+ w0 ^; ?0 x! K; O& ~ 列出所有搜寻结果4 @+ v) E6 {: ~' @
# ]3 ~! e2 T& _6 P; ^& ^6 j$ \4 m cl xxx.txt y' G* h! T+ F
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
! z$ S0 k/ R, a7 h6 D3 ~( e; _; z5 w2 J' n5 `/ u& R& K6 {, T. g0 n
7 ^$ O4 m% i* |) j# o T内存监视点指令: wp, wplist, wpclear
7 ~3 F6 z2 s( q' M- h7 b: k 例子:$ c7 ]/ H m8 X7 p: p0 W
wp 1234,1,r/ p* u% K5 { _0 f! ?# i& ^, c
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1: n( Y+ [& Y5 j0 b0 _3 U9 E9 B
" H5 o1 o9 r, j( w! D
wp 1234,2,w
3 k: J3 B. V) W. F 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度25 a4 `6 T4 E1 a# J6 y2 [
/ U3 m X4 {" @( C5 Z7 h
wp 1234,6,rw: M/ I0 N2 q2 I4 v. t
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
3 T( v2 d$ U9 O3 V# c& h0 [/ }
7 @9 q( L+ e0 R: `7 c8 P' i wp 23456,a,w,wpdata == 19 `) x" \+ o0 f
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1# @) b* z% W5 H: g6 [" Q. H& B
9 |3 h5 u% w- | wplist
" T3 m* j: p1 b4 z 列出所有监视点
) S( [ h/ @) `1 T/ b* F6 y8 E1 N; ?0 o6 [- D P
wpclear 3
- |: m" O2 V1 @+ P5 ? 删除编号3的监视点
- \" W/ P( g( s0 K6 h; i: V+ R+ P( ~; m" w
wpclear" E- N) Y# O( R1 s8 ?2 |
删除所有监视点
1 @& X2 B7 |$ ^, o6 k
# c' V) R+ o9 F1 C- a' s9 q # _+ x: [5 r8 y5 L$ D* u
9 w3 d8 G x7 o0 Z程序断点指令: bp, bplist, bpclear3 q$ r3 I& D/ N3 P+ t) l
例子:
- G8 t) R, f# a bp 1234: d3 ^; J' Y2 z* @. j
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
, I* g- B, G" E" t$ L' G1 | q0 R$ \ [7 }5 D+ g b
bp 23456,a0 == 0 && a1 == 09 p0 }. n6 h5 p f5 p" h
在地址23456下断, 且中断条件为a0等于0以及a1等于0
! M: s! k1 F2 f+ q& E6 K
& s5 g: e' n& V9 z$ E2 O bplist7 D: _; H' y* v
列出所有断点
: C/ e1 J- o3 y0 T2 U8 [: r
" b6 _& t3 D3 n) r' H8 T# \9 e' j bpclear 3
5 I3 V9 Z* d/ { r; S 删除编号3的断点3 q5 k' f; }7 z# j! v C
+ F6 D% L" z Q5 a
bpclear
! n% q: {5 h- _8 T" R+ p I3 U2 k 删除所有断点
( m# k1 ^. T+ [6 ?. S. c
* e( ]* a" v* I/ c5 l : N' Q5 P+ @( x+ q1 M
/ ?6 @9 ~8 k; p% C/ R跟蹤紀錄指令: trace
. ]# Q# y! }3 L, {% e8 n6 J 例子:
# C6 g8 \; h, W6 I6 _/ r/ [ trace 01.txt
" D% l# ^5 A8 L; D7 j) X 跟踪当前CPU运行的所有代码, 输出至文件01.txt b; k( {; k# u9 V
8 T) X4 _& `+ ?; x1 l7 K+ N
trace off
+ W u; Y- r6 I w, t7 W- U2 f 停止跟踪, 并且关闭文件9 C; O& f# j) W* h/ b f% R
0 ~% Y D* O, p. k) v
trace 01.txt,0% w" v2 T' M: H+ O
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
* l- I% G/ j% _: p& X: t! l" Q( @. ~" W2 I# g# ]" C
trace off,0
. H- H" j" {' W 停止跟踪编号为0的CPU, 并且关闭文件0 i9 F9 ?+ t, i
" d% @! i5 i; I# p, c
trace 01.txt,0,{tracelog "A=%02X ",a}* a/ |3 R9 D% S- p
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 1 P: y* Z8 u2 ?1 a* q5 s. c
并且在每一行的前面, 写上"A=a "4 Q O! L, z1 |/ q8 [6 m
"A=%02X ",a为一个C语言printf函数常用的输出格式7 E+ C* Y% J4 i# g/ u; H( y" k* }
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
2 d4 P- b( Q) [( k! | X表示为大写十六进制数
( N0 t. ~4 F- u6 Q# O: I' [4 k. Y, k8 R3 \
5 V& ?# l* m' `, m0 Q: F
5 T3 S6 M% _# C3 Z8 J内存直接写入指令: maincpu: ], B) i- c2 {2 Y' f
格式为 maincpu.[][]@地址=数据* Q7 T' K2 x. y' W4 T7 e
第一个[]:
. S/ M/ [+ O9 B3 \" O o 表示ROM地址
. |5 |3 H% z* m8 b9 @: L6 [ p 表示RAM地址
5 y7 h9 Q) ~# J6 H
" ^# j* Z4 L: X' s/ } 第二个[]:" M, S0 _- `) F
d 表示4字节
% A$ `% f- d; b5 }% m4 S w 表示2字节
' U; Z) a" E# \6 H8 S6 F4 A b 表示1字节 S7 H. z" a( u! K/ b }# o( \
+ ^: R. R& u% }' f8 w. B: b
例子:
& B, l% N, y2 m: \8 R% `1 k" _ maincpu.ob@1234=FF' z3 W4 b; d# b! ]
在ROM地址1234处, 写入FF一个字节# w1 W, o& o2 t/ D
$ y/ V- \: o9 N8 v: ?2 P7 T
maincpu.ow@1234=4E71
! r& K8 o7 s8 w. x# U! k! L 在ROM地址1234处, 写入4E 71两个字节3 z j- S" L1 }* D# \/ w) U
5 }+ e" m7 n, Q& f% A$ \ maincpu.od@1234=600A4E71
7 a1 J( O! z' K/ c; Z" G8 w 在ROM地址1234处, 写入60 0A 4E 71四个字节1 `- J$ y% @: Z' V; Z: r
; u6 N- Q: \- N8 H+ F 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写& P. E7 Q0 R) R2 e: O3 s
% I5 C8 e8 p+ c6 u8 j- A# p
& I5 i; x2 E) V% M3 K7 r& ?0 G其他:# u) h8 F }& H& m
dasm 输出档案名,地址,长度
* B2 r( z1 D$ t) h6 T4 |6 J 输出程序的反汇编代码
, A( J$ [1 ]5 H* P3 r& v2 ]1 v+ I 例子:
, c/ Q) b. e2 P dasm 01.txt,0,1000000 o4 z$ I! W( c; L
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
! l" L+ B8 _7 C I
) b. a S% n4 @: L6 a softreset
+ f. N- _9 d( l 游戏重启, 但不重新载入ROM
. F) T' A6 m: Y4 ?+ Y, B: a$ S! A7 e2 y8 J1 Q
hardreset2 }% p7 F5 M- P/ ?/ }4 D
游戏重启, 且重新载入ROM
/ R: `4 {( _: N) f6 b5 _! O0 ~, M' t! V# A$ {9 E) W- c' h# X
snap xxx.png! s" D/ k% {3 z& Z6 e5 I; v6 p8 R
截图为xxx.png
; e* @5 l/ ~7 Z B% m5 C/ Q' Q7 o: h; z& B' ]( d5 z g
" T1 R$ h+ B- j
* N( {. @3 l2 J: ] |3 H$ v4 G/ ~
: @+ Y! {1 a' y; G6 x2 P& {热键:, e+ N% n9 o/ T# Q
~ 中断游戏
8 O+ j8 _& H( } F5 运行游戏6 ~* M: _4 {+ e8 D! D
F12 运行游戏且隐藏调试窗口8 Q1 U( v) N* ^: v: F( M, r
F11 步入, 单步执行, 会进入子程序
) f$ L" j# q: N( p F10 步过, 单步执行, 不会进入子程序" b) W& M+ D) M2 N) ?9 I: J5 K3 K1 m/ w
Shift+F11 执行到子程序返回' Z/ I+ l# T9 V0 k
Ctrl+M 内存浏览窗口! m8 y9 X T$ C+ `8 X! x3 {+ }
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
$ F# D) ]( f+ C) G& Y; ~ x7 U' e1 z& W8 `- N; Z+ y
{:4_94:} 0 H) M O$ _* x1 A( R* Q
4 k+ V: G7 D5 w7 Z! X6 z1 F" `
|
评分
-
1
查看全部评分
-
|