|
|
. n# V( v! k& W0 z1 a( f* i8 U
很快速的整理我自己常用的指令
5 E/ H' M( b* b- O5 ~( o4 i M8 Z- U: ?9 @: w
{:4_112:} ) i5 O' u. x& R; L' {* t7 {
' h; |. n& W% b: P5 G; W6 {9 D6 _MAME DEBUG常用指令
6 _5 m8 [ ]) D2 @$ Y- d8 F; y
+ E: }' c; R) B内存搜寻: ci, cn, cl; a1 _$ `5 m1 B& T
2 G) B: B c0 Q( L ci
) _# C! z( X% c% N! k- X: Z 搜寻任务初始化, 每次搜寻一开始一定要输入这指令) L6 w( |6 f1 ] _) k1 w
: x/ o& r' }( _. k4 [ cn
1 E1 B( `& ~* w+ D7 p- v2 t0 B1 e 搜寻指令
8 d9 m. V5 v6 o 例子:7 U. A2 G. a( H
cn eq,60
. Y0 n- b) s! ^7 R5 o" e4 c8 Y 搜寻目标等于60 (十六进制)" h& R7 B+ M; G/ h+ W) A
/ a! D1 n8 l4 k3 U( h cn eq,#964 ^. g$ P$ j& w9 I6 O/ k
搜寻目标等于96 (十进制)) k8 o+ I5 M# P5 k
8 |" i$ B' Z# T/ ?& k2 I0 P- E9 S% x cn eq
" h; w1 L& I% r( p$ [8 x 搜寻目标的数值没有变化
# Q0 D" W; b# b5 u. V) ~7 a
$ @3 ?, n- S c" }7 w& w cn ne
* @$ c8 p3 b0 o6 E: Q 搜寻目标的数值有变化: r1 J7 p, E% s- S/ W1 K+ ^2 c
) B6 U) E1 m3 O( d0 X- A& w
cn +
( u8 s) |% s) r1 W- h" w 搜寻目标的数值增加; }7 X3 a6 d1 c* A9 E* q
3 I4 B6 N2 J; K
cn -
2 H' G, P6 }/ o* _ 搜寻目标的数值减少
3 I4 | x. k: ~4 o/ S
- j- s! i5 |0 y+ S2 w cn +,3
# A% q0 U5 R. k2 E+ y4 J; Q 搜寻目标的数值增加3 (十六进制)* v/ s0 b$ d4 m, m+ |/ w
0 ]" @( n# |" M# v
cl% Z5 Y$ @. T' `) I- m% n
列出所有搜寻结果
0 J% B1 n6 m- u! f- w% Z2 ?" i1 j- u8 Z1 v% c; D5 ?+ H- k1 `
cl xxx.txt
# b+ a' F4 _8 ?/ W% G7 Y 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式0 t7 k& y Z. d2 x9 Q
3 y" G' e" J3 J( j: z
3 }$ O# `$ S7 J/ F) ?% l" N内存监视点指令: wp, wplist, wpclear
; @: v$ S; J9 }; U 例子:2 \ K" ?( ^- r* o j* M; K: W
wp 1234,1,r
4 T9 H' x/ r6 y, ]5 }' K 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
) ` U$ d( R" P9 j
8 J( S9 }" c% |; e wp 1234,2,w
/ ?) M7 v( K1 r4 S: Y 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2% J! |( {& g" E4 ~: A+ R* s
! T: D3 |1 z4 Q0 H- R3 |; E- q wp 1234,6,rw" a* V5 a3 k" x9 ~7 \+ f% }2 b
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6, E4 L! O2 u$ L4 v7 h
5 B. P0 l: R+ D( L: d
wp 23456,a,w,wpdata == 14 Q- C5 ?, u4 Y Z
在地址1234下写入监视点, 数据长度a, 且写入的数据等于11 G6 [) J9 t7 q0 o9 ?, E
+ P4 l6 A% b' V8 g5 L/ L6 T! @
wplist5 J* _( r8 F, Z S4 o J7 X( l
列出所有监视点
. K& H3 i2 p( ^# D' c9 P4 L# u/ G3 ^/ ?7 p* Z
wpclear 3
& G2 Y7 r1 d- B) N! m6 q 删除编号3的监视点
& J; o. Y5 p0 n* X
: J, l3 _3 ^8 k; N" i8 X2 d wpclear* T! `# U8 e* m* s7 F0 g6 G# m. Y" D4 o
删除所有监视点
' ^, v4 ^% W- H! D" \, n5 X) U' N* W' e5 X) p# v. n1 W
. f6 x0 [! H$ \- @- O. e7 x, \
程序断点指令: bp, bplist, bpclear
$ d. S; ?( W2 G& X 例子:* o) |: {1 \7 [3 D/ R- ]
bp 1234( N- ]: A6 `5 Z8 U9 f
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断% c" b2 W4 P& f/ l6 _
6 H& n1 S! P5 T bp 23456,a0 == 0 && a1 == 0
, @: ^9 m; h5 f 在地址23456下断, 且中断条件为a0等于0以及a1等于0
) z3 N$ x1 J! F& q9 r/ @: C4 x9 I; A K7 X7 e w
bplist2 `; Y; r% c$ U) ?* v
列出所有断点2 {& y3 E2 D1 Y9 N3 V3 u
6 ]# H7 x+ {* w( e$ t& P6 Z" Z9 Q ~ bpclear 3
- g. g# z: V# [3 | 删除编号3的断点' F3 q: M: E5 {6 p( Q5 ~: C
! `2 C1 x$ e& s/ L bpclear8 [4 S# A8 w! W7 y+ a
删除所有断点; M! o# X3 `" a* U$ n
' ]5 S9 w' W3 w ]& D8 k
; @7 i" E' `$ y( O0 b$ t9 u 2 U4 i, t. F8 \. ?
跟蹤紀錄指令: trace, e' i& `9 s! k3 @9 ~
例子:4 w9 ]9 O- |) t( p9 I6 v. y9 N. Z
trace 01.txt
2 m; b/ Z. d9 e; l5 f 跟踪当前CPU运行的所有代码, 输出至文件01.txt
; Y5 B7 K. e( N3 {) \; P+ Z7 \5 S" H
7 d0 A6 y6 y6 X: i3 M+ z. M trace off
& ?) b' @9 u8 y3 i: g 停止跟踪, 并且关闭文件5 v( S7 ]3 y" L* Y
$ _: n' v9 {. y) M5 Y trace 01.txt,07 C( K& T( t: o1 T" Z
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
9 _' l& K( C9 U f7 {2 m1 x" R( O @
trace off,0
1 ^) i: B* J# @$ i% d 停止跟踪编号为0的CPU, 并且关闭文件: j* b& V2 y1 D v4 F+ T1 L
, A) ?0 J1 y3 r# z
trace 01.txt,0,{tracelog "A=%02X ",a}8 {% j% y" ?2 v$ b0 J M
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 6 c& b5 V+ Y% P$ I! w' h X
并且在每一行的前面, 写上"A=a "+ U, z7 W+ P4 v
"A=%02X ",a为一个C语言printf函数常用的输出格式8 r, g' T8 B( X( k
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入" S1 Q# }& @& K+ A' ]
X表示为大写十六进制数* W' e8 g- s1 N% R, ]
. e5 @; C* q; c& i
0 {9 `. Q- q: R# l3 o1 _$ X% H; g8 g' n8 s3 z$ A- }8 L% N+ h
内存直接写入指令: maincpu3 ?, [9 E6 {- j" E6 }4 k/ n
格式为 maincpu.[][]@地址=数据: b( U1 S% Q5 ?7 L' |
第一个[]:; w% h2 A! x3 r
o 表示ROM地址
8 {# r( K3 o& ^7 b" l) x% } p 表示RAM地址7 I' k- o' `# D" a
, C1 R: Y7 e% H0 P" G8 H1 k1 ? 第二个[]:% |6 S0 \2 v3 |
d 表示4字节
* t7 \8 ~$ }8 W! g0 u w 表示2字节% ?" H% Y* e3 l
b 表示1字节
8 k% \6 n! P6 S3 C* z% [/ Y# \, u
例子:
( a- h4 t" k* _" f- n, S maincpu.ob@1234=FF
{6 X3 M6 M0 ^$ }% H8 k5 q 在ROM地址1234处, 写入FF一个字节
4 y' `% t0 r8 l9 b
) Q0 W- M4 v# X; q0 Q1 J$ D. y4 ~3 q maincpu.ow@1234=4E716 {4 M8 e" L, U) M5 {
在ROM地址1234处, 写入4E 71两个字节; T5 x2 i2 n! W! O" O
- o, @% J1 K( c maincpu.od@1234=600A4E711 x' ~+ u6 V, V- `9 a2 O* ?( S
在ROM地址1234处, 写入60 0A 4E 71四个字节% L! ^. N3 a% u& l" Q
U8 Y% h! G8 C9 E0 F
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
. ^9 D% \5 a# c0 [
; x4 {4 J+ |4 a2 A
$ q2 `$ c2 ?8 d8 G6 {! s; @其他:
' H7 X0 d1 p0 C4 o! @' d5 e0 G: Q dasm 输出档案名,地址,长度
# B6 s- x+ ?1 w4 Q2 G3 y4 H 输出程序的反汇编代码: n+ R3 i$ R/ {/ ]
例子:9 n: [, ^% F# R. n! M- Z0 y
dasm 01.txt,0,100000% ?3 B0 W7 M4 t6 R1 |9 T
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
: t1 }' P8 K4 d; |. t! g0 b) r
softreset
6 g+ M% x2 G( [! t 游戏重启, 但不重新载入ROM
/ j9 y# F5 C, w Z4 c0 g( s$ E) d4 a" K% F5 }) r/ b4 K
hardreset
; u; B( }. M. z 游戏重启, 且重新载入ROM
" S% ^9 U. d& S" M; v' y0 g
. p2 D. ?5 V1 F snap xxx.png7 \4 @4 s8 \. v
截图为xxx.png
* j; F4 U( W$ I4 k# {* w
4 o" x- B w* c1 t! P- w/ g
: \! x4 Y$ H6 q0 ]( V" R
# Z/ w X: V3 c3 b
% f9 S; o& T, \8 u+ s热键:6 z4 X, i: |7 K! S, j( b6 f
~ 中断游戏
( r) d2 P# W0 P F5 运行游戏- @, b2 ]" ?6 e2 E c
F12 运行游戏且隐藏调试窗口' l- i8 n. q; u" C! U* I t5 N
F11 步入, 单步执行, 会进入子程序
; ?! ^: R9 q; _6 @. y' a F10 步过, 单步执行, 不会进入子程序
( Y6 S7 n1 U( }& a! a- B Shift+F11 执行到子程序返回
O5 B8 h3 j! ~. |3 u Ctrl+M 内存浏览窗口
, w, w& q* A0 D) R! N o F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
$ \) J1 g4 n$ O! [7 f( e
, C9 Q6 B# Z+ Y6 O5 P0 Z4 r* i{:4_94:} * \8 M, h9 q r8 d
* I) W7 F3 ]; u0 c) j$ q8 Z5 Y |
评分
-
1
查看全部评分
-
|