|
|
2 {$ ~6 V9 y: U, ]1 Q S2 l
很快速的整理我自己常用的指令% T( a, k+ U) W! n7 k
5 L, |8 @2 R' T7 G7 U) ^( t{:4_112:}
* L+ b; R9 I2 [6 T. \: q) S0 ~3 {5 ^. t( E' t
MAME DEBUG常用指令& W: |2 N& L! _2 |
' m' i$ k r! Q) \
内存搜寻: ci, cn, cl% E) [' O0 b. q& w5 e# S" M# {
. h) |1 ^8 e$ k. i ci
$ f, ]6 m# e$ w 搜寻任务初始化, 每次搜寻一开始一定要输入这指令' Z- Z4 E+ M+ a6 [# V3 c$ O
: {) O% ^8 r' ^8 `% j
cn& H3 I; i8 U/ C) q2 ]
搜寻指令
9 k( W5 F+ y& R! @0 ?0 c# ]1 ] 例子:1 ^8 Q, K/ U. i/ n
cn eq,60( a+ ^1 G) [& K% s# Z0 v" L
搜寻目标等于60 (十六进制)
' F/ S# f% ]! N3 S ~" l/ Y5 m+ ]* m
cn eq,#96# O K, I/ F6 S9 {/ P8 _
搜寻目标等于96 (十进制)
5 |3 q9 {0 @& h3 w6 }/ \& v& @" |, F+ p/ P5 X3 P; O7 s
cn eq& G/ h$ t7 u0 h
搜寻目标的数值没有变化9 B% r/ Z( {" I
; L" U+ z: Q, C' R
cn ne
+ M1 k# h% L/ p. e$ C% x 搜寻目标的数值有变化
( |. k0 X' D% |* `9 g! l% o ; M! G$ G+ }5 H2 U1 F3 Z
cn +
) v# U$ K2 F+ X b# ^3 J 搜寻目标的数值增加
# L5 n" U7 u% l- d) q" z) T ' S, c* F8 ^5 E/ m
cn -
9 f" _3 A2 w9 h( a. s7 ^- s8 _ 搜寻目标的数值减少4 ~. e' N n8 ^0 q
7 L$ v6 v- @# H& d cn +,3+ [7 j1 K$ v( W% k) M2 B
搜寻目标的数值增加3 (十六进制)6 q. q/ j, Y6 r
7 n; O8 U/ J+ J4 ^* W. n. r7 w
cl9 x6 {& e& q3 J% {% c0 x
列出所有搜寻结果+ A* S( O Q: ^ P# S0 D
( M1 O- d- O1 L' V1 b7 ?. K# J6 h
cl xxx.txt B. g0 h! ?* f; B' M1 X' m; z" X
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式5 z0 M" c+ ^ {6 E" n- @+ v/ Q
& M# U6 k% {6 c- H# n
5 S1 q8 i3 G% [9 o5 L- S$ S内存监视点指令: wp, wplist, wpclear9 ~- b1 b2 M; M6 d+ [+ @+ X
例子:
7 K1 Q/ Q- z( K6 ^! i: c1 h1 a wp 1234,1,r
7 z+ A) B$ @; z! X2 Q! o. G( R 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
/ h& x* L1 t+ X v, t5 F) h
) w6 ?/ w) ^( H( p8 _. K: v1 W' u( \. f wp 1234,2,w
$ f2 D9 C* H, n# T0 y- h$ c 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度29 ^; i, s+ ^0 ^, @
# |2 U# F3 N' L& ^# P: C1 F wp 1234,6,rw
8 x0 \& [* R5 E8 j4 Z( z* Y3 q 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6$ V1 Q0 w- j+ C1 R. }
; P/ ]3 P9 t3 `" X wp 23456,a,w,wpdata == 1
! K. c9 K" E* F: H( e8 \% N4 b 在地址1234下写入监视点, 数据长度a, 且写入的数据等于11 X& k' H8 V3 k+ s) x! b
, {/ I8 a. z% V, w; l* ^ wplist/ Q+ i# P. p# W& g' S N$ f$ b W: D' k
列出所有监视点3 O3 N) u% v j) P
0 H. R9 `# ?* M0 ? wpclear 3/ v& X+ n' s: |" ?$ }) `: k
删除编号3的监视点) T' w3 E4 G% P! G2 Y( a
; ]; z1 K/ m4 ?, \ wpclear
+ i; k, }% Q2 M& i$ b/ B 删除所有监视点
$ h" F' H7 z. o+ Q4 |) O7 r/ m: Z+ S0 c9 `) M( t4 }
& o( Q1 }! c+ c5 t$ T
1 F. G X+ c4 d# g$ N* e4 p程序断点指令: bp, bplist, bpclear T+ G0 {* Z$ b9 c
例子:* K( w& |+ Z: k5 G6 y& G' _3 S
bp 1234
, P- S6 a7 i8 h b/ _: q' r; l 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断9 j! _# E- r9 P
; [3 a+ H# }+ G
bp 23456,a0 == 0 && a1 == 0
$ A9 h8 M9 V9 r. g) t1 c 在地址23456下断, 且中断条件为a0等于0以及a1等于0
! ~) d H4 w) p4 H" g r8 e; a0 |" W) X/ q
bplist
- D, M! c2 c/ Q+ ^4 Z m 列出所有断点
7 f; R( c1 |$ r* {% @; ~3 q, T# @+ z
bpclear 3
2 E" d, S6 D$ ~% M7 ?: B/ g4 Y 删除编号3的断点. W. I. n% M8 l5 {9 o
+ I- f3 q7 A3 {) ~4 Q9 W
bpclear I6 A) Q1 n! Q
删除所有断点
1 j: f, [& M. k4 y- _1 \) |6 m+ j3 e' E- c
$ a3 P0 v' o9 r6 H: E, b% I3 t . O4 V: Z* }% H' g- k- w/ z
跟蹤紀錄指令: trace
4 r& }+ {3 r8 X$ a# ~4 [% B3 Z 例子:
: m k2 V9 ]' L) n trace 01.txt0 _3 D8 J" ~0 I) D% ^1 L
跟踪当前CPU运行的所有代码, 输出至文件01.txt
3 E" h7 ~7 W. {! H
3 k% u6 Z9 [2 H8 r$ R$ b8 N P trace off
& E4 F: y. ~5 e7 b8 i* _) m# e+ d 停止跟踪, 并且关闭文件
# m7 {9 N. w% ^; a% D9 K! A
. [ t4 O6 ~9 K. s; N trace 01.txt,0
- t; k3 O& T0 w# F+ {1 Q' @ 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt! g7 A/ ?+ e- Q2 X
- a' d3 _( \8 N4 n/ u D trace off,0
2 p6 F# @- p* X" N5 W# R5 r$ g 停止跟踪编号为0的CPU, 并且关闭文件# S6 _$ g9 x* g. {
* u/ p, g; b u3 T( v) P/ E3 T6 h( U trace 01.txt,0,{tracelog "A=%02X ",a}
- W+ m' q. h9 x0 N7 T0 |; a 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
1 o' S9 ?' _, j) ^2 c9 m 并且在每一行的前面, 写上"A=a "( z4 o6 c+ Z# o6 {" r( e7 x
"A=%02X ",a为一个C语言printf函数常用的输出格式% b! B$ Y8 w, j; g) @$ F3 X1 K
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
5 N6 @; C `, O0 K: L% D+ a X表示为大写十六进制数! P5 w8 ^; Z. i; Z5 {; ~
! N B" o" r4 p
) j; f' ^* P5 t4 r, R/ |8 @7 H& j% W; ^
内存直接写入指令: maincpu
6 E- D4 b6 Y. {& V5 U. c 格式为 maincpu.[][]@地址=数据
: C. k) _) k: F 第一个[]:, m$ o" v$ e* B9 h
o 表示ROM地址 [ Q1 q6 a. _! @6 D& Y$ u
p 表示RAM地址: u2 Z. \6 T8 B a$ I, E* o$ y
$ A% S2 g0 I7 b. [3 w h# N 第二个[]:0 E' o3 G" y; e8 B" z
d 表示4字节
! J! ]; F8 E) s5 A/ j w 表示2字节7 t5 N8 X+ W2 z1 R0 @$ N; j Q
b 表示1字节
1 A3 x. n9 p5 W5 G. C4 X1 @; x
例子:
* w7 C" ?, m/ ~. g maincpu.ob@1234=FF# ~' X L, C- N5 r- [
在ROM地址1234处, 写入FF一个字节* |2 q. b# C. Q* {3 p, {4 K
/ r) i# }5 [ L$ B maincpu.ow@1234=4E71
3 y' A9 X" a& E! V ^2 ] 在ROM地址1234处, 写入4E 71两个字节
1 r2 ^1 ?% S8 M6 \" D: E
% v7 p4 ?) j0 X+ Z maincpu.od@1234=600A4E71
6 g. ?* ?9 V, T7 b. @% W6 c 在ROM地址1234处, 写入60 0A 4E 71四个字节
/ ?7 d9 A+ [1 |! I% b( J. B! t/ s+ v7 t; J" s# G
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
$ G% Y$ y2 [/ z' O - L6 p3 I8 d9 Q, n, E
- U7 `6 k1 _4 b其他:
% C/ E' U9 Z5 x% L; ` dasm 输出档案名,地址,长度$ a( H! w6 j) S) n) {9 z" @
输出程序的反汇编代码
+ D+ V5 r7 J. C9 @5 L 例子:3 E8 N8 P+ ~+ |+ j* Z* s D1 G% `
dasm 01.txt,0,100000
: c9 }, p# {, u( o' L4 | 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt/ H* f3 U; d; Z% i7 M& Z; Z
: v8 e) P/ H- m( p softreset- z" h; K! R0 q' A
游戏重启, 但不重新载入ROM# z, D3 f+ d6 w- z( w
# M1 g4 U7 S- G6 m( ~+ R3 p- ` hardreset
; S& T2 M: w3 T: O/ `2 r8 ] 游戏重启, 且重新载入ROM
: L) ` M! c, x0 x1 Y# O4 Q" f# q9 R1 h, Y
snap xxx.png
% Q& W3 O }: M7 J6 n( k 截图为xxx.png/ S* h' x6 t9 E k6 J
8 x- h! B' L5 P( U6 _- U) X
2 |; x, p2 Q9 \- _; H/ @) b - [& ^/ U& x, L" I% {
- K, q: }! j6 [* G热键:
% G' `) x- q/ l9 U t0 Z ~ 中断游戏9 U. y& c% [8 V$ K4 {( P8 G
F5 运行游戏
8 W C" ^* i% D# B F12 运行游戏且隐藏调试窗口
! h/ h* O) b! g7 }( B F11 步入, 单步执行, 会进入子程序# s. j. a# B, k
F10 步过, 单步执行, 不会进入子程序
& ^) C6 ^- ^# S% U Shift+F11 执行到子程序返回
" C: J9 {* _) g: d7 I% W Ctrl+M 内存浏览窗口) m4 G/ K- c6 x% A
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
, K8 w" i; Z3 u/ G& w E" V4 ~( \( X1 c" ]4 c, T
{:4_94:} 5 e8 A; \) L7 S
! k- e* i# E2 @3 c3 }6 g
|
评分
-
1
查看全部评分
-
|