|
|
, b6 U/ w1 L& H; e! N很快速的整理我自己常用的指令
. k `7 z z1 ?2 C/ Y# F2 p
8 q3 K( U+ D2 Y# l a- b9 I# l7 v{:4_112:}
% F. O% L; Y5 b! ~, h1 q) \! g8 W% q3 m8 l* J
MAME DEBUG常用指令+ T& l7 z8 o! j! n" `) Z! c
& M7 o/ _# r/ Y3 z0 g
内存搜寻: ci, cn, cl
, ?4 C, Y5 Q1 h& t% P( x9 w2 c) e l. H q7 i- c
ci
# P& y9 s4 F6 F0 y* R1 r 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
) O8 R( t& d6 x# ]3 h. F
) X. i! J/ N2 B. t+ ^+ r( n. c p cn& a" Q1 ^+ U: \ f
搜寻指令- q. ?, o9 O3 M' i2 W$ M& j+ w4 S
例子:
4 S) a' ]% X- I# S5 W cn eq,608 \3 o' C# w( _
搜寻目标等于60 (十六进制)( d ~* M* R) `/ k
2 q( M$ ~8 x7 `2 P4 l! G R
cn eq,#96% `2 `* W9 \ a$ a
搜寻目标等于96 (十进制)
$ N6 ^3 ~$ V: e$ J' \& q, d' a4 F- b: Y1 p) k% Q5 p
cn eq* @8 D8 q* t; [7 g4 ]
搜寻目标的数值没有变化- r# I q' G5 E0 h! A
3 H7 S3 N8 t% f1 l" X! q+ y1 M. D cn ne
/ l6 \- S2 C. }. @0 f! O 搜寻目标的数值有变化
( Z e- f, a8 X
' U1 \( R8 V5 y6 M cn +
, _5 S; d0 D/ p! A) R& i 搜寻目标的数值增加 n3 o1 p B s5 e+ r
. n9 V& d- J. r d5 L cn - d3 C* x$ ^; L) B
搜寻目标的数值减少
# n# l' q+ O7 _; D 2 u' ~: m: v8 i9 P4 _' @ i; z4 g
cn +,3( v! Z' } u) y" G# L! {
搜寻目标的数值增加3 (十六进制)- K- e$ w4 L0 W ~5 H1 ^
, K5 [1 q5 P: f1 |1 ?) T cl4 V# L4 Q$ }& P" e$ U
列出所有搜寻结果
. f9 k+ }! i- u0 v, F5 `$ d3 y
& Q! k, a" K- H* r cl xxx.txt
+ O" O1 g# f6 Q, x9 @ 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式: b% l+ O# ^* s4 H- e3 r
* X9 `( ?) L2 z3 w/ a- N; X
E, ?( `- s. J
内存监视点指令: wp, wplist, wpclear) J" }4 t6 K8 {* h* V. \2 A
例子:( T6 v" f8 v' @, G: t
wp 1234,1,r! n- D0 O/ Y& z3 ]: e9 K5 N
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1( Q7 _- ^* r5 P6 i9 ~
. l9 C+ H5 O$ g) L- Y
wp 1234,2,w& I" J- e9 V: y3 X
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
( n6 W! m% ]+ ]" N: y
3 k( u; u" Y' A/ R9 j- b wp 1234,6,rw0 L: I# _" J9 K
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度68 ^' ~: o! j4 m! q/ E/ g
% m1 _1 s9 d9 P% J- Z2 l8 d+ ?
wp 23456,a,w,wpdata == 1( f* X6 b3 w+ t1 E9 G4 I
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
* V" f' H& s& P$ n4 J9 _) E
( B5 U: H" H! d9 I0 B" a wplist P% w' e* s+ v
列出所有监视点
" j* k& E9 {2 t/ q; Y) M) t. X0 H! H+ H L4 D
wpclear 3
+ T$ n# c: E; y0 P+ c8 J 删除编号3的监视点+ L$ ~- z6 g5 e- v* I( C" H6 F- P
( W' ~) e$ M+ |
wpclear
" @8 Y) n7 i1 T5 P1 ]( [ 删除所有监视点
+ P1 Y+ r4 b& Z4 H8 M; |9 A0 ]5 b* I' T, [3 {3 L
" [. K! V& {+ c4 t( e
& Z# o( H" k6 H9 d* Q5 L程序断点指令: bp, bplist, bpclear$ c4 Q0 D1 u% }4 F$ }% p
例子:( N+ j, e+ _9 `! ?$ s8 O8 @: b3 v9 o
bp 1234
' K/ Q( p* b1 |" v, p. F 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
F; G, h7 _* P) w; \
) |( y) p/ v) }- c* m: @: d bp 23456,a0 == 0 && a1 == 0
* `6 R; i4 K# Q/ H0 \ 在地址23456下断, 且中断条件为a0等于0以及a1等于0
4 `0 V3 b M# i/ r" h/ E0 B5 f, I# `6 f9 r5 Q) P
bplist
+ D7 B% m5 E! C. u% x- p) e3 h 列出所有断点
& y8 h* k3 r# Y" k. v
$ W8 d" }* M! I bpclear 3
- _3 s# c0 ?5 [ 删除编号3的断点: x: r. u( o% a E) q( A
1 U, o( r. J5 L5 K bpclear
& g2 ^, |1 o' b4 ] 删除所有断点
! l: _ B* V* K K$ Z2 D/ g- T
' S; k$ J$ @. X8 i7 D/ S 3 }" E6 p5 e6 I6 {
7 f& V; @/ _+ R* Z$ T% S N跟蹤紀錄指令: trace# I/ w3 S# p9 E" z) ]# J
例子:' ?; y( Z; i8 _5 a8 f
trace 01.txt
# s: j) O0 N0 e6 w3 G 跟踪当前CPU运行的所有代码, 输出至文件01.txt
! K; g# H& D) T' ~" B+ `- |+ o5 n7 [) V0 r$ e1 D7 C. n
trace off+ S) V) @' V) |' W) \
停止跟踪, 并且关闭文件, w. s4 H3 N' R+ g/ m% A
8 J: I% [+ J% G: U/ ?! Q" i trace 01.txt,0& B* ~2 e' G, C# I+ P7 ^. }
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt$ N* c; n6 R! O& E4 r
& W9 c, l/ d3 u7 b' ~) Q( p2 X
trace off,0; c. V1 o* g) l. O0 D( Z' u1 E
停止跟踪编号为0的CPU, 并且关闭文件
0 n+ `8 [! U, Q; A8 m4 F4 ^- j/ J+ L0 Y9 {& ?
trace 01.txt,0,{tracelog "A=%02X ",a}
0 d' Z" r! v' I0 P) D0 u 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
, W: R4 U" I' j2 p9 H 并且在每一行的前面, 写上"A=a "& W; n4 |7 ]: K/ s0 a w+ J
"A=%02X ",a为一个C语言printf函数常用的输出格式' D f$ Z0 ^; U3 C& e' t
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入; j; v, ~/ I& m9 n/ |8 K. D
X表示为大写十六进制数( J" F' L2 }$ U' {1 q' s
. L! }3 y( i" o, A
* N3 z2 f; w$ M: f. T. S& g. k' r
4 G* u1 [+ {/ D: {4 m内存直接写入指令: maincpu
- l% q# ?) J `+ T+ X N- u9 F! u 格式为 maincpu.[][]@地址=数据
6 l! w* C( m+ I% s% A; `0 z 第一个[]:
) _ F/ E! J6 b" s. y6 c o 表示ROM地址. R2 D9 s3 h7 H# V
p 表示RAM地址1 H4 w8 Y; G3 J. U0 P' D W
; g0 I9 G* O( F 第二个[]:6 n$ h7 v0 c2 ~8 K6 `
d 表示4字节
+ t$ w4 U- o$ N9 g$ k; D w 表示2字节+ w6 p" D, f- v& q% E! F- S/ D) l
b 表示1字节9 F/ q! H' t! e# Q! K5 z& Z
( U. A. L5 m; {4 f# [
例子:" |& }# }) ^/ p, B' V5 _( q
maincpu.ob@1234=FF
3 K8 q8 v. V3 K* w( @( ^" E4 r 在ROM地址1234处, 写入FF一个字节
1 S l& V3 C$ {" h4 y: O: S; u1 W3 b; D$ x* c/ |, M* g& d" \
maincpu.ow@1234=4E71* k! T8 t- [" [3 ^$ S Z
在ROM地址1234处, 写入4E 71两个字节
2 c6 Z" L$ f* I+ t/ c. P- t$ G Y! R
maincpu.od@1234=600A4E71 l/ E1 j2 c9 s/ e/ T
在ROM地址1234处, 写入60 0A 4E 71四个字节8 } X0 v- c2 A0 f* V( `+ b |
* m7 ?" j9 P8 i; n
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写# X" i; ~* U2 Z- T' i
$ j* U; q" F. i0 j1 Q1 V! V6 X
1 V( y8 _+ @$ I6 Y
其他:9 {7 Y% _" Q! K" q: G0 A! a
dasm 输出档案名,地址,长度* K3 w) R4 h0 u' C
输出程序的反汇编代码- n1 z, D3 {' [: a
例子:
) M1 r# x$ A: u% a- ?- q# x dasm 01.txt,0,100000
: d0 O" K7 u- g/ ^' n8 J) K 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
) B+ z$ \! e( y) {" Q1 b6 b
# n* ^) D: m E& Z9 F softreset$ P* G, t1 U0 r
游戏重启, 但不重新载入ROM' [- r y% c( l& ]/ x4 y: c( M
. \; S6 S1 O G9 B4 c; n2 l
hardreset$ t5 M6 i9 i- P' f* U4 h
游戏重启, 且重新载入ROM
% z2 S" f1 u( d# S" K5 M# G, J, K8 g: L5 f5 s8 V9 K6 p
snap xxx.png
, ? T% R5 p2 R; G. o E* z( T 截图为xxx.png1 ]; s# [$ l& ^/ Q( F- Z5 M X
: A$ c! ^1 H7 B, D l; B- Q0 y
; x+ A" {* a4 h, g/ a6 B( a% q( ]* z' j 4 i0 u" p) I; u
- Y( l7 O4 E! A7 v$ ?热键:
" ?; T0 |4 {0 {3 } {3 X ~ 中断游戏! `1 f A3 A" J" Z& L
F5 运行游戏% l; v/ m5 ` [5 B4 q8 k
F12 运行游戏且隐藏调试窗口) \5 |. ~. n9 M/ J, h8 m/ s
F11 步入, 单步执行, 会进入子程序8 \( y: R5 f$ ~9 j V: K' |# a# w- w. U
F10 步过, 单步执行, 不会进入子程序* L3 n" `" Q% k9 t. `3 X7 [
Shift+F11 执行到子程序返回. [0 y0 E& H$ C& A
Ctrl+M 内存浏览窗口
8 ^2 b+ l0 e% R/ m% c3 u F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
1 e+ k: z/ K) n9 c* ]- t
# K! ~' e- F8 u9 m3 b* L{:4_94:} 9 z+ d' r# f6 G/ c; y
+ R. D5 V N/ K& K |
评分
-
1
查看全部评分
-
|