|
|
+ ?8 b0 S N% g
很快速的整理我自己常用的指令5 L) O5 _9 L* {6 M5 F3 M! n+ d
3 Y8 ?$ E/ o" B6 i; j{:4_112:}
. g1 C# ]; L6 ^; h7 g% K+ ]
7 |7 G: P0 X# ^8 v& s; iMAME DEBUG常用指令
0 p' |: y# p0 c4 N m: O! }) E, \( ~1 }# L
内存搜寻: ci, cn, cl+ X4 R6 e2 n8 B* n5 w, R% n6 U
. M3 X$ p# Y* O0 L: c1 E ci. ]/ q: }0 S1 L2 P" c' D' c5 C2 N
搜寻任务初始化, 每次搜寻一开始一定要输入这指令8 z! Y0 I' t0 a1 r9 k7 Z6 t! T2 W
& F& _4 x& R g. g n0 [ cn) q% s5 l8 C; _; Y- S8 L* c8 C
搜寻指令3 b4 p' U6 @1 v5 r
例子:! @: l2 @; O( j& U$ }+ e# i
cn eq,60
8 `3 Q4 c* T' T 搜寻目标等于60 (十六进制)
4 Q& e9 G) F7 k' L # m! R# w5 Q! G/ h) S: N1 I$ P
cn eq,#961 J2 e0 N* D" X+ }7 S
搜寻目标等于96 (十进制)( \2 G( w! R2 E/ ^; k s b
" [ I/ p, l1 b
cn eq
6 ]! [) n( n4 C- l- K! ^% t 搜寻目标的数值没有变化
7 h' s( L0 l' R) d) K7 w6 @0 \
" _( h4 j1 t$ u: C( u5 Y# c cn ne
8 }% u, J9 `+ C$ y+ U+ ^' n 搜寻目标的数值有变化
0 H. V0 P' J- [& R/ S1 O $ G, b" z) A8 f8 y4 s+ b, x1 S M
cn +" f" s" R. x$ ]6 l5 Q
搜寻目标的数值增加/ {% V5 Y' @, {* { Z! y4 z
* `" J0 c7 Y6 O* `5 ` cn -
! D& z; e" F0 q3 j: R \1 u 搜寻目标的数值减少 n" R+ L& @$ E* B% V3 T
$ ?3 D/ w* u4 c& ? cn +,3
& r3 U3 M: V5 o- c' ]! | 搜寻目标的数值增加3 (十六进制); x! ^' a) z" g$ L4 `" ^
5 O: a3 P9 i5 @" l! y9 Q$ ?% ^ cl
2 [: ~4 R" |' x3 N$ L 列出所有搜寻结果
' \6 N$ o7 p" i% B4 a1 D" @" C
$ r+ Z- |1 l; h' {- L+ z+ R* L cl xxx.txt
7 F0 @8 m" u0 B. a4 f 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
7 Q1 ]# H% |# j# a' j: y/ A6 o4 c5 _$ a$ r' X$ p( j& @" V# C6 ?0 T2 E
& s- m8 B) `- {$ |' d
内存监视点指令: wp, wplist, wpclear
( ~& r1 t6 ]! o1 U$ v4 i7 J4 l' z 例子:2 v* W9 d" D4 H% t* E* z
wp 1234,1,r
3 v Q' S4 m) O9 x 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度17 X$ J+ b; B. x- a; w# }9 B
; _4 [0 o' ?" Y* H* K. j/ U: A
wp 1234,2,w& T# s' O1 Q4 V; k
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2& Y# y8 _! o8 l! ^: B. G5 W" c0 O
; n! r6 M0 S% a: O6 _ wp 1234,6,rw' M( G6 R7 W0 p$ E
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6/ R! a; G& `9 c4 T' u
! G% n- p# {# w1 G
wp 23456,a,w,wpdata == 1; F; X! Y* i3 P7 m! q
在地址1234下写入监视点, 数据长度a, 且写入的数据等于12 Y5 A4 `* T0 p- k" V& |
& w+ O0 i5 E% q6 w6 P% [8 [ wplist$ S4 M0 h7 W5 Y2 W4 }! S- s
列出所有监视点
' K% y# r4 K7 y- [
9 k+ Z5 `, H( m; ^ wpclear 3( ~) T' h( b. z0 }% a
删除编号3的监视点9 E- M8 D$ ~& R! Q3 r
2 N8 N: U0 i1 @% w8 q7 ^5 u# } wpclear: {4 S6 f, X% t, h
删除所有监视点# ]% ~4 @3 s0 L% n# p6 O8 M2 C; V
! Q3 T T# J8 b( H & m9 M6 k* [. ]5 m `
, L$ L, E3 I: y" O
程序断点指令: bp, bplist, bpclear8 o" P/ A E5 R1 L V
例子:- j/ f& Z) s( X
bp 1234& n2 I9 ]5 O c5 x( G
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
9 n+ I$ u1 k6 n: U8 L
2 }9 @+ N/ W0 c. o, S' p bp 23456,a0 == 0 && a1 == 0
% e( g2 D' W" K5 k: y5 ]7 E! X 在地址23456下断, 且中断条件为a0等于0以及a1等于0/ }+ j; \: M& C' c2 Z/ h
" x+ |( R4 l6 T7 ~ c, z
bplist/ |8 r @3 s/ y+ k) B% B
列出所有断点
8 C" c6 Z/ H6 n% f0 ^2 t7 ?) D, \- d$ i, {+ x
bpclear 3
* t* M, n$ u4 m- [+ G B 删除编号3的断点
# `9 ^: c5 m5 O2 f B# x
0 @- _9 p. l- l7 b/ b" c; E bpclear
' W* _/ Y6 Y B' T5 a- @$ E8 U 删除所有断点
- w. u0 E9 A& u8 d- i
& I1 u; `& L, R
3 Z: p% ~; D% G9 R) Q
: G2 l$ b- f" K) M: L( W! u3 V: @, V跟蹤紀錄指令: trace3 ]* p5 W! R# d8 L& a) l
例子:
8 O& N2 R: u: ^* K trace 01.txt
: \* h( N7 ^. V$ f% p1 s; n4 e 跟踪当前CPU运行的所有代码, 输出至文件01.txt
! W+ }' z) i7 ]9 r$ c7 T3 P- Q) r# _$ V; b# p. s
trace off6 \; X5 d( z, ^" a
停止跟踪, 并且关闭文件4 {, t, B* g! _# o/ j! x/ S2 T
( S& s: q. B4 r2 c) o7 I trace 01.txt,0
9 H& w( s, w. ?- X: U 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
0 L6 V& n) C: f. @. \8 T; }
& }5 R; i5 u% r$ M4 @! x# u5 k, ^ trace off,0! _ h( B+ I" o# N2 _
停止跟踪编号为0的CPU, 并且关闭文件% q1 d# j! w; E& f. ^
& E: N; p6 I$ q8 i trace 01.txt,0,{tracelog "A=%02X ",a}
( t& | A' H8 C& z) m' @ 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 1 `: p5 |8 n% a, @, J1 ?
并且在每一行的前面, 写上"A=a "* B4 k4 O9 p3 Y0 Z9 |
"A=%02X ",a为一个C语言printf函数常用的输出格式
) J: B4 [( Q) x4 |. o 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入. T* Y+ ~( K; k2 o
X表示为大写十六进制数- `, r5 m# |* l6 s
+ L2 G8 B0 d. w% w! d# \% [, |) h. x5 Z- Z. F
! [% d) x- K* p8 m: c内存直接写入指令: maincpu% `& p( u s8 C6 f& M1 C- z
格式为 maincpu.[][]@地址=数据4 J8 Y: I7 T9 h3 |
第一个[]:# Y/ [* e! _; l; _1 ~
o 表示ROM地址& F% r2 `1 [5 [8 R1 W
p 表示RAM地址! V6 {/ u d! M; f
! L h3 |0 A# Q% a, _
第二个[]:
, h* n$ J; d- a1 l d 表示4字节& G0 F: s% r% U( r& h5 ~
w 表示2字节
/ K+ T6 i. h4 N" }/ ]. O+ Z* n b 表示1字节# |( w% ]9 v( R: G/ {1 H
: `0 B/ }8 y8 j! I 例子:3 c& P* t7 E7 R3 }
maincpu.ob@1234=FF
) M3 P& y0 r+ P& V1 B 在ROM地址1234处, 写入FF一个字节
% A! u/ D3 _' A% ` Z" G" b6 i( E
' }- k. x0 X5 P maincpu.ow@1234=4E71
- N- ]+ r8 g- {" k3 g 在ROM地址1234处, 写入4E 71两个字节! ]) e: ~3 E9 X6 [" D& X: D
8 b+ u' c5 H! G* b maincpu.od@1234=600A4E71
# z# n$ l& N( g6 A6 u) C5 Y 在ROM地址1234处, 写入60 0A 4E 71四个字节
! `. a2 ?9 K: L# }% _# u: \ U/ ?" h B' k/ L1 A
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
4 l* r( c1 |8 w3 ]; e : K) I4 @( n% A# E
% a ?+ \1 c! g: V0 M
其他:- N1 h: h/ E4 m. f/ o! q6 ~
dasm 输出档案名,地址,长度& k+ s+ h6 D! o, l- s/ w; T* y5 D+ V
输出程序的反汇编代码
9 ?+ N' b4 r4 _. ~- K 例子:/ @. U1 V- o! v }8 o* q2 X
dasm 01.txt,0,1000000 U8 J& f4 j4 F
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt3 `8 l. H- `, `1 T. R' s
: h8 w' h/ D$ ~: F! m% g softreset- g( F* `# ?% ~! | ~/ j% I9 l
游戏重启, 但不重新载入ROM, d1 `8 i1 W9 |) H# U
# K8 p) P9 @ W7 ?, X hardreset0 u5 D' o3 V* n: n) n3 e! s
游戏重启, 且重新载入ROM7 h# g# K, {( {" m% _
3 i* e$ R% q/ [
snap xxx.png0 X( Z4 d( j+ {6 V
截图为xxx.png
. } G5 h7 o; b* a" B9 q; I
# f* b0 E- x1 u* E3 t | 0 [4 P7 g, W% q, ~
' A; `( m% q, {! E: r* h
9 p/ f% u$ x( R( _. o热键:
1 K2 E' n2 u) s0 t7 |6 a0 r ~ 中断游戏
$ w$ M& g6 v8 d F5 运行游戏
$ R6 {5 Y* W; K4 t i, C F12 运行游戏且隐藏调试窗口2 K6 d; h l/ @' b. }
F11 步入, 单步执行, 会进入子程序6 k3 B# ^, d6 |1 Q1 w9 H
F10 步过, 单步执行, 不会进入子程序
2 e; Y8 i. d( ]9 w) N/ O Shift+F11 执行到子程序返回9 }' z" a$ i/ W6 Y# e
Ctrl+M 内存浏览窗口
' }5 x* I! [& p, s" O# K3 f% F F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU: t- h: b4 i- ?0 n0 W1 S4 |
( @4 Z6 H* B1 |" @0 q{:4_94:}
& v1 d4 x' V; d3 X3 N" V1 Q( T" v7 @" I- W: T
|
评分
-
1
查看全部评分
-
|