|
|
~. l# r; d4 i: b很快速的整理我自己常用的指令3 L! M9 q- U- R, b6 ?4 A' C
' D9 B8 }7 k. g4 `& s{:4_112:} " U0 U2 Z( v& r
7 ^& d4 ?' G1 J7 G0 }) gMAME DEBUG常用指令
' Q$ N$ ~7 ?" n% E) z& W& G
( S8 n2 I$ g/ z: l! ~2 \- }内存搜寻: ci, cn, cl
) h) Q! G2 {& @0 b; r
[$ R8 I' |9 Y* d) }7 { ci
+ \( V$ r; a0 f6 r& x4 @0 t9 J 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
( }. c9 h* d, _ b. D1 j' d8 X+ T7 a# q3 [0 q! d
cn9 P& e8 ^& @- ?9 v. z3 D/ }
搜寻指令3 y6 N3 s) U: L5 o9 ^, D& a
例子:. X3 T5 b& ^$ }: T, f! F) Z
cn eq,60
! y6 ]$ @/ U" D! O- }4 X 搜寻目标等于60 (十六进制)4 m' J a. ?; k
6 _/ _3 ~& a# ?/ M( S- G( X0 t
cn eq,#96
! K% o) w* _9 w 搜寻目标等于96 (十进制)
0 M6 M9 h* Q; b/ n! s5 O1 U: \, F T' \2 C
cn eq
) H# O x4 z" n% w8 \% Y3 A 搜寻目标的数值没有变化5 h+ L* Z/ O. }2 S; k+ I5 J
J' Z' w; B" L- e4 R cn ne6 a* S# N2 B; a8 T' ]9 x* t2 Y
搜寻目标的数值有变化: m6 g( D) M, ?1 g: @3 g6 j
# i; J& n# x. }& A! d% c! h, x7 ` cn +
, x0 X b8 o" C5 d- E 搜寻目标的数值增加5 {* }- d2 [# C- z3 G @
, @9 K! y: M8 L7 I/ d/ G& \ cn -- \& I& }- R% W" T! N7 S6 N8 X
搜寻目标的数值减少
* _ ~( D7 ~! M1 Y' E
- z6 k. D5 {" l cn +,3
, {7 c. d: N" U4 S) i! A4 S' i 搜寻目标的数值增加3 (十六进制)
2 m8 o) S% }2 v" X7 s& J' ^5 t& l4 i" A
cl
6 J! N/ q) n9 |/ p% t9 [ 列出所有搜寻结果
# x2 |- [' T6 |& h- {. h' b
/ m" @! p- Z# c( q' R5 |" u' h cl xxx.txt8 Y8 p' Y& p3 X7 v! a
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
" R0 L) V5 F* ^8 r0 l0 U4 Q2 y/ N# b* s
0 C- `$ H) K3 B8 x% y内存监视点指令: wp, wplist, wpclear
4 v7 b1 C/ a4 ] 例子:3 ^+ j" K( e, t, n1 F7 C$ `4 {$ b4 x
wp 1234,1,r1 W0 y% u* Q8 Q, x6 z. x Q
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
. q. I7 O3 p7 l1 U2 C2 Y0 h- m+ ]0 c( ?) j: d1 ?; @ ^2 T( q
wp 1234,2,w
" w' `$ V& j# g* [2 Z. ]# b9 j 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2 l4 s* D! E8 h
5 l* t d; G9 O. j% j f4 ] wp 1234,6,rw
6 M, ~" ?. y) a 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
( N9 z( @* l( ?+ p7 q! e* S1 ]5 B) d2 ] Y6 ]& [3 H! L
wp 23456,a,w,wpdata == 1
/ s) r+ W) L) q. H6 R 在地址1234下写入监视点, 数据长度a, 且写入的数据等于14 Y. T- G$ e8 }" Z! ^5 C, m8 o
! f8 y4 \) R) [, d i
wplist8 C' } B2 g( _" j% E
列出所有监视点- q+ G& a( G. Q
0 J. J" ~; ~2 y wpclear 34 ^6 P y! [, h+ ^
删除编号3的监视点2 z K# N$ z8 z% r8 c% j
8 Z0 }# T- b @. v2 |6 e
wpclear5 Q- C7 M9 ?. n9 @# L5 q6 N$ |
删除所有监视点5 E* t0 K9 {, v$ K. v
- r8 J" i* v% l& v8 N8 k
! f6 x# n. D1 G0 M* K7 t9 v3 R
程序断点指令: bp, bplist, bpclear5 Q' Z4 S; h5 V$ h
例子:
+ C+ U9 {9 ]$ w6 E( w" X$ Y1 c bp 1234
2 [8 U' b, v, ?9 K' D 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
: [! ^8 R6 Y( r- x$ b6 P$ j# M! ~8 Z
bp 23456,a0 == 0 && a1 == 0
2 u9 f5 A+ R( N. U 在地址23456下断, 且中断条件为a0等于0以及a1等于0
" I' _5 ~, f8 l- k) p2 V* v4 a6 M- k& L( }6 S
bplist
^" c: z6 I7 u" `. o" Z6 q6 `. x 列出所有断点
) ? O- P" V' ?7 v$ |7 j$ |/ n! |% G' j* Q* m/ u8 n2 _
bpclear 3' t4 |6 d2 L/ x- o4 {
删除编号3的断点
+ M2 K1 h3 r- W' h1 g: M; b; z: p
( a% m8 q, @* A1 J9 U8 o4 C bpclear5 g8 k7 W4 |% {
删除所有断点
, G( {2 S) t2 C6 j2 I) a
{. I$ @, Y9 [& V) E2 L 2 j% K- D% S6 d6 x+ k
- @& m$ Q/ o/ X; c4 w+ J$ @! o
跟蹤紀錄指令: trace
! }* Z. f9 P, [ 例子:
, b3 Q0 y& F6 [9 d! m: u; o trace 01.txt
( b. m W5 U. ~3 j& U' ] 跟踪当前CPU运行的所有代码, 输出至文件01.txt
0 b1 Z/ U/ C/ I; V, z% C3 l$ N" f
9 v! s4 w! ]" J trace off- [2 m" w2 W1 e2 z% b
停止跟踪, 并且关闭文件
+ W' b7 {$ q5 W0 \0 \, L/ d( O* @4 A& {) A! {. x/ l. g3 d
trace 01.txt,0: I+ |3 d% [9 ?7 k* V
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
' j. o9 \/ ]. i$ h. x3 z: {1 K+ G6 {5 o
trace off,07 h6 u5 B7 u- D! e" v* y
停止跟踪编号为0的CPU, 并且关闭文件
/ t! [! E1 Y5 ?( g x* f( v* f: E$ t
trace 01.txt,0,{tracelog "A=%02X ",a}! N6 X* K& `) a4 ~7 r
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt $ m% u& D# K* @: o
并且在每一行的前面, 写上"A=a "
+ I; W: h h8 G( @4 o "A=%02X ",a为一个C语言printf函数常用的输出格式
) e; ~' Q$ A. ^% U) U 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入1 N X C: p, X
X表示为大写十六进制数: T1 r3 \1 \+ E; F B8 \
3 b# U9 z$ [9 S- X% d& d) c
1 c6 {; \% K) i3 e! j: I
. y# y7 u+ \" R8 z/ A' Y$ `内存直接写入指令: maincpu6 a8 K w! Y" _3 A+ y6 H7 [
格式为 maincpu.[][]@地址=数据
" P4 Y n* L V$ I0 ?; k) C 第一个[]:
; `; j! P: v! X" D5 P5 [ o 表示ROM地址+ e- l5 p$ X" K9 r3 T/ A8 Z7 d3 W
p 表示RAM地址
' F1 }! d [* D
7 p4 N. z8 Z7 I0 s 第二个[]:$ K, Y# d) t+ I' J+ O5 o
d 表示4字节
) }2 s! y# x# A/ L/ c' b! T w 表示2字节
1 ?( g& P1 q7 J7 \8 s/ @ b 表示1字节; p' e: E( l1 z! p
) F/ n$ j" l7 E L
例子:: r4 E( k0 \, ]* ^
maincpu.ob@1234=FF1 K( Y/ F. S4 t* c
在ROM地址1234处, 写入FF一个字节
, ~ X& e7 X5 e% x# f+ F0 b
" |) n' h: ]( ?8 @ maincpu.ow@1234=4E71
: m5 H7 {: o% _( H1 V 在ROM地址1234处, 写入4E 71两个字节4 O: D/ S2 p# M5 ]; f
0 a: G9 |3 _% n8 f! T: f maincpu.od@1234=600A4E71
8 }2 i# |* W, q3 F# | 在ROM地址1234处, 写入60 0A 4E 71四个字节
* R/ o, T U L: y P8 c' {1 I8 {! ]
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
, ]: H* t% A# P, \/ P8 g. i, e! p
5 u: c5 d+ X2 C" K s0 j
% s, p$ p, E. K A: M9 }其他:
4 {0 X8 G3 p+ G; G dasm 输出档案名,地址,长度
1 O' Y4 I8 w3 X/ A 输出程序的反汇编代码9 Z) d& ^) i# x/ P, ?# v
例子:2 ]6 P+ W( z/ P2 h& \& t
dasm 01.txt,0,100000, i! C2 Y6 i3 |/ I! y
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
3 N! G \7 X$ m6 S/ E7 r( p2 v- P' H2 w/ ?
softreset y+ q' L2 O' Y4 g; J3 K
游戏重启, 但不重新载入ROM4 Y: L4 k5 m% |; s/ x6 N) _9 Z1 x* X
3 e9 b7 G! H4 H) z" V; J/ k( M+ e hardreset
3 o( e; w$ x! w' Z+ I1 A1 \ 游戏重启, 且重新载入ROM
0 ^9 F( b3 G6 w* `0 V/ M0 ?! b5 `, l3 z8 j, A* |0 V( m. U# r$ G
snap xxx.png
% i [$ d/ a% f$ T: O 截图为xxx.png
b% _* }0 Z% ?4 t M% J1 [9 e
* ]: ^, ]5 D' U 4 I% K ^& ` C! M" w
6 y. K" f. | R" g U3 v
4 S# K/ A' l1 n& n2 M
热键:/ |5 i# M( P2 d- t6 h
~ 中断游戏
# K" P- v9 m+ l5 m+ a% c% C& c: ? F5 运行游戏- J5 W9 P( y8 ]# e |5 e8 O9 k
F12 运行游戏且隐藏调试窗口
& y9 Z ~( L/ b7 J F11 步入, 单步执行, 会进入子程序& |1 U7 ~0 {, J) v
F10 步过, 单步执行, 不会进入子程序
! a1 f+ k J8 W$ L0 R Shift+F11 执行到子程序返回 w" ], ]8 C- K# \
Ctrl+M 内存浏览窗口" w. G4 o0 _2 _$ m
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU5 `3 l2 Q# e6 k9 g- g! k& B# X+ U
+ I9 d; V5 y+ x5 e{:4_94:} " p1 C/ a0 y% F0 D6 q. n- f2 n
" R+ V# Q" q e! H+ A) \
|
评分
-
1
查看全部评分
-
|