|
|
欢迎注册EMU618社区论坛
您需要 登录 才可以下载或查看,没有账号?立即注册
×
, t' g8 w1 t! c" w; v
很快速的整理我自己常用的指令4 q" M1 \! V- E, p) ^4 s
, u1 {% A+ `8 P; _
{:4_112:} # [# M- [2 J i8 ]) s
" Q, f3 {4 N, {; Z) Y+ RMAME DEBUG常用指令
9 V# t. Z5 r. h- \4 F6 p2 f5 ?) }3 s x1 S# @
内存搜寻: ci, cn, cl% S- H. O1 m8 R+ R g: e0 a+ Q
; y6 U6 ?7 D5 z4 O2 t( N) T0 ~ ci
, c# D3 E& n$ u' m, ? @2 F 搜寻任务初始化, 每次搜寻一开始一定要输入这指令) ~6 S0 U9 B& V$ y% o& B
: O- n+ ]$ X; J9 B, U0 t cn3 J+ J8 t8 }! b; q% k# O3 e
搜寻指令5 v9 }: a+ S5 n. s4 N {
例子:
& V. f/ C: N3 e+ ]& V5 Y cn eq,60, I" i# n7 U/ U5 G1 H
搜寻目标等于60 (十六进制)
- O; A+ n+ a6 ?+ {; W
8 g8 O' u+ |2 P" R! i7 q2 A9 q cn eq,#96
( s. o1 g8 Z& I3 C2 P$ _% j$ r 搜寻目标等于96 (十进制)
. B/ g; D, @5 N* X# Z' D- U1 Y9 L' q
cn eq9 G9 C9 I6 e( y( j" U9 ?& L7 m; O
搜寻目标的数值没有变化
/ q6 p9 a' `2 V: L) D( s& S# |/ p/ P' ]- h
cn ne4 I' V9 r- q0 k
搜寻目标的数值有变化0 Q. R5 ~5 |$ Q
4 S' j; s6 u3 V( c. U# e
cn +
' {6 z' t4 [. X4 C' Z* W( N 搜寻目标的数值增加. P/ J1 v! h( w
& V0 ]; j2 s" w- F# V7 V! l( q1 u
cn -* B& N" Z* N; o% F) q1 }7 q2 U9 `
搜寻目标的数值减少7 |' R$ `1 O5 z8 ~+ l& v1 Z
7 Q% A# c6 K" _* ^4 B" ^0 o. M cn +,3
/ x* V1 Z! @8 r8 R, V 搜寻目标的数值增加3 (十六进制)
4 `" R9 c0 p" m. M' W* o
9 }" N2 U$ ^ ^2 L( J& E- o2 @) } cl/ |3 }8 I' N. o! t
列出所有搜寻结果
5 S0 t$ @6 R/ s5 S5 N! n+ v+ y9 n" U1 ^% ], A4 x. B
cl xxx.txt6 j' }# H3 Y% O0 h4 I
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
/ W- ?! y" V3 w$ ]5 w
5 L1 |- B8 I$ a) P; k
! L9 y, k$ o- B* z2 A0 p内存监视点指令: wp, wplist, wpclear
0 X6 ]( A( I* s8 }2 ^3 X! g 例子:
% l* V- k$ h: v0 e4 B8 X5 |2 g wp 1234,1,r
7 [* }# W$ P) x4 S 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1* s: B, s) y W( h
9 \' g5 t1 p, p* A
wp 1234,2,w) L. ^/ @; n' E; Y- z: s9 H! u
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2/ l% N- V; f! g0 ?1 a
' G4 M% X' W ]. ? wp 1234,6,rw
; I$ |( e1 w L$ J4 { 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度63 w; Q" E Y; I) w. E8 l* z/ V
' `2 L$ c! v# }/ r2 C9 V3 ?) O! l
wp 23456,a,w,wpdata == 1
- K7 ^+ E' R4 h \- X6 E4 _: z 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1" l0 R4 k* J3 ?3 T
# v8 h1 l6 N! o# C
wplist7 r) J+ M+ w; V& r Q. a
列出所有监视点
9 D) {. X) b* ^& }& D l
. U9 L- R! Z4 P* l wpclear 3
v& ^) \* b$ Z: |" H2 V 删除编号3的监视点: @7 @# J% v, e2 v" C& C# L4 @7 y' f
- G( z5 q- F3 X2 E- G* M8 P! k wpclear: K! o! a8 _/ G p
删除所有监视点
! N" y; l# Y7 d: V! V
$ m+ q0 b6 R& s# r1 q/ @
4 ]/ |% t0 J- Q' H: [9 _
9 \! h6 v5 {8 S/ ^9 c程序断点指令: bp, bplist, bpclear
1 ~% K4 B5 a+ F, Z- m 例子:
1 a% j+ z6 a3 E1 c5 Z$ Q bp 1234& g( r4 J W1 W0 V& A( v9 l
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断& H8 p/ H n% b7 q
& ]+ O6 M9 i# r$ Y& {& j1 v# ~/ c bp 23456,a0 == 0 && a1 == 04 r( f+ w1 U2 E
在地址23456下断, 且中断条件为a0等于0以及a1等于0
- V' _" I9 z& w9 k2 U' g5 `6 j: Z2 I. J6 N
bplist c* S8 g% _7 ^# Q: u, Y7 c( g J
列出所有断点& d* Q! B8 a- g2 t' f5 ?. e5 \- @6 b
% N3 `) X# S: }) y! V: m bpclear 35 \& z# R' P% ^ T0 ~
删除编号3的断点
x7 @7 r, N" b2 J. _1 ^
- @8 r! M# X/ o bpclear
) G( T* K! Q& Y& ~0 n2 K# R" R% K 删除所有断点
+ S; D( \1 j/ V( m
! [+ ?2 n; f% ^# h% [. ~0 P3 R l : R) C8 J: w* ^# x( w& K
( t% {' N; q) W( ~跟蹤紀錄指令: trace: x3 f% q0 }8 P5 E4 g* A7 g
例子:( Z3 K9 ]1 A. X' N7 d3 X' R
trace 01.txt# b _2 F" T8 F5 q
跟踪当前CPU运行的所有代码, 输出至文件01.txt
. W$ e I2 d2 M! P: j
! Q% \$ Z- y) t/ } trace off9 K. n% F; V, `% a
停止跟踪, 并且关闭文件
. i2 b/ Q% ?1 b# N# [' B, N
' p1 f: {" H! \ trace 01.txt,0; y# C% {! t0 D# h/ A
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt3 h! y8 Z8 |) ?
5 o; z2 m8 c0 _+ _+ [$ Y. l
trace off,0
6 d% `" l" s" ~" K( d& j+ ` 停止跟踪编号为0的CPU, 并且关闭文件
7 |1 g# d1 L6 y- j7 \) C1 U* K. g1 I$ \3 E7 G. k! a4 C2 A7 L/ j( J
trace 01.txt,0,{tracelog "A=%02X ",a} @: S, b9 M; d3 |/ u& I0 O2 B5 z
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt & \4 H8 Q; w, v" F
并且在每一行的前面, 写上"A=a "
8 D0 X) z9 m, j( E2 c% u "A=%02X ",a为一个C语言printf函数常用的输出格式
2 V7 ^* x1 I/ a, H+ L( n+ r 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入5 ~9 m+ s: t. ?* s. I* |
X表示为大写十六进制数
1 J& T% q, A. u. u( g2 @( U: K; z: ^" J8 X( W4 p- w/ @( k
0 L2 T" o* ?% c6 T
/ ?7 H/ p% A5 l. O4 \5 F d% q内存直接写入指令: maincpu8 p f% \$ l+ X0 ?
格式为 maincpu.[][]@地址=数据( c2 U2 D, E7 h" k0 \
第一个[]:
" ?3 `' a" I7 o# m/ K- K o 表示ROM地址
) Y( J/ B* H! c% N p 表示RAM地址: N; o; G- U1 v1 M8 S% Q
1 N* N* n: Y6 q( D
第二个[]:' b* F. i s$ A Y
d 表示4字节
( F: t+ @* L p, i w 表示2字节" ] o1 d4 s/ H! j- d
b 表示1字节
8 n" x; P7 F$ w5 a! h# Q0 B% y9 z
0 }, S# E @/ L+ } 例子:
# H3 R8 |7 f5 K0 |' [ maincpu.ob@1234=FF2 v' ]+ Y$ O$ E" F0 O( S
在ROM地址1234处, 写入FF一个字节
* m& m5 {, h k/ ^2 B1 U9 w$ R2 w2 F) v
maincpu.ow@1234=4E71
' K3 N( s2 u: V, Z0 S 在ROM地址1234处, 写入4E 71两个字节
# U, q0 P5 M3 e1 x
# l C: c }+ D+ @ maincpu.od@1234=600A4E715 ~2 t; R6 R6 n g: O, w
在ROM地址1234处, 写入60 0A 4E 71四个字节' x. I* I) b9 f. u
& {; w( K" A( X0 v+ y; c3 O
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
5 h! b Q" A. L$ p- Q: \ W$ m 0 u7 c, i! P: C9 ^
' Z- ^; t# O& V* t. v2 K: s
其他:
' }7 T0 Q/ N8 l8 u6 k7 k) q dasm 输出档案名,地址,长度6 o4 p- G G" z" F! |
输出程序的反汇编代码
0 a% S4 ~ D" M- W M4 L$ b( D 例子:1 I) w8 ?9 A4 e3 o6 ]
dasm 01.txt,0,100000& j! a3 K, D% E7 ^% x" ] H9 p
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
Y3 K4 Z2 d! H$ i4 }
1 J1 ]6 H1 G7 V6 U1 H5 `0 T# t softreset# |# ^- a+ P, A+ k# h
游戏重启, 但不重新载入ROM
/ R* E% B* n6 O: Z5 M1 u- n1 n1 M; @( L
hardreset
, i, R8 V! [8 D+ @5 s5 {/ [1 v 游戏重启, 且重新载入ROM. Q. ]6 C- q6 \* G8 J
7 w7 C+ H$ s q snap xxx.png
. T6 R/ M: }9 R& u/ k 截图为xxx.png
4 z) C$ {+ }: i' e* v* v9 @/ m9 a' r2 o6 _
" E a9 v( w0 q6 Y: ?
5 h: b$ q; Q& D( d7 _. Q! j2 @
6 v& p: m1 t- o* Y% L- B热键:
+ {% u. ^6 \; R; } ~ 中断游戏
z# C& z# `8 |2 z1 H$ s1 J) Q F5 运行游戏
r9 v( O& T/ J- C7 [# j/ h F12 运行游戏且隐藏调试窗口
0 g; Z! m8 K& }7 Z( D& s, C F11 步入, 单步执行, 会进入子程序 f. r) \- D/ n- T9 R! E
F10 步过, 单步执行, 不会进入子程序 }* h$ `# A& q* g$ H0 X, ]7 y; n; C/ ~
Shift+F11 执行到子程序返回
+ c$ I0 A- h" R1 D J5 i Ctrl+M 内存浏览窗口
" l' |+ X' |- M# B F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU- r$ Z2 S* t/ p& `1 p
, Q y$ G# d' e+ C9 @! ]4 N{:4_94:}
! _+ u o. }. y7 ]' Q; W3 F& z9 O& X L; H. q6 D& W8 e) \
|
评分
-
1
查看全部评分
-
|