|
1 A! Y' T" P2 r3 d8 g很快速的整理我自己常用的指令: l( v! q! G* F# G
% g3 ^: K$ ~0 _$ m2 |4 K/ ]
{:4_112:} ( }5 n0 p' i9 X) B; l
' u! T0 \9 q+ B+ {
MAME DEBUG常用指令( h' \2 e3 g, B' ^; R
0 Z1 Q0 `: f( |2 o5 R/ P
内存搜寻: ci, cn, cl
# z z2 P4 Z$ m5 R% z( j: \, N4 U6 j1 Z6 E0 o8 |1 n
ci6 B4 B9 N6 U# ]
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
3 R6 s/ M4 J n# f8 q5 ^
7 J+ ~6 `% v+ G cn
! O; y$ m0 h/ @" t 搜寻指令, C) W) g. Z7 [& [9 _2 W
例子: A+ b. N# y/ q5 F+ B3 [
cn eq,60
+ @5 _% k/ S+ j/ J' ? 搜寻目标等于60 (十六进制)
1 O- ]& B4 M9 ~5 D
; \( r% ]) D4 \6 S. q L! q7 `- c cn eq,#96- k* P/ @3 D7 {! e F4 {7 Y" c
搜寻目标等于96 (十进制)" ^) x P ~* ~: u% n( k
9 Q- e2 D, P$ T) W2 D) n9 }) ]
cn eq. b) q. Z9 P% u6 s3 p' S# y- i
搜寻目标的数值没有变化7 w P* |% f+ I1 e; @9 t# a
5 f. U Z, c6 C8 H cn ne, d. u: b8 @. b
搜寻目标的数值有变化" p% H# }2 c/ j" N3 P
# }: J0 p' X' S8 G6 ^
cn +
' ^) d9 n* E$ k: S1 h* ~ 搜寻目标的数值增加
: R% A4 B' a0 S/ [! p
; K+ i) z; }% V, b1 g. Z cn -
2 ^" M( k: K7 b 搜寻目标的数值减少
8 N5 C2 N) Q/ }
1 o6 `" j' L% L. i, l4 ]& ?+ \ cn +,30 X# }$ e# _7 E
搜寻目标的数值增加3 (十六进制). Q( d# ~+ U5 W9 s
- F( F w- q# w \- Q$ S0 t: D+ V
cl7 `: a r4 o9 D4 @2 T: H$ ]6 F
列出所有搜寻结果
( n# s, }7 Z% }' L' }8 P; d( h4 N. X. @- Z
cl xxx.txt/ ] I% F" [5 c% q) `
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
1 h ?0 @3 s9 Z
7 V" Y' K2 @6 C% C
/ b3 I9 c# X. w2 z# `/ ?: X( B& M% Z内存监视点指令: wp, wplist, wpclear
8 u% c' @0 q4 d 例子:
9 k9 D3 T; c- }! Q2 e2 f: S wp 1234,1,r: g2 o1 }6 |' J# X3 B. i
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
! C3 ^+ C( F! q8 Z
9 _/ O7 A1 r: V wp 1234,2,w! H) h9 W$ y5 ^
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2 c6 o* z' n4 b( k
! M* O$ G3 K5 w) L# D wp 1234,6,rw. ^. Q- M# t8 n/ T
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度66 H+ h5 R) A: X' S1 H' ^
( \! ?5 {- p7 O% C2 U( t
wp 23456,a,w,wpdata == 1
/ z$ k. }: L* j 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
# o- g" N2 E9 N- Z- n1 o8 p( s% G W3 d; Y5 D) f
wplist
6 ]. z0 C9 V. r3 k% V0 k8 [ 列出所有监视点
; K' [0 x, D- P- ^( {
( a, n* c: W# C4 H5 ^$ V wpclear 34 b5 o: N# `) D, Z6 T& K( |
删除编号3的监视点
- E- l6 d/ A0 g @- p2 ]* T- k9 Z( g# h7 i3 h3 q
wpclear
, ^# B* g8 q3 B# I 删除所有监视点7 ` k1 O6 _! x+ \6 x* D; `# S
2 d: [$ J6 U2 r # e, m$ o/ g. y+ O1 L2 F7 P2 R% L
8 ~5 K0 Y8 k% v& v8 n
程序断点指令: bp, bplist, bpclear2 `0 a! N9 r( U' _) S o% H0 F
例子:$ [9 A; x' ^+ N; f7 p
bp 1234/ s. d6 e+ c7 R% Y2 g8 L! F( [
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断, e5 j2 E, ] K% M4 r2 `7 y, ~
$ n) ?& D5 v# N- C D4 K& U- F
bp 23456,a0 == 0 && a1 == 09 G/ {5 c# T0 O# o7 N: ?7 |
在地址23456下断, 且中断条件为a0等于0以及a1等于0: H5 f* W: \* O
1 C* V! V7 V+ [" [! g6 f8 [0 W bplist
+ i' }8 n$ c3 E& T 列出所有断点
4 Y& ?1 U% T8 y' ~7 c) n; i: X' m0 e( i4 S
bpclear 3
2 G& O* g8 w1 C 删除编号3的断点% S; A( R0 P9 ]) Y' q
* v- F1 a3 X* l0 d) V
bpclear; T; L ^3 p+ P
删除所有断点
3 I$ ], [- n8 O/ t. h
+ L j# D8 s" a7 U% I1 L1 z ) S- s; u' o8 Q+ f9 N& S j
* W- L! C e8 e0 T k跟蹤紀錄指令: trace$ g- v: M: d0 F: D+ W
例子:# g4 h" Q. b' _8 ?
trace 01.txt
2 `8 K l& r( k! g* O. j% Y B 跟踪当前CPU运行的所有代码, 输出至文件01.txt
+ ]' w: k1 C$ a+ \4 n4 L
* Q7 F3 f$ I# y trace off# \ M8 D7 S0 x8 n
停止跟踪, 并且关闭文件- M! ~( H( N; }* q( ]7 T" Y
2 c$ }- E4 o5 ]
trace 01.txt,0+ I7 x6 I5 M' j8 Q" x' I
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt6 [+ K R( Z- I6 z8 Z
. j# f6 I* x1 h* e4 O" ] trace off,0
: Y& j2 ~8 H+ n" x7 U1 m 停止跟踪编号为0的CPU, 并且关闭文件
6 Y2 [$ N. ^9 c' K* O8 j* o) q
$ ? i% P' ?! G trace 01.txt,0,{tracelog "A=%02X ",a}/ A j4 R& K f- C- L0 q: L
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt / y: [* Y. }; r/ h( C
并且在每一行的前面, 写上"A=a "
9 h" e" T' i- w) C9 A1 f "A=%02X ",a为一个C语言printf函数常用的输出格式
! v. _6 M* O n8 M 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入* Q) W/ c) x0 y& U" B$ L+ `/ e
X表示为大写十六进制数4 w8 ~) Y% @& E, T6 o* m! n
0 \* Z) q$ J8 }8 q3 Z4 D' q/ v; F5 c, s9 i
2 E. m+ g6 ~; W% r内存直接写入指令: maincpu
& L4 D/ I# R6 F' A" ] 格式为 maincpu.[][]@地址=数据* E- f, d) l m% \, k) K& V, U; Q
第一个[]:
- T8 V F: x" _ o 表示ROM地址
& x1 v3 k8 \6 [ ]) M3 a p 表示RAM地址
5 M! ~' L1 \$ k8 [% F8 {2 \! M0 Z! a4 d3 e5 \5 R3 A
第二个[]:# W* m/ ?/ H$ p% P7 D
d 表示4字节
! [0 [- K- s% L+ @ w 表示2字节
: z9 I8 n+ C( ] b 表示1字节
3 A: J0 Y9 C' |/ V2 V
3 }( d% O2 c0 [( j# i, v 例子:8 q, q4 n# }+ x; T. Y$ H" ?( _
maincpu.ob@1234=FF7 W& S7 n6 I- t, ^$ Q& i9 k, U% b; j
在ROM地址1234处, 写入FF一个字节7 e% ?" ?& V% y; l9 }
- t* d' @& h8 W' j maincpu.ow@1234=4E71
- h5 x# ~$ d9 \* \4 H 在ROM地址1234处, 写入4E 71两个字节1 |! I3 p$ T! N, L+ T
# f' i4 R; ~+ Z$ X, L1 K, @ maincpu.od@1234=600A4E716 S9 ?6 e" W' i" Q
在ROM地址1234处, 写入60 0A 4E 71四个字节
/ u6 P$ Q7 N3 S8 ^# m+ O9 g1 {2 `
3 G9 @* w7 ~9 K: }" X 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
" [% ~: R% z( Y w* C
+ Z" G; _! I* a* N) \9 l3 U9 _, Q1 ~. J+ s7 b5 H2 i2 s4 ~
其他:
) R5 G# q% i2 b1 u$ j5 s7 x. ^* V dasm 输出档案名,地址,长度
* j9 E0 A; C# y5 Q$ a) X8 J 输出程序的反汇编代码/ s% H& ^! k. z$ `; N4 F
例子:
6 h: x( y8 @, K# v" K dasm 01.txt,0,1000004 t: \& T" J+ k' l
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt) s( e, z# X. \' v, ~0 D; v. p5 b
7 o# U& g7 S3 M! c. v6 l
softreset P8 {+ P$ N- x; ~2 o# l. w
游戏重启, 但不重新载入ROM
5 ]9 ?- W8 @ F4 F; _. }
6 E: e% L0 f7 z2 \ hardreset
. c. ]% r' G. _$ \# s) n 游戏重启, 且重新载入ROM
1 G% u2 @! [4 _% Q
# P# T9 I3 {" ]3 b; B* t4 ` snap xxx.png1 h* h4 w: j o4 g- c. ?) _
截图为xxx.png
; w' `: J- J4 F* `% R# g1 E( K, @1 A! @5 Z# B+ r' R
# G1 z- c, R4 f9 _: M& J" x 1 @7 O7 v; d) i! S, Z
/ Y/ b3 R2 m! t6 ]7 }3 P/ c热键:
/ Q( t. |3 s* k3 y; ^% O& } ~ 中断游戏
@* P* P/ t1 { N J F5 运行游戏: Q- }# n% T3 E9 z
F12 运行游戏且隐藏调试窗口2 i, m R3 o4 `* s, b, z
F11 步入, 单步执行, 会进入子程序+ K4 J5 ]/ E) ^/ i, S: S7 j
F10 步过, 单步执行, 不会进入子程序
) G7 f; f0 T/ _ Shift+F11 执行到子程序返回9 W- v& l' c1 ?* T
Ctrl+M 内存浏览窗口8 W& j" M* m, }0 S2 I
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
. {. W) Z* ?9 o) e; G7 ~
2 N0 d! Q% @" t( S: Q. Z{:4_94:} + v: f% d P y
u8 G: T9 P1 Y$ g) H |
评分
-
1
查看全部评分
-
|