|
|
- R/ ~5 Q& d% z. A; h; X; j很快速的整理我自己常用的指令
1 @3 L9 c6 |( X! H! @9 d
2 }7 {/ G' N" v9 U+ P7 B8 X2 ?{:4_112:} % _- d7 Y$ t7 {( Y% Y7 ~
1 L* ~& Z7 Z9 Q4 N ?% HMAME DEBUG常用指令
9 W# }) R0 _$ A5 i' l% I6 @- |- r6 D8 N2 n8 G2 F4 q9 Q" ?
内存搜寻: ci, cn, cl7 ~9 ^" h2 h" G$ x4 [; z& [2 G
8 C h% ^, G( v: {% j: |' b ci4 i8 a* U3 t W& `: \
搜寻任务初始化, 每次搜寻一开始一定要输入这指令' K6 ~3 `1 L( f9 R! f
$ V5 r0 H! ~" H2 i0 H& x2 W
cn
# r6 s+ i, r; ^/ q( E 搜寻指令# d7 `, U3 q1 a( ]: ?' h, L9 Z1 e
例子:
7 n0 j7 d: z$ x$ T* y cn eq,60" s: Z6 W; O2 Y( l+ s6 [& i
搜寻目标等于60 (十六进制)( a4 [: `- O! ?2 b- E; Z
! v+ G" S" j& _" Y! R- U8 B cn eq,#96! e7 ~" l) {. q h# I
搜寻目标等于96 (十进制)
3 A7 @/ ^2 W9 g' s* M
2 [0 J# ~/ J! f, P: K% s+ [ W cn eq
2 o* U [$ a- W! t 搜寻目标的数值没有变化
( \* ~' a5 {/ k/ b+ I8 w/ m' U; }3 \
cn ne1 E1 ~: `+ X+ u3 ^2 ~4 x- x
搜寻目标的数值有变化
6 x* c! J1 j0 A- y" D& J& U
" {, ^, C1 D, V2 a6 B9 R* u3 g, w cn +" a1 {+ S3 t0 r" R4 j, N
搜寻目标的数值增加
- V6 o: R5 ^; \2 i% F3 I3 [ $ p$ @- `6 U: b9 S
cn -) c" r8 v/ j; }! W* a* ]
搜寻目标的数值减少. W+ y& k3 S/ a6 e
- m+ x; F8 @% a% P cn +,3# h( o; K$ a3 \5 I" m: ^' e
搜寻目标的数值增加3 (十六进制)
( ~: b4 I' q8 } s. [8 y O
2 U0 j1 V* C0 @( y' f cl. `6 m: u( w, L1 M2 s4 E& f
列出所有搜寻结果1 N: V8 x, v+ q+ }, w, x9 G
6 u" B- d9 _6 h5 N# G
cl xxx.txt
6 M- T+ P5 L% X* h, y 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
) \" V- h% g; P
& F; V$ z$ B% y4 u9 _" Y0 n . ~/ S7 U$ y; D
内存监视点指令: wp, wplist, wpclear. q/ H; ]: N0 z+ b- H
例子:: u4 K n7 U, E h" X- R3 `
wp 1234,1,r
}3 V; `3 u% f4 G1 S! P; I 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1* b# {: t( Z7 b B# b: ^4 j# M- [! T
5 n; o: o& p5 W4 o+ R# _! }9 _
wp 1234,2,w# x$ {9 W/ ~& @0 @6 X0 h, C
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2! w! ?2 j b# n9 }2 X5 d% z3 {, X
" t( o6 R9 L, `& M
wp 1234,6,rw
0 m* _( M5 W& I# }# f( j$ A/ i 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度60 y" l4 g- U% S8 V
, a, X, o& K8 Q wp 23456,a,w,wpdata == 16 [7 y. y$ B+ A9 D4 X9 H# E( \
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1& A Q* n* y" [- }& U8 `1 k
1 [# T& }& \* G6 ~2 u wplist
% Y3 o+ K9 T0 {* }4 Z& ?( g 列出所有监视点
$ J1 A+ M+ [; v' x$ N; u5 M3 [
5 h* Z( j/ X4 E8 ~0 A wpclear 3
* Z& B! Q; s( _: q4 s" _ 删除编号3的监视点7 Z5 a( l& M: d% p1 ], T7 [
2 V; N( h) m# a. k& i wpclear
! W, S; z) q1 |) _ 删除所有监视点
, [' H: h' J: @; }4 J) p' e; x: r; b$ S, a% Y- r7 x
5 w. j0 E- |! R6 \% t
9 G: Y# u) J1 A3 \$ m* i程序断点指令: bp, bplist, bpclear
7 r& j8 q% D: B. H; [) Y 例子:4 [1 g* j# q/ ]1 B
bp 12348 |7 M$ r+ E: n P/ L
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
+ e* q; i. v6 ~" m/ A2 S; f" u% M8 G- F7 `
bp 23456,a0 == 0 && a1 == 0
1 P1 W8 ~4 d* y' M7 l! ~ 在地址23456下断, 且中断条件为a0等于0以及a1等于0
1 C3 ~+ s/ n- A# o
" ?3 @, `" a6 ~( M+ O# w) s( a bplist [8 l' u- O) ?4 T6 _4 Y
列出所有断点
* E" V: Q& @0 @ m9 x5 W" _8 {8 K& X9 H7 U/ Q! D- C& L
bpclear 3
[4 H" f: |% Q* } N& B. p$ k K 删除编号3的断点! \. D1 K1 }, h) [1 o8 M; \+ c
# D# B" d: s) f& Q) y' K3 J7 b
bpclear
3 C- ^/ r. i- b; J B0 Q 删除所有断点
% t, p& C* u& z5 K
/ P) o1 a, T% \& s, a* F: J- k) i! _
7 r! g: f9 d I& l - }" U3 K4 C" X% x4 L7 N2 A& h
跟蹤紀錄指令: trace
) \7 B, D7 ~6 g" A0 [ 例子:
% m$ P, ^; E3 w7 T8 I7 q0 ? trace 01.txt0 F, [- ^: ^! S6 E( W* L1 w; r
跟踪当前CPU运行的所有代码, 输出至文件01.txt
/ H$ w: ~9 M. t& T" U) X
: D4 v. S6 M/ i# F2 D+ F" I( Q trace off' w2 q" F/ C5 ^' j
停止跟踪, 并且关闭文件/ Y! {: D; H. N! k) J
s0 s: F' Z$ r' G trace 01.txt,0
! }0 l7 F, \ O4 r* M! H 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
) E$ L8 T% s) |& l M7 J# S4 k5 r3 D6 F
trace off,07 l- `' H0 l1 {' K
停止跟踪编号为0的CPU, 并且关闭文件9 v+ K- @, H! Q* @0 E0 p/ z
/ v9 Y; ]0 S; ?* o trace 01.txt,0,{tracelog "A=%02X ",a}
# R+ h9 R( I! a/ l: k! `3 U1 L2 ^ 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
% }, m8 s' j2 f 并且在每一行的前面, 写上"A=a "
7 v$ o; I0 i: c a1 S! a "A=%02X ",a为一个C语言printf函数常用的输出格式; P; u4 V3 g* W( Z6 w" N( q
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入6 @6 r5 Q: A; \! d5 C8 y
X表示为大写十六进制数8 Z% m' b1 a% Z" O! `
5 ^" y- ]. S9 H3 S1 w7 W$ n" i0 H0 r$ q' m% E- R% p
% v+ ~" {9 t- Z8 n2 W% w4 ~: x
内存直接写入指令: maincpu
* M3 d! x1 ]' C J% Z' p 格式为 maincpu.[][]@地址=数据
" f% \( X+ s' [* b) q4 i 第一个[]:- _! g4 ?# P: u7 x
o 表示ROM地址
: V- f6 c) B0 @6 W9 v p 表示RAM地址$ F4 L7 J: M' V6 j" o3 m
5 q& l$ i( ]" |8 G4 g$ k
第二个[]:5 G2 X! G* r* y9 t
d 表示4字节% R. S# y& s- G
w 表示2字节' }4 \! o3 E2 @
b 表示1字节
* b2 M; x. b2 Q, E' `- a6 E9 j6 _# g$ X
例子: H# [9 v6 v* z2 u2 M v" m5 n. {
maincpu.ob@1234=FF' p, q, r7 K4 Q! F4 y
在ROM地址1234处, 写入FF一个字节
% I: P7 T( }# B3 D, k0 c* B! o) C8 N
maincpu.ow@1234=4E71
5 W+ ?; K/ z( N/ w! `! @$ t2 m 在ROM地址1234处, 写入4E 71两个字节0 A; ]: F' H0 l) C- r4 H6 b
$ H) T; |3 a- C% r1 T, i7 \0 H
maincpu.od@1234=600A4E71
/ q! e9 o$ w' F' C 在ROM地址1234处, 写入60 0A 4E 71四个字节, \- }1 B) }# \1 _; X! I
3 h8 @! D& j/ A3 H5 Y3 E) Z7 j
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
$ B- d- V/ m0 T1 w" X0 t3 s; @" D$ p , ^+ K- g) `- S& U- [
9 B( m7 j: N, q: r
其他:. \' M5 G# w2 D' a: f% U7 ]( ]
dasm 输出档案名,地址,长度
% @7 V4 O8 L3 T* E2 J) h+ W 输出程序的反汇编代码
8 m0 |4 T, \0 f7 W' A5 O- C$ [) U: ? 例子:4 z3 [& k, A& r4 Y( d
dasm 01.txt,0,100000
6 _6 B& y+ r% Z( @, k2 `+ _& T 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt/ t6 D* Q) {* z, V- [/ e
: s% x& D0 I' V$ `6 ?* h softreset; P3 T0 X5 R. Y' e8 t% m+ f
游戏重启, 但不重新载入ROM
, j1 k: \! S" p) {4 L% ^
! w0 |& Q6 m/ q( ?4 M; D) ^ hardreset
/ t' _- T0 t3 H 游戏重启, 且重新载入ROM
' d- x& e. T1 I' }% m b2 X8 Z6 ]0 g$ i& y. u( w
snap xxx.png
5 L! T7 N# v6 I- Z 截图为xxx.png3 t" {2 m* A4 G
# c0 j& V3 n0 O' }9 t6 I* x% w0 R
. f! U) X+ a3 W
: f$ u5 `7 w9 ]' G
# {' D! b8 r6 @' o0 [! T/ w6 x
热键:$ D% @+ ~: l4 A! B' T/ l. V5 |! g
~ 中断游戏
4 \) C, e! K0 z6 y4 E1 e3 L F5 运行游戏$ x2 G* ]5 w% W" u
F12 运行游戏且隐藏调试窗口' X6 P5 i- P7 ?/ G5 ?
F11 步入, 单步执行, 会进入子程序
/ g$ j2 q: D7 N U7 e8 G F10 步过, 单步执行, 不会进入子程序4 b4 T! d& F! @% K, [* p" m! j! d
Shift+F11 执行到子程序返回
: y# N0 w t; P* |+ J Ctrl+M 内存浏览窗口
! Y0 F9 m# d; P& \ F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU$ {. w( X: L o* A# B9 D3 r8 B0 \" J! l
0 j1 o+ M: z! j! l& Q
{:4_94:}
0 |- A2 b+ j7 F# h( x; C$ z+ B) x+ I& N& f& |" u' c( ]8 i2 n
|
评分
-
1
查看全部评分
-
|