|
|
6 Q# @4 k2 T* L- G m/ L
很快速的整理我自己常用的指令& u' h& y% `- Z8 @. P- C
7 c4 e% M0 p4 t( h
{:4_112:} 8 B' C+ M* v$ G W' X" X
' F/ \7 |; R: F' d
MAME DEBUG常用指令
1 o5 h1 \' a1 H2 Y" A9 H" f6 K7 h L4 e) n
内存搜寻: ci, cn, cl
[0 \/ [5 G. K4 y* |" W/ Z! u/ U l& t
ci' F% k' ], @6 r+ B
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
% b: C6 j8 k; [% k- E
! S. Q' W" C/ }+ W' u( V4 V cn" o9 o6 s* Y; A
搜寻指令, \! `) }# h4 d* n5 D( g
例子:
3 e3 F& N" F, P3 u, P3 x) ` cn eq,60; H; f5 e0 U1 F6 \
搜寻目标等于60 (十六进制)% H; d" ?6 S0 G. W$ |+ H" o4 W
" v3 p" o+ u/ g$ M; S6 w, H {" k
cn eq,#968 _& k2 V3 c& j/ T3 d4 p
搜寻目标等于96 (十进制)
6 P) B, T; j9 e
' u4 r$ t# n- } cn eq ?; u4 Y* F* K
搜寻目标的数值没有变化
4 }( N/ @8 u& R) ^* G$ S# g
" U( d" e0 d8 Z1 P, i3 |; W cn ne
1 Y8 p2 K- D* w1 D6 U7 F 搜寻目标的数值有变化
/ }6 k6 P1 n' A- M" [6 A
9 L0 P' C) y- G& Z7 K) G( V: g cn +
) e+ j' X: ^6 E4 L8 |' V% ~ 搜寻目标的数值增加
) b" S( @9 F, d: J, \
. {* D* f% ?0 V+ D cn -
$ r& V, S+ c) K6 u 搜寻目标的数值减少
' q0 e+ m/ G1 P2 D% V6 I# y2 I
5 o; h/ }; V2 O, i; N cn +,31 c' M) D2 e) {1 K* ]8 x+ j
搜寻目标的数值增加3 (十六进制)5 @! }$ g3 z6 Y1 C" n- Q
2 U' s/ Y t- j. |0 m" |( F2 ?* Z cl
: D4 Q. {1 V& d2 u- e 列出所有搜寻结果: |& [% g0 `5 e' F. d
! Y. v8 k* r5 [
cl xxx.txt; J4 c- H5 I2 I% ], V& w4 R
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
6 M$ h C+ b$ l+ W+ J+ j/ d) @
8 `( z% @6 a) ?& N: d. h / i$ g! m5 L8 L" c
内存监视点指令: wp, wplist, wpclear5 |& A5 ]& F8 |- ]4 l+ s* Q
例子:
8 D# Y; `8 h9 }1 k" _ wp 1234,1,r
- v: T1 C/ N7 }, q( V3 U 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
9 i/ r9 @- i0 E' x3 G" V3 Y. G7 d) ^" p# P* y
wp 1234,2,w
! n6 m9 e; p k, C5 A2 `5 v/ \ 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
5 x, W N! o K9 G! a& H/ [" T 1 D7 z" e9 R& l/ r1 w4 A
wp 1234,6,rw6 U. b. [6 Z, J% x' Z X5 [
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度62 a1 g$ ]8 R: G0 T f+ m' ^
9 N( z8 R" [/ m
wp 23456,a,w,wpdata == 15 z. j9 Z% a8 Y5 Y
在地址1234下写入监视点, 数据长度a, 且写入的数据等于12 w( Z. [( G# ]( N, P4 {! ]
- L, q$ z/ L# }
wplist# T6 O- a% i/ t
列出所有监视点
" Q, h+ B+ f- c3 \
; i) G" t J! Q+ r% C& [/ i# Y wpclear 39 a0 h5 J$ ^7 f5 s
删除编号3的监视点
/ ?- G8 E3 I' M7 n( S) P$ y
1 a8 j3 M3 f/ v, z# E/ Y" Q8 { wpclear
% v# e( }1 _' }2 H! H 删除所有监视点; M, v$ G) @& D/ X* U5 d1 h: r
3 G0 T0 @5 h- V9 k4 U$ s( s2 y* `
# o8 W( D9 m" ~4 q
1 j4 H$ x: F. w0 S
程序断点指令: bp, bplist, bpclear
. c3 m1 s7 t. n. S) l. r 例子:
' i0 f6 J7 _9 g' C, R- H4 v6 E bp 1234& i# u4 T6 Y6 P5 f; L
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断( |; `0 P( d4 E
% ], T; M z& L2 d6 }6 m) _6 v4 I
bp 23456,a0 == 0 && a1 == 0& f% O/ e3 G# S9 K
在地址23456下断, 且中断条件为a0等于0以及a1等于0" D6 U: A+ U5 g% ?, a0 W7 Q
* x) w' @) @# f! T. P% b% p1 D bplist
; J7 `" P& ]1 ] 列出所有断点
0 J; y+ C4 S8 C6 e5 e( O9 d7 e" t+ v) l! S; L
bpclear 3
5 @" u$ A, F. o n$ _$ y 删除编号3的断点
4 ]9 F2 X- @: }- U( U; M% N3 o/ ?2 y, L* c+ t; X; z
bpclear
% o+ i) }9 h9 X! f" @$ _( E7 ^ 删除所有断点& n! u) ~8 k' f! B6 I
0 b; ]+ j+ O" W7 D- x
/ b: R$ G* A8 p1 y) ? ; O) `& z- a8 f# D6 B
跟蹤紀錄指令: trace
! U/ F. h! T' } 例子:5 Z. U9 b3 H) x! v' y
trace 01.txt
$ \4 C) @* j5 C* l* J 跟踪当前CPU运行的所有代码, 输出至文件01.txt7 o( L4 [5 @4 M$ \7 F; k
6 g6 X" F4 z1 ]+ G! f+ L) A
trace off
. t! X9 h. n4 N8 Y& C( t3 { 停止跟踪, 并且关闭文件
q% @; f# ~% N% o3 g0 N4 Z( i+ o$ x2 O1 h7 d( q0 z
trace 01.txt,0- ?' ]( _. y. b9 H
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt, C- t# s; r# D2 Z
2 \2 l' v* a9 @! _4 N
trace off,0; o8 q, X0 Y% |0 ]
停止跟踪编号为0的CPU, 并且关闭文件
! i1 v/ w6 u4 Z
0 x# ]: J( C& L, `1 a trace 01.txt,0,{tracelog "A=%02X ",a}% Y- ?3 u1 \/ [7 p* |
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
6 _- i$ O- _$ p 并且在每一行的前面, 写上"A=a "4 a' ^6 r& q! V, b
"A=%02X ",a为一个C语言printf函数常用的输出格式3 [6 h# H4 M5 r: W, T0 A9 ]: C
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
3 N# q+ `: z0 o) e( R X表示为大写十六进制数
: F3 T4 ^; `1 a6 Q
$ [5 j# Y( V! o5 k3 ^ z8 d: O
4 C4 g$ U& O$ [0 f% b0 s, c3 r; s+ D* ~* ?/ E0 y+ R
内存直接写入指令: maincpu
. f+ A$ |2 ]( S; ^; T. `: c! S9 B 格式为 maincpu.[][]@地址=数据
/ G8 P/ V0 V' P8 B. y2 R0 \' `6 F8 U 第一个[]:- q* o8 J, B: a, U; r4 S( j
o 表示ROM地址# @8 q& q2 N1 F" K% U
p 表示RAM地址/ X, T; G4 S+ ?8 u+ Z* h: |
" e6 o7 O- t) b, b 第二个[]:
, m0 b9 e3 S& z1 e% j d 表示4字节
6 ?4 B$ y0 ]7 z* J0 W w 表示2字节. G; C' `/ h/ T" m
b 表示1字节3 X z2 O. F( y- F3 ]$ N- u
! q" z; [; N) t- b* Z
例子:
$ p# I7 F0 @# U% U( d maincpu.ob@1234=FF* b p3 }1 Y+ D2 e8 @: C
在ROM地址1234处, 写入FF一个字节
0 }3 [$ n+ u! O% k Z% v% I7 U9 i; l/ ~& L. i; b
maincpu.ow@1234=4E71- n% g! N( ~& ]! W9 X* G* H
在ROM地址1234处, 写入4E 71两个字节& w% T' M, R5 _3 V' s& z; g% f: l
0 _# u( D9 t- ^+ D M. k
maincpu.od@1234=600A4E71+ L, C% p% v! {" N
在ROM地址1234处, 写入60 0A 4E 71四个字节! M: D( a6 r" U$ m3 l8 t' M* S
; [3 A4 p5 t# q7 c& e8 c/ N) x, e 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
$ Q6 j4 s' n$ F1 q1 V8 g( _2 a" B
% L9 v0 |( ]+ g: C- H: R
! L9 B8 z: T; P6 J. k) V其他:( ^. s- g. V: h
dasm 输出档案名,地址,长度, V) N, \$ F: l5 d5 o# j
输出程序的反汇编代码
p8 I m" R4 N( r' o( I6 D( R 例子:
" V5 H+ s5 M/ v4 [ E dasm 01.txt,0,100000
9 B5 `5 B6 f. L& x 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt" H* I% o9 i' D. x; W- `) X% x* X6 U) Y
5 y' M. R ]- n1 g6 j
softreset
& Q; _: l5 \6 K( V7 E+ r7 q 游戏重启, 但不重新载入ROM
& X- v! W9 j/ g9 R8 T8 w; J/ Q6 m
hardreset8 I) f5 Y# ?3 U% g6 c; m# e% ~6 s
游戏重启, 且重新载入ROM
# X: G" F( N" p$ @. L" ~1 N
) ?$ x+ t# q; C+ q2 t snap xxx.png; `- X5 x. _ M! r, E" e) d
截图为xxx.png
) ^( O7 b8 ?1 o7 ~1 @
' l6 ^: w* I4 ^! m
* R+ l4 B8 l8 ^+ B ; m p7 _/ O0 P% p* a9 G
9 x. \& N8 Z, h3 G
热键:
7 a$ C- |0 S. q/ ?( i$ F$ k) K6 g0 | ~ 中断游戏
/ H$ t& q0 |8 k% ]' v+ f5 R F5 运行游戏
4 W' m1 q, |3 @# @3 P9 A F12 运行游戏且隐藏调试窗口
" S- H1 m* c8 g: F4 X5 O F11 步入, 单步执行, 会进入子程序
. s+ j3 ^2 _( w. b1 ] S, N F10 步过, 单步执行, 不会进入子程序; w* J* D, J6 F
Shift+F11 执行到子程序返回
& c/ h% f: r. q Z/ X Ctrl+M 内存浏览窗口: d" M1 q f7 @, J# X
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU6 @% `' y2 C, w/ k& t/ @# g
+ [+ J8 K3 E2 _! @ j" l3 {{:4_94:} 3 e7 {: N" }/ W' e6 v, ~& M
0 o' }( p) o8 P6 \% Q3 q' b
|
评分
-
1
查看全部评分
-
|