|
|
4 Y- I) l) O) D, {0 V
很快速的整理我自己常用的指令
- |, y, X* i- r g3 C0 r* O: y( Y' I. e$ j- O
{:4_112:}
7 G. j) X& }# _5 b& t3 q7 K
& U1 y z6 ^. X3 ?3 Y' k" fMAME DEBUG常用指令
7 W ~6 S& b ` V9 Q7 Z% k% Y* t/ l- b) |4 U- {1 f0 i. H, a& D8 T) `
内存搜寻: ci, cn, cl
2 h: A8 X! @7 r n' ?* |$ X: ?- C4 A: {$ I% t8 y! W* \3 \: t! f
ci, d( D1 }4 z& _8 |5 S
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
/ m4 D% y9 v( O0 E, L! F) ~
6 x" [, ^' N& i$ ` cn
2 ?* Y$ o" ]7 V 搜寻指令3 D$ ^! T) q( u9 G
例子: y( |, T& b s M( Q
cn eq,60
5 s6 A% a2 V. v" S& J C 搜寻目标等于60 (十六进制)
$ z# f0 a+ B# V H- J o! q" `3 Y; U6 U: m
cn eq,#96
$ ?3 D, w A$ F( A G5 N 搜寻目标等于96 (十进制)' s* d1 |, _. u& w
! C; v) x4 K2 l/ w4 @8 @9 Q& h
cn eq# o/ \$ s+ z' C6 F7 V# i# Q* w
搜寻目标的数值没有变化; H2 e$ }* s4 i$ d* Z
' ?8 H# `. y- I0 K
cn ne
/ t+ x; W0 T) E* u 搜寻目标的数值有变化
. d. [) m" d6 _4 H( C8 W9 U 5 D! V7 t1 e0 H" j$ |4 w: _
cn +
( m+ F: ]; L# m7 ?7 X 搜寻目标的数值增加5 l& F2 X8 b- }, c/ u' \
$ y1 Q) I" h9 p" Z: Q
cn -* z, _0 Q* p# M
搜寻目标的数值减少8 U# w2 I4 r3 G* ]
: ]5 i) X5 `2 G$ B/ ^; ~, s, I cn +,3! I c, l* J: ?" w6 X
搜寻目标的数值增加3 (十六进制)
! Z5 W% P: C: S$ V: o5 |
3 \( G7 ~9 O9 }7 o, k cl
+ d& U4 Q4 P8 K t4 t! j 列出所有搜寻结果" c' Z) u* X9 Z, w z
0 L; e. P4 z' K& V+ @/ D/ j1 I cl xxx.txt
, A4 Y/ w \. J7 p* w 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
9 g2 T+ S3 Z1 ]. X, {, F
! d2 A- a1 y& L& s. o . G; q5 Z3 T- J7 N
内存监视点指令: wp, wplist, wpclear v/ b, \+ ~4 h( N- P" |. X
例子:5 @9 `7 F8 I5 K
wp 1234,1,r
2 U8 P- W' m; y& |' ] 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度14 V- }* U3 E. T ~$ s. ^
. \9 w, L% c& M/ d R, d6 R wp 1234,2,w! C2 B! R/ ~$ Y
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
, [3 p9 O, M; [+ H* L" Z 8 A, @" V& o" }5 V( H4 a
wp 1234,6,rw
2 G& x& Q( J1 L9 Z* s 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6- v& w3 n% [+ \( X
, v) F3 l% F5 t7 j0 b9 ] g wp 23456,a,w,wpdata == 1) Z* A- w0 p* }1 e
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
0 t" V/ m( z4 V7 o- H L( k1 H# y) C5 @5 `! j- T8 i
wplist' @: f) d: O6 [4 J: n& M8 P" U7 `
列出所有监视点' z9 Q/ |7 G/ ^# z; T0 `8 n
; G, ` W( j4 i. W! O; y$ l- I wpclear 30 t6 L( {- k7 M Q7 L, Z
删除编号3的监视点/ @0 S6 r/ g2 F8 }
% O( W2 s' t/ s9 J
wpclear
: m) s3 I# \# ?% }* V 删除所有监视点
5 [, F. j: _% ?# Y1 B( F4 L( G! ~
4 w$ L# s. }) J; X; l& O1 ~5 T ' _0 B# c$ @3 {, Y4 v8 H9 _
+ q$ x, C8 b5 c& n) c+ z
程序断点指令: bp, bplist, bpclear
0 l# C0 L' z6 C5 J+ Z 例子:
7 p4 y/ s* B+ u1 ~- y' ]# S" m2 H& ^ bp 1234' |, O, v. O2 \: |5 S" v
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
& y' A, B; K4 i
3 |" W1 W. u+ a bp 23456,a0 == 0 && a1 == 09 b4 S) m7 _: ~+ G6 i7 z% s
在地址23456下断, 且中断条件为a0等于0以及a1等于0) ^) O1 m* v3 X2 F1 V) K
+ i) K8 c+ m9 M
bplist
7 E/ g+ h9 J! O: Y- H% U1 T+ k 列出所有断点
4 y7 R+ D' _5 k$ V
4 q( |! k% N" L: g1 Y9 g. } bpclear 37 n+ j' ]4 P# V4 E8 J
删除编号3的断点
" `* ?7 C+ W% h5 O' c8 o- i2 |; V; O e+ _: w
bpclear
! Y. e5 @4 f% a1 o9 D% v9 j 删除所有断点: o0 ` c) P$ p a2 f
( ]* A3 P$ J( G9 H. _' Y
/ e0 U3 i- E# h7 X% N3 x
/ Q" i& j5 A/ E+ ~ R" }2 |/ U跟蹤紀錄指令: trace
7 U3 @0 b$ l. H, J0 Y+ k3 Z 例子:7 ]! ^9 b/ X2 S3 \; S# A5 B* r
trace 01.txt
' g: N- u: U" N8 F# Y4 d" T2 { 跟踪当前CPU运行的所有代码, 输出至文件01.txt
7 z$ N C3 m1 x p+ E9 n% ?% w% ^9 o# v1 Z$ N
trace off
9 g0 V* D, E3 ?; q. Z1 Z% s" U 停止跟踪, 并且关闭文件
9 E( b* J# x0 j6 J K
+ t v) k, r# T" x% w* I. i trace 01.txt,01 m8 X" k+ b ~: b6 U; j* a
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt2 [5 Z- \/ o. `3 |
6 X, X# x$ e* V8 y4 \ trace off,0
+ O6 f, F1 P* f$ ~! o1 v. M 停止跟踪编号为0的CPU, 并且关闭文件" ^& `7 k9 y5 w6 E$ d T' @
6 T) C1 ` B$ l. G$ H6 Z8 G trace 01.txt,0,{tracelog "A=%02X ",a}0 G( o1 s$ Q0 Z c
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
/ j! y# K8 `, W( S- e) i& E1 g 并且在每一行的前面, 写上"A=a "
* r" U% L% V# d0 |6 t "A=%02X ",a为一个C语言printf函数常用的输出格式
% \$ s- B" W, _7 j" Y 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
' O( E5 x+ j8 B8 `) D8 C2 w% U X表示为大写十六进制数
+ _! r9 A; P$ M$ j3 Z# J) D
# U! A3 ?5 E( R, ?( y7 x/ \9 y( X
5 P( G, x% Z' h5 `2 G; E, _3 W内存直接写入指令: maincpu
$ U1 f$ h: `/ @, I 格式为 maincpu.[][]@地址=数据/ N) V1 C! E8 I) G; p
第一个[]:1 Q- D2 [6 `+ K& A0 ?) ` O: P
o 表示ROM地址
6 \, b% B3 e; h2 ` p 表示RAM地址
+ g3 \+ q# A: U% e4 U) x
R; N4 I. a7 q3 T 第二个[]:
; q$ R! G: k% q/ i% X d 表示4字节. R1 T. z5 X4 {& E# o$ p( ~
w 表示2字节
8 ~% s7 G0 m& ^' w R b 表示1字节- ?. V& H8 b8 q+ { o0 k
! v' p; B8 h1 {4 Y
例子:3 O: y% j% H$ u9 V2 Y% E+ l
maincpu.ob@1234=FF
' ~! F; ^# J1 \# M, V 在ROM地址1234处, 写入FF一个字节
5 B: X( p" j& k" F4 f
$ f# y7 C+ n' [! j& k8 y9 F: g& R maincpu.ow@1234=4E71
5 T+ V4 C1 G0 w$ W2 t4 u+ v% F 在ROM地址1234处, 写入4E 71两个字节7 C' n" q4 R+ b, X; v$ I
# M4 i# |6 A2 _* j) B9 { maincpu.od@1234=600A4E71; _& j3 l; W1 ]0 m1 y
在ROM地址1234处, 写入60 0A 4E 71四个字节( r7 j m6 p* a. a. p
; {2 Z' J! Y, N3 g 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写 y- p; O9 U8 w- p- P, ]
( w& f& q ^+ ~% M3 P1 A4 d# I v9 B2 ]6 R4 D3 W
其他:: \; U1 a8 c! V
dasm 输出档案名,地址,长度
! m0 C1 o1 x5 N* {7 F* v; j$ _" | 输出程序的反汇编代码( z% p# |" b; S6 U4 ?( W' i
例子:
2 G/ t7 R- L% _' |5 B# l dasm 01.txt,0,100000
3 U( @: A' f) M4 u- w% a: K 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
9 X0 P3 ?) W, K m
4 R$ N, Q& u! j& ?: `$ S8 l+ \& W softreset6 g0 c* \ z$ S/ L& w! {5 m
游戏重启, 但不重新载入ROM$ B7 D1 l3 S( N
/ l. l: A0 I/ w) R3 _. H2 M7 K hardreset2 e, q; \& b1 `; A7 i+ j
游戏重启, 且重新载入ROM# l3 `, X0 c. b; T" Z
( N% D# _) ?" V) ]/ d
snap xxx.png$ y7 [2 M8 m* n$ [( l
截图为xxx.png% I2 T o b: ~9 Y
" H: g: d: {: Q0 r5 i, s9 P
6 i# ], v* I7 e- q H% U/ d
- V" z/ n; w; f4 s9 Z- v0 h
1 U2 F0 b4 O; c7 n热键:
/ N! s- s$ x1 \# \. U) M5 ` ~ 中断游戏
& y: m; p9 j( r/ |' X( U F5 运行游戏
0 S5 _ s: Q/ ~3 o0 z$ w" ` F12 运行游戏且隐藏调试窗口
! f( a, H; j9 q( `& Q; M F11 步入, 单步执行, 会进入子程序6 A! ~: c3 Y z$ M& ^, R- I
F10 步过, 单步执行, 不会进入子程序+ O( g6 \1 n6 C4 H
Shift+F11 执行到子程序返回$ b, |2 e( H' t$ r# ?: i
Ctrl+M 内存浏览窗口
1 B! K% C3 }, T4 i$ \9 Q F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
0 V6 V. J! X% m+ C% O0 B5 Y( Z, W
7 |' G$ m' @% U" |9 W9 c{:4_94:} 2 f( S3 j1 u4 }1 g; ~3 z! y
& C5 g+ z0 K5 S* w x+ [6 H
|
评分
-
1
查看全部评分
-
|