|
|
7 Z( ~& _2 d5 r' Y/ i$ e/ t c很快速的整理我自己常用的指令
. ~0 f8 O" n; z8 W4 @8 ~ U! l
; z& L1 A3 G4 {{:4_112:} ( C. \4 }# w9 o3 B& q# t
+ U; K3 J9 M2 s' F; K
MAME DEBUG常用指令 r$ E0 T0 g j1 A% d+ F
. c! H7 ^6 O# \9 M1 o( @) B( N
内存搜寻: ci, cn, cl
3 { N) g! J# s! [* s/ t6 N
' S: ?% |2 H( `$ K5 t! I ci3 J) S; A; D7 F) |4 }1 }1 N
搜寻任务初始化, 每次搜寻一开始一定要输入这指令; E, `. c: W- T. T- e2 f2 v" E
; z' @4 g3 r. u8 Z( a cn' {" L2 G1 U: {! [6 W8 W: z6 c# Y
搜寻指令
* u- U U5 Z ? 例子: l. V/ X L, B) I* z+ }3 b
cn eq,60
' ]' W: ^8 x* c8 ] 搜寻目标等于60 (十六进制)9 w0 X: U" E/ ~3 D' M
9 U% O6 y- ?# l* Q5 {& A! @ cn eq,#964 d8 y/ C( r# {4 z/ A: I& d
搜寻目标等于96 (十进制)
/ j( T& f% ~6 S' h% h$ [! k& t7 A+ n5 m- {3 A7 t: F
cn eq
' ?2 S1 N& |9 `7 h 搜寻目标的数值没有变化
4 q9 V+ E- F, l: M
$ Z/ X8 {6 q1 l- l0 s: A! x. ` cn ne' L, x& J! a8 m0 \! Q
搜寻目标的数值有变化, m# }+ ^; u( H7 r6 u5 _- h
: o) l$ X# r; P
cn ++ f8 {' s1 N9 F
搜寻目标的数值增加
. |9 ]6 s1 u2 x7 `6 W
" X' h" G( ~ {( J9 Q) k cn -
3 r3 q- `8 L- R v+ [* Q: k( e' | 搜寻目标的数值减少
* h2 f) ?/ [" m" C
2 K- X8 J/ d1 K4 z* o cn +,35 ~; s: F1 Z3 ]3 N
搜寻目标的数值增加3 (十六进制)
/ b% K8 s: h- \& v; E, Y1 u
2 c* p4 A3 E0 N: Q& o cl! t! A* @$ K/ [* k3 Q
列出所有搜寻结果
/ q* _( p7 c3 }/ x
9 w! d; A9 ~/ t" H1 \ cl xxx.txt
8 n0 Z3 o) L4 ^ N- ~' V2 L9 G 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
8 ~# @$ x* X/ h- H: \5 C6 F9 H+ @/ G
' y S( I6 y; M4 Q' R内存监视点指令: wp, wplist, wpclear/ N9 A7 A! x* p8 L! N9 e' _
例子:
) b" C, f. h. {- Y0 { D wp 1234,1,r/ D7 s& l1 z: b7 h# j# H4 I
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
+ S8 p5 ]; w1 ]; |/ O' `
6 N" ~5 [, e! P6 w: x: s wp 1234,2,w
0 z, T5 Q; a& }8 D6 i4 X 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
1 g6 y1 [: M! s) | & I6 x1 [$ Z% H; U- G! F
wp 1234,6,rw- Y3 u- g W K- l4 v3 Q
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
( N6 b, s9 h f2 w6 p
0 ?# {' H; V& C% ~4 ?* |( r& X wp 23456,a,w,wpdata == 1) C2 l6 K/ J0 w. Y h# _; N4 @! D
在地址1234下写入监视点, 数据长度a, 且写入的数据等于13 `* u8 H6 @; } r; R4 E% l" ^
; f* c0 N- u1 g: h0 M$ s
wplist! B+ A1 o+ k, e
列出所有监视点) \9 Y u* X0 @) v2 l
9 U: ? T& o# H" s6 u# H& N( n wpclear 3. [3 e6 s* ]( F6 `9 e( v
删除编号3的监视点) \) U. d# i8 K/ Q- N
9 Q0 A: c# {* a3 G3 z
wpclear; d: O+ \4 t8 c! r/ D3 P8 B, r
删除所有监视点! I3 @. r+ [, W2 c" `
* ~2 E% j8 C. u+ C4 q( Q
( s4 p/ ~* H+ A/ [9 O z" j5 Q. v0 w: v1 p. \( u2 n& |. I2 p
程序断点指令: bp, bplist, bpclear
, }# H4 w5 }# k) | h 例子:' D1 o5 J6 c/ d# q7 r9 K
bp 1234
: D/ ` v8 Y( n- X8 x! ^, o, N# h 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断& A% C* F% F7 o$ G4 V
7 I9 R y* z6 P, Z. _ {4 v1 e bp 23456,a0 == 0 && a1 == 0% U( c3 C$ Y) v* f
在地址23456下断, 且中断条件为a0等于0以及a1等于0, D! O/ M" v* C: w. T8 n0 R
, Z* h2 o% V3 O; a9 p: @" l- n bplist" H0 e D2 Y L5 ? {# m, c7 g+ g
列出所有断点4 D* t$ p9 X2 z! o, J% v; Z
$ o2 r& b* [5 l4 y bpclear 3" g- E; [ |# ?
删除编号3的断点) V' m$ O( x# @2 d x* Q
# g' E) i' R) k/ j4 G bpclear" z; S4 R0 f; a7 J" n' o- r' O
删除所有断点
; O4 V/ E' n9 K) W1 w( S/ p0 v4 p* r
& q- ~' x: ^% J& E: Z
0 v) F4 C5 `* b6 t1 m . R w, e6 E9 y- N5 \* L0 k
跟蹤紀錄指令: trace9 ~6 ~+ `7 Z- u3 x( i5 E
例子:
|9 l6 W2 N' }+ J trace 01.txt7 h, N/ O! E; G% f! @: _
跟踪当前CPU运行的所有代码, 输出至文件01.txt" k6 l* ~9 U! V
( ~% e, B/ w' h/ G4 z2 T trace off
0 |7 a" {- A" u" a# [ 停止跟踪, 并且关闭文件: R8 ^" V* s u+ W) Y. v9 o
' q6 s% w) _/ d, Y0 u6 u1 E+ v% m
trace 01.txt,0
/ [9 S K+ W2 a& N3 k 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
9 [& V4 z: c/ X& k) @! p! B: R+ c [& J/ u( r+ J
trace off,0
$ ]/ S+ S3 v R j1 U1 e 停止跟踪编号为0的CPU, 并且关闭文件& t* m N, i( P [3 V1 I: L9 c/ C- L
& A6 b2 b+ n6 @! p
trace 01.txt,0,{tracelog "A=%02X ",a}
( @; U8 K' q8 j. l/ L8 Y+ ` 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt # a# z0 ^: J3 {5 l0 l) h" m8 Z
并且在每一行的前面, 写上"A=a "9 H; X5 ]/ I& @0 ^" W& g; J# t
"A=%02X ",a为一个C语言printf函数常用的输出格式) W' d1 A: h: y. \0 S. t2 i/ j1 T
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入- T: J$ K' o# S% r! I8 a6 h3 \; w
X表示为大写十六进制数
. q. ?" r# M" x) A# |1 [/ n5 P7 b* H0 z
# I. _) U' U) K+ c; e- B9 C* v0 C& e- Z
( |% @# T. W% |9 I内存直接写入指令: maincpu j+ M, @, X0 }* P. _
格式为 maincpu.[][]@地址=数据2 @0 B) ~. d: }+ u% h
第一个[]:
+ C# v6 k, \' }+ }# @; u o 表示ROM地址. `. R! N9 I! ?
p 表示RAM地址
/ x9 \: r: c. _
5 P1 N7 o/ {: P; ?$ G8 M 第二个[]:
2 l) ]8 W- q8 d! g/ B: } d 表示4字节
; C7 t6 q( R' N: x( l* E w 表示2字节+ g- I' n! v0 v ~/ D) H
b 表示1字节$ P1 E9 T/ M/ F$ j9 Z
1 B3 o/ Y2 A; o5 _( c 例子:: N# t$ j* w: e" ]
maincpu.ob@1234=FF
& F, [4 l, }, @* y' @ 在ROM地址1234处, 写入FF一个字节, [; P' g0 ]) A f! ]
, V1 ]+ O8 [6 J1 S5 _, p: U
maincpu.ow@1234=4E71
5 y3 O, g0 [' c. c. J7 k 在ROM地址1234处, 写入4E 71两个字节- \: Q. ~) G% H# j. Z" w
& ^) d4 ~! E+ d3 Y( Z maincpu.od@1234=600A4E71
1 f; U4 L6 i6 S8 l4 G 在ROM地址1234处, 写入60 0A 4E 71四个字节
* F+ A# y- o @
# a( z+ i5 s7 I 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
5 Z( W, Y. d2 _2 Z& ^& ]* } - J4 n: Z* M8 c, c
9 W: ^+ `' |* R1 `7 `5 I) C9 O! w其他:
7 u7 _& V" h+ Z1 C6 o0 Z( V0 X3 d dasm 输出档案名,地址,长度
0 u4 ~$ Z' r: A4 p& Z% t$ g; c; ` 输出程序的反汇编代码
- z- A. J6 |' H! }& a- c& E 例子:
, }5 z' _; d3 Y% E/ ` dasm 01.txt,0,1000002 m! X0 m) t$ |9 s' d
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
8 |' |& D- P2 n5 N- j/ {# C7 v5 j
. [0 a1 }; H# ^3 S+ E: T# e$ P softreset- S6 i, r% ^5 F" n0 F( ?
游戏重启, 但不重新载入ROM9 c7 E+ u) Z" P! v
$ Q6 u& b7 h+ M hardreset, E5 S4 L: C% A5 O% T+ C8 @( D. X) k' G7 E
游戏重启, 且重新载入ROM
6 ~2 a4 Y( ]& a) h; y, a8 T# e+ ]* T, \
snap xxx.png9 O+ F |$ {% [! T
截图为xxx.png
: [ u/ P2 H) \5 }" N$ f
w" v# k o& v: ], `( M. A7 ]- m $ `7 t5 G( Z8 C6 Z0 W
& M8 Q' G$ \* I$ G
: E, l% ]) a+ h热键:, T9 j$ j0 S9 f$ E" F
~ 中断游戏
( u0 f& O4 {0 e- \ F5 运行游戏
$ o4 C1 a3 C% @1 L' P L# } F12 运行游戏且隐藏调试窗口$ y) e7 j; E" X# U! i; l' c
F11 步入, 单步执行, 会进入子程序
" \5 Y4 r, k" j9 b6 m F10 步过, 单步执行, 不会进入子程序" C6 B+ i, |8 u" S1 |. v
Shift+F11 执行到子程序返回
1 m& ?( A' P8 |- V5 q- U Ctrl+M 内存浏览窗口) E% H4 ]1 }& a7 N* _- J
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU F. ^8 d7 ^/ c; x: Y
+ \/ a% m6 p; i
{:4_94:} : [# e" c# {4 u$ p; K
# Q/ Q; o; d( U$ ` |
评分
-
1
查看全部评分
-
|