|
|
3 |& |0 I, i; M很快速的整理我自己常用的指令& a+ v. G! ?4 H- E7 h
; F: D; e0 n4 d1 ?4 h( ^; J; N{:4_112:}
4 z! O; L' {: U- F
! A. H4 ~: Y5 c! kMAME DEBUG常用指令
" ~4 H5 z9 B$ p# q) {
6 }4 E( b' A/ R, V) X S* z/ ?- ~内存搜寻: ci, cn, cl
, }- X L7 L5 `
5 U# z& i; T' U1 u% ?2 d ci: z& D8 C! _8 E7 v
搜寻任务初始化, 每次搜寻一开始一定要输入这指令% `% g6 | y; ]: m% |3 e: c' d- x
3 s0 Q* [. ~ Z cn; y; M4 d; v8 l7 }# l+ U. h
搜寻指令
. O u7 P& D; g 例子:
0 `" h y+ {2 p7 |& E& p cn eq,60' z. L% y2 P2 ^5 H8 T
搜寻目标等于60 (十六进制)
8 t/ w. j/ V# V8 m, }. }
" T8 Z/ G# M4 l* L cn eq,#96; y- s% l1 M5 o; h
搜寻目标等于96 (十进制)* C/ ~9 W' U. d, ~& O% U/ `
8 y2 X) V" \. s+ Q3 s
cn eq- R) |5 k- K" u n( R3 K q% ~
搜寻目标的数值没有变化
+ f% W4 U% Z# j4 `. G# E, i1 Y% R9 g9 `
cn ne
2 F7 ~8 B! U E& F2 g2 a' i' U 搜寻目标的数值有变化
' ]! a2 y7 [* s% `+ @ ( X/ G7 h8 r, E6 D5 T0 s% b
cn +6 V' y( @) D3 X# L4 T
搜寻目标的数值增加9 Y! i2 }' Z( \5 k( k6 V
1 X, J0 H- Z' b( X/ L+ d2 U
cn -
1 [. j. m& Z5 R: C3 t, d. R; Q 搜寻目标的数值减少
& _. q+ y" \4 t, K! _: x + u6 r9 }( j; H$ J
cn +,3
8 F2 `3 u% x; m' x# B& O6 j 搜寻目标的数值增加3 (十六进制)
3 E" u! j) \: z
8 M' S8 P+ Q0 i" b6 O+ y+ o' U cl
6 E0 l. g! b @5 ~ 列出所有搜寻结果
7 o$ F+ P* R1 A" Y7 P7 |9 y
+ I/ u1 U8 n9 a cl xxx.txt: X8 N6 R) k, @% y5 B
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
6 W0 Y/ y7 n/ ^9 w/ P
9 @! h" b# `/ o
2 N$ I; k! _0 A1 p6 e: ? t9 v* x内存监视点指令: wp, wplist, wpclear
9 ~' ]) m0 O, Z4 R# j 例子:
( X% O9 C) b7 W, w, L' q wp 1234,1,r# i$ S1 G5 @1 g0 f$ l
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1' V& z3 h4 G# Q( s
E p/ m) x& H# z
wp 1234,2,w( T4 ~! D3 g9 M. @8 c5 _
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度23 a# H! R/ P" N( K
1 S5 O2 O$ e! b! B
wp 1234,6,rw4 S4 F8 H% V: x; u; ]
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6) z0 _. @8 a1 X% N: z; C$ a# R
7 I7 u$ T- Y: g
wp 23456,a,w,wpdata == 1( W% E5 s: ]3 b: Q
在地址1234下写入监视点, 数据长度a, 且写入的数据等于12 }6 K& {+ e$ W, S$ T
, C8 E8 [: u7 F% ]( K( ~0 r
wplist
! C s+ t- t. E6 {3 c 列出所有监视点
( N9 V/ v, @" I: i
# W* V$ [5 i% s% O {; O wpclear 3
' {* c; g* F; e6 Q( p2 @5 o0 R 删除编号3的监视点; }, [( k v4 R! O3 D1 \1 {
* Y1 y$ |8 e+ V wpclear
z2 V( t. L) v) Y3 I* h 删除所有监视点
& M6 k t1 S0 d: F" K# p& e& ]+ [! ^: t
+ x0 C9 c7 U1 L- B$ [# S! S
x+ k* y/ S6 r' n程序断点指令: bp, bplist, bpclear
- R! U1 ?2 Z% D; A! A: y2 ^9 s8 _ 例子:
# Y5 ` g) \8 O1 v9 w bp 1234
4 E. z) y3 m' X( j+ n4 b 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断6 S3 s8 `6 Q" D
6 y# j1 G7 I- M bp 23456,a0 == 0 && a1 == 0) t% {' b6 S( h# T
在地址23456下断, 且中断条件为a0等于0以及a1等于0, h/ w% N" i/ V
5 \9 V' p- Z% ^7 ^' w2 ?: E
bplist
' X4 J7 b# P* c" o6 ] 列出所有断点
. j/ v1 e# H8 |: P+ S z" I* A) e7 p6 o4 m1 Z
bpclear 3) Q$ t$ L* X6 q z3 ]
删除编号3的断点; g+ y$ N- X# a
$ d7 d+ c L/ j* \) o
bpclear
4 G( K& t* j4 v4 V8 \ 删除所有断点$ d# p x2 R9 [% V7 w, b* d6 D
" @; _' V# }7 K& Q
% i+ w7 ~; P7 m 5 z; L6 W+ c/ I4 p' ~
跟蹤紀錄指令: trace; T! a9 `" I( c/ ^$ o
例子:- j7 G" G7 S: d4 U# U$ ^
trace 01.txt- M2 D Y1 X9 C5 \& \
跟踪当前CPU运行的所有代码, 输出至文件01.txt6 Y/ p" s( d! O7 q
9 R, p0 B Y: n2 H3 x trace off
5 C/ \1 A5 R2 C+ \, y 停止跟踪, 并且关闭文件
( H' g) t2 y4 i: F
- L$ \1 N- o. Q; B2 ]/ N" y T- Q trace 01.txt,05 s3 P6 @4 E% M( ]
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt; K: A+ k: x. u) Q$ v6 p* K: r4 \
) T2 ?8 K8 V' b1 k1 I
trace off,0& ~, P' g( g- ?6 ^7 Q5 [
停止跟踪编号为0的CPU, 并且关闭文件1 k& z! y3 t! J* g
4 }- D2 h% H( |5 u" V4 O1 o# v E1 L
trace 01.txt,0,{tracelog "A=%02X ",a}
' F6 v6 ~# H1 _/ u) b& F2 F* W0 X 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
' P) \1 O$ x. G# u7 a 并且在每一行的前面, 写上"A=a "! n+ W- F: p+ t1 n2 u
"A=%02X ",a为一个C语言printf函数常用的输出格式% R; k1 b n8 G# r% V
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入4 m6 F, z! B. k- @* E% @1 b! v1 T
X表示为大写十六进制数
# B7 D0 w1 i% F; J; K, Z4 H% A3 r7 f/ n! E0 `; g5 T
; C% m& c2 _& ]/ v4 q9 W
1 G" P8 n! x8 ~, a z! U
内存直接写入指令: maincpu8 I3 Q; w6 J. |. P& A& k
格式为 maincpu.[][]@地址=数据
5 _! e _2 ^# t8 S S$ f: p 第一个[]:
& d; T% f/ n: y o 表示ROM地址
s, E7 m# H/ ?6 M( m( A p 表示RAM地址9 Y9 W. a4 b a# Z
/ x3 E# Z- M9 }+ K- E
第二个[]:
& n. U( t, x% v# h; X2 Z d 表示4字节% h. N5 w. j$ u% M k8 @8 {
w 表示2字节
* m: W9 T S E b 表示1字节
" Q: R# }3 E( l5 ~3 d: p
6 M9 e7 |9 J6 X* V 例子:) a" q: I0 N$ T! z, j- A
maincpu.ob@1234=FF
* p; p' Z/ ]' L, d: j0 X9 m8 C5 } 在ROM地址1234处, 写入FF一个字节
, Y( s, x& z O; _8 B4 E B2 N5 E9 }" S2 J
maincpu.ow@1234=4E71# i. q% _; I% o. @) D, T# W9 A) c
在ROM地址1234处, 写入4E 71两个字节
: k4 `6 E' B/ v/ A9 M* K! u% N* v# q& p1 m, Q6 ]
maincpu.od@1234=600A4E71
2 Q/ w5 h1 E& f1 g$ A 在ROM地址1234处, 写入60 0A 4E 71四个字节
! Y/ j+ W; D s0 S9 _
% R! }/ |$ y+ ]9 c4 j% B) E 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写& o# N. V" t2 J$ m9 t) {# l: e
, w' }% F# t9 V4 G. k
) K g/ `6 F0 Y4 O" ^其他:5 t3 ^. ^0 r6 U
dasm 输出档案名,地址,长度
( M1 T( |3 Y# ]; G 输出程序的反汇编代码
4 J7 i, o( H5 Q' B6 @( |4 t 例子:; a- ^* ?- |% J
dasm 01.txt,0,100000# \2 B, F& G0 s( J1 B
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
5 [6 m; }/ e' z" x X$ N1 e" w" m& o/ Y, C5 Z, }
softreset
& C$ `* B% |8 c& N% m8 O4 v9 w1 f 游戏重启, 但不重新载入ROM( C4 W! ?6 W/ ~; d3 r2 V8 w
3 T F; _- a' ^* N hardreset$ }2 Q# o# V6 d0 y3 U' Q
游戏重启, 且重新载入ROM
& ]0 g' `- `, [% {2 |4 U$ d% R. H( N1 d
snap xxx.png
5 {/ z" Y8 \ ^$ G% K2 W 截图为xxx.png
. D9 w% }$ d% s; X) g% H
" M% }/ q* E" V1 i& W0 f; J 9 O) @' r3 ^- t% W
4 b% i9 B( M$ }$ E; d$ f
9 I! J9 L+ o* m6 K( r8 |# ~4 a& S
热键:
1 i5 o& ?7 N1 S+ U2 u ~ 中断游戏
$ ~' \0 g7 n7 j4 e% l F5 运行游戏
! a- S/ B1 I7 t1 ? F12 运行游戏且隐藏调试窗口
4 X b! s# c/ a; ^ F11 步入, 单步执行, 会进入子程序
$ M5 g/ m) p s$ g2 ? M& b F10 步过, 单步执行, 不会进入子程序/ e2 _4 p0 r8 c/ Z# e6 u6 A
Shift+F11 执行到子程序返回( p) w; I: k- v }
Ctrl+M 内存浏览窗口3 h" o7 K8 @# `% W- g
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
/ z" [9 t( p* [# p5 l4 p
8 g. d8 J2 ]6 z9 B b9 q* y{:4_94:} 3 x' E8 @: K4 p Q }- H! F
; R+ P! e6 L6 s b1 h, ^ |
评分
-
1
查看全部评分
-
|