|
|
3 b3 A1 b* B2 S; d
很快速的整理我自己常用的指令" U* {* O+ H4 |5 X9 e* q
5 u9 ~$ Q6 ]9 \( @6 @& C: e ?$ [+ U{:4_112:}
' t; ~3 N# f D# D+ i! G
/ M( T: A& i$ e4 }MAME DEBUG常用指令( O, u8 e: C. N1 K) o: ]
1 h+ F/ R6 r' H内存搜寻: ci, cn, cl7 P& R; H$ A# u% a
: `2 W5 }: Q; y& Y ci6 E* W9 K# e6 A3 s* K. M
搜寻任务初始化, 每次搜寻一开始一定要输入这指令' r' [7 k. v) g
7 j$ ~( @. u" _% K
cn
% i6 K, ]# V6 C9 l2 D; z 搜寻指令/ e, }+ \5 l6 T" w$ b( ^
例子:
2 h4 L7 c. j5 { cn eq,60
) q& ^4 E4 W$ v/ R 搜寻目标等于60 (十六进制)
( l! m' } g( c1 ? E6 g 6 J% z# B) e8 v0 s- O, w
cn eq,#96
% _" u- k' K: t/ \ 搜寻目标等于96 (十进制)
, W9 M# z9 P7 a$ ?+ z, i* F2 b7 e' L" S- ` b0 B) y" f
cn eq/ s/ u, u- d3 ^! u4 H% M
搜寻目标的数值没有变化
4 E: y9 h) }5 U# K+ T
( L, H. V' z; j) u$ n8 ^0 G cn ne- v+ j1 _7 w& k# |! g+ f1 w
搜寻目标的数值有变化- G6 l8 G& X: P
# P, v- S8 D0 V1 N
cn +; X) ]6 M, t/ C
搜寻目标的数值增加
3 z2 a% X1 S! O1 k6 F / N; O9 T# m- c" k
cn -
, i) V8 f+ B* p5 ` 搜寻目标的数值减少$ Z3 B- D, v8 A
6 @/ S2 c( @" E F* j/ P cn +,3
4 H% l& | B( G" G8 a/ o6 ] 搜寻目标的数值增加3 (十六进制)
( ^' E8 b6 _" m7 l7 I7 c* f/ M: A. z& Q4 M
cl, h3 r9 k+ n- i0 B. w' S
列出所有搜寻结果 U9 S( }& C* ]% t. n
/ Q: J) g( }! P0 W- q7 Z7 ~ cl xxx.txt) v8 V0 @- }( H& F6 Y
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
# I* W, b. s$ E! r9 s+ j
R$ S+ P* \8 X$ c9 O* K # S0 T% T8 r. Z$ }2 m% L# ?
内存监视点指令: wp, wplist, wpclear
6 e2 d0 a4 N, G% Y 例子:
( ^5 c# u1 ]: \" S5 N, b+ ?9 Z wp 1234,1,r9 C+ ^2 \9 d% y, E/ Q( e: i* n1 A
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
5 N+ f1 g6 [8 `! x; R$ T( k0 _' a/ ]8 @) o" g" n! d
wp 1234,2,w
" _' R7 f' U, z0 E7 z$ ]. K# t+ |/ s 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度26 N4 D* y3 A1 V+ b$ N9 ]; {
0 R( l: f; B, a& x wp 1234,6,rw
! C/ N2 R% E6 [4 ? 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
" K% |$ w Y8 Q: d+ S& M. r8 @7 i0 r3 ?5 |( o
wp 23456,a,w,wpdata == 1
8 k4 |7 P! n. J% i6 h) Y2 T 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1, t Z9 ^" K0 S
5 B/ \7 m5 [5 c/ | wplist6 o: Q! F/ u# ]; O6 H) [& o
列出所有监视点& \: p- Q9 u* r8 @# w# V( Z
" m0 |" q: R% {+ t wpclear 3! p7 R" `$ X; a( Y) B
删除编号3的监视点/ S: p2 x) a9 W I* r# R
& M- ?# N8 [$ f) k2 j0 N wpclear
7 {1 ]. L5 R- K1 b( V2 V/ g 删除所有监视点
% H, L' k% I B7 i+ q; T
* {& n, z2 y( E3 r; N 9 c0 n$ h& m* A7 L6 V
3 l/ F. y* q, K( i! X; i4 U% g
程序断点指令: bp, bplist, bpclear
7 z. E% Y) K, u, { 例子:' r& J0 Z) }8 E$ u8 e) K% d
bp 1234. t/ \- D W8 j
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
q! E4 T9 E" K; L7 E
0 a6 M1 `3 h' P. N4 y# f0 e bp 23456,a0 == 0 && a1 == 0
9 t! r: X$ w' j2 L% B9 E! { 在地址23456下断, 且中断条件为a0等于0以及a1等于0
& ?) B& w. k' A4 H3 k+ {- c- N4 e) Y; {
bplist
# q* j* J. x2 Y# @' A 列出所有断点
7 E' D5 i/ b& l, E- x9 z. y% q; R I: ^* |
bpclear 3
4 u, j1 e' D- L* g 删除编号3的断点% b) r, B( T6 x d4 d/ w2 C$ R
) M& i l7 c% V9 G& L
bpclear* r" ^9 O, }: K' l
删除所有断点
1 Q1 |4 |7 u$ \9 W: `# J1 S
" T% \9 V. V( o
6 r- T! p0 p% ]; e
; _( W& h) j% V# r跟蹤紀錄指令: trace
y H* H3 |6 E0 `: M 例子:
1 n4 a4 J9 V4 n trace 01.txt5 O! Y N4 \/ h2 |& D
跟踪当前CPU运行的所有代码, 输出至文件01.txt
1 M# K3 q- d& M p! C
5 \" |" j/ ]! H2 F trace off4 H8 w: {9 o q( ?
停止跟踪, 并且关闭文件
+ Y0 y1 T7 W/ I$ v8 G; i" o6 ^* P, d7 p; U ?& Z
trace 01.txt,0, N2 L1 I( U9 q7 i, Z0 C) F7 B
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
( f$ A( c. P6 b: @; B1 A9 y% C( a$ T5 X6 ~7 b
trace off,00 [: a$ Z; z; R$ N' G. ~9 v% W3 M
停止跟踪编号为0的CPU, 并且关闭文件
% f6 C- f" q# f2 _& T$ Q1 z4 F# Z
trace 01.txt,0,{tracelog "A=%02X ",a}
; V* ]% l5 Y1 k 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt " V8 [) A& A; K, k1 [/ b+ ]
并且在每一行的前面, 写上"A=a "- d4 y/ K3 \: p, b4 e1 U9 F4 `% x
"A=%02X ",a为一个C语言printf函数常用的输出格式
+ e! ?' H% E9 D/ y 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
, K$ f* U/ ]6 W, c, a$ B0 K X表示为大写十六进制数
2 v& x2 w4 r* _' X5 t: C" v1 s
* Z _, }% ?) G. {& a) v+ W# ?8 \7 A( P& R, U
P% m+ L6 ^0 r$ Y
内存直接写入指令: maincpu
$ ~; ^. j9 c: ]3 H' \ h1 i Y. ^. d 格式为 maincpu.[][]@地址=数据
; d+ {+ W/ G! Z 第一个[]:' M) W8 S0 i0 ]& r8 X
o 表示ROM地址+ C5 J/ M6 f( L/ \7 U
p 表示RAM地址" v7 Z2 ?2 Q+ Q4 d5 r) S
( H# _/ W$ x2 u/ [( L/ ^
第二个[]:; x5 Z! Y6 X; U6 D, o% B2 @! C
d 表示4字节
# ^! ]/ q( N3 ^4 m w 表示2字节& L9 d. N, p" x& i2 u* b
b 表示1字节
& y4 u. O) [5 }$ v! R' B. f" _* G- L6 Z: i4 m
例子:& J9 M# |3 Q: {: q$ B- T
maincpu.ob@1234=FF2 M- `! W5 z& X
在ROM地址1234处, 写入FF一个字节
6 \+ J% z' i$ g! y) m4 M! R% Z3 T: |) |2 Y, t4 n- \
maincpu.ow@1234=4E71
% @7 O/ k6 @/ T) P8 n 在ROM地址1234处, 写入4E 71两个字节" u6 ]) A' U( c! i/ ~
$ R0 {% S" l/ ] o9 G4 D1 e9 M) B
maincpu.od@1234=600A4E71 v" T7 u5 |1 f1 P) X u6 D
在ROM地址1234处, 写入60 0A 4E 71四个字节
; [1 G5 p. F" L0 `( _ F. `# L M. \0 a/ u
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写+ G$ f4 L2 o9 x6 M
* C" v; D2 t+ g8 u
r# u2 T# r! S t- f' P
其他:
L9 K* \3 m" g- k: J0 t' ^ dasm 输出档案名,地址,长度+ U6 U6 {( T- `5 v& A/ U
输出程序的反汇编代码! X/ A k6 `+ C0 X) H9 z- |
例子:. L, E7 p- q& S6 R( w7 A% _
dasm 01.txt,0,1000006 u+ w/ d" Q- \- X
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
0 x6 ~: K2 p [+ o* P! Q
z! l+ ]' Z% @2 s; F; T8 i! U5 I softreset+ K0 A% f3 c* t9 j8 e- T% l
游戏重启, 但不重新载入ROM
. o7 D8 v$ G% [5 [4 P0 b s! T+ S" @+ k, `
hardreset1 S1 x( A$ f$ t+ r8 e/ h( @# r' \3 v
游戏重启, 且重新载入ROM6 M* g% R0 j! k- o! V( }
4 u; J Z7 O5 i4 v* g# K snap xxx.png. d0 S6 g$ @+ D( Q( S. M7 k
截图为xxx.png
: q/ X1 B) X# e
- u Y: C+ t7 T: v% ~ ! c* y+ T& o) Q5 n. ~. S
& m* @0 s. c8 j6 v1 P! k7 _
/ y8 w6 C6 Z# C* O2 C' W热键:
* M6 g! q8 U1 A# @) { ~ 中断游戏( e# k. f4 M3 S; ] X
F5 运行游戏' n9 F. _6 Z# m% X" M
F12 运行游戏且隐藏调试窗口
$ _1 Q0 X# H8 |7 N7 R F11 步入, 单步执行, 会进入子程序
6 ], o) P7 s2 J F10 步过, 单步执行, 不会进入子程序5 ]0 C/ Q3 Z9 h( \9 E
Shift+F11 执行到子程序返回0 y6 u) P# _) |" q( r9 J1 t* d
Ctrl+M 内存浏览窗口) U7 t5 w9 w+ K9 r+ i) X W
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
J6 m# S+ M" T" M9 L
8 l* C- f5 E4 \2 q/ u' z{:4_94:}
9 {8 `6 n% Z8 @" Q! X* z5 p8 p0 ?; U% M
|
评分
-
1
查看全部评分
-
|