|
|
( X s' A l8 [% h6 V% {很快速的整理我自己常用的指令& y& z) `* ]" o& }( L
) Q& O' a; x: s2 o. w{:4_112:} ) y2 E0 k3 v$ u5 h- P M% j [3 r
5 G j. x1 x5 y( Q }! ~' [$ C1 HMAME DEBUG常用指令
/ Y& t7 R; v* u7 f& v0 c- i5 \# x
% ?6 _- g* m, r% w8 \内存搜寻: ci, cn, cl
( B: Z0 J# C/ d `; J7 I
8 C) @3 k0 O! A7 B3 V ci
. S! y9 U! n5 \2 D6 v 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
8 m4 H/ g1 N! ^8 y& C4 {3 t4 k* ]) D3 k- y0 G6 W
cn
5 r7 D0 |( N/ _- k# X# w" _ 搜寻指令" m7 o1 c& n6 i
例子:
. D9 J5 X: K$ A6 U cn eq,60- c5 f/ X6 F, I+ X
搜寻目标等于60 (十六进制)$ b H' q( R( R, n
7 |% w, ~$ u0 e0 S3 C& p: H1 r
cn eq,#96
( E2 l% k% }* s6 {6 h/ ?; N; L' X 搜寻目标等于96 (十进制)5 {3 t& T; @! R7 H' ?/ Q. i( `+ I3 k1 {
2 C0 K! f/ i% c+ [) m& U cn eq
/ a3 B/ x5 y: S1 ^& [ 搜寻目标的数值没有变化
' Z0 t/ @) U, @* t0 s& O
( W" k% e' A9 g3 r cn ne
6 S5 \; b0 n6 G7 f# \4 U9 B- U 搜寻目标的数值有变化
8 V1 A& F0 K" M+ X; i / ]& r; |8 ~+ _6 {; H1 W9 S
cn +
9 [2 N' ]: O. m0 m! a2 e) B 搜寻目标的数值增加4 b. V3 |9 a5 {( H
# [- e$ c" _! [) x' T! ?+ w; `" ~: b
cn -
1 H! x& `) x0 G$ c: S1 P2 X$ _" c 搜寻目标的数值减少+ g: x2 |$ U% N0 j2 G+ H
1 Q* G3 N, ]. [& ~, ~. \ cn +,36 Y5 `0 P+ Z9 p7 M( p
搜寻目标的数值增加3 (十六进制)
. ?' \6 F/ V- ?9 Q* Q2 d t) W) v2 M0 f) x& E, H
cl% B, p8 Q3 n. Z% c+ z1 O6 l% q4 Z8 Y
列出所有搜寻结果
, k' {$ {8 O) j5 |# d; j8 ^6 q: ] g. P- |( ?9 k0 @
cl xxx.txt
* Y- b$ A7 m' ]! \9 A 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式# `1 K- B! N- y! [+ e/ T
- C) R/ U6 U" ]
: q" R' t& E, i/ x# }" ?0 C内存监视点指令: wp, wplist, wpclear
# z9 S* z8 X) @% u9 L4 |8 c 例子:+ w* u) E/ q' ~$ ]% N) ~9 F0 a
wp 1234,1,r1 H/ H) a6 H" Q4 O7 C- r8 ]/ l
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
T+ ?5 X1 e: @# ?& v: k# p! r) m. O- R6 K
wp 1234,2,w0 L/ X4 M2 P7 q
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
( W5 Q0 Y5 g) H5 s y( G8 ?: u3 v
( {- g8 W& l7 Z# _: V wp 1234,6,rw
9 @/ h, |; @; \ 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6/ y: u& u M% h( A" a6 r, K
3 m8 k7 x* X+ E0 \6 e4 W( I" |# `) \ wp 23456,a,w,wpdata == 1
! H/ {! b, E2 r4 z5 y: |5 b5 j 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
6 i6 Z# X) U/ V, t
1 s$ `3 U# z' c& `7 z9 w* { wplist# }4 ?$ D6 Y8 X( y
列出所有监视点; r1 j' m2 X: f, W) a
0 |. \, {+ X$ C' t+ X1 A
wpclear 3
+ F1 ^: a. \4 G' z0 p 删除编号3的监视点
! j c4 w* H- _& j0 q+ x# `/ e# b* b4 q" @# Z, m7 n7 ?- Q* V/ _
wpclear
_: B( z; u- K9 { 删除所有监视点; N; \* { c {* m
1 c; Q, D2 `9 U; {
' \, b+ Z9 [ [2 D1 w, h8 i
6 j: `9 u4 ?8 F
程序断点指令: bp, bplist, bpclear ~- j% J. V6 [ A5 q; E4 h: j0 \
例子:
; t$ U) v: J1 X2 ~5 o bp 1234* u, q, O1 W7 s3 |
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
6 m' A8 t, K* n2 g+ |' D( Q2 c% g7 L/ j% L, }
bp 23456,a0 == 0 && a1 == 0
8 ?3 }' D2 u8 N) j* y 在地址23456下断, 且中断条件为a0等于0以及a1等于0
! `% L. P0 D6 Y: B+ |( m! M
8 c2 R( N9 F# t! y6 Q6 ` bplist& }/ n* c$ q3 E; [) Y! f
列出所有断点
4 N: ~2 Q8 ]3 n' f# [: Y7 y0 b" U2 h K' z+ L d. I0 G: b
bpclear 3& W+ C; A1 X$ R. L/ J
删除编号3的断点( F w4 y6 S' u% t; W
) O0 R! h) Q: F
bpclear8 B1 ^4 l7 W; z9 @; x) ~
删除所有断点
& A- M& H% B: ~- P
4 @6 [: Y: [, S, b/ M+ v& ?3 d
6 Y% c4 Y8 y4 F$ y; M2 W8 E) N) E$ C9 [ ' ] E; t# @" q" \8 G6 Q) W
跟蹤紀錄指令: trace3 h2 S- k3 S5 B" C4 {. B4 z* }" p. b
例子:5 D8 F! u3 o/ g/ a2 I+ n
trace 01.txt
~, c7 u& q6 g$ p3 j- g/ l 跟踪当前CPU运行的所有代码, 输出至文件01.txt0 T3 u' ]5 g7 n+ j
% P5 p3 W( e* H, s. @5 X
trace off
" }& Q3 U0 d6 U& T8 Y% ~, F 停止跟踪, 并且关闭文件; f% }% a0 _1 }5 W4 Q
' L$ r0 l- F3 E+ a. M- c/ G9 V# n
trace 01.txt,0
; o, H" a7 z9 {3 B/ u& O$ R) K/ g 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt+ J+ C( u! `0 t$ e5 b9 v+ Z
& L) ~6 N" d& y trace off,0
0 \6 R- s, V+ i) \& Y0 I$ B 停止跟踪编号为0的CPU, 并且关闭文件 a7 e9 l9 V2 B: J8 l/ G
# K2 e6 j5 U$ u6 T3 Y
trace 01.txt,0,{tracelog "A=%02X ",a}
- E3 x# C, R% y& V. p 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 0 `3 v8 z5 r" k3 J- s. `
并且在每一行的前面, 写上"A=a "
7 K I) I8 A3 o2 l2 b4 o "A=%02X ",a为一个C语言printf函数常用的输出格式7 f K. \9 [3 s0 m5 G
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
( G: D! Z {, z! H, S X表示为大写十六进制数
( f1 H9 ^( e) z/ n. i) n- R
8 M5 D" s9 z8 f5 N
' ?! |; s5 C1 x" \. ]& O: U% `4 S" z& s0 y) {9 d
内存直接写入指令: maincpu* H) @ f1 |# P5 Y6 F
格式为 maincpu.[][]@地址=数据
) N/ z1 }7 ?7 a3 R. t* ~ 第一个[]:
+ [8 l S/ G, l: ^" P o 表示ROM地址% L: V9 c2 ~+ Z _8 i* h+ n
p 表示RAM地址8 X9 T& k1 N( y9 _ B8 |
/ g7 _, y/ p: l7 g) U
第二个[]:" w1 M- Y9 W H. |( m
d 表示4字节
% Q* P$ _+ g# v% q, m6 g) T7 p( T w 表示2字节
+ V) E( }. ~% \: s" p& s/ {" H b 表示1字节+ t) H9 a/ @4 W. h0 a9 ~
- p$ T! G3 X" P$ G) @1 d 例子:6 L, ?# y2 d& U9 h4 {
maincpu.ob@1234=FF
1 c* l* {5 H0 x" s2 F5 ?1 A7 u 在ROM地址1234处, 写入FF一个字节
; c3 o: A$ q- r1 @) ?- w" b8 ?% i2 [/ I8 a% k5 v
maincpu.ow@1234=4E71% r, L$ [+ l) {6 N1 P* N2 R
在ROM地址1234处, 写入4E 71两个字节: K' ?+ l& r4 g, ~( {
: l s* Z0 {- F: y( k% _6 o! [
maincpu.od@1234=600A4E71, ~1 V1 M! g1 h' _
在ROM地址1234处, 写入60 0A 4E 71四个字节+ Y1 Z6 @0 O8 _% `; Y; T% C7 G
$ w$ _# m2 o. ~5 q) t( } 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
5 b2 L) G: ]% e G4 Z
, U5 Q4 i$ t1 u% l/ V
6 p7 R+ t1 j; a/ c3 Y& I, _其他:, ~9 e/ g4 ^$ s; K% l: T
dasm 输出档案名,地址,长度
1 m( T0 b0 f% i6 T# L I 输出程序的反汇编代码- s, ? l/ ^8 i: n$ v. R% _
例子:
3 T+ }, ]2 a3 }) @1 H* P, ? dasm 01.txt,0,100000
% E( K3 }5 b1 R* q6 H/ K% g 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
2 k6 S7 y+ T: F. F( o+ f4 k( [' s) }0 g/ E3 N) \! a
softreset. t' V5 S& B3 \0 i* n
游戏重启, 但不重新载入ROM9 c# H3 A# `" E! ?* X6 H# i! Y+ F5 H
! w' l. u6 C6 i: C0 k r! A
hardreset
V: X7 d. ~$ N3 o3 n4 K; y+ E 游戏重启, 且重新载入ROM! Q. d* w Q, A2 P
! F ^( Z0 {9 v- \! } snap xxx.png/ I1 j6 u4 G& {4 T- X
截图为xxx.png) I$ L9 |& G4 l( W7 u& C2 U: |
, q( V7 g' _& D$ G
, c) k+ N9 g( b
' p2 [: W, c' E7 z . g5 O, ^8 T2 L, m% ~( c* H( {' J
热键:
# @7 _ v& a! U8 S ~ 中断游戏5 Q! q4 l9 \# R
F5 运行游戏
0 |& f7 r3 h" h7 ] F12 运行游戏且隐藏调试窗口* G0 F {1 e$ [8 t- o6 I
F11 步入, 单步执行, 会进入子程序3 ^; H) @# m# y6 y! J b% l; b
F10 步过, 单步执行, 不会进入子程序
1 O0 u% H4 I0 T4 U& J( p Shift+F11 执行到子程序返回: B% s- j1 k$ e" {6 m
Ctrl+M 内存浏览窗口
7 w! p0 f3 m- M. s. r5 m F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
& _% j8 U2 J" v0 P" |! }
2 u: B& d) L7 @5 [0 w* |) D7 S. |{:4_94:}
& a4 Y, B) `: U4 J9 K1 ^" Q( z4 b3 j, m! V9 H6 a$ v
|
评分
-
1
查看全部评分
-
|