|
|
* g% m" f6 F( L- E很快速的整理我自己常用的指令) C* f! b; }! V& Y6 D
' _0 D- u3 H6 h, f: T{:4_112:}
5 G$ I P& E3 `& ?6 \+ ?5 }% I8 M
MAME DEBUG常用指令
6 c) k. T2 F. \, N! L3 |! I
' j. f8 P/ P& K7 N0 h8 r内存搜寻: ci, cn, cl
! A$ h5 I% n7 G) `! I! S
0 K% l; ?) M) H ci' _2 |9 _* B" L) U
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
/ I" ^6 F! { y( ]
' b1 d2 Z {6 z) ` cn
# |- O, q. l; ]0 _: Y6 U" r" ? 搜寻指令
/ T! e2 o" o" n3 L 例子:) u& R' g2 P* |
cn eq,60
1 J s6 A0 x1 m 搜寻目标等于60 (十六进制)! S) o- f2 V Z
1 |8 s Y, s: O cn eq,#963 _' [4 y2 z! n8 L
搜寻目标等于96 (十进制)
' Z% B7 V5 W' `. d9 W! f" d3 w$ d9 e3 C( Y/ q2 v4 Z
cn eq# q) V' Z. k8 l! J7 K
搜寻目标的数值没有变化
5 m! q0 w: I& P7 ?/ V5 [' Q& N+ S r& \ J
cn ne8 _2 ?; c# Q. R* X
搜寻目标的数值有变化4 j/ z5 S0 R+ l) o' V
9 f5 _. |" \$ ]" E& R
cn +
! t0 g" I* _! P: ]: u 搜寻目标的数值增加0 T* x1 p1 n7 ~* H+ {: V5 O% P
; ~" [' d+ K* B/ }( Q/ H
cn -! W I5 Y B) L) ~% b% ~
搜寻目标的数值减少
* P6 ]" v- E3 [$ D: b y
2 U5 N t; q d. K& Z2 ] cn +,3# o9 q" b1 l4 M: e. s/ z
搜寻目标的数值增加3 (十六进制)
; ~! }1 g- m3 H4 ^0 s1 `4 E, Z: b4 s8 `9 N+ h1 T: B' f& j0 {6 ~
cl2 I% ?, P' A! a
列出所有搜寻结果) O2 Z- O5 ?. w# N
8 ~4 q0 U* ~/ x+ j' H! e8 d
cl xxx.txt
7 f- D2 @6 }& y/ w4 y# {' d 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式7 r7 k) d M7 Y2 n* |4 P+ B
3 ]6 X' ^" o o7 N4 d 1 R# p8 P5 e; r: _9 I, }" ~
内存监视点指令: wp, wplist, wpclear5 Y! M6 a! D, m, t$ ~
例子:
+ F* L& l/ Y; g% \: g wp 1234,1,r1 E+ e! z( M# }6 l
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
0 _" F' }+ l* }0 L* e# y9 r
- y2 T+ F% D! m% \1 ?% Q2 l4 S wp 1234,2,w# j( }6 ]& x0 L6 Y1 t! Z
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
) I7 g" P5 K% R8 Z
& {0 n( Z8 W+ o wp 1234,6,rw. O4 X8 x' Z& k/ ^
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6% w+ X5 v) E1 r8 \: j# [
5 d8 T' N, v# }! s0 v/ m Z wp 23456,a,w,wpdata == 1; V* n7 U2 c1 k, \
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
$ {1 c7 K7 R' _) E( e- z* k$ F$ r7 u
wplist
j! J; ? ]2 t8 Z% ~) Y1 q 列出所有监视点
4 x, G& }9 B/ g2 ^! y
/ r' k- G7 O6 ~ T8 ] wpclear 3
( a; C& V" O7 I6 n, [* R6 ~ 删除编号3的监视点
2 o1 n8 r4 ~1 ~5 X0 G, V, ]% r" t& r* v5 b
wpclear
5 i( c5 Y' k- w0 T3 { 删除所有监视点
3 Q; C. F- E& L& I" f
0 p U& Z0 b, ?5 b( W% `! s
3 D8 [& A$ j$ r% ^% S, M
( H+ u2 P! N! E1 C& S/ T程序断点指令: bp, bplist, bpclear
. u* c& S6 L$ ^ Y 例子: M) S+ g. T$ I- d# p
bp 12344 o) k3 R$ [) A9 i7 j
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
% w( c1 I. b* C! A7 I% L$ X T& T" s' N" K4 I0 Q% i& W* x S8 V
bp 23456,a0 == 0 && a1 == 0
5 ~1 I% |5 q6 e# e 在地址23456下断, 且中断条件为a0等于0以及a1等于0
' K- m" Z+ s. \+ R( V- _
) |( g, \; t0 E8 V" g bplist6 D$ S, n4 s# c1 R
列出所有断点
% R) T- Q( b' Y8 [& C" h7 |: f$ J8 Q5 C7 ^7 ~
bpclear 3! [9 X4 S$ {: D; D
删除编号3的断点
! R: j& L. B) S% o" V b3 d" X3 w* d$ _' O
bpclear5 I* _" _' j& g( [
删除所有断点) i( v) ~' { Z" z% i" Y& j
, m& D0 M; d/ q
: [8 @0 R, `& Y- f& X
1 [0 O7 q3 n1 K$ z. K4 u' j跟蹤紀錄指令: trace D. A$ I1 _ b
例子:4 K( g3 R; ?/ l8 ~6 q
trace 01.txt- J- q) `' ]* n, \2 S1 \6 h
跟踪当前CPU运行的所有代码, 输出至文件01.txt' m+ H- ~1 P% z! E) a4 l& h
0 g s- ]9 E+ g- }- P+ W% j# m trace off
9 |4 ~8 @( t4 f8 Q x5 B 停止跟踪, 并且关闭文件
+ {& I4 [5 p- r/ I7 ~: G( R7 F9 U" C; }# H
trace 01.txt,00 W6 [, p/ z9 K$ C! I
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
( V) b6 ]+ i* w: L( S3 C1 [7 B- _, W; _4 s
trace off,0' h1 C& J4 K* l* h1 L5 `' Q, B
停止跟踪编号为0的CPU, 并且关闭文件
7 x3 P: A4 F5 |* V0 z/ b' s% d; N4 c4 d. D+ P
trace 01.txt,0,{tracelog "A=%02X ",a}& Q' ^ [. ~+ e! x0 L# K/ s& j6 g1 U
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
) L$ g$ P, X# t2 Q 并且在每一行的前面, 写上"A=a "' Y" t6 f. E8 p1 o- n `
"A=%02X ",a为一个C语言printf函数常用的输出格式
6 Z* V+ l5 w/ Z6 c: T$ D7 [3 h 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入7 s, t& `$ y/ a1 C
X表示为大写十六进制数
1 S" ?7 f; N. ^' p' g1 E# J* B
, d3 w( T* [+ o3 h* H4 A% D
7 f" C! z: K' t: D4 i1 f" A5 u
) O* l% {( y% o内存直接写入指令: maincpu
4 S7 @3 D% G: e2 X' r) | 格式为 maincpu.[][]@地址=数据
' P* y% p. W) Q 第一个[]:
. v4 S& Z& @ |! g$ W8 _3 E6 }8 F( J& n o 表示ROM地址5 y& A% L8 B6 s& M1 [
p 表示RAM地址
# A# j! M/ I1 H8 ?
0 p; Q% e9 k* Z' L+ e H0 f2 r# q3 j5 N 第二个[]:
7 t. c* o* @# u& N+ p6 G) e C d 表示4字节
3 d0 L& S t1 g5 a( x0 r w 表示2字节
3 h" N' Z6 b9 @4 |7 }; F9 a. c; c$ g8 R, E b 表示1字节2 Y3 \# \; \. i. l6 I7 v
$ K$ I4 [) g& |% C6 m2 w1 O' l" f
例子:& e; j: s* `; M- E
maincpu.ob@1234=FF
" ^2 n) |$ P' g8 p7 y 在ROM地址1234处, 写入FF一个字节
}4 }/ c. ~9 R& ]
. E2 x& l1 U3 W b. q- s" i maincpu.ow@1234=4E71, U& r4 P- D0 l/ r
在ROM地址1234处, 写入4E 71两个字节- B* {3 B- l7 e0 ]
$ d* B3 E8 {9 d* D7 U maincpu.od@1234=600A4E71
7 l- o/ P, L& `: s 在ROM地址1234处, 写入60 0A 4E 71四个字节
7 }: t2 a/ u: t7 B- |: ?# k3 r/ V2 _& B$ d8 d3 b
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写" {0 G# \1 Y' p9 o& m4 V8 W
3 T" n5 O% B2 Y+ h* F" E" f
& ~8 F6 v" O' F7 E其他:1 s2 {2 o% r: v, r
dasm 输出档案名,地址,长度
, w3 U i5 P$ O7 U& B' G 输出程序的反汇编代码
$ O5 i- B, g) x( N$ e1 q 例子:
- E3 H0 _% v. k8 y0 h& Y dasm 01.txt,0,100000
/ {/ _" u& e! Z0 ]% W! ` 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
6 E# F) K* m1 C# m4 y9 M' R) H4 T. X* J
9 r$ a- H+ ?, H6 S; ?7 P# K. i softreset5 T( q& d) ?6 D0 A+ n& k# \7 m
游戏重启, 但不重新载入ROM
) P+ m/ O2 r U$ C
1 ^, _6 O+ \/ B b# @! z7 t hardreset6 O- f/ T, v& j/ W
游戏重启, 且重新载入ROM
4 K9 u. b2 j& r* D' Z
$ G L9 p7 Y# ?2 _7 y4 w snap xxx.png. r: L6 P* ^4 T* H
截图为xxx.png
2 J6 e: h- z6 c8 M3 U9 I3 e5 v
* I( a4 `. V$ ^. X( l% q ! [) U1 ?1 {, t) h
; U2 z* V, z+ L- w
8 `) s, l) B& g0 Q+ L! } i热键:
+ B4 E% @! A$ ]# Y$ W* k. f ~ 中断游戏" b& t& w' x9 W5 z; a5 k
F5 运行游戏
; r9 M( g4 g, p% b, E F12 运行游戏且隐藏调试窗口0 n1 \7 @6 O. p7 M& [: o$ u* |) Q
F11 步入, 单步执行, 会进入子程序
& H/ X- J2 Q$ H( l9 T F10 步过, 单步执行, 不会进入子程序
3 n0 t1 v* x, \. N0 W Shift+F11 执行到子程序返回
& T. a, F( B+ B" F% n7 F Ctrl+M 内存浏览窗口' O0 {0 b- ]& ], B `* Q
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
. O% V6 w- f. E* I6 T- o, k- S& [. e
{:4_94:}
$ c8 _; `# y+ U J- a/ S% E+ k, }
M1 c3 J& Z! G8 e |
评分
-
1
查看全部评分
-
|