|
|
$ G# P- ^, d T% l* o% i0 o
很快速的整理我自己常用的指令
" T* p& m$ e" i0 @" x. u
# G+ {; r2 S5 [+ B$ @& B' r{:4_112:} $ ]' o. N& `/ E, U! L
! q, h9 `* ~8 ^ h4 Q1 d/ i2 i( m7 vMAME DEBUG常用指令5 ?5 Z. q' b% ~0 n* |
+ u1 x/ ?8 B- Z! O, g内存搜寻: ci, cn, cl
4 _+ l9 q5 S, k( V+ F g4 q, e3 ~! A2 n0 j
ci
. g3 ~! q% w# K4 G: g8 \8 _+ d& t* z0 [ 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
7 b' S1 ^* g& ^5 `$ @$ p/ l1 h8 p, v- B" j5 w' C
cn
! ^2 Q6 Y; w6 ]9 F 搜寻指令+ p8 J2 I7 N- C: y( Q
例子:$ ?6 c- P$ v1 d$ e* J7 l X
cn eq,60
' U& G+ a! \ A1 G: Y 搜寻目标等于60 (十六进制)/ p/ o* L6 v% D7 u9 ^7 S" {% A, c
6 g, ~* V9 A5 w; L- E0 I cn eq,#96, a* g( {0 t4 r! l D
搜寻目标等于96 (十进制)0 I; d, T s1 v% D! E3 A
+ L4 d% D8 R R1 C1 S cn eq
/ k6 Z; ]% m2 U" ] i" e. t 搜寻目标的数值没有变化
, v3 m3 Q9 R% b4 ?" j
9 D, E. H5 O) d: H t7 ^ cn ne
) l. _ w) V" u0 I- Q; ?, j# s 搜寻目标的数值有变化
+ X; b$ z- _& y. b, v5 K: z
+ ~% `+ B1 R6 K cn +# E: _! F/ T& R l8 T
搜寻目标的数值增加$ Z- v" ]: H" t
* _' T& G M/ m& b: o1 ^6 O: u& k cn -9 ~% l8 Y& C- G- W! i" I" M" K
搜寻目标的数值减少
: F: O: L. G* Z9 \# F5 { : \6 W" i+ z `- q
cn +,32 J, C6 l# W" ]: _6 B; P
搜寻目标的数值增加3 (十六进制)5 ~* v0 i* m: C7 Z6 L D
; W& V" |" D8 V4 o* ~ Z0 c, U3 Z8 T cl$ s* y' u* ^4 ^
列出所有搜寻结果
+ T: H' ~) Q8 G0 v4 A6 b. ^' Y6 H, R ?* R" W
cl xxx.txt
! h/ V( w3 m n: S7 o2 n. m 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
% U" v: k- y w# Z# Z* c8 N' v
+ C6 {* O3 T8 e; w: d7 [ + u8 J3 T% u0 F; z& c! Z! R3 q2 w% n
内存监视点指令: wp, wplist, wpclear
2 B8 P& D5 C/ U9 o0 M, K 例子:
# ]1 q% G5 \8 ?5 ]; C h wp 1234,1,r
8 F. I X+ c2 |- ~ 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1' J% I; T) N' h: ^/ X* S
8 O! u1 w* Q3 X: U! ]) K( G6 T
wp 1234,2,w
~4 h! h. d) W 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2. u1 @) n3 C1 ^) z6 r* _& [8 v- _
! R, D$ s# e3 i/ R/ L7 h
wp 1234,6,rw; M' e4 Z8 c! O4 F/ I
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
* n5 D( a7 r6 T, n0 T. K9 c( N% N5 @$ Q* O9 [# Z
wp 23456,a,w,wpdata == 1" _) j. z( u s9 X0 v
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1- _ i! W" K& {4 g$ |& {1 d( d1 @! p: p
) |5 F4 R& d- `$ ^: d3 G wplist# Q1 g4 x" ]9 C' w6 c2 R/ w
列出所有监视点
' F' j1 e9 q, Y) x! ~; {: D4 Q" Z8 J6 n8 Q6 h5 W; c
wpclear 3
5 T1 I! K3 d4 ^5 c- I( M0 Q 删除编号3的监视点! _! P" J- D% S( C* m4 g. \/ u$ ~, o& b
) ]9 ]# c- Y9 x2 M
wpclear
. P8 Z+ \8 A* R4 S# k0 ]& p 删除所有监视点! B" F2 Y/ Q4 R0 @3 c
?% N" K$ d9 q. {% Z 8 X1 E+ ? w; E6 I& k) w! U
, d9 E: o- n- A2 o" r程序断点指令: bp, bplist, bpclear
: H' O+ q0 d9 c; b K6 T 例子:
9 T0 r) ~2 \% `6 S+ {' K F bp 1234
) G7 q& M: |# \ 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断3 L! U% @* o* E$ K) \1 ~6 _
. \1 a& H h0 N; y bp 23456,a0 == 0 && a1 == 0
9 r' C# B9 i, v& E# F4 M 在地址23456下断, 且中断条件为a0等于0以及a1等于0$ x7 d! }& ~" s9 T
7 v/ c3 C: t+ F. Z bplist$ ]& U4 J8 N" X
列出所有断点
" W/ o( h$ u7 X* U! l" {) Y
: B1 N9 m/ [) Z$ N bpclear 3
5 O& g5 u3 Z5 M9 L8 o 删除编号3的断点
+ R6 ?; O- w1 Y. N- m0 j9 \
# Z+ [- ?# r9 `3 J bpclear$ Q0 k9 [& C' U' V
删除所有断点' v' X( _ a, _2 _4 q0 g5 T j
+ u/ m4 i; `1 i5 Y
! j P4 ^2 _) u2 ]. E
% @9 ]6 |/ _. @+ E# y! X% I' b$ s跟蹤紀錄指令: trace& A1 M) S6 m/ M/ M9 N% }* M
例子:
) i8 [3 `6 i" D" f. x( E trace 01.txt1 z$ I; H; R% I
跟踪当前CPU运行的所有代码, 输出至文件01.txt
5 G1 }8 G5 T- z8 t" V
, X }! V7 u! L8 j+ f( X1 y trace off j/ L) ] w& A, ^, L
停止跟踪, 并且关闭文件
- J5 A8 _* ]/ O( p4 m" A9 q7 [* O a# f `# @. U
trace 01.txt,0' g9 M! Z6 A2 @" l' J0 J% Z) Q
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt1 L# ^( ~& p8 ~7 _
! U0 Q" N$ o0 s2 H trace off,0" c' t$ R1 T- L3 @
停止跟踪编号为0的CPU, 并且关闭文件
) B0 ?3 f+ O# H3 ~2 W# Q& @6 o; |+ k9 R
trace 01.txt,0,{tracelog "A=%02X ",a}/ S! Z& o) n! J# C$ g) J( X
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
+ m6 j# h3 z# w8 }) } 并且在每一行的前面, 写上"A=a "
/ A7 ]8 s! A. l, S2 e* v7 Z "A=%02X ",a为一个C语言printf函数常用的输出格式' _' l) u7 A( O8 o) g$ Y
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
% [( F6 B$ X# p X表示为大写十六进制数8 }1 D! r' o a0 K8 B7 u. G# l& K9 v: n
5 z" P$ V( Y4 @. j* o
$ [9 C9 X! X, D# j. _
, x8 s2 f. `. S: B. a H h内存直接写入指令: maincpu7 W7 `2 f1 U& i* [ P& w
格式为 maincpu.[][]@地址=数据6 \1 s2 |4 ]6 ]( o/ h
第一个[]:, `" |0 ]; T: h$ v3 P. k N
o 表示ROM地址" Y' ^9 T- @) [& G/ G
p 表示RAM地址
* H7 r0 y0 L1 i5 a1 P9 B& u" e
4 x+ \' ^9 s8 \: f! R0 _) } 第二个[]:
5 d" N! Q, o2 U: H d 表示4字节 n! ^/ S6 p7 ?* {$ D
w 表示2字节( y3 K$ U5 C- z, b
b 表示1字节/ [& f+ ]* y+ h
; A; `" v' S i0 W2 O
例子:3 ]8 W; {! t; X6 s6 q
maincpu.ob@1234=FF
% M# O2 |, X, g 在ROM地址1234处, 写入FF一个字节! N8 b9 y' {# Y; L5 `
4 }/ S3 h6 B* ?5 Y
maincpu.ow@1234=4E71
) ~! j: j5 u8 q, S2 d! e 在ROM地址1234处, 写入4E 71两个字节
# ]/ l) p; [& u5 o( A, R5 v. E# z+ z, k7 N- o1 C+ t3 f! |
maincpu.od@1234=600A4E711 b1 O( V& l9 Q* q7 r$ U
在ROM地址1234处, 写入60 0A 4E 71四个字节
5 ^6 K3 N5 i) J. W" s
1 `, r* c" ?+ J# Z3 C 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
8 U7 T8 t8 E+ U . x& l+ X$ | s7 S: y# h9 a& E, ^0 K
O1 B' c( E/ F7 P+ [& S$ C4 Z其他:- H6 Q1 G; a w# {7 K
dasm 输出档案名,地址,长度# [) p; U5 u6 s" R! _
输出程序的反汇编代码. B. E) i% T0 d# I
例子:1 y' N1 J. w3 l w3 f+ r
dasm 01.txt,0,1000006 h `1 ?) h5 g }2 h
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
8 w& k9 s; N1 m! }% v ]" i8 k. i+ B. q% F
softreset8 d& [) j. G, l# z" q
游戏重启, 但不重新载入ROM |# u- T" ^ f
% q3 b7 n' z5 r+ R hardreset& B; A, b- L+ W5 q: `6 E
游戏重启, 且重新载入ROM* o9 f" P* G& T5 ?
' A4 @3 G5 J8 x3 H/ V
snap xxx.png; M; Y6 g' s7 W' s0 x
截图为xxx.png$ h" U5 c& c3 j2 S6 i7 |/ i& E8 m! n) q
$ _: C3 U, _- L# l 7 m2 o! `3 i2 u5 H" N
2 z- d+ C: I( C, O5 w
{5 j+ _- a. c热键:
7 o) @2 n' N7 y7 K- T0 ^ ~ 中断游戏
4 s6 c2 C* A) N; n3 O+ K F5 运行游戏. _* B7 i6 Z/ l) w @
F12 运行游戏且隐藏调试窗口 |: C Y' h1 [# g6 A) m, {
F11 步入, 单步执行, 会进入子程序/ g4 e* }/ P( ^. d6 P( T! e* S
F10 步过, 单步执行, 不会进入子程序 v- B6 I3 N8 d2 z
Shift+F11 执行到子程序返回9 h; ?0 n. E9 L$ [' M8 }
Ctrl+M 内存浏览窗口9 O0 b' |# z9 B! m0 N1 V. |8 T
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
' `' `8 Q. N/ }
- H- Q2 _) y& j8 u, M+ I{:4_94:}
0 x& {; V+ s6 f& c; H/ Z/ z$ r" \6 q7 O. T6 u' P
|
评分
-
1
查看全部评分
-
|