|
|
0 h+ E: N. H: T
很快速的整理我自己常用的指令" H+ X/ I: M7 }* E+ L4 l
) E; d; q3 c# c+ D* o{:4_112:}
' O* w, k2 x( j4 S. ^" L! a y8 G# T" n3 ^+ `
MAME DEBUG常用指令
; o, M! D1 |% t/ o8 o5 O% k F
3 [! F4 O/ l+ P, W5 v7 E内存搜寻: ci, cn, cl( t2 T. N7 Q: K3 l0 m8 R* O1 S
$ y. I4 Z* e2 E8 P: U7 r ci
* P; d. n% C3 _% f/ k k+ a4 c 搜寻任务初始化, 每次搜寻一开始一定要输入这指令. ?7 F* G# M b7 V! v
: u$ G$ {$ V+ p6 j9 @) _, S cn
/ M) u/ D: |0 i& Q% a 搜寻指令1 I, X. }; [: f$ @9 X
例子:
3 k1 s! Y/ M8 r7 C cn eq,602 K& \+ k% P! g$ U, p9 U& m# W
搜寻目标等于60 (十六进制)( I5 M6 y3 d/ A* O1 k
( Y0 e' c( E' r" _! s$ q cn eq,#96
! r4 w" d% d6 m* b. }' m, C; s 搜寻目标等于96 (十进制)
' a* ]: u: y, x' M7 ]' {# C
: G$ Z% I4 ? I7 y5 ^ cn eq& q$ h8 L! C0 j. i
搜寻目标的数值没有变化! w' y( k. x9 l- k
$ x# a, S& x' @6 K8 k S cn ne6 H1 o9 [3 u. O9 _7 w4 J
搜寻目标的数值有变化
& z" X" f% A3 P( R) r % u4 v3 m2 C) h E' { {
cn +
/ ? D, f# R% r- z8 P 搜寻目标的数值增加
* F" e4 _2 ^. U : }8 M. ^) L" ^& c) x1 Z
cn -
2 u% c! u _, e* V7 V 搜寻目标的数值减少
# Q3 u r& D. a, q
5 D7 d2 G$ ?6 H cn +,3
! c5 z0 c2 S, l* Z, g1 N* F# Y 搜寻目标的数值增加3 (十六进制)
5 _8 v/ F6 i4 Z, i( R, R- m9 {2 H$ P) J5 Y+ x+ L" ^+ E
cl
: k! Z6 a2 o Z 列出所有搜寻结果4 ]% N5 V$ P$ [
" i7 e% ]6 g2 x' j6 u( }1 R
cl xxx.txt7 z; u. Z9 z0 r' `. m* Z
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式4 K9 g! ^2 P6 K8 O$ U4 l
3 m0 T! a# H" b5 Q+ n8 ^
& }% [- r/ g! q6 [7 v内存监视点指令: wp, wplist, wpclear
1 |2 M) u1 y0 g+ [- G6 v/ F( _ 例子:: @7 i5 b- h6 Z$ \7 W
wp 1234,1,r/ J6 q3 Y3 J( P* R& }4 T
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
& e2 }5 ~! K+ U, i' o+ j9 M7 z8 a F
2 N' v- d0 }2 X5 O p wp 1234,2,w6 _+ u- o6 ~6 M) D! e3 s
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度21 B8 L W1 Q5 s V9 D* o- `
$ W2 Q9 a I+ E wp 1234,6,rw8 A0 p$ W* C7 ?( @1 r; l
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
( ^7 f0 j6 F3 \& H# K, ~4 T0 n2 c' w* t9 B6 C+ }% H+ b' Z
wp 23456,a,w,wpdata == 1
3 A: Z4 L( b: v 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
% h& B- q7 v K+ \
, \" F2 ]$ l- V$ z7 f wplist' t. b& Y4 V# o( t# \4 T! b
列出所有监视点
1 p. u* R& n" B* e2 r3 i9 V5 G6 ?# k6 ]( h# v. b
wpclear 32 N9 g$ Q& K! U7 T9 e4 I
删除编号3的监视点1 S# l. c7 J1 I) ?% ~, {, n1 e
* U. B0 c# D; |: F' |! N- o3 j wpclear* b4 Y* K4 h" _* `8 [1 h
删除所有监视点( r: c3 v8 c6 {4 V( N
0 T+ Y! |& k9 W( y: ~7 F
3 f% Z5 W$ w; ~. S# M
6 l& L5 z4 M% A# \ b% Q2 U& q程序断点指令: bp, bplist, bpclear- m. O0 U) @" e5 r
例子:% J7 I9 G2 D% |* Z: e4 T i
bp 1234! n5 f0 y6 b% j& @. B
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
/ ?. F% v" m0 q7 A) K/ f; i* {6 ~) T1 p( b* ^- F* c4 E( F
bp 23456,a0 == 0 && a1 == 0! k; y1 E. I- \0 F* O
在地址23456下断, 且中断条件为a0等于0以及a1等于0, O: M/ ]: S! y2 d2 V0 O
3 G: X/ w9 l) `, W, f
bplist8 N9 ^5 l* M+ P; [
列出所有断点
2 R+ E) Q, Z1 S
, b, [2 K% R8 Z, X1 L+ ` bpclear 34 V1 P# o5 E! v3 H. u
删除编号3的断点
2 w; s6 V* O9 I' G* a3 V5 ^, d8 \0 {- H
bpclear
+ B; j* n3 [( S 删除所有断点
8 C; [/ m- Q" K. r4 F) P
8 `' k- Y! Q# s, o x
8 y. e( h/ c0 P) E# H) j5 V
8 l! u3 w: ?+ q- q, I/ j. i8 |跟蹤紀錄指令: trace
7 W: F1 L4 Q. ] 例子:' S# e" Q* Q0 Z6 a- i1 o
trace 01.txt
) H1 Z7 q& ]' ]# l) J+ y- { 跟踪当前CPU运行的所有代码, 输出至文件01.txt
' F4 R6 N; `7 @0 K8 ~! V3 e& h+ b- a4 K5 D; F* U
trace off
1 D- A4 z& P C 停止跟踪, 并且关闭文件
, X) a* H: \6 @
g9 f4 K' X# _6 ^* D+ j4 a& u trace 01.txt,06 x0 U$ f( m \8 `8 @
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt- A7 u+ p6 J7 c0 j0 t6 E! h
3 s0 x& }5 H: \1 |5 T0 K
trace off,0
, d3 i8 n9 { [! A& {- V 停止跟踪编号为0的CPU, 并且关闭文件
9 i3 |3 y5 P! H$ U# o4 Q( @/ X! g4 N& R0 L0 w8 S
trace 01.txt,0,{tracelog "A=%02X ",a}4 `, `; h7 _5 G
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
- N( C/ a5 s% l3 v4 o+ O 并且在每一行的前面, 写上"A=a "# B3 k# e+ ~! S! J
"A=%02X ",a为一个C语言printf函数常用的输出格式5 s* h* L# }8 p( I9 {! [
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
' g% L! l; A. r5 ~. H X表示为大写十六进制数2 b$ i# I7 x% T3 Y$ j
1 p/ O* y; t3 z2 {
~6 N+ a0 Y% K+ R2 f3 s y* m
) Y9 H5 t5 j$ w& |$ |
内存直接写入指令: maincpu$ k5 O' X, _$ R3 x) @( E0 e# \7 @
格式为 maincpu.[][]@地址=数据/ W0 {4 S$ I6 t6 k
第一个[]:& F9 d" f# B9 o, c3 |' _. n/ A
o 表示ROM地址5 w( X" i, U3 e- [* t: j7 n
p 表示RAM地址
; z" u1 F* _- H& j
, L( ]) V N4 q 第二个[]:
% g. d0 ?! |* Y( W1 I d 表示4字节5 v9 @9 \0 J W& u2 S3 _) a# X
w 表示2字节
3 y) s/ x5 s# E7 _5 t; N b 表示1字节
5 y2 X- I. W. }6 ^! b1 Z& X0 x0 `2 [9 P, V) ?
例子:5 t+ w# V8 s \& a' c
maincpu.ob@1234=FF
W' s8 l. x1 X; H A- \' G: O 在ROM地址1234处, 写入FF一个字节
% _$ @3 t' V' V# V" _# j, x5 k* C- t4 Y; X5 A
maincpu.ow@1234=4E71! G0 ^: l1 D9 T7 s$ w
在ROM地址1234处, 写入4E 71两个字节
# p0 |' @0 c9 c
9 ]5 \- S j2 M8 q1 q5 [4 Z: J; x maincpu.od@1234=600A4E71
7 n9 H' R8 }* q: S3 k! D$ f; Q 在ROM地址1234处, 写入60 0A 4E 71四个字节
g7 Z+ f; I% P+ a: X, o, c- ^! D( N0 r4 I, D
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写2 p' \1 d4 A! m- b. _" q) N# w
$ ~) p# ]3 G9 v1 _! l
5 ]/ o0 x1 R0 X7 U3 W) |其他:
' ] }& V7 T7 k, m+ X9 B+ E dasm 输出档案名,地址,长度
# \3 N3 b4 U- w4 M0 I% [7 j& b 输出程序的反汇编代码/ \# B. ]* \! X% i
例子:
( ^* B( k+ @6 e8 }8 B y, k dasm 01.txt,0,100000. K9 x6 ~5 t4 ]$ g' D
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt! C* Z9 W+ H, U+ B
) g6 P- N% P: s8 U" p" u
softreset2 [# S" V$ o, G0 X, o3 d
游戏重启, 但不重新载入ROM9 f" A) _( W- V, U0 N
* w0 v% u* j- } hardreset
* H' ? F5 a' y" x0 b" F 游戏重启, 且重新载入ROM. \- a: a+ \0 S- K
" \# a$ w: a n0 I( e+ ]* d snap xxx.png# y) O/ L5 h7 c( U' }
截图为xxx.png+ M: C6 H6 s% y
: a6 }% Z& t/ l0 D8 G; x; U
( b W2 v2 c) G% E4 i" x" M
8 \$ v: W: x( u1 f" b 7 S6 U; R: q) g
热键:
7 U$ ?: Y* e2 p. h1 ] ~ 中断游戏
$ T6 l9 i; ?; K. y; s F5 运行游戏4 R Y. `9 l7 u! }* E% [! U. h
F12 运行游戏且隐藏调试窗口' ^+ n9 Q: M+ ^, R) v% u
F11 步入, 单步执行, 会进入子程序9 z S/ h+ g+ z' c: ]
F10 步过, 单步执行, 不会进入子程序
8 P# v' S+ w/ T/ W2 N) [& A Shift+F11 执行到子程序返回
, ~' L' N! |. q2 |9 _/ { Ctrl+M 内存浏览窗口% B* ^( g: ~8 F* j/ n# t
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
: R5 l# ^% P3 t0 R6 ^, A. ^4 M& H( Q9 E6 b9 a* l) d0 l
{:4_94:} ' V! w7 Y* I- }6 i2 q
/ _, c6 N2 w; H |
评分
-
1
查看全部评分
-
|