|
% u" v; t& t6 D' d4 `# G7 n很快速的整理我自己常用的指令
& `$ g& w; s4 J& [
+ `6 [3 |! D' ~5 s{:4_112:}
% G8 N9 g% B# m/ k2 Q0 |& k/ C y6 z, _& d F
MAME DEBUG常用指令. u& N& Q7 y0 i) R5 g
. R/ X: w+ F6 J) g; y* x2 |内存搜寻: ci, cn, cl: h6 {1 a( }9 {; S
* n/ e" @( u+ h* h* X$ e7 ^ ci
+ w$ N, o" N1 m 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
' }5 @5 ~# L' m" _0 U, z6 d5 k- B" P$ p( B) V0 Q
cn# H3 Y5 [1 U. H4 X) u0 }3 ]* G4 a
搜寻指令$ a. U5 U' j2 i+ P% V7 o( D7 W
例子:* [ `, j/ F3 a, L
cn eq,60* A8 `" ^! j+ o) V( J# u
搜寻目标等于60 (十六进制)
0 r" U4 p6 x$ Q! W5 ^! a, ?5 n % P+ V* e9 j6 n7 O0 N
cn eq,#96
( t: l; T; s1 E. i& L& Y 搜寻目标等于96 (十进制)% L9 K! v8 n! M: J7 C3 ~
9 O- o0 k$ X* X$ u# G2 z' A cn eq
, _, I, t8 t% w; c3 p2 `* {( ^ 搜寻目标的数值没有变化
4 n R6 I& J: M/ J- |. c8 ~& F0 X
cn ne
9 }! r V, q" a6 N+ t 搜寻目标的数值有变化$ ~) l1 M+ R9 N' l; b) s) k* A
) w- `7 }# i. F
cn +7 ~6 H0 w" u" l0 K+ x
搜寻目标的数值增加& r* Z8 Z9 q) ?" h# E" e
" D8 c* y2 ^4 n- v/ p7 i7 `
cn -8 ]1 P6 T1 G# u. W$ F* p
搜寻目标的数值减少; J, k$ J. S8 I2 H7 G' ?4 i9 A$ P' A& V
- _) G9 ]+ n- t7 b. \ cn +,32 z0 R5 J9 ?0 q- C
搜寻目标的数值增加3 (十六进制)# u% B# U) w" a1 l$ A- v9 F
$ W" U6 l+ D" n J, J L cl; m0 s" j; Z: u( E6 T
列出所有搜寻结果
; G D3 O( z% K; p1 z: I( l# @! y5 M F5 a% _( m
cl xxx.txt0 r* D- n. Q* t* V0 Q' [; d' B o6 N: T
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
( _0 L! I+ X' I7 n a: _& b$ g3 m; _% `2 H% z: [& y
6 {/ Y/ r& ^4 S
内存监视点指令: wp, wplist, wpclear
3 L5 R( f7 S2 t% L9 X 例子:' l: t7 u U: A! c8 O9 w; _. T
wp 1234,1,r
/ t, m, g0 F- @; h1 A 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度18 H' X! [+ W5 g; }& w
0 ]- x- Z/ }- D# g# ^- q
wp 1234,2,w
$ A" ~/ E. s% T% k 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
( g& _$ B) x, \: u5 I$ F8 P6 ]# S
. e9 U5 S% G8 B; f+ M) i wp 1234,6,rw/ B8 \0 r4 \- w: C% X
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6! J2 v: W8 O5 I: D
5 F7 d) `+ L" ~& s; j) `: ~: G, p* `
wp 23456,a,w,wpdata == 1
* v( z, H0 D( U* i 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
% f# W" g2 X$ ]1 T8 _, W* x) C/ q2 `3 z, u8 ~; m
wplist
- l0 Q' ~ ?6 l% o 列出所有监视点4 o* s% ~' |# g. m7 L$ e
) I; f- D8 n# M% f& f; O wpclear 3
+ `) [/ k$ U5 i4 z4 Z0 X* J# k 删除编号3的监视点2 g; {' D: [% Z& j/ f! i+ D
0 j8 i; v$ t8 x wpclear
2 a" P) R& [3 H z- E$ a1 ~/ f: T 删除所有监视点
8 Y% N& r1 f5 f. }, a5 F+ f! d$ K
5 j2 m' z7 I- j! w9 ^% d7 X 9 _$ t% P3 x8 I. ]4 ]
1 \+ m: n: p; r* K程序断点指令: bp, bplist, bpclear
% J; ?/ ]( c$ g; { 例子:
5 x4 H) T9 S5 \' } bp 1234
" _( m9 K) b4 F' M& F 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断) I9 t' a1 \5 g0 S
1 Q# E1 u% r' w0 \( F5 | p bp 23456,a0 == 0 && a1 == 0
- c& w$ R6 b3 Q 在地址23456下断, 且中断条件为a0等于0以及a1等于09 p n; h9 F. R
. x( Q) g5 v) j5 z3 V: P6 W bplist" r& ?7 ]7 V! v# W' `, R8 f
列出所有断点
# t5 L' r3 b& i" Q* I/ p
4 g3 ^" S S. E bpclear 3
+ S ~. D( Z4 ]4 Z4 m 删除编号3的断点
9 o: D7 k4 c8 N- h3 n. f7 ?
5 {( a8 Z( X9 e7 z, y+ D bpclear
! G' P! t0 N' b2 l* [. u4 ^ 删除所有断点) K0 b+ l( J! E# f
2 `6 T% ]' _4 }! p% x9 Q
* u/ L1 Q; u6 c: K4 z! U' C 8 k, y* k- s& y8 j
跟蹤紀錄指令: trace! }1 k/ U! N3 W/ b0 l2 a/ T
例子:
# l8 Y ]9 I4 a5 B0 T8 X/ d+ w trace 01.txt& w8 ]" L4 |$ {9 J2 x6 _6 ^
跟踪当前CPU运行的所有代码, 输出至文件01.txt
' x& ~3 [! t. p I5 |1 d' ?* H2 ^2 g' D1 d
trace off/ y( y- I- B0 s
停止跟踪, 并且关闭文件
8 b) P9 P" S( h* c3 P ~9 ~4 Y# K4 S/ @; ?
trace 01.txt,0
! s& H+ x: ^0 v2 S9 V 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt& {) c! \' l7 T+ K1 D9 M
+ j0 b. E- e/ G/ w4 L
trace off,0% u! i+ O3 Z9 d: l" C
停止跟踪编号为0的CPU, 并且关闭文件
9 ^2 r& Y. H; W$ {7 U3 m1 h+ C0 d( s) U6 ?8 r
trace 01.txt,0,{tracelog "A=%02X ",a}1 c0 v- |# t5 c a; y
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# P. V1 L8 [' w. Q 并且在每一行的前面, 写上"A=a "; ]( C0 D ~8 c" E3 i' z
"A=%02X ",a为一个C语言printf函数常用的输出格式
9 X9 {: F) W+ N+ s7 n 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入: j4 A f- f, }+ m, @
X表示为大写十六进制数
1 T# O, Y* M7 [( Q
+ q0 M, d, j, @& l$ L' G( R" Z, V6 o; }, m/ H7 r
2 t4 S. [) Z7 A8 Q+ X w# g
内存直接写入指令: maincpu3 I8 z7 |1 h$ K. h! F7 d% G* D
格式为 maincpu.[][]@地址=数据* T, A9 `* [9 ^, L' f% g( B
第一个[]:
) ]& S% s$ v- ?2 h) w% C+ B. c o 表示ROM地址
4 y# r0 r: Z' j( Z" \ p 表示RAM地址
& D6 K5 { n- X3 I P; o% j
7 b5 Y4 {" i1 _3 M4 d5 p+ g3 Z 第二个[]:% l* N4 e# f# y# \3 L& j
d 表示4字节
0 r( R+ V. ^0 I$ J w 表示2字节
4 H" c- t! Y9 }9 m7 \2 k3 y b 表示1字节, o% Z: ~' y O! ?# g
0 k$ L' L" \3 c+ g0 g 例子:- X! G. ]! o# z9 [# w* R) _" N
maincpu.ob@1234=FF& w& K! J! s& v) L. E. a h3 Y+ o
在ROM地址1234处, 写入FF一个字节
1 y6 s6 Y) r5 {9 ?6 W6 q5 o
: h) o3 M6 o; V6 p maincpu.ow@1234=4E71" a% {$ E! E" q) z; {" c }* Z0 A
在ROM地址1234处, 写入4E 71两个字节
' P; R: }5 l0 d( G3 P$ S6 `. A3 v# H8 O$ h
maincpu.od@1234=600A4E71. C, ]" T1 [7 }. N2 V9 S' F% Q3 `
在ROM地址1234处, 写入60 0A 4E 71四个字节
/ K' C7 w8 [1 @* u2 \- U' q1 ^+ i
$ v6 A2 Q; m& `6 a, Z- H 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
]1 ~- H3 V) }% k9 [
0 W# }( ~- h5 }1 x5 G0 Y% g" q
$ m. G' j3 O/ A6 L1 w5 A0 a$ ^1 ^其他:! [0 k- x$ g* D; j* N
dasm 输出档案名,地址,长度$ e7 j+ ?% H' M/ Z; ^) g
输出程序的反汇编代码
. [, x, G- Z' \$ b- K 例子:
: Y4 A l, ^5 N dasm 01.txt,0,100000
8 H4 h: w* O2 S' t5 @ 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt# b4 Q9 s) M5 r# g/ }3 }
5 k6 J+ h- M) s softreset9 D( F |4 Z, x; h7 ]7 L
游戏重启, 但不重新载入ROM
6 G; l' Y# e( |$ |$ S+ O6 B+ a6 M& j2 c9 Q) Y
hardreset
8 C1 u% R9 E8 _$ a( H: x 游戏重启, 且重新载入ROM* n. g4 k* e8 E& r+ [4 h
. _3 Y* g$ T3 R
snap xxx.png
9 f, K% `+ O( }# B: A: g 截图为xxx.png
z8 _, H% ~* n) ~+ e* a9 H( W, _: f2 ^5 F3 l! `! Q
[$ C) k$ g, q
, y5 B/ P, n$ y- k r' | ! |8 t3 b$ q; I: a
热键:
1 j( H* _' c) K! i4 A0 n ~ 中断游戏
# C( n) E+ {; i L* U1 ]' P F5 运行游戏
`4 C5 {% ~- U F12 运行游戏且隐藏调试窗口' T% |8 _ _3 w* V4 W7 y
F11 步入, 单步执行, 会进入子程序
# U! w, @* v& i5 Z$ k F10 步过, 单步执行, 不会进入子程序* N0 D C9 h7 f3 v; [
Shift+F11 执行到子程序返回
4 W$ ~" H8 C$ b% g9 e g Ctrl+M 内存浏览窗口- b, k1 H. _. G* _7 T! s- y7 l; p
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
/ d8 n! D# M6 A# z' w; F5 m/ B* l7 Q8 \8 V2 Z) o
{:4_94:}
+ P2 g! n& h0 I, T7 N
2 }+ p" U$ A0 Q+ V2 U |
评分
-
1
查看全部评分
-
|