|
|
. m# j" \6 ]) ]3 C3 J
很快速的整理我自己常用的指令
" x" C k# P- P( Z3 C% S( f( {0 m. H: M" ?0 t: I) N; |
{:4_112:}
+ r) [6 a" y! `1 Z5 d& x' X/ n, d) {+ A2 Z% c1 }6 N, X- |% B8 T2 A0 W$ L
MAME DEBUG常用指令
/ W1 ^" n9 A5 Q" g+ ?3 r. O1 B: t5 W q( Y+ Z
内存搜寻: ci, cn, cl' C1 p2 r/ P) O! _- Z p
0 C1 ]! S3 y: p! Y! }
ci
9 D. F# g+ C) }. T a6 S 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
) V Q2 z( r9 |0 [1 ?: \' s- `4 T1 e6 L! R
cn9 H# @5 \# n% A& O2 u
搜寻指令3 Q# n" k5 x" F' i- z* S
例子:2 G+ u) a- i5 F6 M
cn eq,605 D E" K% i* t6 `& y3 D
搜寻目标等于60 (十六进制)
) {0 ]5 J" d+ @3 L7 d
$ X% a$ O; R4 n- v) J, g6 ? cn eq,#96: c4 i3 B& P' l% c, Q! i* q! ^
搜寻目标等于96 (十进制)
0 d+ h2 c% b e: e' V0 T
$ ?4 E# l/ O2 B4 r# g' j6 ^ cn eq
9 v7 o8 u' r- [ m8 _' H 搜寻目标的数值没有变化
6 }$ x) N; ]- t
! g" B5 M( g1 u/ g+ X. h5 Q cn ne6 Q* h! d. \1 t" K$ X E
搜寻目标的数值有变化
6 P5 A# @* A9 O4 z, A( B2 \3 S ; ^/ u! H; U) [
cn +& I3 n) b; v( ^+ O! q
搜寻目标的数值增加
( \) U# Y' g8 z) S7 c- M7 a& e
7 H. U) V- c, ` cn -
# _, [; n- P8 Y5 A& I. M1 J 搜寻目标的数值减少
( L* Z' `4 V/ b- l4 j. F2 M& P
. X1 q6 e( u- w cn +,39 y: h* S% n; H
搜寻目标的数值增加3 (十六进制)
0 a6 r n/ j( a3 o3 |% r+ T" t S4 g; j% Y
cl
; V' o/ Y/ A% x9 C; H! O 列出所有搜寻结果1 [& S: @2 |' Z. H8 u
* z6 j& N- L* ]2 V; S$ L0 K4 W; f% K cl xxx.txt+ a8 B N2 L4 b+ u( C. P
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式& @) c9 y- K( ]
3 ?0 Z! i0 D) u: o: v. e* u: S
2 V: z" Z- `0 }/ f: s内存监视点指令: wp, wplist, wpclear
/ m( m+ h. `8 ^1 ~& v( \/ L 例子:
% S: z; C& r3 y# B" p3 n0 @* s wp 1234,1,r v7 i" s# z$ y5 D" d. l$ A+ S
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
- v, w l! J' S4 F! a$ I( V
$ A, q( H; P, ~$ C" N9 J6 a# ~: | wp 1234,2,w; v/ n( b4 I' e
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2; u5 N" L0 G- C; q" g n
M% Z# M5 f( i' D wp 1234,6,rw
: r9 b2 _& Q! a4 u4 `1 T 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
. D# z! C$ E: O# ?' S
: ]) F( ` `" f: [) x9 f wp 23456,a,w,wpdata == 1
7 Q$ B& g& l0 { 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1% j" i( `5 x6 I- z) Q
$ Y$ v ^2 q: Z( }2 J9 Y9 a3 p
wplist2 l) J V6 q4 P( k2 A
列出所有监视点+ p" f$ {3 d# l2 p- Y
. T* ~2 S. \3 ]6 w: u1 G2 n wpclear 38 O, c8 V! b" N+ V. z# z: b6 g/ _) U
删除编号3的监视点/ r4 j( e4 F% q
1 R |# Q. a/ k, Q- |% I wpclear
, S o, _5 r% p0 J 删除所有监视点
/ V8 F& P+ ]/ o! K1 C# ]# ~5 u, r$ D* W7 }6 y4 q' ~7 C9 i
! n/ B: O( K! i: g$ H9 w
& t' J1 r& C7 I) b: G程序断点指令: bp, bplist, bpclear8 w9 ]4 C U; T3 Z( ~9 {1 M6 Q$ D
例子:" _6 z: Q- N! f9 N
bp 1234
& ^5 F1 Q& _: q- b c 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断 G5 Y- L2 Y; H9 k: r7 ~
% Y4 D1 \7 i4 L& T- Z+ m bp 23456,a0 == 0 && a1 == 0
1 W7 K t }0 z3 K0 r- A5 F 在地址23456下断, 且中断条件为a0等于0以及a1等于0/ U7 j/ b, S0 M5 k
3 a1 C; H. l( L4 G* K9 n3 [+ J
bplist6 u$ K9 j m; b% }/ Q$ G6 e2 K3 y
列出所有断点
/ r* ^: V; U. ?. T
9 I/ U$ [& H- j4 O! V bpclear 3
" \) b$ m* t: E. K3 ~4 V9 ^4 Z. b 删除编号3的断点& v; `* o; D( _
- J2 O+ W B7 h bpclear6 U2 o7 L4 r( @7 S7 z
删除所有断点
' _ N0 d) [+ q" b+ _" Q0 r; t5 C: T2 n T
4 b. d; c' I, r/ b0 Z
( r8 {' Q5 w& Y5 h跟蹤紀錄指令: trace( q& k% U3 Q2 S; ~$ @
例子:
2 }0 Z [: r0 `7 u trace 01.txt. b/ E! ^" |5 x$ T1 t- r/ {
跟踪当前CPU运行的所有代码, 输出至文件01.txt3 M8 B' A% q1 _8 b9 h; Z
0 \8 ]) y1 s& U4 m* I6 O
trace off; j2 W9 P' }& M L7 H. j/ B
停止跟踪, 并且关闭文件
1 m! r' z* y1 i' T% u( c7 P2 [# t1 s9 q& ]" k9 K9 s
trace 01.txt,0# i; T# b% V3 [
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt7 b, Q8 k2 z8 U* A5 ~6 z
3 G% y H9 }0 Z' h: ?. c! u- x
trace off,04 `1 w/ O' b$ U+ U$ X5 f
停止跟踪编号为0的CPU, 并且关闭文件
4 d- Q& _7 k. o. q- M0 R/ J# Z8 v( ]) G
trace 01.txt,0,{tracelog "A=%02X ",a}. e" ^& O' Q r8 T
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ) I3 @* R z5 \+ X3 ?5 D" g
并且在每一行的前面, 写上"A=a "
c9 {/ U7 _8 P! ? "A=%02X ",a为一个C语言printf函数常用的输出格式
6 }0 z- _9 G# M1 M! n7 _ 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
$ ^8 G( @" B/ O) b: N X表示为大写十六进制数
% I0 ?0 B1 @# K! v; f1 V, M8 C
6 W4 \- _6 o6 I4 W# ~
# a7 b% T2 B$ j7 H: _7 N* t! r) _( z) m5 e2 q5 @- ^% R
内存直接写入指令: maincpu
& x: v- A2 ?/ ]! {9 S5 I8 d. b 格式为 maincpu.[][]@地址=数据1 S( O5 T a6 I( {( r
第一个[]:( P' J9 \& q) O
o 表示ROM地址1 G4 V2 j- c$ _
p 表示RAM地址
R4 G/ e" Y$ N3 h1 _2 H4 R) H5 a4 r' p6 G' V2 H
第二个[]:
- F' w* H/ ^. S- ]/ Q d 表示4字节
* H( e' S O% P" |7 ^: Q w 表示2字节
, ]" n7 t( W: H1 [ b 表示1字节
4 L5 l+ P* B" m* e2 ?# T5 ~# ` X) M- F1 e0 ^$ X
例子:( ]) E3 s/ m) \) N2 L. {
maincpu.ob@1234=FF
- J0 s7 |1 H4 ]6 h) a6 R0 j 在ROM地址1234处, 写入FF一个字节
% Y7 \9 _7 `5 @! l2 _* j4 R* {( C4 G, D& ?8 G7 n& }
maincpu.ow@1234=4E718 `7 G# X# ~. t% z" ]* e
在ROM地址1234处, 写入4E 71两个字节+ x9 i* s7 u" ~% R
+ D1 h0 G$ v% m# o' G- k7 m
maincpu.od@1234=600A4E71
% U. f5 L& ]3 {6 P" b( I5 P: C; B 在ROM地址1234处, 写入60 0A 4E 71四个字节
* a% N+ f! Q4 p& V
2 ~9 G# V0 `$ ^! U' w u1 H# s 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写, K% d% u1 C# _# h1 _8 o
; |0 q; w9 y$ X3 y+ r h3 \1 z/ l, }- H, W, e% P# ?
其他:
1 j ^7 |$ \/ L$ P% x) [ dasm 输出档案名,地址,长度
2 J% h4 r% P2 g$ a: A 输出程序的反汇编代码
6 ]6 O2 P6 E: e" p L 例子:
5 l! l4 m7 Y' Y* Y) @) Y. } dasm 01.txt,0,100000
; O2 P" n4 e: x 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
2 @) [" z5 x$ l0 `8 N' ~
- K, Q A$ y; A: t softreset! J0 L0 q% F- ]4 l0 }/ R
游戏重启, 但不重新载入ROM
" W" z) A( R4 H" w- K
* `" I$ N! Z! E# w6 G9 M) Y9 A* G hardreset
2 Z& X& a! A6 Z: Z C9 Z+ B# z1 ~ 游戏重启, 且重新载入ROM" k: p. r* _# T
. L' N9 `8 f) ]8 f7 R snap xxx.png
. D9 y s, g4 q4 ] 截图为xxx.png) n7 D4 l- q8 G- Z2 `% }4 f
& a' I& s) e/ Y! T * c& b& a. d( S+ ^( g+ l/ Q7 k
0 f& ?) d' ^& D+ a
, ~ t! U" b7 k; N热键:. `( {" s8 ?! r* A: a
~ 中断游戏 e7 _$ T- ]- Q0 u3 y( ?* z/ `
F5 运行游戏
% s& x- V4 h8 a" M/ Z F12 运行游戏且隐藏调试窗口- M* v5 m, D3 a8 W0 [. W2 |
F11 步入, 单步执行, 会进入子程序
S. X4 b. w. @. s- @. E F10 步过, 单步执行, 不会进入子程序
4 d4 s, u) `2 X; E7 ]: b# P$ U5 Z) g4 n1 p Shift+F11 执行到子程序返回8 D& Y, y& c o; X$ [* ~
Ctrl+M 内存浏览窗口
% M. W; T8 |0 i$ } F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
, h t2 Y" g6 u- h4 F- J! z7 W S3 {8 G, F6 f
{:4_94:}
! v" d! Z% y. F5 N9 ^, H/ j m' h2 T) Z6 O
|
评分
-
1
查看全部评分
-
|