|
|
0 e* Z. S, Q' ^+ t4 {# _
很快速的整理我自己常用的指令
1 r" T! L" h0 P S1 f% G% d
3 ]9 \: ?7 p3 X3 O: k{:4_112:} , w3 r! }7 L3 H) G: H
# ] p7 s# `4 b0 m* L
MAME DEBUG常用指令( [2 d& o. C) J5 b
* t# F7 n. C' J+ c& |) }! o1 O8 Z8 N内存搜寻: ci, cn, cl Z( o$ T# a$ `% F; c
3 r5 C/ w; A, w ci3 ]* \' z5 ?0 G2 w8 d* A' z: C
搜寻任务初始化, 每次搜寻一开始一定要输入这指令; g5 e3 \. l9 a3 G2 @6 g" Q2 l
+ @( R( R/ h; n cn
' Y ^ `* d5 m& @! M 搜寻指令
* n" R2 E3 A- }2 \/ V 例子:
, ^) S% l9 z4 K# r0 R/ i; q cn eq,60
) Z2 v$ H- M/ ?7 h 搜寻目标等于60 (十六进制)% J, O5 v- A2 }
8 T. Q+ O, m) Q+ P% S" z cn eq,#96
( M& i# z; c% ? 搜寻目标等于96 (十进制)* F) g1 f. d3 U9 i; R0 O" f, `
; \; X! i) Y! c% J1 _
cn eq
" K. p# h- R) Q% ` 搜寻目标的数值没有变化
; f# W! y4 B8 c v( ~$ G1 f6 w6 h6 z; w$ A% n% B5 w) M# \
cn ne
& O3 l r4 k% J+ [/ \( {7 |( L 搜寻目标的数值有变化4 v9 B: G4 c. y" l2 T
9 G2 d9 s& f- ^- k$ ?* ~ cn +
/ ]/ A8 @2 s2 d( N 搜寻目标的数值增加
5 x& q2 @& I' D/ a$ o( A5 V % O' \3 v- F" r. B
cn -
2 E$ E* z" m, v 搜寻目标的数值减少! p. C7 `1 M5 r
/ J5 `# p4 ~- p5 K* t) O4 x9 O: Q
cn +,3
, r( j" |( x/ j2 [2 s" P: P 搜寻目标的数值增加3 (十六进制)
4 S& ~0 k% P) U; k; e& U, k4 Y9 v9 t1 x$ W$ q/ i# j; T( K, [, F
cl# [5 t7 X; R E2 G8 i
列出所有搜寻结果% R! L/ {' [! [& ]' y
7 u# m5 s5 F' _. U# n cl xxx.txt
7 C1 t2 K7 H% B! z/ c0 h! w 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
0 C- i- l8 F# A7 x
], B7 i' Y1 Y; I* z/ ? m" k3 n2 J. Q! I5 G. |
内存监视点指令: wp, wplist, wpclear5 D3 K7 [+ z: r' V
例子:4 L6 N4 z+ W" k$ @3 H5 K1 b
wp 1234,1,r/ F" J& E9 a+ R* d
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度13 G% j6 ]( o* E( v4 R& @7 e
# y9 k4 P* ?5 e! ]" w wp 1234,2,w4 j! D8 p ?# Y$ P9 u
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
+ ]8 y2 ]6 E$ q& }) m
* S' m. k/ ~0 N, Q2 F9 O" ] wp 1234,6,rw
& [1 K c/ r3 b 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
5 N, r2 F. r/ H; I$ z
% C' u, ?# A/ Z$ X+ R wp 23456,a,w,wpdata == 1
8 L" V3 w0 [# ^4 c 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
9 l$ L* C+ N8 B- M
( A& u2 b- ~1 b wplist3 c2 N' y/ p1 X" A6 w
列出所有监视点
) c+ O/ g' d; f, C6 X) N
9 Y9 Z1 V( p% s5 q2 U6 b& ?5 n wpclear 3: a. G8 _. ^, O
删除编号3的监视点1 }' x, R( `; T8 U5 U
* u- Y1 w9 B4 Q0 [: B; b+ O
wpclear1 c$ f7 S% o) _8 f6 G& }
删除所有监视点% Z* T1 m# C$ ? P, ~
' y. N6 }9 x+ a( @ ) v7 |$ N8 T8 G4 N
$ ~: e* J0 B; E$ d$ ~/ M) i& M9 y
程序断点指令: bp, bplist, bpclear! }7 h3 S& S9 r
例子:
; }7 g; z7 `8 Q& f; [2 J" u bp 1234 o& t& r. y; j1 u2 C! K- i1 K
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
- z1 b4 m- W. K& V; Y" K7 F* f3 k
bp 23456,a0 == 0 && a1 == 0+ q' i5 _; h+ o- r1 n2 @1 h# k
在地址23456下断, 且中断条件为a0等于0以及a1等于0
0 F( z6 E$ ]! v9 W; [. f* J6 L6 ]! @) ?+ e' f. l4 f7 E
bplist8 a1 Z2 O9 j# p2 M3 s
列出所有断点
( o' A4 _. W w3 T8 i ^7 j6 k' `
bpclear 33 B, G# `: J7 N& ~; F s6 }
删除编号3的断点
2 M) c9 q" s e1 O; `! p( z& |. B/ m @" \2 D7 r
bpclear
! g% n4 s" j. r7 {2 }- v 删除所有断点
4 K$ Y% r% @1 W$ _
5 m' H8 S( E. N% l' h & h* a5 w& e! Z1 D+ v, t4 E
" w9 g5 e) s: L) R跟蹤紀錄指令: trace
* s( B, p' T' i3 ` 例子:
/ p" C U% _' c5 J/ @! l trace 01.txt
: z" x- t( a9 m6 n9 n 跟踪当前CPU运行的所有代码, 输出至文件01.txt
) C( E* V6 y9 f) O X
2 T- @9 B- c/ Z3 E trace off) {2 t, }1 k, ~, ~( ]
停止跟踪, 并且关闭文件- Z; X4 Y( ]0 I) O1 ^
* s3 c$ D- B7 h% b* ^- R8 y
trace 01.txt,0- z0 r# L3 J F3 c
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
: Q* i" N; w5 v. i& i7 Z" g5 g8 E& W1 u) N! r! |. i
trace off,0- S4 Q9 e1 E, N8 m. {3 u
停止跟踪编号为0的CPU, 并且关闭文件1 f" |- I' z9 L
& x2 a! R& f' Z6 F4 E" M trace 01.txt,0,{tracelog "A=%02X ",a}
1 ?6 U% |" H6 R% X 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 3 o/ J8 c* y7 ^$ R1 f# d% f0 v
并且在每一行的前面, 写上"A=a "5 n5 _4 S5 C( i: [8 X& r
"A=%02X ",a为一个C语言printf函数常用的输出格式
! e. {% W7 L; a m7 o4 W 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入, i: x- i7 W9 y9 N
X表示为大写十六进制数
, q" k/ n5 S) b# B' k- E5 r- U7 G) Y: L4 M
' A, U3 [: W* w9 l+ X0 A9 D+ e4 z9 P/ [8 g# e
内存直接写入指令: maincpu( L$ o- A% x4 J! f- G; _# ~( |% z9 L; e
格式为 maincpu.[][]@地址=数据
' Z' p ^" k- ]- V: I9 n 第一个[]:% g9 K+ G- H$ t' c& D" T: c
o 表示ROM地址" ?& }" X4 t/ v4 p; _+ V
p 表示RAM地址9 E2 D# G) {) E; }9 j
4 F# n) S7 v( y2 u' A 第二个[]:
% Q! _% ?% ~' T' d* S9 J$ F8 l d 表示4字节1 S3 U' D m$ n. b6 l0 L' r
w 表示2字节. {* b5 d% i1 w8 G1 W
b 表示1字节
5 n8 L2 y. M3 | t' S# f9 V/ ~( c0 x' r3 \4 C, d
例子:( `% v) h S T7 ]* ~, U. p: K# |
maincpu.ob@1234=FF, p S; o! `, C) c& v
在ROM地址1234处, 写入FF一个字节$ d% D7 ?. W7 |; O" H
8 P _: u9 P( x8 U5 U. P6 O maincpu.ow@1234=4E71
% n& K. {: ~1 E$ x1 q3 F$ [6 V' O x 在ROM地址1234处, 写入4E 71两个字节& f5 P$ U) K3 S% X# R
' L$ E( c& g0 i: R9 E
maincpu.od@1234=600A4E71
/ E# A& c! H/ y) ~' R 在ROM地址1234处, 写入60 0A 4E 71四个字节; a# d6 G6 Z. a$ [+ b
. G* n" I, k4 v" ^& R2 X4 z( ]) A
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写. v, A4 Q- U! g
3 `( o3 ?( M1 {2 Y+ z6 l* Y: ?, T& q; V& Y. b& m, ^
其他:
" B U9 |3 i n. o4 P0 }" E dasm 输出档案名,地址,长度
2 R) N- }) c6 o3 H 输出程序的反汇编代码
, `3 U2 G! T3 t2 v0 D% q 例子:
+ R9 e4 v1 E# y* b9 M% l dasm 01.txt,0,100000
" w; q$ u2 }' h: O! H$ j 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
5 P( t) u' K- R$ ~2 G- Y
% r% @0 v$ u( x2 L' x1 H8 ` softreset
: @' v* I+ d- t, ^2 k8 J 游戏重启, 但不重新载入ROM
/ ^+ G. D+ n% E9 ^) ?/ {: ~# S
5 z; p3 ~( i: d# J G hardreset9 \# S/ A! ^. G6 f+ l
游戏重启, 且重新载入ROM; J; L( _- k( j; G. Q
& O( m- s$ A/ d& P
snap xxx.png9 `5 M8 g, h; l) Z# e; V
截图为xxx.png
m# ~& R- N b) C# B- e3 }- P
/ ^+ ^ I* l( J( d) C. q6 M
% Y4 W. h2 U3 |/ @ $ C) o& X+ L) ^- D2 m* _$ W
$ W5 I7 N; ~- N: A' k
热键:3 F' g$ U' K S0 G& X
~ 中断游戏
3 w. G# B% a; q( X F5 运行游戏, ^# y. Q6 ^, @' j4 W: `( B& X
F12 运行游戏且隐藏调试窗口, H, K- t3 N" b# O/ o7 D
F11 步入, 单步执行, 会进入子程序
3 A$ x& ^2 U/ z1 i/ S/ J F10 步过, 单步执行, 不会进入子程序! L" P. y, }+ y1 T: }
Shift+F11 执行到子程序返回
3 ^; B6 D1 { {7 a. ~& I- `- k$ h9 m Ctrl+M 内存浏览窗口5 N. B4 X l/ S/ h; g3 P1 P
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
: H; C, k& A% T( l3 X, R! x1 M! v( @; c$ }9 e. ~$ w
{:4_94:}
0 q6 Y3 F3 |+ U+ }! K* e! y1 ?' r. e A. E- V$ b
|
评分
-
1
查看全部评分
-
|