|
|
* |, V x& n) `" n/ u
很快速的整理我自己常用的指令
- J; U6 \# q% X3 f8 f, }1 a" Q7 X! P' t2 i$ c u4 K
{:4_112:} * p+ @5 G. b& [9 |2 _! ]
/ s+ ~7 U) ?1 y
MAME DEBUG常用指令9 K' u2 S& C2 Z) S. J# u M
5 L, J+ |5 t$ i I$ f) C内存搜寻: ci, cn, cl$ w f8 I/ r; q; J; X0 Y8 s, Q v
; ~8 z" w. u" s! q ci3 |! c: y1 x/ \
搜寻任务初始化, 每次搜寻一开始一定要输入这指令6 C7 W3 L) t5 `+ W" X
+ E: z, Z5 g- s! y# { cn0 }+ z: f' w- `2 L' q$ d
搜寻指令
8 j; G1 e9 ]- H+ B2 V 例子:
5 {! `& J( |) J3 R, J m2 P c3 } cn eq,608 o6 _( n) r0 Q7 m6 H8 `
搜寻目标等于60 (十六进制)
$ A0 C! p* w% L% T 1 u. f1 H; _( O
cn eq,#967 {$ v6 N/ K; A* c" ^$ t* `
搜寻目标等于96 (十进制)1 S4 R$ H; `/ {' h/ E* d, P
3 P9 f* X# a1 ~- J2 ^
cn eq
; u7 |9 v. ?! t! T S- A 搜寻目标的数值没有变化7 k# V" I& i" f- _7 u u
( P5 L7 B/ J) ]0 `. A# v
cn ne5 j+ i5 a2 I) ?
搜寻目标的数值有变化
* p' G0 t) b, L, |% p6 f: n
9 n1 v2 `1 u6 \5 h: E cn +
- O4 e( R4 j# K1 e m2 m 搜寻目标的数值增加
% _! c& M0 c4 \0 M0 E7 f! n - R0 d: f) l7 \9 r# ~6 P. Z" a( @5 J
cn -6 Z' i6 s& j! w6 b0 @6 h1 x- N
搜寻目标的数值减少
% n9 I. ]( I5 n- k* u/ j/ o% F+ E9 C / X* l/ ^. w+ q7 h* F
cn +,3) z4 {* N1 y7 `0 N+ \
搜寻目标的数值增加3 (十六进制)
8 {) T& l3 m0 m# w6 j+ B& w2 {! O6 ~3 y
cl4 ]' M2 o1 V: a. Q
列出所有搜寻结果
0 H( M9 l% Z% L
+ R6 {; m% I0 {: R \ cl xxx.txt0 A. t$ j2 o/ w5 S
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
0 o( v; N" \0 ?7 O5 T- L
. W# F" X- ^9 V' D9 G0 p . G1 b/ p5 A0 A5 p1 a
内存监视点指令: wp, wplist, wpclear
% u3 ^2 s8 h; X+ _ 例子:" B" t+ G; u8 @$ ^
wp 1234,1,r% c( z7 P- Q8 x3 `
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
9 I6 k1 B. C) a+ [9 @9 B# M# M7 y5 p1 p3 @) P3 ]! ?3 M& T0 M' v# k
wp 1234,2,w
9 y+ D; U1 p1 n0 b/ P 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2! l/ }" h# ~* X: \/ }6 l ?
$ B! ?) q9 p# Z+ L1 G o/ c2 Y: q
wp 1234,6,rw
3 ~, l% B5 A; D. D 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
$ \4 Y* q' O( e) \
3 m: v( e; v* R4 P" L% D: M wp 23456,a,w,wpdata == 1
; d' M$ B/ ]0 u, r2 _ 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1) x ]6 R8 }3 Z( Z' C/ U' P
% H. a" M' W, ?
wplist0 \, ~2 J4 d' a9 }! R) h& b8 U1 k: `! B
列出所有监视点
- g' Y7 Q0 \: G
1 y- d9 y t3 h) Q% J8 o' i: M wpclear 3, w4 M# E5 U1 N* t5 q3 ?
删除编号3的监视点
# M: e" ~) d2 U& ^5 J6 _4 {" D; T _, N7 [/ l
wpclear, l) g! I: x. `! |) q, O) H l
删除所有监视点
$ H% i* g( j) H J( H: j7 x' W6 W% ~% }- t
5 @6 r. n c# G g+ f
8 o+ c$ Q. ]5 h7 E' \程序断点指令: bp, bplist, bpclear
0 G) `& O3 O6 T9 k6 K" Q2 s 例子:
5 l2 `1 c! w$ [3 U$ W bp 1234
/ R& y! S, ?6 L& l7 h6 e 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断, R; o' S6 x2 _* b Q2 u5 a+ l0 W% e
i5 }8 l" N6 l
bp 23456,a0 == 0 && a1 == 0
5 F) Z- g7 p' I 在地址23456下断, 且中断条件为a0等于0以及a1等于0
4 V. D$ H* ^4 g% K! b! s3 p2 M. H/ @( o( i( k M0 O
bplist% @' M, Q O. m& t
列出所有断点" [" W4 C4 d) A/ ^
6 r4 M R& o+ w3 `- v; a
bpclear 3
" t* _# W: y; E/ w0 a4 C: X$ T 删除编号3的断点
& ~7 B7 B7 e! S, a' C3 X0 l: @+ s/ G" p& K' E- y- x
bpclear
6 A8 a2 B' q5 Z0 M 删除所有断点: A+ N& e; P" a* e2 _9 c, \
, I4 y2 L% s3 @) D+ K
4 g3 H9 M2 p. E9 h, t 7 w1 [# W% i5 z! D/ s' M0 F
跟蹤紀錄指令: trace$ Q; L5 Y7 z- L- I3 n- l7 ^6 z! h
例子:+ E6 N0 W9 Z- o2 G: X4 ?! e
trace 01.txt
! A m. f3 H+ B8 [ 跟踪当前CPU运行的所有代码, 输出至文件01.txt
j; k M" o$ s( v3 T3 N/ |8 g3 W# f7 { o
trace off2 M( \& j$ J) Y' o& S5 o+ P! k0 [ Q
停止跟踪, 并且关闭文件) k( j5 C- c9 n- l i% i
2 A: n3 M9 F; V trace 01.txt,06 P- B! @- B. @8 }
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt v" S& W0 x, b: G1 q7 j' A4 A
4 ]/ s. j" u$ L s* `* [: C trace off,0
# \; V+ E7 t8 o; {" p5 G! b4 e ? 停止跟踪编号为0的CPU, 并且关闭文件 } b( N& y% j! j, s* k8 Y" G
3 J5 P6 Z" Z& b2 O7 [7 p( }- @( D8 V
trace 01.txt,0,{tracelog "A=%02X ",a}
" _' B& y7 _' M6 x 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
$ g0 j: A0 \' m) M4 s# n3 R$ { 并且在每一行的前面, 写上"A=a "# A; V( z7 R' `5 E7 ~
"A=%02X ",a为一个C语言printf函数常用的输出格式
" [8 G& x% {5 F 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入0 X8 F- y& i4 S% O2 J6 g* F! q
X表示为大写十六进制数
+ B( a7 \) l! m6 |6 Y6 D/ | F. I* Q# ~; D) z1 t' _
2 a5 ^ Z- X. O4 u& y
* R0 C2 w1 }4 m( v! l内存直接写入指令: maincpu* _$ F5 Z+ k, ? z5 [0 D
格式为 maincpu.[][]@地址=数据; ~+ {' e8 `5 W n8 Q0 b
第一个[]:
- J; R- z0 i4 i# k C o 表示ROM地址& N8 k$ x( G) X5 a' r
p 表示RAM地址8 t8 ]% ?6 }. i2 ]2 d, B, v& O
! t- m8 Y: O# ~9 ^ 第二个[]:7 X/ i, n( T) v5 b C
d 表示4字节
$ ~1 ?# J* D3 z5 a w 表示2字节
) E4 K( K) [" v5 N2 a, J: T7 C' Q+ v Q b 表示1字节
7 B: @3 j2 w/ H* p
+ B' N0 e* B0 I 例子:
+ o9 e; s( k9 n. } maincpu.ob@1234=FF. k. B: w6 L% k' d' I
在ROM地址1234处, 写入FF一个字节
" g$ d7 i; G2 B: |. e- P" {# z$ W/ I" e e
maincpu.ow@1234=4E71
1 L: j( u* J6 g3 @0 J2 z 在ROM地址1234处, 写入4E 71两个字节
. e1 _. W0 X) _" {: S
5 e4 L; [4 r2 d0 t& I7 R8 L maincpu.od@1234=600A4E71
$ @8 v( v4 o/ ]& t, ], h( R 在ROM地址1234处, 写入60 0A 4E 71四个字节* S, @1 N: K7 b* J8 O& M
; x4 |" X: ^6 n 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写, ` n2 K. `9 {0 D+ \
- P- R4 h% ^- ^: p7 \& K' C
$ [/ H; V1 ^3 Z
其他:
+ T) m, k, D- ] dasm 输出档案名,地址,长度
. l- a7 E2 I+ N. b# \8 C H 输出程序的反汇编代码. |' h$ L6 d1 B- }% c6 D0 @
例子:( N$ a# D& `9 H3 J$ M1 ?1 w
dasm 01.txt,0,100000
; B: y' S3 W3 J6 a) A 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt3 e6 ~& B Z$ L b
$ Q" Z4 ~7 O1 C2 q softreset
c' L( |- {# m 游戏重启, 但不重新载入ROM
9 ^7 ~: S7 a( X3 j d+ R8 F, Z8 }$ ^7 v: e3 j7 U" K
hardreset
& Y- @* N/ Z' Y1 u E 游戏重启, 且重新载入ROM+ a( t2 Z2 k/ ~9 A0 h9 E9 q9 e
8 b6 \4 w1 ^ Z- S' Q
snap xxx.png0 I( R- H) P9 K/ X2 ~4 z
截图为xxx.png8 o6 Y2 y& L& I8 t# v
2 v6 X' w- p; J3 g : y; W& k5 D4 N
, z- i" \- \" `# \2 H! q% J) h3 S
! Z; n6 f5 y, s. X. z& `热键:
0 N) p, W: \% M# f ~ 中断游戏& `/ z. p1 z3 F: F2 h: T2 N
F5 运行游戏
2 ~0 J5 \) e7 ~+ n$ W F12 运行游戏且隐藏调试窗口
" a ^/ S- I/ V j1 g" [* E/ r F11 步入, 单步执行, 会进入子程序! v" A6 g. @* k" q2 e4 H( \
F10 步过, 单步执行, 不会进入子程序
M; O* [/ H/ k' n, u2 V4 e# K5 r Shift+F11 执行到子程序返回& q$ f: A7 I' D$ J& g' r, ]6 p1 l
Ctrl+M 内存浏览窗口" M. w; Z# ]; \5 n" h+ z9 T$ D( P
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU% T- ^" I* A' N8 Q
7 j/ o2 r6 `; W' C8 n* m4 ]
{:4_94:}
7 h4 W( e: h9 x$ B2 Y( V* `: W$ u% `0 s' l
|
评分
-
1
查看全部评分
-
|