|
|
9 \' ~0 T) k% z( K% U) P7 J很快速的整理我自己常用的指令
" x% ?0 \2 @/ H c" N; C6 N- d( O, h# `+ v: E7 `& d6 ]* Z: ^
{:4_112:} $ m% p5 D, u# _* D; B) @
& a/ K2 D3 h" k
MAME DEBUG常用指令
8 d+ G# q6 a3 e
+ \4 }( E- b, h. Q: J内存搜寻: ci, cn, cl3 `+ b0 J% [" Z* t4 E+ Z3 [: K* g
+ f4 r3 D( h2 n* e( }
ci0 u2 }1 _* t/ R& l% J- y
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
$ u4 m7 b5 B: e; @" _( M$ G* `1 Y
4 y; g9 S0 i: t9 j$ a cn, t# v3 \3 y( S8 O8 p2 m% B8 v
搜寻指令7 g) j5 S' ]0 D. N
例子:
2 Z. j2 Z- Z: { cn eq,60
6 O, K' e3 U# s# k7 r' ~ 搜寻目标等于60 (十六进制)
3 Y& y+ C9 C6 j: l % o( }; { I# q1 g2 E
cn eq,#96
" N3 d/ C" x% z# ? 搜寻目标等于96 (十进制)
) ?3 s ]+ V8 k+ V/ ?0 Y# ?( P
cn eq
& n. h$ @) g- l" c5 v; `8 l 搜寻目标的数值没有变化0 N$ i* w V8 q0 v) S. \
+ x6 y4 U( R }& o9 B, _ cn ne" F; h, _% P. d R' @; c
搜寻目标的数值有变化: U" z# k* G' K9 ?# b
# n: q. I7 Q0 E/ a8 R! ^ cn +9 l/ `0 d6 m, G2 W# A6 h- j7 ~
搜寻目标的数值增加
$ U5 n" {' }5 A0 C; o 3 g* d9 Z Z' Z |3 _
cn -
" V! }' X* j7 x& N+ O8 _8 L" j 搜寻目标的数值减少
3 n y* p7 B$ V / y* z; z# |$ C9 ?% G/ J
cn +,3# B) N& t' {' V A
搜寻目标的数值增加3 (十六进制)
) I* v/ c9 j# \/ A* T
3 u4 r/ r X& ^& Y) } cl
2 X6 R, C; c6 q% P4 F 列出所有搜寻结果
! h, w' _' s' A; S$ \
! r& p4 e% w2 t8 D" t) m/ X cl xxx.txt+ R- A5 h; u; `5 @" _
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式9 }# x3 r0 Q! m( H& {
( ]. o2 d1 _& e# m. x
X. j1 S3 _0 w
内存监视点指令: wp, wplist, wpclear
0 b% E l# G2 j) K* U 例子:# Z+ W0 u! D! x) c! o; k0 A# e; W
wp 1234,1,r
/ W; @4 g! A! y6 f+ Z" L 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
1 X( h! I& O5 O. T2 Q2 I& z+ }) N% M9 X8 s$ f7 `6 O
wp 1234,2,w. ^% l% q( l) V* O6 F
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
0 b$ s0 t( O2 l' r! z6 q: f ; \) ]: c) W i! s9 I2 h
wp 1234,6,rw' U3 f6 t7 @) M7 S6 N3 w, o' s2 \
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度62 R+ Y4 e- k! [5 @
$ E) V( [6 g. `6 X/ j+ Y wp 23456,a,w,wpdata == 15 e" N9 R7 q7 H; C3 S
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1' l" g9 l4 P+ G. X
7 i1 V3 t5 o! T8 W: o. m/ W
wplist5 F0 d* f) q5 U5 S
列出所有监视点9 v3 G9 {' D% z5 G7 X3 q
# i& z; S: [6 a$ x9 P9 H y wpclear 3& W2 E& O' v- v' P# r
删除编号3的监视点
/ T7 w3 c D7 _6 f: f3 K2 E, `: W
wpclear
1 ~' u) T3 J, m8 M 删除所有监视点
) K4 H2 y1 {& \7 ]- G$ V/ ?$ u) q* O. ?8 T3 \8 Q, w
2 c P0 |" _, q& u4 w* k* c J
2 s4 g: w6 @4 }$ o8 ?; f程序断点指令: bp, bplist, bpclear
( `) d' t2 l* K/ u3 Z. w8 ] 例子:
, ]" _0 w9 j9 I7 h0 r* a bp 1234" j3 n) U5 @: a& H* f8 J
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断& [4 ^) p! V) J1 ]% R5 z
4 O" t& A) a5 C- N5 _# U6 ^ bp 23456,a0 == 0 && a1 == 0
2 ^& Q6 k5 |& \4 |4 J 在地址23456下断, 且中断条件为a0等于0以及a1等于0- E5 r# Z2 ~2 n$ ]$ q
( T6 H5 W. u- J2 H; S) v: p
bplist
1 ]6 I4 h" g) u6 ^ y& b4 d. m 列出所有断点- W: [, @$ M$ j4 @- S
, z1 e8 l: S. v( n
bpclear 31 i; r7 B1 Z, N, _
删除编号3的断点 }4 t! N* F O
. `% x6 u/ l- z7 O bpclear
$ Z: ?% [) v; O# m% ~ 删除所有断点$ R2 D! r" N7 Q6 Z1 R0 _' i6 h
W# t" T* o4 L1 V
/ u( a& `5 o. ]: ~, l) a# `! v
3 q2 q" _* Z' W跟蹤紀錄指令: trace$ |8 O/ g t" d6 i( {
例子:
- P5 J9 A7 J9 L( q9 |" y. |7 f trace 01.txt7 t6 a. d6 H" K3 h2 D' m
跟踪当前CPU运行的所有代码, 输出至文件01.txt5 B# f1 H( j8 h- f( V, ^- a. f
; a2 w- I0 _" R. d* `
trace off
$ B( F8 a- T8 @2 F# G) ~; N 停止跟踪, 并且关闭文件
" u; I& {! Z) D x- F3 h0 q/ A
1 ~4 l# l" a1 N trace 01.txt,01 o/ ]; N9 l( K$ x
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
& F, a m+ d% ]$ W8 h$ D, m5 E8 }' S0 v' u
trace off,0
2 m- R0 O8 w0 k, _ 停止跟踪编号为0的CPU, 并且关闭文件
: e" n/ d, g4 a
( v1 U% i5 ]$ c. E8 b trace 01.txt,0,{tracelog "A=%02X ",a}- v0 F' E6 O4 T$ u3 G
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt + t3 X1 V) u$ y5 Z& l* h
并且在每一行的前面, 写上"A=a "
, j' K1 j. _% I! J( H6 b "A=%02X ",a为一个C语言printf函数常用的输出格式
& o2 T9 P. B) n q( L 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入* H! Z7 R: p+ W- ^
X表示为大写十六进制数
: H2 [" n( E; L7 R+ f( j+ N& J! R& Y( e/ k
, V V/ S) b. R+ U$ {; ^
9 O6 z G4 N, \) }4 Q内存直接写入指令: maincpu
- g* W2 J' v! q9 N 格式为 maincpu.[][]@地址=数据2 K* [* P+ o2 w- y
第一个[]:
* p6 C% L" i* f+ O o 表示ROM地址1 v A, W, |6 o! w8 A% L6 G( Z
p 表示RAM地址. M4 x; x; b6 D7 v3 I# [
: Q! B/ h% Y" c; Q2 B 第二个[]:
Y; w9 l! _& L# Q* o6 V d 表示4字节
; Z7 \5 R1 k" ]6 f7 H2 m w 表示2字节6 l# q* j5 q4 j# Z: S) D
b 表示1字节
: z# F" G# B' O, t1 m" S9 ]+ E+ j- E( a% s: _
例子:8 L1 v6 b# h( Z" B- t: \) }9 q
maincpu.ob@1234=FF3 ~9 M" f1 ^! G- G. J" C
在ROM地址1234处, 写入FF一个字节
5 s- K# a2 F6 t( V1 T+ q) M# l J5 {
maincpu.ow@1234=4E71
; _1 K+ K( \1 ?7 o# x/ [ 在ROM地址1234处, 写入4E 71两个字节
' X& Y4 X4 _ d; y
. m/ _$ H& p) K/ G6 C maincpu.od@1234=600A4E71/ a9 C. }5 `; H
在ROM地址1234处, 写入60 0A 4E 71四个字节! C# s$ j8 _% q
3 s. h) I0 N H- ]. I; P. u
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写2 Q( g# h. ^( j! {3 t' O% q
$ K' F; ]$ x6 a6 ~/ b' q9 K
+ D' ] B, |2 K7 w. d
其他:
2 [8 V" T* G! U; f- i! p dasm 输出档案名,地址,长度
* c- t- J! {! K% R( l 输出程序的反汇编代码
3 j0 n6 P0 [2 |# \# `! x$ S9 g 例子:9 I) r! I: y& w1 [; o) b
dasm 01.txt,0,100000% ~5 ^' b* A( @8 M- l
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt7 c/ C6 o# Q) G+ Z( t
$ ^, l3 I% Y: i/ N- `1 d softreset, f8 G" Z0 h1 V, Y+ _2 k
游戏重启, 但不重新载入ROM* Z: l& U9 Y( X+ y
. F: U$ h6 }- Q. B4 e, _0 {; ? hardreset/ n3 h l, G8 n+ q8 S& A# f
游戏重启, 且重新载入ROM8 [5 [# R9 z- l. `: M
, [. M( u+ s7 v$ b* g$ v snap xxx.png
) a/ S6 k, R, t* N7 y( R 截图为xxx.png
' L) d6 A5 F, E
4 Q+ e4 F/ D$ ~- S5 K2 c# { j
: e- W6 O' ~( t: e/ J* V ' @8 F7 N8 q& D% {4 @& X/ I- {& N
) P" C) G- `& \4 R, b* K3 [热键:
6 s4 H' x4 }4 b* J# U" C ~ 中断游戏1 n/ A: u6 Z8 H C6 e
F5 运行游戏; l) J! t- g- [1 N' Y/ _8 p2 D! M
F12 运行游戏且隐藏调试窗口6 f7 l/ |4 H ]; G4 d1 Y( W- L
F11 步入, 单步执行, 会进入子程序/ r% o+ w9 O- D6 @7 D
F10 步过, 单步执行, 不会进入子程序
7 x9 e8 j* I8 ` Shift+F11 执行到子程序返回
f7 L p) v7 L' S) e Ctrl+M 内存浏览窗口
$ \6 n' q0 y( h) L& W F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU2 i+ g% S& I& N1 [$ r
6 D: q4 F/ c- _1 W x( h3 `
{:4_94:} 4 Z% ~) W+ N! Y2 M2 N
" |4 h3 f0 [* Z3 e! d# ^ |
评分
-
1
查看全部评分
-
|