|
|
欢迎注册EMU618社区论坛
您需要 登录 才可以下载或查看,没有账号?立即注册
×
9 _ o# [( C7 C9 s+ E
很快速的整理我自己常用的指令 h N3 M. A" ]- K) K
( h" d8 C' c% M9 V1 C' L; D) K{:4_112:} * }1 P. A& q( Y; D9 v
- S: h* @$ `# p* OMAME DEBUG常用指令" g$ @% G1 o6 |- w+ X
. F& i) G2 W, T" @: |' W9 V内存搜寻: ci, cn, cl
8 Z. h1 m0 ^' S3 C. G+ B! d; w. @9 p, X/ m" }1 B- |
ci0 r; \7 R I" [* P; a4 T, s5 z& b
搜寻任务初始化, 每次搜寻一开始一定要输入这指令: v, Y" z% w8 W
# h1 a2 {8 P( s7 u( l cn
" G' Z e& Z" R% \9 j 搜寻指令2 A3 w4 h5 Q) B' a, {
例子:
) P- C$ V( U! e m cn eq,602 ]6 S1 s' K! A1 R
搜寻目标等于60 (十六进制)
$ M2 |4 [; Z- F# s e) R3 K
7 l9 S3 T u/ b cn eq,#96
4 L3 c/ o! |' C- w4 M 搜寻目标等于96 (十进制)
3 s% M* ~- y1 |0 d
" o1 P* f. A% e7 c! C7 D! z cn eq% N; a' F- t5 p6 O
搜寻目标的数值没有变化
, J7 [6 l- B: U) b' o# j+ ]5 J( z8 d$ J- u0 f! @
cn ne" K; k- M# R2 Q2 }* G U R
搜寻目标的数值有变化6 z( J4 L F) ], @& F" C0 W
* X. |0 k5 Z) [8 s: x4 ^
cn +7 B0 f; `+ G+ P/ U1 H. s
搜寻目标的数值增加! x1 Z5 @" r; M* i. B' u! ~
) r6 W) ?+ E Y8 g1 \ cn -' k& i D1 U; Z: R( I
搜寻目标的数值减少4 d3 }+ [2 K! m; r
0 ]+ X. Q$ r8 \. P; f cn +,3
7 o- ^8 ]# X) Q0 i 搜寻目标的数值增加3 (十六进制)- w$ @% X5 `2 P/ Y$ r( Y
2 {8 t9 F1 B+ o' O) ]0 k" d( m8 G7 c2 J' E cl' h; a b7 C [! q( R) p: N- l% b
列出所有搜寻结果
4 V: t$ [* {0 o" l
0 j7 f: S5 W6 o2 p# q9 G% M cl xxx.txt1 e; J2 r% p7 m# k
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式( A+ P' z5 v$ e4 R4 e Q( Z+ s
5 ]& J# C* L! W7 n* |. Y - ?' v0 r- o. z1 w. k; K3 k
内存监视点指令: wp, wplist, wpclear
( u( ~( h7 _- o1 `* G" z) p+ e 例子:$ d" @- k( Q" g8 U. z j
wp 1234,1,r2 X) s) x% r7 X: _8 S0 X# Z0 J" |9 d( R
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
0 X: E& k/ |8 I& Q5 \6 m# u J; X2 v. j* Z& }" z
wp 1234,2,w1 D4 q5 {' f) j' [8 k
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2' x7 e+ d8 L y
6 _$ v) C& B7 G5 E4 ` wp 1234,6,rw
# ?& Z: l A( }) u, V- V8 Y4 R 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度66 i" ^. G' S& F+ @; Y: d: \
9 S `/ Q5 [( i; D- z- P
wp 23456,a,w,wpdata == 11 O+ L& E' e# R# j1 \
在地址1234下写入监视点, 数据长度a, 且写入的数据等于15 X' T+ S! N; n, o. R! k9 ]* M; O V4 E
$ r6 u$ [* b' y: o- ^ wplist
; B' X4 w; \: U 列出所有监视点
" i. ^* K$ ~# o/ A7 F" `
' L2 N- r) V$ x- T$ w wpclear 3
7 }/ {: R$ o, d* T5 v2 g# _ 删除编号3的监视点
2 j3 V; A8 {: v9 @' m% F- I; e* k! D0 [- f
wpclear$ d) Y1 l& @1 }, @" X# w5 |# Q% M
删除所有监视点: Q4 v6 S" P- _; A3 I8 U+ l5 t U
0 n& X, n' P& d! U
2 ?% ] W- u2 X. w( [. t
" ^! S% c$ ~8 W& ^程序断点指令: bp, bplist, bpclear
# w4 h5 b. t2 }3 ?8 p 例子:! D' c8 f# q2 `
bp 1234
8 ^6 x& v) Y& u. O& _8 B/ w& @4 k 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
* J0 b. y/ v. I" `; V* [7 Z# |' {% O
; r5 w/ ]4 Y _3 Q bp 23456,a0 == 0 && a1 == 0
0 @" b4 \9 H0 x9 ? 在地址23456下断, 且中断条件为a0等于0以及a1等于0 l# p8 v9 J5 I2 N/ a- \0 x, P
: `( {" B7 h- s. A: \' H6 h& `3 \
bplist0 J+ o$ ~, l* M1 J) O/ y: @
列出所有断点# s. D# a- Z7 a; d- J5 a G
6 m- b: `2 b/ f) G
bpclear 3$ v! |; c! }6 Y( ~/ k+ w' N7 \
删除编号3的断点) B! j5 O* ]5 R0 [& Z5 }
2 S$ ]6 z. n$ o: }% j
bpclear* A6 e0 U$ z$ z- X
删除所有断点* g) D+ l3 @; S6 v1 W+ x1 n" H
8 C! ~# y" [/ q! l; I' k
, J* p; `2 O% ? Z
- P& q, g9 p# g
跟蹤紀錄指令: trace
8 `8 E3 C# V7 F8 B2 |2 y+ C8 l, P% u 例子:
+ V9 y: `$ d3 @7 b# ] trace 01.txt
2 \- t9 c+ E! I4 i' b2 U. J4 u- _ 跟踪当前CPU运行的所有代码, 输出至文件01.txt$ S( ~+ x7 _! q Q8 N$ H
+ Y3 _ G( ?4 v' S- Z& J
trace off2 L( I( V7 v$ L( Q/ B& Z
停止跟踪, 并且关闭文件! Y( K$ s! {' p0 z) v1 e% W
, j! E7 ^; B2 w7 z3 Y, U, U
trace 01.txt,0$ H% w" h2 c1 }" k
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# P8 g' e5 v$ |/ T3 p4 A* Z. S. m3 f% a1 j6 i9 ]5 O2 G, g$ |' A% `. A
trace off,0
) R7 b& d) D3 m8 E3 u& f3 \$ i 停止跟踪编号为0的CPU, 并且关闭文件 @( R) L1 M+ k% g& R
: P- E- c5 ^3 E& O/ D
trace 01.txt,0,{tracelog "A=%02X ",a}2 y' P, _/ j+ Y1 n5 \2 ]4 _# K
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ( A) M$ X7 p: X8 Q
并且在每一行的前面, 写上"A=a "' q: y# G k& W# r
"A=%02X ",a为一个C语言printf函数常用的输出格式
0 G7 T7 D: A: v3 Y# i 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入9 U7 Q! g3 e* q7 `# P3 f7 c
X表示为大写十六进制数
4 W; h9 h0 W/ s6 F8 K$ t
" Z, E: p* O( j2 l6 C! A* }# p1 \6 _9 u6 ^9 r- d* W" I
5 C* D4 Z2 R) l内存直接写入指令: maincpu9 z6 G: q6 P+ C- W+ w \) D, F
格式为 maincpu.[][]@地址=数据4 l6 \* ]4 z' [) g$ z
第一个[]:
* s7 D3 g0 X3 |. Z. Z o 表示ROM地址
1 \5 n' K! s% g, B% P* ^' T- G8 R" V p 表示RAM地址- u( m) f7 \! n$ b# T2 u
, i( u2 o) ^ i$ O
第二个[]:6 c# t3 _. g$ p/ D: S f8 Q
d 表示4字节
5 E4 {5 J. o: l6 J w 表示2字节
) Y7 d0 L$ }# u9 D/ Y) Y' ` b 表示1字节
D$ [4 p, I. P: r; L ~3 h7 i. t3 c% I, l: x$ D6 f, h: K. H
例子:. g- `* W0 J$ g6 P ~
maincpu.ob@1234=FF
( z5 E) x: G! g, o8 e 在ROM地址1234处, 写入FF一个字节) }. f0 g) F. m" D' S
, \8 M6 w1 w3 o# f maincpu.ow@1234=4E71
# C5 u: j# ^, `: ^- ] 在ROM地址1234处, 写入4E 71两个字节) I8 e9 ~ M' ?3 _& U3 u$ E
! u$ M" I# x3 Y$ n4 K maincpu.od@1234=600A4E71
: U8 Z& G/ q- C; b" B 在ROM地址1234处, 写入60 0A 4E 71四个字节, l' G7 j" l' x( i: ?" B
: ?8 ]- o5 V1 \9 c, r3 a7 b1 X" ^
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
3 T6 ~) u* } ]! u. [' v
) n7 v6 \, d! V; A; k
% r* r; C: c4 Q+ z1 ]1 \其他:' j. s2 s' J7 Z' ^* A# Y
dasm 输出档案名,地址,长度4 _1 m$ J3 H0 W$ z1 r. }5 g
输出程序的反汇编代码; u& B& Z5 Z1 O2 F9 Z+ ~3 x& U
例子:7 c$ w+ R/ w7 n) E" f
dasm 01.txt,0,100000
3 ]( ]9 K; F3 _7 e9 W1 t: v2 L 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt( y1 g- d1 y2 q% a9 e
, v$ X0 J- m3 H K. r1 y+ }& N
softreset1 ]0 I# S: K5 n) J
游戏重启, 但不重新载入ROM
5 ?+ p9 u/ k5 S& {
9 \" e6 D6 O& w/ N r hardreset/ |$ K7 t% x/ c
游戏重启, 且重新载入ROM; m8 J* T5 Z& r O( k
5 X) c0 m& @- }
snap xxx.png' N1 ^# M$ b. a
截图为xxx.png( a; b8 L6 _# s3 Z( I
! h7 m+ I+ l \7 o ) M+ w7 I# g% S3 T+ }
- Y7 A# D4 H; Z! O2 `( l" X
2 ~% O" f/ ?, A: V. R8 T3 |8 l热键:2 H, m1 u( n3 a$ S1 @2 K. I- {
~ 中断游戏
+ g" N; j& {1 b+ |. r) O+ T F5 运行游戏
: w6 G$ I% G- j6 | F12 运行游戏且隐藏调试窗口6 [) p+ q$ N- N+ q+ d& `+ }) _
F11 步入, 单步执行, 会进入子程序
3 n$ u& }: G0 v7 p F10 步过, 单步执行, 不会进入子程序' y b! b) \5 w% r* k4 o) N
Shift+F11 执行到子程序返回
) p7 P, G. Q% o$ |6 ]( i* R t, ~ Ctrl+M 内存浏览窗口
% M- T9 d. F# U* R8 }, O- D( P F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU+ g- m! J; O$ V- S8 _* Z
- O3 W$ B# a4 e1 Y" {5 l{:4_94:}
/ u7 O* Z1 @% h: ]0 N, Y7 G( X! v
7 Y9 Y) P8 e7 [( F6 n1 d |
评分
-
1
查看全部评分
-
|