|
2 a6 [+ U: | U7 B9 C' H, Y
很快速的整理我自己常用的指令6 D& J0 V0 P" _1 Q V; ]. N
1 W( q1 R# w/ j. D! m( p O+ F# l1 c
{:4_112:} 8 A2 |- Y/ V$ o6 S. c2 s& i k9 H
9 B: y; x& Z4 D0 B+ M4 U5 u( W
MAME DEBUG常用指令6 L( j9 E) S# Y/ u9 z% W# l
7 W: i8 d, _' I2 n/ G, Z- Q内存搜寻: ci, cn, cl
% k/ U4 p4 @# T+ Z6 G
0 f8 j( |, C& o ci0 w3 ]( @. P. L5 o7 O
搜寻任务初始化, 每次搜寻一开始一定要输入这指令; i3 \/ W* L$ J; e3 w* t
% n7 R; e: K6 u cn- W0 R# q* n+ l, f$ H; K
搜寻指令% c+ j3 S% v5 ]; ^5 I
例子:0 x9 d3 e i; d+ s* _
cn eq,60
8 q- P/ b! @: ?( p1 e" U 搜寻目标等于60 (十六进制); F/ m& ~$ X E/ t
9 I9 c0 J& a5 B* l cn eq,#963 p" H5 Q: c. l* Y$ P
搜寻目标等于96 (十进制)
4 z S: Q# k/ o2 p( c+ P& y. M3 J# V/ q, M1 @/ \* K( u% A! s9 N# y- @
cn eq
! M% S# L$ z- k6 q) y' E 搜寻目标的数值没有变化- k! v0 S+ q9 ?) U
# F+ X$ R! ?/ D& z7 Z8 B- x3 u
cn ne) L9 E, f/ O% O! y( |% W1 e; h# X
搜寻目标的数值有变化4 ?! m, j) Z3 l1 N: q% J% T
( m, p& x' n; \/ c% _2 L" t7 X
cn +
/ {+ {4 H$ m9 c/ Y 搜寻目标的数值增加9 z4 H2 v$ `0 X+ E ?7 _5 @3 H# @1 O
: P& O: C3 h! H+ L) R- U: e
cn -( m9 E5 G, W3 E
搜寻目标的数值减少
, l+ P9 p, A7 n0 E , e. Y# v6 {2 {8 s% G1 G& \
cn +,3
3 l$ W# f% \' X2 I5 f 搜寻目标的数值增加3 (十六进制)
- O. @: p7 X# }) r& \6 P. k S( v9 `. |$ k Y0 ]
cl
: v3 o. a4 @. }& o* w+ V 列出所有搜寻结果. r2 K1 p9 j: H$ W( d; `, M
" j* A# s: J# Z" n( b
cl xxx.txt
9 W l8 q7 L1 \% J 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
# p+ ]/ y4 V m( P6 L7 o* B: _+ D" W: R$ l
4 E2 Y* `6 \" C* P+ {( n内存监视点指令: wp, wplist, wpclear
( w9 ~2 O+ K/ g7 G 例子:" @2 R7 h3 J. O# N
wp 1234,1,r7 j0 s9 {& Q8 M0 y3 |$ [$ H) X
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
7 f8 m3 f: H- V( `8 Z3 W: y/ g1 ]# L4 D9 M2 g& _/ s, E% S
wp 1234,2,w' J9 k: q/ G N. t; b( Z
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
2 B( I% v Z) p( g6 p+ O1 i5 @/ |6 O
6 z! f- p2 P% t* R- \* b0 I wp 1234,6,rw0 s5 e ?/ U1 I* D0 i* G/ b/ L
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度61 p7 E# c) k: I! R( r
( b! e0 f6 u e' @
wp 23456,a,w,wpdata == 1
* w4 S D$ D% a. @7 P 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
& o' O9 n1 z& b( N6 P+ ^9 M4 X* d3 b* w! w2 H! H+ W
wplist
! o- H' ^5 r( N/ E& I- S 列出所有监视点5 B6 Y5 \" d( o j( V
$ B& P& H) U7 v! @* f
wpclear 3
4 D- O3 {" k' ^0 a* m3 i7 o) l$ |6 W 删除编号3的监视点+ V' ^ R7 _4 a
3 a( A+ @- R5 p2 c# C S0 D8 }
wpclear
: T3 F4 U9 R. i C 删除所有监视点" l* B+ Z# c- K5 Y. P
6 M4 ~7 X% K( f) P- G$ h
5 C: h8 e1 ~" [ I
2 a3 `/ ~9 h$ R程序断点指令: bp, bplist, bpclear3 I& T+ a8 Q/ P) W2 I7 n
例子:+ m/ p C/ e+ x
bp 1234; h( ^; a) x5 u [3 o
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
9 L* M: W$ i a/ k) i9 `# M/ I" |: z
bp 23456,a0 == 0 && a1 == 0
/ a9 c/ G/ ? {" R+ ~ 在地址23456下断, 且中断条件为a0等于0以及a1等于0
* T& N& ~# ~/ X5 ]3 H6 z! u) I
5 l' @1 e5 R8 u; o0 s6 b bplist0 p# ?' ~8 \" H% t
列出所有断点& O |4 P3 i o; t
9 _9 Q& \2 Z2 \/ a# |
bpclear 3
( L# M9 p5 L- X! A3 i7 [0 v 删除编号3的断点
" Z& C& W6 I8 p# l( F% W- p: G2 ?
" x H' E* x( K7 R) {2 `" m bpclear7 D+ h: U0 n8 ?. A- ~% m" [
删除所有断点
- r( f# c; [7 b y1 S7 g5 `0 _: t; z3 a0 p. I
3 j3 p) J! N* \+ ~# t
# t. G! M! T0 d, N" {$ z
跟蹤紀錄指令: trace; z" Z! m/ \4 i$ r7 ?
例子:
( f2 l8 B: z' p/ h trace 01.txt
5 _! C% z: a \7 R- w: K 跟踪当前CPU运行的所有代码, 输出至文件01.txt# v( F6 [$ H9 T5 q' u7 h
9 G7 v. C/ \" f3 E9 a6 z D& o9 v
trace off9 J( j# g9 V3 K. u6 M
停止跟踪, 并且关闭文件: N. P" J* t: X4 g k
# h2 Z5 u5 H E6 f% _& U" t; O
trace 01.txt,0
( w% s3 ]) p& i% T5 Y: m u8 t 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# m' J0 U, ?2 Y/ N% z& v; t2 o& p5 b5 e
trace off,0) _3 _) [4 f Y) \$ {
停止跟踪编号为0的CPU, 并且关闭文件
1 a$ B4 ?* v/ ~9 |) v4 l4 \9 |6 k( R+ X$ _8 d. o( m
trace 01.txt,0,{tracelog "A=%02X ",a}
& h7 Q, N& a5 v: o7 u7 J3 | 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
, `' F8 k1 t( B0 A [' h5 V) ^$ `8 Q 并且在每一行的前面, 写上"A=a "$ f" y* t. q1 N' @9 Y4 l9 y
"A=%02X ",a为一个C语言printf函数常用的输出格式
, s8 X% z6 q, l 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入- ~8 A# ?$ _1 [8 ~+ }: w) Q
X表示为大写十六进制数
5 x$ ~& W+ m, k: ]" Z
& g r3 G( O. @% u- z& p) b+ t9 I( `' M7 b( b9 w
& J% {! `- Z" |$ J T; Z内存直接写入指令: maincpu, C5 G# a6 b; ]0 d0 X$ ?
格式为 maincpu.[][]@地址=数据3 i( @$ ?/ d% o6 X
第一个[]:5 z! m+ f' T1 @* ^0 a' L) e
o 表示ROM地址- d7 |3 a- @( C+ G. ^: o* S
p 表示RAM地址
9 i9 V% B9 v- s# s j+ e8 Z2 d9 j+ y4 `. m/ c
第二个[]:2 n7 X1 l( {, B9 O2 C, y
d 表示4字节: J( ?( [ N& o1 G( x$ ?. |
w 表示2字节
+ a# P. U3 }- ^1 O# @) C b 表示1字节. d6 Q5 ]9 P) Q7 {
; |: K X; k! ~7 \5 |9 U7 y* V
例子:. f4 c5 s6 E& w2 L
maincpu.ob@1234=FF$ L4 h3 U" \6 l S2 X" ]
在ROM地址1234处, 写入FF一个字节
, i) u% z4 n) D5 ]$ R$ Y7 O
& w, x* B R9 U- F) `3 F! R8 y8 @ maincpu.ow@1234=4E71
: b, z) q( a& E( i 在ROM地址1234处, 写入4E 71两个字节
9 R3 Q3 m r& J
0 R: ]/ c6 D2 A& I" L maincpu.od@1234=600A4E71' ~* `% r+ t9 B- Y& n) u" |: r
在ROM地址1234处, 写入60 0A 4E 71四个字节
. R2 r* B7 s& [. J( w
0 g$ y' a# J/ i; h0 Y 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
3 ~, U# B" k" s1 {, p, {- ]# \% ] 1 k J5 C8 y: ?
6 L6 s" a I5 a/ }* |其他:
8 t4 e0 B2 v, }* v& P dasm 输出档案名,地址,长度
" ^% D! f! r4 P" f5 T* M 输出程序的反汇编代码
' E x1 l+ g2 t8 Q+ x( B$ ?/ l6 R; h 例子:1 s5 ]! E' k& Z6 t, l
dasm 01.txt,0,100000
- }& f& }7 H f# m* X1 e 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt$ P) o- z/ y$ | I' _* O
9 N" P0 @7 Y! a9 r6 y softreset
. r7 Y$ |8 X' w1 J 游戏重启, 但不重新载入ROM
- a, d; X' B* s) _
6 h" h9 |5 }/ D0 A8 t3 H5 R hardreset6 b+ r1 c5 T8 y
游戏重启, 且重新载入ROM
2 L, \3 `) i; b( `$ d9 n: h
. m; c) Q) g( m snap xxx.png
7 V, A+ J5 \7 s- t 截图为xxx.png
' X& f& V- N: ^4 r
7 u. e3 g# b' k$ k " ^' Y" f% j% \: T5 ^( P
+ L" V( S2 W) k( X) B
* C5 [$ b% U% c T4 L. @9 l热键:% f1 q: B3 d0 u. T1 E: M7 n4 g
~ 中断游戏0 n/ \! X, [4 S4 a* T
F5 运行游戏
; O/ Y: m: A9 ^6 c F12 运行游戏且隐藏调试窗口- k. T5 ?4 n+ s
F11 步入, 单步执行, 会进入子程序
7 f" N* B: o- \5 } F10 步过, 单步执行, 不会进入子程序- y0 h, z% \$ F& N$ M1 C S
Shift+F11 执行到子程序返回* K8 B/ j1 T0 L
Ctrl+M 内存浏览窗口9 y5 ]1 R f% c; p5 O
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU; u) S6 E0 i4 z4 c
]3 M" `6 T# g8 V% e& d
{:4_94:}
, M- h$ v; v( h3 G% O2 ^1 E* M# L/ |7 V
|
评分
-
1
查看全部评分
-
|