|
|
9 Q3 }4 ]/ A) N9 }- z很快速的整理我自己常用的指令
7 _# V; x2 X0 `" E# O; H6 l! P- [& r9 ^# `, h" ~1 i
{:4_112:}
. M& \1 q$ S; s9 ]
1 y4 u' O9 J9 D6 R, B. _; o* {6 lMAME DEBUG常用指令! n$ y# ?' w0 r! q& Z
5 W8 V4 b! m' o内存搜寻: ci, cn, cl# `# ^: ?# ]! D8 i
7 L" M% {0 q9 P ci
4 H; J# `5 L- I2 T2 i 搜寻任务初始化, 每次搜寻一开始一定要输入这指令! P/ i2 m; D T, f; J! {4 ^2 o
+ x' O7 s6 X) z' T$ l
cn, A3 y* F" M7 Q3 `9 R. R
搜寻指令
6 k0 F0 e$ F: S# Z. p" ~" L* a. N 例子:
/ @) h! _7 f. `) K+ X+ k cn eq,60
, e; ?6 t) Q/ w" u( C6 W/ [ 搜寻目标等于60 (十六进制)8 I, x" g/ L5 }5 L w3 g
3 f( x) m7 e3 V V- K: q- H
cn eq,#96 h' _0 l0 F# a. r
搜寻目标等于96 (十进制)- G& F3 j6 g ?# D
# n- q8 I# Z* {9 G
cn eq
6 J K% J% M% }! i5 m% x% X8 H, L 搜寻目标的数值没有变化; k: J. d% m; @- a
* h* E3 \, m5 }! G1 K
cn ne% j- h; y- b& U) }& ?$ P1 s
搜寻目标的数值有变化8 C4 j0 l: g8 ?6 O, D4 v
, c" N; [. z! Y. u+ r. Q/ ^3 l
cn +6 I9 ~! w) w- E: H' a/ ]$ p& y/ m
搜寻目标的数值增加, D7 y; d" i3 S4 W
; }$ n! V7 Q, ] y- n9 Q+ E+ E
cn -3 _9 Z3 O" u' c* N8 L; X
搜寻目标的数值减少
1 k" ~ ~$ ]' b/ j3 V5 v: V: l / J* `1 b0 K$ | `" m6 w& u- e% \) s
cn +,3/ E- W; j7 f4 Q' O
搜寻目标的数值增加3 (十六进制)5 E8 A3 A$ P" @' U$ y- r
& F! W: z% l' u u; ]
cl# ^3 s* M9 ?% Q% d* R$ i# Y
列出所有搜寻结果3 o5 j3 N, _. A/ l% \( r1 i
5 f+ S3 d* ^" `( a
cl xxx.txt
- m9 i9 e" a0 y1 x6 X; K 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式5 R- |/ I5 a- E
% G8 Q2 Q7 F$ w ' b+ K" o0 K0 o H4 |/ _/ \
内存监视点指令: wp, wplist, wpclear8 I1 |. W- E$ A; I d. b0 S
例子:
) \! I& J, {( v! \ wp 1234,1,r( e# R' f8 u4 I' q- }# z, y2 {4 Y o
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
; c3 V9 ], F$ s7 j7 n6 m$ {# q& @2 [0 [1 n7 L0 `
wp 1234,2,w* b( k2 H3 h1 K3 N2 Z5 o
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
2 E2 ?; C3 V8 j O0 @( q9 u 6 W& Z" Y! |. F; H, T) D$ ?
wp 1234,6,rw0 Z6 Q1 ~& r2 J/ g$ `; v# `
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度67 e5 `, j; P M+ R
: ]/ B% |) s6 J3 L8 A. @ wp 23456,a,w,wpdata == 1+ n7 \ A$ ]: C Z9 b& Q, I
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1: g0 [ V2 L4 u4 z/ {( g4 |
. U, a2 L" X! { _. ^7 ~/ z
wplist8 w+ r0 t5 ?/ Y8 M. J
列出所有监视点8 w3 r5 T) l. ~
. g2 l6 q, j B2 | wpclear 3 }. [1 ~; I, e3 _ H
删除编号3的监视点8 ^6 g5 I1 {) z% r) z! N
; L8 c; U( [* p) M. l wpclear, N! m% a: @) B% e( S, F; S0 {
删除所有监视点
; O P: k0 \! p2 g8 G
[ ~6 g* _& d! o0 A8 C+ q 5 R' H) z3 \% L2 ~) c! H
2 R0 p; R: L' e+ m1 p& s- r程序断点指令: bp, bplist, bpclear
& m0 g: K: ~+ Q* G v7 n; R- o 例子:+ ], k/ ]6 l1 J: y& O
bp 1234
: ?- g/ }* _5 ~- o5 a5 ?/ j* N1 Z 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
1 {& I8 r7 h; Z" l f- i5 l9 h( Z$ x' {" ]/ d9 J
bp 23456,a0 == 0 && a1 == 0: b% `! A% _% p- S# s
在地址23456下断, 且中断条件为a0等于0以及a1等于0
) v6 M7 w3 a4 [8 U" g4 D% k) C+ k; }, ]+ ^! E* l% p3 Q
bplist
, B. M' G+ [" f2 [ 列出所有断点
0 A; J+ n, C8 |: V9 _6 k0 J$ c% K8 [* i
bpclear 3
0 Y$ b, T4 I" h! B 删除编号3的断点
# c A/ i* r/ u% `+ I( R& M' ^, z0 d/ Q1 r* j: \
bpclear
5 l- m F4 a$ g4 \) | 删除所有断点; Z+ ~. Q- \# w2 j! C" `
" d! Y4 X* D! U" o/ a2 Z1 ] : y* |* e9 l8 |! [/ W
0 P+ ~( o; w3 @3 F3 W9 ]跟蹤紀錄指令: trace
2 I" j4 E) J% G1 V 例子:( i/ r1 f1 C' ^( M. d) v
trace 01.txt
6 S2 B# Q- H) d# s0 G% _ 跟踪当前CPU运行的所有代码, 输出至文件01.txt
" u* o2 S/ U! y5 P9 s) n G# a- K: a( g$ R6 _$ o# O/ j
trace off' ?# M0 W# H5 [6 f0 h
停止跟踪, 并且关闭文件$ g9 w! n/ [& b2 T, I5 u; i
1 j4 j$ ?. q7 q: @
trace 01.txt,04 o0 j, ]* k- @) x0 q$ Z: k& o
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
3 V8 e& X7 d3 G( D3 k8 @. J9 M
3 O- }6 E, S# b- ~; O trace off,0$ Q! Y L/ W$ y1 s) _
停止跟踪编号为0的CPU, 并且关闭文件. |5 ?" a- l3 G/ D
/ |6 A* k I/ ^( E
trace 01.txt,0,{tracelog "A=%02X ",a}
5 \" B- F6 B* M; w2 \2 { 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
$ P R9 A' G' d- @ 并且在每一行的前面, 写上"A=a "
) }6 r4 b7 Q% T# ^8 A "A=%02X ",a为一个C语言printf函数常用的输出格式
' }* } X4 q$ F( X# b7 q 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入5 ]2 r8 k! {0 o( u
X表示为大写十六进制数2 ]- }* ^+ B# N
|: E* y2 h# F0 v4 V, x
$ u: x H2 J; b" ~
$ ^7 `7 ]8 O# J3 J. Y内存直接写入指令: maincpu5 c: Y5 |6 Q, y# ?0 `
格式为 maincpu.[][]@地址=数据3 n6 q* `, L0 Z( p* t: g8 L
第一个[]:+ F9 {! `$ E6 Y- a( l4 w' g) T! G
o 表示ROM地址
, _+ N$ L4 l# v; R p 表示RAM地址& j9 X! O+ z& [
+ W; _- @3 K; N) m8 S5 f+ X/ E. q# S 第二个[]:" e" P9 O5 P* r5 f9 E
d 表示4字节
# F. T$ r% D6 \2 O w 表示2字节
( o# _4 M' ?3 r5 h! _% e" |+ i b 表示1字节
9 E0 o% s! L$ ^+ K7 f$ B
: b3 f. e$ b4 c: Z4 P3 s 例子:$ r3 }! G {- x' O4 g# K) H+ E% V
maincpu.ob@1234=FF! A" E' b* i5 q9 B" V
在ROM地址1234处, 写入FF一个字节
. O( f! V+ x5 p0 C
4 _* l% Z8 Z& a; Q maincpu.ow@1234=4E714 j X+ W1 ~. k/ I* v
在ROM地址1234处, 写入4E 71两个字节1 t" A7 ~" y: S4 T
' s- y& i' {1 B$ R3 r) k4 ^
maincpu.od@1234=600A4E71* ]) t5 Z2 G6 t
在ROM地址1234处, 写入60 0A 4E 71四个字节
$ A* f8 f3 \: H4 U& N. p5 G, e' x
) z0 ~* m& p7 Q 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
Y) \5 k+ D0 |6 G( b 7 X" z5 U' |' ]2 \
& W; d7 h' `. Z7 g9 P其他:
3 D7 T. h5 r2 C dasm 输出档案名,地址,长度9 u; f0 @& X2 p. } B7 ^
输出程序的反汇编代码
& L+ C9 f0 r0 J! {( ]/ u/ K$ I 例子:
+ L7 r) f- d! V: ]4 [ dasm 01.txt,0,100000
- H3 \( Y8 G# N; j; w5 W; r 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt5 G# A3 r7 N5 ?' z c
, i! _ s1 I1 w) \5 F5 S4 J
softreset
; e# U; o o: G$ j 游戏重启, 但不重新载入ROM
, s; G# p3 T B4 D- F/ u4 {9 D/ X+ q7 r% U
hardreset
n" q. ?8 H: E R 游戏重启, 且重新载入ROM* ?9 z+ E U2 W' j0 f3 S% n
+ \) ]) Y% k' S* m1 E% K2 i
snap xxx.png$ F4 B$ {3 X" w) _" B. Q, p
截图为xxx.png$ Z2 L" i8 k8 }1 B
$ \& P1 q3 g) m9 x% Q& f
7 }" O0 e# H- B# q. R
1 M0 z0 t1 t/ H, B" o
4 [9 Z$ D% l( M8 H热键:& z ^) Y3 J' G9 m
~ 中断游戏4 m$ U ^& C9 h- g
F5 运行游戏) G9 ]3 j, t9 `, Q% F6 D
F12 运行游戏且隐藏调试窗口$ S6 O8 f% t% e% V: f7 O
F11 步入, 单步执行, 会进入子程序
, X9 c$ a, ?8 w1 U/ ] F10 步过, 单步执行, 不会进入子程序- b8 j- B- E- q5 r- z/ l2 {& M
Shift+F11 执行到子程序返回
; ^( _& F! E8 y Ctrl+M 内存浏览窗口
( e7 l* J2 t4 k$ e$ _ F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
" W9 v7 P; Y. Q/ Y+ c( H. V9 z5 E$ D
{:4_94:} b6 }) \. |. }2 V8 j8 B
5 }+ x- O8 D, J9 h |
评分
-
1
查看全部评分
-
|