|
|
/ x, ^! x* m e1 y' N& ]* q: Y: _很快速的整理我自己常用的指令$ K8 Q$ P( ^+ k! i& s$ r# p7 W8 a
& U( Z* `$ v ]3 D0 K/ m
{:4_112:}
8 R& E7 |5 ^5 C$ f% d% K- U
I+ ~2 j$ a) X$ @* i: Z+ ?$ \MAME DEBUG常用指令: x, i6 d: n& q2 ^* N" [
+ I, N$ z Q2 ^" [内存搜寻: ci, cn, cl) k! }0 b, W4 j5 w5 {8 W; u
4 B( x& E' G$ | ci
5 J1 E7 W& o7 J v- W$ Q9 B 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
/ K" Z) a+ M. N+ X, N& G1 k2 |( q; d
# N: ~& i& T5 p6 E% d }5 K cn& @$ E3 s0 l& @3 S Z5 t1 _$ W
搜寻指令& ]: X' s( D! C4 B$ _" | p
例子:- o" n* `6 V# z& |4 y, m
cn eq,60
! H& }: V: s# m 搜寻目标等于60 (十六进制)
( t/ K+ j( D# F* g+ B; a
8 P3 P) w9 Q7 H4 @. V cn eq,#96
& j$ d# k8 G. i$ g. Q 搜寻目标等于96 (十进制)' d+ N, n$ \9 ?5 D) m. g% D
G! m. C. k* v* T/ A
cn eq% I2 Z: ^5 W, V( N0 q8 N
搜寻目标的数值没有变化
4 x: g2 b) R6 E4 m" Z; P+ U( O3 @( u3 I \- S& @# I' Y- r! i
cn ne
* W0 o% n3 g/ H, Z 搜寻目标的数值有变化
0 ?/ \7 _+ m2 a9 V5 c
: d# |2 O0 O! X: I6 [ cn +4 ^3 C: n$ }" b1 l/ f
搜寻目标的数值增加
* P6 }. f) H8 J" _" y' f( T 6 q! [/ E, ? t$ o+ s
cn -
1 s4 e. Q- n. I# ]: Y 搜寻目标的数值减少. M) Q, f8 K5 u- R& q
$ v8 n0 {' { R$ h2 h; t+ Q cn +,3
) X( K9 x) \/ r/ l' q 搜寻目标的数值增加3 (十六进制)
, }% f: |2 ]: W$ _6 W5 v
& r J; m: ^$ M5 k4 n cl8 ~% w4 k9 T: C' x8 b! B
列出所有搜寻结果% b# a4 M( I+ A. m8 T8 s
* O& N1 R) ?$ `7 z1 E cl xxx.txt+ V# W- u# ~% [- r" t
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
F; ~# f# s1 o: r7 R3 b* M# |+ I9 i% v% `( y
, J: C% v4 |8 X1 k' F) s4 f) Q7 p& n! X内存监视点指令: wp, wplist, wpclear
& M/ x- d t) M I 例子:
& ?9 F; p" B- [8 D# z$ O wp 1234,1,r
5 a! s7 h' g; n0 w& W2 W 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1! `% h4 A5 N& S5 W' q3 ?$ p
# g) j# X! y" x1 h3 E6 H8 B' q) I0 | wp 1234,2,w m6 }' D" R1 d6 N# e% J% ^
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度22 ?8 o0 b: ?4 X, a/ Y$ J
% H- I1 l) N# u! b; P1 ^
wp 1234,6,rw
^$ y$ A1 w+ m/ ], f% z2 t7 G 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6+ R: s' t' d$ @# j" E+ T( ?5 F, K+ [
0 t' ?: {+ C- U wp 23456,a,w,wpdata == 1
! ]9 m4 V, ~3 Z5 o8 d 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
. N* k# [2 E! I M& S2 z9 p. _0 }% A( U0 [: a6 u* q$ \
wplist
- D. S/ U$ e8 L! J" T# B 列出所有监视点
8 y* Y. q9 B; n
+ x$ K! q; Z; T. v! G) r wpclear 3
5 A6 w3 O" w6 C9 t/ j- v4 T 删除编号3的监视点
1 u+ \5 U5 W3 H; h' ~( p9 W; {( ~' x$ I$ o
wpclear
0 o) g2 ?1 l3 F7 F" n/ }0 L5 ?0 U& U 删除所有监视点
* i2 R& u! G! M: e" P$ @" f$ n2 t. E+ p/ S; R: o& g4 f
4 C* Y2 O6 Q* X3 y& A& L5 q' R
- [9 F/ L N: L6 I程序断点指令: bp, bplist, bpclear
' O% l% `% l. O, J7 ~6 z 例子:
0 W1 ^9 o5 r: k, s" a8 B9 |6 ] bp 1234; v% p9 \& ^2 w4 g8 ?! z* o3 P
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断0 m$ i& ]# U# `( P1 p
/ Z8 j! W/ [3 d) {! |" U
bp 23456,a0 == 0 && a1 == 0& v8 [% q% o& X1 K2 l0 }' Z& D" \
在地址23456下断, 且中断条件为a0等于0以及a1等于0
5 K5 s8 B+ O* E" c
- t7 v3 M4 c. v" F bplist' m" y \) ]' j& ~( W; u
列出所有断点
' m6 |: k' M/ g r5 a$ }: p9 t, c% B( F% H* A
bpclear 3/ \9 i Q8 T# a" N6 z O
删除编号3的断点5 _5 P9 U2 o& n F
& v# T/ N5 x* f E8 S' p bpclear. P1 N: Z4 g% v5 [5 ^! @
删除所有断点, H, m) O2 _5 ]8 @/ j! y* P* y
l' w0 V2 |. x7 H# d: w
0 {. p- ~* G" e% d+ e6 H% ]4 T# i3 c : h# ~& r0 i$ Y) M5 W$ e" C
跟蹤紀錄指令: trace3 E3 [& b8 @* c- H: ], C
例子:; P" u) P! d+ Q8 n* J0 |: ?
trace 01.txt
% B$ F0 t8 F; I) U 跟踪当前CPU运行的所有代码, 输出至文件01.txt% g k0 N4 r& a# r: @8 z) }
: |; |+ O) V4 n: C+ H8 S trace off
# l4 K4 r) Z% ^! x1 V. n* i7 H 停止跟踪, 并且关闭文件
* I4 s: U/ ~4 C+ u- b3 f+ `4 C
trace 01.txt,0- l3 F% C( l- [ _3 X/ |, p
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt- F ~% A( C6 {" R3 C9 T& p
. f6 j* {; _( B5 W* s8 _ trace off,0
( X* X/ n/ f+ V* M6 E 停止跟踪编号为0的CPU, 并且关闭文件
8 c' l! m4 H% Q! Y) m5 y/ n. t- G( J6 d+ v6 U o. \" q
trace 01.txt,0,{tracelog "A=%02X ",a}
, T- F; {+ J# F6 ~9 J0 D( P X 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
/ e% g% G% F& _! T# s$ e( v 并且在每一行的前面, 写上"A=a "1 Q; h2 O3 e* {. P% W) d6 ^" k
"A=%02X ",a为一个C语言printf函数常用的输出格式2 y5 s$ M) a& j7 n, s
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
( |. b1 B; n% c9 C8 u0 {; M( _ X表示为大写十六进制数5 k1 n- w* N! ?. b* M8 b/ a( M
7 O( i: @2 J' {- r% c, H
% n& A+ r6 [9 \( R
0 h% f i5 r8 r! @" p内存直接写入指令: maincpu! n- y5 z1 y5 d- }: I) p1 ]% }8 m
格式为 maincpu.[][]@地址=数据2 o6 m6 Z, F' C; e4 P- p, a
第一个[]:8 T( ]7 I( F3 V1 w% c# D
o 表示ROM地址
# S6 f: V6 e$ j* R/ A6 N3 |/ d- r6 q p 表示RAM地址2 `' K4 D7 ~$ Y8 o0 p- `
: ~) B; z) ? H: O5 I5 A1 R" g0 a 第二个[]:
% P6 N! ~/ X, B9 h4 s; _5 d d 表示4字节
( ~6 p; S3 l0 K; c w 表示2字节
% I3 i( v: K: f# E- g1 \5 I b 表示1字节6 f' t' K; ?, P9 R h* R n8 B) Z
9 f9 F0 p$ j/ s! N! w6 V+ w
例子:
" Y0 a$ v( F5 Z) q/ W) ^ maincpu.ob@1234=FF
3 j( ]+ g5 R2 Y5 A7 c2 q 在ROM地址1234处, 写入FF一个字节
- |" W" I/ t8 d V- x1 L& g5 C% M0 d
maincpu.ow@1234=4E717 \" R6 b5 G$ c* O5 a
在ROM地址1234处, 写入4E 71两个字节
5 {* h( i7 t7 W, x; `2 y8 J# l0 A- x3 O% U8 D( Q5 p* f# @
maincpu.od@1234=600A4E712 V+ Y2 Q9 B. h9 j0 L$ A
在ROM地址1234处, 写入60 0A 4E 71四个字节
8 r/ ?' I. [# S* c' s! a$ q& L* D2 _& s7 D0 D; F0 _
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写8 t1 J9 [: V$ u, U' ^# N& n# [4 @
$ P H. x# r* i) g& q A6 K* ~
+ ?; u4 {! C1 h6 s
其他:- C u* `4 G; g; G% R8 b
dasm 输出档案名,地址,长度( w9 V5 X, q5 ?+ N
输出程序的反汇编代码- ]% g; n6 `. t0 T
例子:2 H6 }( g. l8 {# H9 t# M F
dasm 01.txt,0,100000; P5 S! l6 ]2 P7 g7 R0 f# i
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt8 T+ z J* \# H0 f7 c1 o+ Z
9 N! k/ E% M& o+ i0 B
softreset
8 d* y( p0 I% @) v8 m 游戏重启, 但不重新载入ROM- @6 d: G- F/ d5 c: E( W( b3 O/ T
4 q7 K7 K5 L# y: V$ ~0 Q) ? hardreset
2 H* S" F4 ?: V! N7 ? 游戏重启, 且重新载入ROM
/ @# L' U" d6 H1 A) f W2 \
) j {- |' O& h( U; z$ e) c& a- ] snap xxx.png' U* i; a* {3 g" L: s# y- e, V t+ `
截图为xxx.png3 F2 f& C$ W' F/ S1 m2 S7 H
4 j8 P; L& u$ l; q
$ b5 e4 v+ `$ V" w. R
# a" t* M! y5 p. g4 u 1 Z' x7 G( ]! u* n7 _
热键:) v$ q+ A7 Y# z! ~
~ 中断游戏
( @4 e7 l+ d3 _- v! W F5 运行游戏
- `" ]1 H* q6 z8 E5 f. ] F12 运行游戏且隐藏调试窗口: C; }6 \5 E/ a) a+ i
F11 步入, 单步执行, 会进入子程序- W$ f* _* Y5 t3 x7 B. c$ M( E* r
F10 步过, 单步执行, 不会进入子程序
: B. P5 F, B0 @/ |' D% Q# `+ E& ^ Shift+F11 执行到子程序返回. S- I5 c! F$ Z; w9 C
Ctrl+M 内存浏览窗口0 I" q* |# C4 U5 h! z
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU+ ]/ p- c; I( w2 q8 o$ p, S
+ C. Y: h7 G6 j0 E
{:4_94:} 0 |! a) \3 E( k- W4 _
8 @, s D# Z) K/ H
|
评分
-
1
查看全部评分
-
|