|
|
欢迎注册EMU618社区论坛
您需要 登录 才可以下载或查看,没有账号?立即注册
×
! M6 W; Z& u9 p+ d
很快速的整理我自己常用的指令; y7 L* Q) I7 f; f0 C
5 ]5 R) b4 Q; O. A+ O
{:4_112:} # b* h* t" i5 e5 x& H+ ~! R( A7 C
; ]4 y0 ~1 Z3 d1 rMAME DEBUG常用指令
6 ?/ {1 b+ }( j( m) J- a
+ V O; I, Q' k+ O内存搜寻: ci, cn, cl
( K. L" S* d, u' m/ {+ C6 m6 O! B' o% w5 h3 J; k
ci
( W) h4 {& E' n f, p 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
6 S2 h* X: ^ v
V+ G+ L( K4 |% x cn
& d1 {2 E) _' u. \, n6 u 搜寻指令
/ m! D5 ]- ^9 H& R 例子:) R ?# y, O1 @
cn eq,60
' [" C V- J) m! R 搜寻目标等于60 (十六进制)
' c4 i1 _" m+ O* ?2 O0 d, x2 \$ N0 k
( I7 N! Z+ Z, e* D4 b$ ^3 l cn eq,#963 ?$ M) v* y% M8 x
搜寻目标等于96 (十进制)( w2 J4 ~! y+ ?- T, W% U8 w
' \0 ?2 N+ b6 E( ? cn eq G! n+ Z4 c, B/ v6 }
搜寻目标的数值没有变化
( ~2 S! h3 D8 M( f! ^# ~0 V0 q2 a. P. @5 H4 p: H. Q, w+ m
cn ne6 @% ]3 L! Y. t+ T, c8 {) B
搜寻目标的数值有变化
& |. T! C% N2 L1 O! g! _' u
. C$ j( L* E9 M2 m8 Z, W cn +3 p% l* ~# A* k p
搜寻目标的数值增加
7 s7 H: w: o, s! v; J; v7 a) ^
6 t# u) X. q- h. a3 \( p. h. _ cn -
8 Z$ }# p# x' |7 t0 H4 N! o6 Y 搜寻目标的数值减少- H2 i9 e$ E4 a5 Y* g% z P
$ E2 N6 I+ J5 h& X4 K4 ^9 }
cn +,3' W7 b* R' E3 Q$ Q6 |
搜寻目标的数值增加3 (十六进制)
$ f; n5 V$ c6 J5 }4 R8 Y N9 J6 g% W1 e$ ^* A6 Y$ M
cl
8 y5 e2 `+ I, ?: a 列出所有搜寻结果" ]$ I6 @* R& \+ ]$ D8 ?
. |) O m/ c& t* i4 s4 @
cl xxx.txt$ z: y/ n2 f n; w7 j- Y
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
2 x- J* ^" {4 }1 c' M H
' X, e% Z" {1 D# {5 ~
% ?! @& t1 T/ g: [0 W' \6 @& ~内存监视点指令: wp, wplist, wpclear
9 [1 ]5 }: G% I* B 例子:0 ]; U$ q9 I, U" L R& D, v; u7 n
wp 1234,1,r
0 x6 K4 t' t3 [' z5 z; @ G, l/ w9 r 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
& I/ V. k2 F* \4 y, V$ G2 d3 h7 _
: X3 H8 y( b9 t$ v0 c V$ N+ `* s wp 1234,2,w+ P7 D7 K4 v+ ~/ d
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度20 v& L9 L- F1 S0 S+ c
, Q( z6 x! c* i" R& R+ W$ f wp 1234,6,rw' W4 z% K0 L' A. ]9 Q" z; o
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6+ n8 @ c: J6 p6 G8 _0 F
; Q* N" n& U9 ^2 i0 H: z
wp 23456,a,w,wpdata == 1
' }1 M1 x( d8 ?- i% S* g O 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1$ A% }- a& y5 r
e& n9 C! W- Y. `* f w
wplist
) H" k2 o. {0 V S$ [ 列出所有监视点, ~# V5 O8 I P1 C6 c
& A1 z% [" n2 m
wpclear 3
' ^; D" w' \. g9 N0 ^! F; Y( T, U 删除编号3的监视点+ b! \& F3 ]7 E; c W+ T0 x7 n+ p, ?5 \
: w# H! r, _8 k' c9 [8 C
wpclear3 I9 v4 @" ~- G6 R' N
删除所有监视点6 c3 u, P/ J) B5 j" L
7 r; {2 i$ }/ W0 u% v# P/ w
8 r! [1 r0 {1 i0 f) U$ l4 y6 [) U7 Z. i0 L4 z4 D+ X; m2 f% M
程序断点指令: bp, bplist, bpclear
+ h# o, x2 t$ n' Q2 h6 E2 B9 G( M 例子:
3 i8 f+ z5 [7 G4 a bp 1234
( J0 ]0 ` a# X8 D) Y$ c1 \8 h8 S 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断# F4 F/ p. r, `8 z4 @
9 y0 c! {$ o8 q* J1 L
bp 23456,a0 == 0 && a1 == 0, O& d1 K- V5 \7 t( ]4 ^/ g# O7 W" S
在地址23456下断, 且中断条件为a0等于0以及a1等于0
; O0 R' `# U8 g; V$ R& J4 M1 V) `
4 |, f5 p' F% v# S. {0 }# n* o bplist% N% b/ T5 J, l$ m# s
列出所有断点
/ W% w9 h% ?4 ?) P9 }$ ^8 d$ y" v( q' L' B+ q( k: ~
bpclear 39 C& v* |! n8 F; c8 u5 A
删除编号3的断点" o* S+ @& I) @. T* Q
& f( t* p$ g% M, E" N( K( A bpclear4 J& n2 @( H: d- Q, o! D
删除所有断点7 k4 f" I a; \. T s$ u" S7 c' F
3 X8 N# i3 ~+ r$ V- A5 v1 r! J 7 L+ D3 z# v2 R% b5 `4 V
) ]8 }0 Z; H6 ?+ ~' U2 l
跟蹤紀錄指令: trace$ r: B7 Z& h* F ]6 s5 I9 A$ T
例子:
0 m! ^ t. H0 Q2 l trace 01.txt
. Q A1 k+ X0 X' `5 N 跟踪当前CPU运行的所有代码, 输出至文件01.txt
- U4 I# x/ @ f5 x/ U2 k" v6 v' K9 D7 O
trace off
@) Y0 ^: T3 [2 w4 `- x 停止跟踪, 并且关闭文件* T5 j( R9 I. V7 @$ Q4 ~1 G9 s8 w
9 t" i, F0 l/ y+ \% {0 u
trace 01.txt,0
) W) q( y7 ?, Y$ t5 h9 J+ X$ n% k 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt: _6 k$ j% b+ D
; L9 o8 M4 s1 d
trace off,0! m. M+ Z# ^, F! |
停止跟踪编号为0的CPU, 并且关闭文件
) P# q, b) ]6 q; t2 A, Z; o' G
& j7 ?. ^; N. }( a9 y J8 l trace 01.txt,0,{tracelog "A=%02X ",a}& \) Z( e# y; o
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt - U% ?0 _( ~" H) V2 r$ F1 l) W
并且在每一行的前面, 写上"A=a "( T3 P- k4 h ~# A6 y8 _* E
"A=%02X ",a为一个C语言printf函数常用的输出格式
, A. @0 d" {, `4 q6 U, n- k 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
9 v3 U9 `/ C6 r Q8 r: T X表示为大写十六进制数
7 B+ V! w. r# D( g: i% L( @! Z* @* _% Y2 A
. g! I% R: H6 |8 m" _- k
5 |; q3 x* ^; {0 o9 }
内存直接写入指令: maincpu/ m' s# ~+ ]( O) W
格式为 maincpu.[][]@地址=数据
1 Z' E( n. @3 m 第一个[]:
2 g( F- j# |2 n) {9 O( s o 表示ROM地址, `0 y: i# ~6 r4 D8 a. d
p 表示RAM地址& E. r: K4 |/ v: Q1 ~1 S: ~& g
( }4 I; }8 ]& m& l
第二个[]:* J, N. M, N- r! S5 I
d 表示4字节
; _% [! m- l* o w 表示2字节
i9 i. g) ~- P( y [0 E b 表示1字节
& T% P* c/ ~' E8 `* l2 j/ G- V+ A
例子:$ ?) d2 x; u1 ^" a+ S2 u
maincpu.ob@1234=FF. l/ C& g/ J1 x" L8 f
在ROM地址1234处, 写入FF一个字节
' ^! c/ k; F J, b I0 n: J
8 m5 q3 P( c/ Q" x maincpu.ow@1234=4E71
1 |" d3 M( J& u: p5 [( o3 ` 在ROM地址1234处, 写入4E 71两个字节
. W; x& h4 L4 _* V0 e
! Y/ ~% A T' w8 M/ l# N1 F% T maincpu.od@1234=600A4E71/ M O, \0 y$ X7 I
在ROM地址1234处, 写入60 0A 4E 71四个字节
+ ?2 E+ v7 l1 ~) L A4 t1 Z) h; ~: h: J3 {$ m3 y1 O K! i9 V& i
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
' n, r3 S# r" i! P3 n0 \
1 a C% ~0 J: h( M" A' t- E3 G7 R5 n# b0 b+ Z
其他:
* T& P: l: Q+ b, [7 P5 o dasm 输出档案名,地址,长度
, t1 V( h7 c- I 输出程序的反汇编代码/ B0 }0 |0 o# u7 c
例子:5 B# e6 m% C! m' B
dasm 01.txt,0,100000
" H% F5 `" e+ v( P$ V3 j, ]3 T* v 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
4 l9 A2 a* `7 D8 G% d8 s) \7 J0 Q E2 `2 b" ?8 f
softreset
. l" N3 D' y% f0 |0 s H 游戏重启, 但不重新载入ROM! A# U7 I: T+ ^: l( q
* m5 u) u9 b5 q9 _; \6 S
hardreset
0 Z0 G* Q3 K$ h& W 游戏重启, 且重新载入ROM
! j' b6 k8 W' u8 ?, ^5 {- K' A0 j% S0 X
snap xxx.png
/ X: P2 M: k% i 截图为xxx.png* ?. e" [" X) E$ n# X0 D* e# f
8 I) {# c) R* \2 k* W I7 p! F F$ S. D9 x) @/ `
9 R- v# A) r7 ?/ f" h
' T" v% R" i" z* H c! U% }5 I7 R
热键:
: v& l" T! W) v) s- Z4 [. D; J ~ 中断游戏
% H: Q# G r% n) |0 k5 }! | F5 运行游戏
" O2 W: E$ x. `9 D4 O F12 运行游戏且隐藏调试窗口
7 ]( L' B% a/ c" b! O7 ] F11 步入, 单步执行, 会进入子程序' i$ a! n8 i c) q, F3 x2 s, u
F10 步过, 单步执行, 不会进入子程序* c( M8 M. @' ^
Shift+F11 执行到子程序返回
4 r3 F+ u7 M: {( S9 o h' @) T Ctrl+M 内存浏览窗口& v5 L+ f. }( n( R2 ^/ H
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU( f; g% _: Z. N$ G; E, s" {
0 X, l1 H& q, ]+ d; k4 i# u{:4_94:}
# k' U& O8 {! l! n/ c
2 F9 n7 E* J5 }5 h. K( V |
评分
-
1
查看全部评分
-
|