|
* W3 B5 v6 E. P( J很快速的整理我自己常用的指令
* S0 m. h m6 D! O" P9 _& s( A( Y3 j$ P" G) d& E
{:4_112:}
2 V& D! D7 Y. h) b. p, |9 r, z& p
" ?* h5 E% n# [. o: X% I( ]3 I( hMAME DEBUG常用指令" @" Q1 T# l" R! Z8 @
; V4 u( }0 n5 Q/ [' ^' }内存搜寻: ci, cn, cl6 X- o0 p% q/ d" U
* \3 S3 K/ F7 O- @/ `/ _( A ci- E9 X+ d9 d1 }8 _% R& X$ K3 t
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
) A5 e [( R, R; \
% n% z; }) o& v7 m) Z" Y cn( D9 p6 E! V, E+ W2 T$ p
搜寻指令
; Q% w6 J5 a5 u% U 例子:
+ J: ?$ R8 }2 B, k% q cn eq,60
1 i+ g% e, ]/ r- e4 I6 C! ~2 c* g' I 搜寻目标等于60 (十六进制), n3 ^. v9 ~5 D5 j+ i' z2 _
% J3 N* O3 q; i cn eq,#969 c7 [2 [9 g! L6 |1 D6 c
搜寻目标等于96 (十进制)* H; I0 _* }+ d0 y2 Q: ~- h3 {
, u. z* x7 N- _3 ^
cn eq
( ^# r; E$ z X( h+ G2 ? 搜寻目标的数值没有变化- F. G/ C' `8 @3 w- a
G/ \6 b5 `% X' p+ E
cn ne
* ?1 o0 V) S# O. `( F- n, l4 P3 ] 搜寻目标的数值有变化, T! v/ L Z/ W3 y
* s- c! g! ^' `: [% d2 @4 Z
cn +
4 R2 K7 }4 U, D* x: j1 ] 搜寻目标的数值增加
, s% _ A4 q2 F( [" l; S # U; z" ?& B. N) {
cn -1 h/ R' g+ u/ d7 M& K
搜寻目标的数值减少3 `& o& l _0 N+ h# R2 q
4 Q1 z0 f j# y: m: ?
cn +,3
, x- K( j G f, T/ Y6 g$ |* ~ 搜寻目标的数值增加3 (十六进制)7 D' R6 J4 n7 A+ W* J
+ [$ t; z' {1 f$ _ cl9 z+ r! c0 n$ P9 K
列出所有搜寻结果
0 o* X2 H) }8 t- _6 [+ P) i
5 L8 `1 S5 i" v, F/ g* o cl xxx.txt
( |/ @% m: Q5 ` 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
3 f) v; s' _+ G8 Q! r
2 s+ o, U7 ?7 ]# t" h ! _6 K; ^) |. B {. _2 j
内存监视点指令: wp, wplist, wpclear
, O9 v5 D- r. [- z; j2 b 例子:2 M0 I" G( u% e
wp 1234,1,r
3 ~, O) i* I" s# { 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
/ i- C+ I4 G- h5 S) V' }8 N) W! k9 m: \# ~
wp 1234,2,w8 C: r" G" e: V
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
( v) T, A1 k* k3 A0 Z; j. ?, r + f# E" f' C: T3 g1 C' |. b
wp 1234,6,rw6 [& Z; q4 @3 c# z, r' S1 K
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
: ~3 N" S( G3 ~8 h
7 K. `) ]& B" l$ X) [1 F wp 23456,a,w,wpdata == 1
5 S+ J) `! M, J+ x; K4 o- o7 E 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
# |/ o! O2 \$ L+ `. f
& |( ]6 A. V5 u/ J" e wplist& ?- l, e0 R7 I8 l/ R) n1 D$ M0 S
列出所有监视点+ h4 Z4 s( H8 @$ I: n
; b9 f. y& B" j7 \/ R$ \/ u
wpclear 3
( \0 J: K+ r& U3 Y2 ?: @$ i% P 删除编号3的监视点
; @( d% r* ?7 s5 B0 J/ N% a2 W+ c0 z- x/ n: u5 K6 j! S4 G
wpclear6 B' o7 R k6 f( ^/ s* c! Q
删除所有监视点
q# T3 ]( Z' { [+ a. J5 M8 p# Y- ^6 N
# i' T4 S2 `( T% |
* `7 L5 J# {+ [! x0 q V6 S6 O程序断点指令: bp, bplist, bpclear$ z' Q2 C8 f8 s. r
例子:' h& g+ N$ r0 v- l
bp 1234
- T. a' i5 r! X7 x+ F 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断) a7 P+ |# U5 z6 [, r8 _
/ d( H2 x1 c# c; |, U bp 23456,a0 == 0 && a1 == 0" u: Z- p/ x. N" C# m
在地址23456下断, 且中断条件为a0等于0以及a1等于0
% }7 x. ^* U' e2 |, f, {4 r
3 Y& d& ~, \$ b5 v9 i; p bplist- _1 a, c! v3 d) U" o7 ` y
列出所有断点
, f4 H* E/ ^; \) w/ ]+ K9 D% W4 k7 [" t! c* D3 P: e( Y
bpclear 3& H5 ?# c/ I$ p( a
删除编号3的断点& k0 J( N: }6 B
4 H* d- y1 \. ]4 h bpclear0 P; a q% A) L2 t9 ^0 w
删除所有断点' U& x& C' P0 J! {! t
8 O8 e( [/ @) C
: w" L7 J1 F" Q7 M i; g
) s0 V5 {6 s5 f
跟蹤紀錄指令: trace0 t3 v5 N. g9 s& F& r, s/ M0 _
例子:
5 |2 }9 l( l5 w) y% ~: i trace 01.txt
8 [ s, q+ e+ g7 j. ~9 V' P* E( L 跟踪当前CPU运行的所有代码, 输出至文件01.txt. g7 `% v. ]* i; D: n6 T
; w) Q8 N7 j q% C trace off
5 [" |1 S6 K( Z7 b/ [ 停止跟踪, 并且关闭文件3 u5 O: B# Q+ J) g7 c: g9 i
- w7 ^! \- b" Y& R9 X% B0 ] trace 01.txt,0
; C6 K8 z" V. w0 ? 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
, i3 u- c% W! r" l" x3 z7 H
: F# L1 L6 M4 T' T& W trace off,0# ^; e6 ^$ G n% o& F+ ~
停止跟踪编号为0的CPU, 并且关闭文件
, e+ n# i: ^; `; y: A+ y1 ?
1 G# @. ?( l: v; B( [0 f trace 01.txt,0,{tracelog "A=%02X ",a}( G! D7 C2 ^% F* O5 K
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 0 T& \ x1 H/ f0 Z4 z" u
并且在每一行的前面, 写上"A=a "
- C/ Z/ t \. ~* V! D, }) Y "A=%02X ",a为一个C语言printf函数常用的输出格式
# o, y; Q4 N$ [* q$ n4 _ 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入, c3 |4 ?7 }( y) ^) I$ R- E
X表示为大写十六进制数+ F* Z0 I4 J2 U l
t/ P3 U! I/ W; H$ [, i' P( ?% W2 I$ v& Q
' w7 i( J1 K. w& F% E; S内存直接写入指令: maincpu, h3 ~; T! [. q4 g4 i
格式为 maincpu.[][]@地址=数据
6 Z" C1 T" U- {. _, a6 ~& F 第一个[]:
2 F# ~6 M3 e% C0 l" B' k* T o 表示ROM地址
1 }: z! n, o8 Z1 p p 表示RAM地址
G: _2 R& {% M" z1 f
% m! q" b9 K" U' ?* y 第二个[]:! u* q$ l* z4 i% P- W: F( k, V
d 表示4字节
* Q2 E# a9 s5 z) D" M. } w 表示2字节
/ w) n5 [6 I( r# v# ` b 表示1字节% k, r) d: o% b2 s0 I
4 o: B; m: Y5 P4 }* m" D
例子:! ^5 F5 k' X0 w0 }
maincpu.ob@1234=FF
+ W# C! Q, G+ V, M" e, K 在ROM地址1234处, 写入FF一个字节
4 W! x8 A/ C. I: P- h4 s
" ~. P" m- s$ L! n' Q# n" q maincpu.ow@1234=4E71$ ]6 g R v2 J N, i2 H
在ROM地址1234处, 写入4E 71两个字节9 q7 n5 D) r: A0 C) q$ F9 B
2 J4 S o3 L& w, ?! w
maincpu.od@1234=600A4E71
" a, Z% d5 T1 q i% ]$ ~/ t3 y 在ROM地址1234处, 写入60 0A 4E 71四个字节4 O8 ]8 w7 F% a# I9 N, n
! u* z* f9 G/ U& l* I c6 b! n: G+ m) G 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写' J4 p6 o& ?. R* u5 l# j/ r
w: j8 k" @- P; ^0 ~7 w8 }; _
# h5 m, {# ~% y e3 A" f6 E其他:% ]3 R7 Z# C8 w
dasm 输出档案名,地址,长度
8 b" e1 U/ l% p3 [# e 输出程序的反汇编代码/ [% k6 V1 U A+ w$ ^2 {
例子:9 I9 E. h) r1 S! C3 K3 h
dasm 01.txt,0,100000
5 d6 y) `0 e4 d 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt3 V: ?) C# m& F: g/ f9 b. b
7 A) X. @0 k- `: g; S7 z softreset
. k3 x) L( {. O2 V3 x 游戏重启, 但不重新载入ROM
" J; U) P: I( A5 C8 [. u' S
0 U( [( R3 E" f3 X& U7 g hardreset
5 X/ K$ Z+ ^# M2 c; b. {- [ 游戏重启, 且重新载入ROM ~. a8 S& Y! ^0 a8 h
7 o7 g$ v: Q5 l; ~+ J
snap xxx.png
: q7 g3 z7 F; ]6 L 截图为xxx.png5 g9 V1 B# ?0 |0 y# G B9 _
# |7 {( e3 ]) ]( ~
' P- J. U6 g# f $ k) s8 x+ t+ d% ?# D
( u( Z b. w5 [. z# B5 k) j
热键:/ Y+ u0 S2 `- i: h. [
~ 中断游戏
6 S6 V+ p, h& |% e) m F5 运行游戏6 i0 ^# K1 n2 S* ^
F12 运行游戏且隐藏调试窗口; r; S8 D8 [3 ]; W( Q# X2 D1 v
F11 步入, 单步执行, 会进入子程序
# e# @- |3 f" I! f( S F10 步过, 单步执行, 不会进入子程序
9 r! Q* m3 V1 V, {' V Shift+F11 执行到子程序返回
% |: \$ Y: r- a6 w0 s Ctrl+M 内存浏览窗口, h$ L' M# g, ?0 c0 o1 S/ D
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU5 } E% g: I# T. Q
; O5 z* J8 n: K* W5 ^
{:4_94:} 3 F5 U4 M, N" g0 w2 z
f: j: i/ k5 s! o( t r' J+ | |
评分
-
1
查看全部评分
-
|