|
|
6 i) E. V0 O, I很快速的整理我自己常用的指令
D. {! y7 w5 V; e; T8 H- n: N" d7 T! Q1 i
{:4_112:}
/ w5 q1 P/ I8 L+ e* r) s2 Z6 F
/ B0 Q5 V% Z/ w& e/ P" z. Y2 jMAME DEBUG常用指令
' Z) x" h" ~2 @& v% A% ~- a
/ e- a" u# t, F& l3 G内存搜寻: ci, cn, cl
' o/ t$ m$ ~2 V( O# g7 L$ a" K- \" Q- n
ci; y; d ]: q, q
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
. B% D8 O; C. |$ B6 b' l0 k; O, G$ ]
+ M/ s" e. l' C G3 w1 T% ~ cn: s1 `8 D2 h$ _' F G- n. k+ Z
搜寻指令 _! @9 l) G+ [; f1 H
例子:
7 P" X6 R" _, H9 f5 y cn eq,60
Y6 \0 |7 _* P9 y! G d- [$ M5 K 搜寻目标等于60 (十六进制)
( o* X3 i3 y: K: j- D. D0 N8 J5 A
0 p' \) U/ a d4 y# r cn eq,#96& N8 _7 R' u1 o7 i& u8 y/ ^2 `; Q
搜寻目标等于96 (十进制)* x5 f. v2 ?5 U5 c7 W
6 [& V, X+ P4 p* _2 v+ m cn eq) C8 E$ \6 [9 m. W2 M
搜寻目标的数值没有变化( J q% M3 w2 e7 ~5 ^
. C# l% P2 t; W, X# @5 M f
cn ne
5 `1 U; E, \" P# l W9 ^# b4 x6 `/ ? 搜寻目标的数值有变化
3 s9 r$ E6 K) f4 m # k0 W7 g, X {% Z
cn +# I e- B( F6 C
搜寻目标的数值增加# D, W: B' L e4 P9 l W
' N) k% o/ z. {1 ` cn -
$ }' c# n) s+ w8 P4 g2 p) Z 搜寻目标的数值减少
# f9 s( x1 T3 D! I * Q `. e* k& D4 S5 k
cn +,3) o7 S& y$ V( \ D
搜寻目标的数值增加3 (十六进制)0 R2 e A+ J3 S: D
2 H; R7 S8 `( d* l cl
+ T! x. e, I5 w t5 q 列出所有搜寻结果
1 |7 Q% r$ u/ T) b* j
* J8 s) q m, W2 L9 I- x' T+ z cl xxx.txt
9 x1 y& o/ V8 a9 S& w 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
`; F& L6 B. r( B3 M5 m% A
: p; t4 B% ?; T
2 D" I% V- h& K* l5 Q- f内存监视点指令: wp, wplist, wpclear
' ~% S* r. k6 c* v( | 例子:5 s5 v$ L, s( u" }, g( N% t
wp 1234,1,r
! t# {6 E% J/ [ S5 C5 @/ @ 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1* A( Z1 A: f1 J/ I$ Y
; ~6 e) x( @7 E3 X; C wp 1234,2,w9 f( D, x+ H" q) p- K8 u. G
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
3 ?3 |( A* ~6 C- S
m/ N [- A T: i @5 C wp 1234,6,rw
+ m: J6 h- Y" h$ j( g* b 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
1 _/ w6 h& G, Y5 [% T: U0 |5 F5 _) ?6 }& H
wp 23456,a,w,wpdata == 17 K, K: x: @7 B) Q; }5 `
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
8 u; J% p; O6 \9 K1 a, w4 l( j
9 @+ p3 e5 M9 C8 R- K9 }# z& Z wplist
7 y0 {( R# S/ k: @# C 列出所有监视点
, @3 r, w0 M) f( g" E3 A7 U# ?
2 N& m2 X3 \. I& ] wpclear 3
4 `& N* A0 Y( T( O0 l 删除编号3的监视点
2 K0 v J5 e" ^4 c
5 h/ y8 d, [" j wpclear0 S9 p/ P4 B. r( v
删除所有监视点
. N* J5 N: U4 b9 a
' q. k( \/ W1 B; W6 e U# E/ N5 f. |/ [3 X1 u
: E! R: t7 U& S: ~9 X" C$ ?3 `
程序断点指令: bp, bplist, bpclear
8 J* e# w& [( Y 例子:
8 h: O3 F. e; q2 W) H8 P bp 1234: `8 `* X" V2 K7 M; }
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断% _3 K* j1 u. e' B1 N1 I" H. E0 x: K
5 l9 c' @* b( ]
bp 23456,a0 == 0 && a1 == 0
* n$ a6 C. b. ]7 e" Q+ I& \ 在地址23456下断, 且中断条件为a0等于0以及a1等于0/ F. g9 F* u& j; j9 T8 \7 K
/ Z# f' f2 r2 S' J2 x, Q! ^
bplist# E- w& B% C" U" Q: Y9 f4 P
列出所有断点# n+ l) D! g/ ^8 X) q* _' W
7 W5 C/ e$ Q! T
bpclear 3
: M2 F7 ?# c3 W2 L& s, G 删除编号3的断点- g! f; r |/ q" N" O3 X, E* r. N
) Q3 S# V0 w4 j1 p' O9 ~
bpclear5 x1 A9 p1 ? E ?
删除所有断点
' j# P/ S8 [0 u( a" a8 o5 G5 K# A# D/ w' E; R- I" ^/ s- i0 X6 k
- @) N( L) T1 B/ H" f
% d2 k; N$ D& F
跟蹤紀錄指令: trace
4 H. c `/ Y" C 例子:8 k) G; j4 c9 ^/ G7 G. J
trace 01.txt9 a- e! k' u' w/ z# G
跟踪当前CPU运行的所有代码, 输出至文件01.txt
: ]7 T5 e9 D: ]+ w( ~. ?& H0 g
/ s) `+ G2 p4 f# u: V; W* m9 w7 u trace off6 k8 t q/ q' L1 y) ^
停止跟踪, 并且关闭文件
4 e' E+ B# p; b6 f1 y! X5 h- F4 S2 I! o9 k
trace 01.txt,09 h4 S' {8 G7 q# t, A
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt0 C* O& G% U# `( S
; J! u2 m `2 _; F5 O trace off,0+ w7 x( c( Y* J1 X
停止跟踪编号为0的CPU, 并且关闭文件
, l5 m6 _4 D* C$ Y3 s( ^
6 E p4 A+ y1 \1 h2 J- K3 w trace 01.txt,0,{tracelog "A=%02X ",a}$ U/ @! ?: H; g
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
( [- {: n/ }# M) `5 J2 Q4 D 并且在每一行的前面, 写上"A=a "
- v& e: e- x7 W) Z "A=%02X ",a为一个C语言printf函数常用的输出格式 E- Y, v9 [! w. \9 [
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入( W ^4 J& X. z' l7 ?# A7 n& [
X表示为大写十六进制数 C- c! }8 e5 M6 c: v ^' D& b3 [
8 U; [9 G' R9 i
6 y5 ^4 v: w& s9 _9 g E
: q3 h/ p4 v6 {# f
内存直接写入指令: maincpu
* k* U6 {* k0 o. Y4 @ 格式为 maincpu.[][]@地址=数据2 H3 @9 a6 A, @! U- J
第一个[]:
% T& A4 c) c, x* w# l2 Q# ~ o 表示ROM地址& L9 F3 a- @, I+ _$ S* y
p 表示RAM地址* t% m% V# j4 m3 t7 g4 e7 V4 c
( ]) n7 E: L0 ~ 第二个[]:
% s7 {$ \" r2 z: V d 表示4字节' n% J0 a f9 Q% @
w 表示2字节
4 L5 K- ^8 X% ~, p' l1 g. c b 表示1字节
$ ~0 o" w y- z& X4 e* _2 `$ L3 i- l$ Y
例子:
3 f6 ~& M [4 Y% \7 f maincpu.ob@1234=FF
8 A. O- l9 b% R8 a0 J% l 在ROM地址1234处, 写入FF一个字节
$ C0 g0 m {3 p* }9 y6 P' D) h' c% c o
maincpu.ow@1234=4E71
& [3 w" l+ G2 z- T4 i 在ROM地址1234处, 写入4E 71两个字节% S- t9 P$ [, [% e1 [* [
: d2 G/ J1 Y2 |4 O9 N1 V maincpu.od@1234=600A4E71
+ v* t" Z6 z! h 在ROM地址1234处, 写入60 0A 4E 71四个字节1 ~5 `5 \- t& _2 I
$ }8 B! e! y0 ^; L- P' M 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
# N! L* w: Q1 d# y) b% o$ P ]+ N+ x$ W" b5 {6 ^9 C
9 ^" w8 _2 c" E2 L1 ]4 ?1 K: v: z( I" v
其他:( E8 a( X/ }) t. ]# R
dasm 输出档案名,地址,长度# R$ P& W$ m3 Y- |0 }# K
输出程序的反汇编代码
" S# @* i# K0 S% ` 例子:
& e! ^. r* T) ?1 p- g2 I) P# J dasm 01.txt,0,100000
& @* n: @5 m; P% B 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt f0 A# g# T1 U. P
& i. ?* H* g; E* n8 @
softreset$ T# T% D4 X6 u- L; k1 J* h
游戏重启, 但不重新载入ROM
0 _) O$ I; c# ?9 g5 n( N" B+ ^
( a' l6 [/ e3 i$ W' |9 Y: Q hardreset
& _2 H1 A) I0 E- {6 k 游戏重启, 且重新载入ROM
" J+ d5 {% x4 Y0 U R) j+ O3 m* q4 ~5 o( r, T2 P- r
snap xxx.png1 r p2 K8 J# T2 l
截图为xxx.png4 e2 ? a; z' V0 e
* O6 m: c+ R& M7 R" N8 b
2 ]4 F$ ?& s I" M% `
0 [) c$ y) k# z' m W
, _3 z; G, k6 J热键:
# q) }8 F& ?: W' t7 V: b ~ 中断游戏' g4 F; m l0 U I+ [: v' }
F5 运行游戏! [, i( v. y4 a
F12 运行游戏且隐藏调试窗口
6 y( \+ v# V2 v F11 步入, 单步执行, 会进入子程序& S$ |1 n3 F8 \- E, l' a) h) ^+ e
F10 步过, 单步执行, 不会进入子程序0 w$ ~; b$ r. k3 @! L" [( n+ K
Shift+F11 执行到子程序返回
0 S2 B3 r: j7 ]+ V" Z" r Ctrl+M 内存浏览窗口
; t! W/ w* T* a. Q F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
* f+ n. B' v' ]' U* G0 V# w; M
; u% l( t8 K) O, R7 n% c{:4_94:} : r: h z) `, B
( s& Q5 H( O0 W6 g0 N {5 Y
|
评分
-
1
查看全部评分
-
|