|
|
. @: i' s/ s" X很快速的整理我自己常用的指令
/ f! w2 n0 d" Q* H/ `% `
e& n. a+ E% N5 S2 }3 K$ m2 a# U. g{:4_112:} ! v! [% V6 h; L! x# G+ p
0 |8 S& J- Q$ n1 T) T5 tMAME DEBUG常用指令
6 G9 u; Z/ @! n1 r, S" G
$ R6 Z o# B) g( ]$ D内存搜寻: ci, cn, cl0 M Q2 n" |; D9 ~ v* ?
- c% Y# d1 r/ x
ci
: F N. X ?: X( V 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
4 L% s+ o* C5 H6 }6 z) w3 i1 B5 J2 J {8 ]6 H7 c7 }( J3 H
cn. e8 N: o' K1 l# x: p6 I) p
搜寻指令
) [. G5 ^ r B1 @# d 例子:
% e+ ~2 P- @8 f, L cn eq,60
' B$ t; o- N+ ]! p: b" _ 搜寻目标等于60 (十六进制): F! _3 i9 r# p6 B- `4 Z# e& `$ Q' n' f
! n& f6 C, b( p' ]) }/ _/ B, ]* B
cn eq,#966 d1 k' E/ X% C2 \ R
搜寻目标等于96 (十进制)8 T6 v& Z3 l. [+ n2 A! P6 @
6 |# Z* V5 i1 H, ]0 W cn eq4 C ~! K! J" Z9 d% j* W5 f
搜寻目标的数值没有变化
' y" r! T @# @; b" |
0 E0 g0 P& Z# r( v cn ne0 E' X& u2 [" ~/ `2 d
搜寻目标的数值有变化
7 L7 e: A$ W6 ]; f1 k+ M' s
5 t% Q6 @5 D/ P# ] J4 w cn +8 q& }( K/ S: t! X$ B; a6 }4 o1 V
搜寻目标的数值增加: z( j! x4 } b6 k
; E! N; s! _3 L8 M4 }9 M cn -
* j3 D* `; \" l% d1 s; t 搜寻目标的数值减少
- a8 Q$ c- W( K, F- G , _+ `% k" j1 F# C8 z3 {0 T6 J+ }
cn +,35 Y. ]3 l# |+ D4 U+ Q6 E4 I! z
搜寻目标的数值增加3 (十六进制)
: K% A4 b) ~$ u, z/ d
3 ^! ^+ @2 @" y, b& f1 V! L cl
d X, [4 O+ ^. c 列出所有搜寻结果
! [2 \1 C& n$ ]4 [3 @6 I6 y" {" p) L# J0 }7 F J
cl xxx.txt
% G7 s3 j( A2 C0 m) t, ]$ n R& K. o 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
/ D* @. W0 U* D; D A2 g0 R9 D# X+ N/ |( h
( a! V$ s$ ]$ R; s6 U- G' q
内存监视点指令: wp, wplist, wpclear: b% @+ }/ ?% r* c
例子:
) x J' j8 O) h! J6 o+ ` wp 1234,1,r
9 U" b4 h' k4 C7 @% m6 F& F5 D) @1 ]+ N 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1. a; c6 g6 i, b; d; w; ^$ `
; K/ }- G( s$ H, c$ ]# w
wp 1234,2,w0 J& I( x! B1 j+ ?# U8 Q
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
. v$ N; \ S0 n
; m* D3 K5 l2 j3 K% o wp 1234,6,rw
+ m4 T Q( g- f6 K- ~. `* B6 p 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度64 |1 ?; N% C4 [! b9 u
, A, J' q, D9 I$ C wp 23456,a,w,wpdata == 1: X3 H# `. E* @# z, O) \
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
W, g* I, K, @7 y$ C
5 u2 \ M* R$ F6 I. w wplist/ {4 V1 m- E+ x. d
列出所有监视点0 G2 N. z; h- m4 z$ W5 p0 d9 M1 Z7 ^
( q8 N- [: A/ ^. |7 v' G) j) B
wpclear 3 ^6 _. g% y- s
删除编号3的监视点
. B7 V) k9 j; c/ y2 y) m, A2 S6 { @" _6 @5 G
wpclear
2 i, L# T- H" l6 q& m 删除所有监视点
. |# V e8 R2 [! r& k+ X
# V' t4 m$ D U# X/ o" d % q& z9 `, v6 N% z# d* s! u
& x# v' V6 X* y |7 @
程序断点指令: bp, bplist, bpclear+ w* q" _" [0 W: z
例子:4 a* j; y( l' e0 W. c
bp 1234
! B6 b: A2 T) `. `5 H& a. |7 n 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
. F: L7 U, f1 j' L2 V7 Z
: g8 Z+ S! @- R" r% b$ e1 B bp 23456,a0 == 0 && a1 == 0& h$ s& J' y- T& V
在地址23456下断, 且中断条件为a0等于0以及a1等于0
i# x* S: `6 A4 y" ^, @0 N& Z/ y. K$ Q q. _6 y1 j4 e9 `1 G
bplist9 K+ K, B* o+ r; q/ W# j2 @
列出所有断点! [, U; ^( e- H0 m5 W0 s$ i
) z$ ]$ x- U# D% k: x9 F' Y( r1 Q7 | bpclear 3
& z6 F3 j7 E* B5 S! e* k 删除编号3的断点" C$ ]5 X* v5 E$ B
+ T+ q0 I7 e- U- R1 c- v4 U bpclear/ L: F( x( y" ~
删除所有断点
- S4 X" @ S7 s& s2 @8 U9 V! c. L% |8 _
2 I' M& c7 q7 t: O! w* r% i
) `) S! |- E7 p' L1 J& n" ~8 d9 B跟蹤紀錄指令: trace
* `* K% E- J: u+ e( D 例子:; h, H/ x! ^6 c- v: E: k
trace 01.txt
$ R, X" I8 n- @9 w3 H 跟踪当前CPU运行的所有代码, 输出至文件01.txt
+ Y& {- w' P) U0 ]5 M! C4 E5 W1 _; @
, x. T! J7 g, U/ W" y trace off
0 S7 f' o% ]; m& |2 p9 z. j 停止跟踪, 并且关闭文件& D5 M( i/ b. j% B' j. z; l
: f9 Y9 `2 {9 h+ K0 a
trace 01.txt,0
; @# v$ e; m7 r 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
" t- L' S6 L, d/ j. m3 d' ?
! H! V) I( i1 E# b- }5 ~+ x5 t. d trace off,02 r4 j2 C; R5 A% s+ p
停止跟踪编号为0的CPU, 并且关闭文件
2 i& s a* e5 h. P, K8 ^7 }/ m7 A
; z' R, _/ `, n' G- ` trace 01.txt,0,{tracelog "A=%02X ",a}+ M1 N; v g3 w# _/ |) @
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 3 _/ a0 c0 X# S
并且在每一行的前面, 写上"A=a "$ o# j* B* e6 |- y
"A=%02X ",a为一个C语言printf函数常用的输出格式
, V C0 A( T. l v! E 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入8 H! C0 {' d$ O& L( h+ |, K3 O. p
X表示为大写十六进制数
* w0 ^' d( F0 g* |8 M& r& }* A4 L( r* M6 f5 c$ |
9 @9 H! o% N" i4 t
/ z% k) F5 d; K% h( @内存直接写入指令: maincpu6 g6 v# G c* {8 n
格式为 maincpu.[][]@地址=数据& |) }6 k% M- B0 B
第一个[]:
. N6 x) } ~/ @1 t+ O% |2 Y8 t o 表示ROM地址% ?* z( P( t6 O+ A5 ?! u) e
p 表示RAM地址( t, D# M+ _, n$ y
1 K' K. L* h6 {# o- `
第二个[]:
k/ ]5 m# k/ A, O3 @ d 表示4字节
6 `5 c2 u: A7 F$ V! Y6 E w 表示2字节; r, ?- e& s3 K Z
b 表示1字节' Q& M7 f8 I- |+ U
: c! Y D/ p! B& ]& l( Y+ H2 A
例子:
/ R3 Y* G. P5 E" F7 t maincpu.ob@1234=FF
- m3 {+ k/ e& G4 b/ g) Z 在ROM地址1234处, 写入FF一个字节: r( m* P- Z, E$ w/ S0 N
, q' Q& T8 q- S& N7 r* R' N0 ^. b maincpu.ow@1234=4E71
# I, w- `: Z3 z/ |7 t$ y& Z, \8 A 在ROM地址1234处, 写入4E 71两个字节& \& Y# q" g' |" r" f, k+ U
, {8 k/ S! @0 W& |8 P9 T0 }% i& h
maincpu.od@1234=600A4E71; K) N7 K" U* q% s$ b
在ROM地址1234处, 写入60 0A 4E 71四个字节
+ L; M$ z( G. [7 G5 K7 L# t$ C4 B
; v: U7 y& Q* D( \& @0 k J3 b 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
& r+ H W% E0 }9 t
6 c' G9 p5 U I' r" X" }: R# `8 }5 y2 x; c& S9 W* s
其他:
7 v' u4 e/ Z; J7 O9 W dasm 输出档案名,地址,长度
4 q2 f7 s/ k8 J+ W 输出程序的反汇编代码
5 I, }* b- Z. A' C w0 X 例子:; X/ Y5 _1 x+ n, q) A
dasm 01.txt,0,1000006 V S; S4 ~* ~7 M, O" t) D' v7 f4 K
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt O% e( ~# \/ B6 S2 H1 X
1 N' @4 o1 x4 R9 i0 ?) w% Z" ?# m softreset" a3 {4 Q, @4 y4 w
游戏重启, 但不重新载入ROM0 `+ V* z% R! ]
! X( j1 t, Q+ A: P$ { hardreset+ T! e: M1 a+ L% L, c# B
游戏重启, 且重新载入ROM" a2 z2 G# B4 Q# Y6 Z4 T! g% v
4 H) U' J0 O/ |9 e6 N. s5 m
snap xxx.png& ~7 ~% A5 q8 T& D
截图为xxx.png
0 g& j; m0 g' J/ f
: c/ m j- \) v3 v: [9 s& F4 E
1 R, O8 `6 _# L5 s" x9 X0 h
( o& A' J* t- A0 N# _ , b& i( ^: l1 }" v
热键:0 M. ^/ n8 c6 p& \& e* Q# V( i2 k
~ 中断游戏
8 {/ U$ l3 Y" J8 K1 u1 q4 ? F5 运行游戏7 y( P- @; C, r2 X3 z: o
F12 运行游戏且隐藏调试窗口
9 H. F+ [5 m8 A4 C D F11 步入, 单步执行, 会进入子程序
: e8 p1 T' D; Q# s F10 步过, 单步执行, 不会进入子程序
9 p3 ^/ |1 I& j/ N8 W7 V Shift+F11 执行到子程序返回' M" D: @9 d: r9 |; i. w' D* t/ T7 J
Ctrl+M 内存浏览窗口
+ k0 ]$ @" ?4 y2 b$ I F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
. |; Q& M0 n* b0 o, D+ v1 E
: f) w. V3 S% A" K; ^# g) @{:4_94:} 7 s& K- {+ j: m9 D$ y4 l6 h
" ~, H% K6 f* B |
评分
-
1
查看全部评分
-
|