|
|
* @+ J4 R+ [1 n很快速的整理我自己常用的指令
( g g3 w2 m5 A, S+ C
7 ~; {4 M: B$ a0 }' Z) S( E{:4_112:}
7 B, J; [; ]9 o$ [/ N7 U% N/ P( A
) k6 |( O$ ~4 v( {% bMAME DEBUG常用指令% X' ]! l+ }5 N+ m$ X( A
0 |* ^6 m6 \8 T2 L9 Z
内存搜寻: ci, cn, cl
" W2 b6 w: U4 g4 S* O- @+ r& B( e, a9 L6 r0 S" o1 m
ci4 k7 @% Y% u8 G# s9 l
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
6 W0 i# B/ ?/ i3 U; f" M; F4 J2 X; m% t" U* ^8 l7 T. L
cn
, {! l B+ h6 k" d" y ] 搜寻指令
/ ?) U6 U8 g8 R- K$ p: X 例子:
& ~0 R, E2 m: M5 v' q cn eq,60: D! t+ S# ]/ ]0 W; o- F2 a1 R
搜寻目标等于60 (十六进制), U* T q" e0 Z
3 {7 }4 o+ X1 W# o6 I$ v* ] cn eq,#96+ J# y" j$ l" ^
搜寻目标等于96 (十进制)
3 p$ {+ G7 s4 L q8 C3 J5 B n3 Y2 J% ?" L; D6 ?% {, `. X# w& v& h
cn eq5 t% R. _* g8 d! O) I5 W
搜寻目标的数值没有变化
9 ^- P. e; P4 N5 z+ L: y% d+ h
N3 A2 z* `: A$ n4 M cn ne( j8 t; m2 s$ n9 x, E
搜寻目标的数值有变化
$ S k. Q8 N5 c0 A8 V+ k- W
" d1 R+ N2 r' X6 a cn +) M' X% Y M1 F1 J. v2 d% v7 y
搜寻目标的数值增加8 H, ?0 {7 c8 p5 W: T4 ~1 \
8 r6 _7 [, u( }; V2 f4 _7 M- i' w cn -
% @2 O6 n. F) ^' V9 P4 t E3 U 搜寻目标的数值减少& D+ W# u% o d0 n
0 o1 j% i: f( A6 `. u$ e1 j6 h
cn +,3
% g! e2 i# i# e U; ~/ B1 V 搜寻目标的数值增加3 (十六进制)
$ X6 m' y: k* L( k; Z6 M3 [/ [& X9 N- ~" W4 y
cl
1 j. o; B! y7 I5 \9 f. f 列出所有搜寻结果' T `; X) a+ o) p7 I6 D
) T; |& v) i1 e ^1 D7 v1 ^
cl xxx.txt
' v7 X# |. Y8 G" d 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式% H: x3 I4 G2 [8 c0 Q
+ @ e3 {9 v0 B* B " o6 P% Y& W" K) a- m1 y" C' S) Y
内存监视点指令: wp, wplist, wpclear+ F) q4 p8 |+ H; Q" W: F7 P$ O6 A
例子:5 m# g5 m, h! S/ e1 `& U
wp 1234,1,r
; q; a$ ?. \$ y T2 f6 g6 \( O) p7 u 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1+ d5 ^( s# R0 o
) l1 ^* y, m: k) J wp 1234,2,w
; s! y" w( K P5 J! h 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
1 e, \3 t W. ~/ Y% T" T& K2 { a 1 O* X* s! F) ]' F5 D; ^$ g, K
wp 1234,6,rw
3 P# R- T) u5 x3 q 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度61 P f% Z' N3 G- j! g! x
: D- N3 g: P) T0 y8 r- f& R+ P wp 23456,a,w,wpdata == 1
" p1 l8 }& h: b* D 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
$ {( Q" \7 `0 u- H" C3 i+ @/ c
! _1 k/ R* H! U wplist
, `! ]' \% J7 j, |) X: W0 g! J 列出所有监视点. @; y" P6 b. [& J, g; K$ x0 O( i
* L. u! j8 U1 P0 S
wpclear 3
+ ]$ @: M. i! G$ P8 x 删除编号3的监视点
8 Y! y [, e: ~ A% t( _
' w: C8 e1 z8 W! z& b wpclear
( x! n+ _1 g: P5 T; d* o6 j 删除所有监视点 C/ `1 a6 R% x- }1 |
; f8 J# f$ N2 t: p& C
) M5 v& p' W1 ^; Z; a; `( u! P9 U- L
程序断点指令: bp, bplist, bpclear
w" z5 O3 G& V8 p. w: d; X5 k6 V 例子:% h6 e0 W7 [. u- f# c0 a) q
bp 1234
9 a0 z( d$ {# t/ d4 D( I 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断 a& x- K& g) \) y
' f: d$ z6 W7 W" K- Z
bp 23456,a0 == 0 && a1 == 0
) } {9 R6 t9 T: J, t' {2 [ 在地址23456下断, 且中断条件为a0等于0以及a1等于0
" c0 s) r9 m+ I" W3 b9 L. c
+ h; H2 \ A% l bplist T, ?! M. K2 o- b3 O, n
列出所有断点
8 ]' T/ D6 n) C7 e* t3 _. w! j7 G0 o6 m9 R3 m3 X+ y: T
bpclear 3- E5 {, A9 g& e# Z+ }
删除编号3的断点
& b7 e, p7 x+ j) L4 Q
4 Z5 U# l2 R% M" {# r5 G bpclear* g0 Q6 X/ X+ ]0 C. H8 _5 U5 H
删除所有断点: o* m2 A, p/ e" W. x3 p: C
, o5 ]4 P& f' i, b
; G& w& m" z+ o3 {+ F 0 o3 x, l: t/ V
跟蹤紀錄指令: trace
; ~5 j5 |3 j c/ x, W5 t 例子:2 u; B1 X/ F4 P4 y
trace 01.txt
: `$ y8 q" W1 a$ Q 跟踪当前CPU运行的所有代码, 输出至文件01.txt9 F' c5 J7 B5 Q, M8 [4 f
) L1 L7 m5 L9 I* P; D
trace off
0 V5 T5 z" ?" x4 O; |$ I; F) D3 E 停止跟踪, 并且关闭文件# q4 q& S4 B& `% h2 w1 F+ a
3 n( S" C4 E8 E
trace 01.txt,0
6 P7 v; h' ^% C; z 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
; j. _# c$ ]4 {' H9 G
/ r J- c. b; R" V trace off,0! {; E7 B% {0 Z
停止跟踪编号为0的CPU, 并且关闭文件
^# {' ^2 u5 s4 N0 S7 }" l5 b0 ?" X7 G% f8 T
trace 01.txt,0,{tracelog "A=%02X ",a}
+ J( {, k. _- n4 t9 U7 H 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 3 a) L" e2 G& H
并且在每一行的前面, 写上"A=a "
: b& d+ V( {8 ]$ I; l/ S! w- @ "A=%02X ",a为一个C语言printf函数常用的输出格式6 c5 H3 e4 W9 \/ I5 u& C7 E6 R/ H$ S
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
% p4 h( _% p, y* [2 n0 }7 m6 b X表示为大写十六进制数
; H" I( U$ D( D/ y+ S) n/ M/ J6 `! r7 s' r: k
7 X& a9 _' D& r% I
9 ]$ K( C3 T. t8 Y内存直接写入指令: maincpu
; b$ `! h- ?% O 格式为 maincpu.[][]@地址=数据
& N6 _: d j4 B0 A& h+ k( _, z0 a 第一个[]:
7 P* ^' h* z; ?4 K, d3 } o 表示ROM地址
# I, C; M. E3 w" |8 {8 F, ?$ B p 表示RAM地址
' M0 @8 n) }4 ]% ]$ u( z
$ S/ T# W* x: G& D: o# |' [9 L 第二个[]:
& A2 E! u; v# @9 |( D( x d 表示4字节
- `) A3 o# ^) H2 I3 l# e$ D5 @6 r1 i w 表示2字节6 V( i2 k' v Y1 j! i& \
b 表示1字节
0 x3 H! J, I- D, a3 t: Q* {3 N" u' K1 X; k
例子:
7 q6 [/ [3 _) z% H2 L9 r8 \% N maincpu.ob@1234=FF
8 Q0 U5 A% Q. n+ Y' c; r& d- D 在ROM地址1234处, 写入FF一个字节
% o3 g# ]9 s# ?. l
0 |+ T& S( _# u: W4 S. x maincpu.ow@1234=4E71
4 v9 j7 f, w C) U1 H 在ROM地址1234处, 写入4E 71两个字节& A' N8 D, V7 P( o. _
2 y, m( \ F4 r2 {* X
maincpu.od@1234=600A4E715 r! y: b6 R. R, E+ n8 B. @
在ROM地址1234处, 写入60 0A 4E 71四个字节5 J2 @; `* T! p' y; Y$ w$ o9 {
. m9 E% H+ x2 G: q
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写5 M7 Y/ X4 c$ h s/ M$ u. Z- D5 S; {
0 ?% `) _# V" n+ x" \$ U
' h- x+ \1 J: _7 R; ?; r其他:
b, V- E: I4 u dasm 输出档案名,地址,长度
6 a1 T( Y9 p& d' v: L8 q | 输出程序的反汇编代码 z, W3 W/ z* e
例子:
+ L( _' }3 p' b dasm 01.txt,0,100000( }& M5 \8 L6 q3 z
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt& d/ \- L0 s8 A5 y! k4 O! S3 X* ~
6 y4 b+ q5 S* }8 U$ q1 u( k# R
softreset
- I! ^# v9 t& k( D, }- r/ p6 l 游戏重启, 但不重新载入ROM
' L8 E) Y0 [- ]0 R; P" U
0 s' t2 X h% G8 j4 K hardreset
- t& Z! ?* |3 Q0 D+ ?. G! } 游戏重启, 且重新载入ROM
/ Z8 B/ Q! j1 D$ v
0 @% Z& p: s: Q2 q( f& p snap xxx.png
7 Y: l {6 t1 A& k8 u0 _ 截图为xxx.png
. z! S3 @1 W6 u0 f
$ q7 d. u4 w( R7 Q
* B* H8 B6 Z3 l! |6 A* _- ~9 r
' N, d, |7 d5 @% o7 l9 H: m2 t ; z A0 b9 W- V! s0 |! K
热键:
1 e7 ^6 o7 g g c! `- b3 E. {( E ~ 中断游戏# }9 _, s. S* R- T- X8 q4 p3 U! s
F5 运行游戏
( G8 R1 E0 ?9 H H F12 运行游戏且隐藏调试窗口6 D" u8 B& Q. O0 b6 i! P" u
F11 步入, 单步执行, 会进入子程序
1 P5 s9 x: D: }8 \3 _" Y. j F10 步过, 单步执行, 不会进入子程序
4 ~* P- }7 N% ?) y, Z2 @! X/ ~ Shift+F11 执行到子程序返回
`) B2 g6 t0 ?- A8 A+ x- h' i) I7 W Ctrl+M 内存浏览窗口
* D8 E6 j! E2 h. v. ? F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU: M% A1 y r I# ?/ [. P: r9 n( B, O
z* x% F8 u4 j+ _{:4_94:}
6 T+ S# k/ @% c1 r0 T5 K# U4 E: G" _! k- u. [% ]5 a& E% `+ Y5 Y
|
评分
-
1
查看全部评分
-
|