|
|
5 \+ A3 D1 W% H" \1 _: k很快速的整理我自己常用的指令* T" U, C. C% u9 \5 w% E# V
! \5 d4 i* v# C9 a; N: Y{:4_112:} g- G( ?8 Y U
5 w z5 z: _ H6 b
MAME DEBUG常用指令0 S# |7 f0 I: u
( T, S! M; b H- U; n内存搜寻: ci, cn, cl
8 h8 H$ T" c' [: M; @( J
& `# K% s; e+ E2 y5 d" a ci
# E6 L" c% Q7 ]2 k9 j: z 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
3 N% u' }+ h' @
- E t7 q% E2 H/ x. g cn. ^. |7 J8 O, u# u* C
搜寻指令
1 a; Z1 O* U9 g5 c, }( u 例子:) J$ }, k% m2 \; Q
cn eq,608 F9 V- K7 r; m1 ~) m
搜寻目标等于60 (十六进制)
" V' v* f1 Y" z! H( K ; @& A2 g, w4 Q3 x) y9 g6 E0 K
cn eq,#96" e1 r3 y, ?( X' K& ]
搜寻目标等于96 (十进制)5 T ?; v% I( v7 z7 T
1 H7 M2 Y' g C; i, d0 |
cn eq9 G7 m; C6 ]8 M. R5 o& v" X
搜寻目标的数值没有变化$ g% U* K: r1 n
: M" Z# N# C/ R; A O. w
cn ne
; e3 |/ I. ^, ?3 R4 Z, |6 o) g 搜寻目标的数值有变化6 o/ N6 x& k* E, G
- K, W# E# N0 x6 m! }; a
cn +
7 Y, L ]' ?( t% G 搜寻目标的数值增加- T+ y7 s) ~# j4 f2 G
" N' D3 u9 D3 U* g2 }' h. S
cn -
" f3 V9 [* z/ I- S- G 搜寻目标的数值减少
) t/ b5 x* e/ s$ f3 P. g
& L7 y6 `1 T) p8 y/ ?6 b# c) G cn +,3
2 [' P. Y% Y8 Y5 B. L# }, f, ~ 搜寻目标的数值增加3 (十六进制)
: B, S9 [, L; U3 e" Q( q' J* o7 s
cl2 V% r4 ]7 W3 g% @( Z# V* k
列出所有搜寻结果7 c' a" _& S+ V
3 A$ a5 u8 N% }) R, M2 C cl xxx.txt* O, p2 S. ~# _) ~) L+ T
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式. i" H! x3 |# C6 J
+ y# V- T& _% t. n8 Q/ d' Z! }, q
9 Q7 J4 x( \5 }! D内存监视点指令: wp, wplist, wpclear$ x7 m" X6 P/ S% I8 S
例子:* ^: ^$ p9 M3 A; m6 U! E5 P) _
wp 1234,1,r; M9 Q: n# N0 W1 B" `+ O$ k
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1) `! N7 u2 X+ D: e
/ H( ^: x9 P3 D( ^% X; p$ c
wp 1234,2,w
# y6 O" k# `! ^3 [) j& r* z 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
' [2 P) Q* d) Q8 T6 f9 E * P4 a8 }7 Y; Z2 H; s" c7 X; Z- ?
wp 1234,6,rw
6 k' P" S$ s! v' i' s 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6& y* C6 v1 R5 r; u
. {( o9 |' [ B) t2 Y" H$ H
wp 23456,a,w,wpdata == 1
; _9 Z: m3 q) d' C: h% o) t 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
* f2 |( \# d' j& s& F
S/ P l @- s6 r( Y+ B wplist
9 {# e1 q) p/ x R3 P) H1 J. t 列出所有监视点6 @/ C3 i" c) b1 m" y8 j: m
" k' p8 u# o/ V7 @+ S B; n wpclear 3/ j q, I9 F9 i' j% z5 I( w
删除编号3的监视点' E) Y3 h, k5 y
! [+ P" j- e# R- ]' O. E' S wpclear
* s& @" E5 ?4 C+ f6 d 删除所有监视点% F) f$ A9 v+ j$ N: _# @
! i& X. T% f! N( ]/ a8 v % u7 R, U( Y' ]1 A) n" U
1 @- o! ?# D4 u7 q
程序断点指令: bp, bplist, bpclear. B' R; K! ^5 M/ J' O) M7 l7 x* f2 t
例子:
$ c% V) A* ^5 m" P- W. t1 i bp 1234
- K" }5 G W, j" E: h( M 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断+ R) l3 g. l$ y9 k( r
: p# ~3 S; x# F) ]4 x
bp 23456,a0 == 0 && a1 == 0, v: R/ I7 Y" N2 X0 c/ \$ D
在地址23456下断, 且中断条件为a0等于0以及a1等于0! O7 b; e& \# B1 }- x
! t* D' k C. E1 U bplist1 h% B ]. S* V9 }2 p
列出所有断点
: v- |0 R6 r; L0 J3 a8 c3 C
7 |6 C" F0 h- b0 m } bpclear 3- P; h8 v+ d% n
删除编号3的断点+ H! w0 M0 x+ B" k9 L+ f
3 I# [4 r D1 g5 a' K4 G
bpclear' w+ S; X+ i, L0 ], O
删除所有断点
2 l' t: w$ f) ~. K* y% X1 }3 Y- [0 |$ R5 A
+ b5 g- D8 f! ]/ F" r0 r; B' `% e 5 ?! s- N) V/ X' ^9 P7 i/ S
跟蹤紀錄指令: trace0 ?. \( A# ^7 E, U8 C
例子:7 U% o3 x# R" V( U9 C
trace 01.txt/ F6 }- q$ C! J
跟踪当前CPU运行的所有代码, 输出至文件01.txt
P8 m2 W4 s* w9 B" }6 L' C t5 I
. s- U9 A. \0 B trace off( d: T4 ^3 l% ~
停止跟踪, 并且关闭文件
: b1 Q3 K: N. N- R4 k: j2 C
* _ `, P% G1 J3 M6 [6 L+ P trace 01.txt,0! }; V+ p2 c' u+ G& g: c
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
3 @+ k3 J6 u9 Z6 N& R
- [! c, ?: c: R. L& s" I! _ trace off,0
3 t, U" p3 o0 J2 e/ { 停止跟踪编号为0的CPU, 并且关闭文件
3 L5 I5 }" m; P+ F( ^
& [$ ]! b R& x% g5 Z& z$ R trace 01.txt,0,{tracelog "A=%02X ",a}5 y& D3 u* K: Z P h
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
5 _3 _2 L# F# M @! R 并且在每一行的前面, 写上"A=a "8 t6 W3 h% z, z: W
"A=%02X ",a为一个C语言printf函数常用的输出格式3 e1 `7 u& q1 M
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入 a. ^) ^- C$ [# @1 J6 _1 M
X表示为大写十六进制数
& b6 J P% a# d3 v& Q* Z3 \
. |' k T4 Z: V7 d* B) \7 u- p
/ _" j1 Y7 Q+ |1 i5 `6 \3 A7 y) Z2 e
内存直接写入指令: maincpu# n4 s: s( F+ s0 B/ |" }5 e
格式为 maincpu.[][]@地址=数据
5 m+ O- O+ E1 k- l. h4 d+ O( ] 第一个[]:
! K9 l/ o) C; a o 表示ROM地址
# z* \* [3 i6 g k8 A8 k# g" V p 表示RAM地址
2 [3 G) l2 T# ?: r# [4 G) K" [5 b* j4 J' Y1 K
第二个[]:* g3 k. Q4 B: e) P
d 表示4字节
3 S' l+ a% @+ T! k/ D w 表示2字节1 Y+ C- W3 z" }/ G+ g j7 w
b 表示1字节+ a0 X2 o# X$ L3 Q" E
$ Q4 {0 U1 |7 G3 q6 q$ G. K
例子:3 n# v5 ~+ Q4 U, B/ _
maincpu.ob@1234=FF
) S" U7 w0 k$ t: X& A3 z$ I6 k 在ROM地址1234处, 写入FF一个字节
8 u' z) }/ I& x! n- o# p! r4 n+ I% W! W2 n! Z! I5 K
maincpu.ow@1234=4E71
5 |6 ^6 s% o! {. Y/ @# X0 P/ A 在ROM地址1234处, 写入4E 71两个字节/ c- h! c4 _' }, P
$ B8 u9 \. F' t) |7 Z: ^ maincpu.od@1234=600A4E71
3 R. Y$ A6 P0 u9 p2 f 在ROM地址1234处, 写入60 0A 4E 71四个字节
) r8 \) {+ }2 A9 s" }: j Q7 L" q" O) v% [- o: Q% O. F
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
8 O; Q8 A/ a9 n Q/ e' @7 E* L 0 s1 K3 M9 E/ s( }
# b( v/ Z# j. ^$ m$ E
其他:: P" K* I* [, v
dasm 输出档案名,地址,长度 a8 J9 P+ Z5 r
输出程序的反汇编代码
3 F5 \# c* t/ z1 `& F) v 例子:
5 D, z. |, m5 c# ]7 i/ `- \+ E dasm 01.txt,0,100000
. T6 M! H& h( z: C) O1 M0 U 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
: C- o7 w* e b- l
) U9 D8 x2 e+ J( J7 V) b softreset+ j5 A, Q& ~8 \" R3 O
游戏重启, 但不重新载入ROM
% Z. y: \- H) Y
. R, ^( J+ t" t/ N hardreset4 ^+ H& {- R5 ?6 ]$ t+ @
游戏重启, 且重新载入ROM
( Q1 {" p- ]- i1 N3 X* |) C; p5 a' P8 b4 n4 C1 ^
snap xxx.png
- L/ p; w. d# D8 U1 X6 E 截图为xxx.png- a6 P8 o; `, W) {0 z. v1 Y5 Z
/ i$ ]5 C1 R" C1 l
+ f) ~! k/ Y0 Z 6 D! }6 Y$ O! s) x. d9 o
! l* d: [1 N0 W
热键:
: ]' O7 L( e; ]7 x( g& O ~ 中断游戏- N, P" R5 s) U: N+ I/ |9 y. h |
F5 运行游戏
9 n! @+ C$ P. B i F12 运行游戏且隐藏调试窗口
) B! n/ S* y$ }2 n, K F11 步入, 单步执行, 会进入子程序
7 {6 i8 O- Q( B* |) n$ h6 k F10 步过, 单步执行, 不会进入子程序4 p% C, a8 G$ I. f) l% G/ ]
Shift+F11 执行到子程序返回
8 Q' c) Y# ~5 j, L2 [7 ` Ctrl+M 内存浏览窗口. k! G- P5 g6 g( z
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU# h( `( l( b# P- I9 h( O$ a5 i
+ \0 _/ B% E1 b: J; n+ [
{:4_94:} 8 p/ q/ h% \" ]2 t' b2 N
# R4 [* p6 B' u: V' H |
评分
-
1
查看全部评分
-
|