|
|
* h, b$ v+ ? F4 ~& n4 w$ ^+ a$ ?- s很快速的整理我自己常用的指令
1 f. }9 Z. U6 q' n4 Q# y$ t: l: _& _* _' q$ ~: H- K1 b9 Q) w7 C
{:4_112:}
( \% C$ i. ]. V/ b. f- [# a" w9 T8 r+ v/ F
MAME DEBUG常用指令& {) a* m) `6 M
. ]) k& U/ ]) W; c! u
内存搜寻: ci, cn, cl9 P5 k2 O0 E* l. g2 u( c: |3 g: s
4 G3 t( P) {3 l# k
ci
; K: t: I G/ T, s+ K 搜寻任务初始化, 每次搜寻一开始一定要输入这指令: r, }7 u9 l4 N, @6 D
' u, y9 s' ^+ B; J
cn
q7 f3 L" j0 N 搜寻指令
, B- z* O0 y0 m, A3 v! z 例子:
5 f0 d& c7 u8 O5 T- Q; q) `6 ^ cn eq,60
! ] \. V( s) J, |' ^: ` 搜寻目标等于60 (十六进制)
0 `# `& _% x0 h& J1 k! b % y! ~. b4 [+ w( E7 p; Y$ `
cn eq,#965 `! C+ a% h& E: `0 g5 X& W: \7 t
搜寻目标等于96 (十进制)
L2 P, |, ?3 V* K! U4 ~& J+ E- L/ `+ I7 j3 M
cn eq
, u/ \& i, c7 P0 J. w2 ` 搜寻目标的数值没有变化
0 F0 A2 y3 f- W0 K# `0 [) v/ x* o' Q, O+ s
cn ne
$ Y" D Y% C, y4 W2 i- G 搜寻目标的数值有变化1 F2 c) M8 |# e
/ |9 M+ |' }* l# R& \, R) E4 O
cn +
2 F% E4 r/ ` C2 d" B- Z 搜寻目标的数值增加
7 h+ j3 U7 r$ x 2 H% F# {4 E0 Y, f
cn -
! u- k% {4 y0 V5 p a& s 搜寻目标的数值减少2 [" P _1 U; n3 y4 t7 E8 b/ R( O
9 l" V( V! ~0 A! z5 `5 B l: s" x cn +,3+ ~5 _6 N x0 T3 l
搜寻目标的数值增加3 (十六进制), ]' x. `& ?; |$ p. G
* Z6 {/ @, q, e* a. ^# { cl
2 o8 |, {- [1 M- Y' I9 q! Z" p 列出所有搜寻结果8 h5 Q- y. k. R" C, J
# ]6 }7 x( z2 H
cl xxx.txt
7 J9 O/ W- R) K( x4 g 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式* F7 r( B7 G; G# A9 S* o; n
x# W$ v# s% ^- Y
* g$ q- d7 E' v内存监视点指令: wp, wplist, wpclear% f3 I) z5 K) w7 N7 a" b7 ~; j
例子:7 Z( G1 O8 x- t! D
wp 1234,1,r
3 ]$ n5 o' ~6 l& S 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
( r+ ^9 Q6 Y, ^6 G2 s& |' r/ f
* H6 S" }, F P wp 1234,2,w
: i9 I. g0 x6 _* v" T 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2$ u3 M! {1 P2 Y: E: X' X
) K9 e0 Y5 y" V wp 1234,6,rw
% t2 K" I1 `; |6 z# y' y 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
- N3 q( ?3 q: d) z2 G
7 j, v5 t$ d- L4 J( F& M' g4 u wp 23456,a,w,wpdata == 1
% {& o8 C3 d6 d Z3 d' R- ?5 v: w2 X 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1: l5 w# E$ v3 w5 N) T' P# h
; u( d- }2 F9 X. {5 Z
wplist% c& Y' z. V3 g: O% P
列出所有监视点. P) A& J P$ e0 P5 E4 G- e- Z
4 z6 l* u: h' N+ l' @% D" w
wpclear 3
+ r: p( }" ^! i4 R& b4 _4 c 删除编号3的监视点
% O6 s+ v( S8 C* |+ {- \
# d3 E* w7 |3 S- k wpclear8 j, q: R- Q( G9 r
删除所有监视点
( I" |* w. ^4 s7 y
7 |4 e* ?$ S5 d9 T
9 U* Y% H1 v: h% R3 Q' I0 y
4 _/ [( [3 f$ G: x( p程序断点指令: bp, bplist, bpclear9 J9 _2 D: ]0 ^# J& x+ F1 C: M
例子:
) G. }2 A# Q7 d: g( Q, O bp 1234
& J+ g8 u; b9 k f 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
! ^0 }+ L: A, _4 m, [4 C$ Z7 z' u6 P% v$ o3 c1 X
bp 23456,a0 == 0 && a1 == 0
6 F7 d# { _- E8 ^% u: G 在地址23456下断, 且中断条件为a0等于0以及a1等于0* ^( e9 i0 X# }. G4 G) B
6 J; v! w& r6 y. w( y# t bplist$ c3 g2 h2 Z4 T; F! e9 D' v
列出所有断点! K+ v9 ^0 a. b, y; m
/ g2 E4 Z! I7 I1 J' ? j
bpclear 37 ^, r3 h+ X0 Q; {8 K
删除编号3的断点
8 @7 D0 x% \; Z4 \% @& y
$ k! y- |' L7 V" F bpclear
! y( r2 N% Y u* D( r8 @& Z( G0 } V; T 删除所有断点
; `! E% ]! q& \+ l5 y3 t
/ k+ G' v0 G/ t9 D. ~/ y1 \1 e; C
; I; @0 T& d l( i + \' ?& v8 ] _2 Z" ^# h* y ]" P7 E
跟蹤紀錄指令: trace. B8 i: P& Y# A) n. q* u9 H) F* O+ V
例子:. ^5 A9 g8 ?! U. N0 v# o
trace 01.txt
o- u/ _( I! _5 Z( a% K 跟踪当前CPU运行的所有代码, 输出至文件01.txt
& ?. ?# r E" }3 J; T2 n
/ W: e- _4 X; _# m/ i& r& m4 b trace off
/ |' w- ~# Z/ ~' y 停止跟踪, 并且关闭文件
6 \8 \! j/ H- ^1 ?& _) v( X6 g4 h8 x# X* \5 h) x
trace 01.txt,0
9 z9 W9 p `* L E q A 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt# o3 D9 ]! q5 z* Y' G
- P) ?; A- C' G! m- Z trace off,0; y3 s1 n7 a' b: d# Q/ d2 o
停止跟踪编号为0的CPU, 并且关闭文件; Y& |8 y& u( y6 _
- ~" [& I3 z' Z& G trace 01.txt,0,{tracelog "A=%02X ",a}
3 r6 }+ t' h9 b- v 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
- D h# p$ i L# q( I; E* ? 并且在每一行的前面, 写上"A=a "
6 c& U5 [' W3 T9 x$ l "A=%02X ",a为一个C语言printf函数常用的输出格式
& e: x! n% F' Z4 M 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
( H! k& F+ I7 ~* |! c5 ^ X表示为大写十六进制数
; s- ~# N; z( l6 {6 j9 \9 j* s6 ~ R+ H5 T
, Q% i$ v: F! l/ n3 C8 R
! i, W2 I# |2 v" K6 |: B7 j内存直接写入指令: maincpu" C( B0 A$ L( y; K* }- l6 j1 g; R
格式为 maincpu.[][]@地址=数据: d. ?) y6 E% a2 q4 l) ~3 }. c: ]
第一个[]:! {0 w" ^* s/ |* {6 O' w
o 表示ROM地址' ^* _3 s6 r7 l2 j! s& p6 m
p 表示RAM地址
* ^; j( w2 X) }7 l2 Z& K% j( a! u# u' U! a0 @& W
第二个[]:
: T/ t. n9 ?) p8 k d 表示4字节3 c5 \9 E7 Z3 p
w 表示2字节
# [6 o: W/ B5 ^' ~ b 表示1字节
6 M7 g4 E( ^( L" F! [8 ~" i+ U/ ?% J. e
例子:- k+ |1 w1 z' w0 ^& T6 T: O( i
maincpu.ob@1234=FF# J7 l* |, W7 o8 m Y3 m, q
在ROM地址1234处, 写入FF一个字节
. c* m; I% r$ Z" C- l# M9 H! B/ a& v% O/ @$ Y
maincpu.ow@1234=4E71/ m. X5 n# B$ R1 U% u- D3 Y) `
在ROM地址1234处, 写入4E 71两个字节
; F: L# j! I# f
3 J9 K5 N4 y) P+ T2 y maincpu.od@1234=600A4E716 {8 w1 @1 J! j1 B0 n+ _5 |! }) @: H
在ROM地址1234处, 写入60 0A 4E 71四个字节
1 E1 N6 D% H+ L% j$ w4 w1 q
% j( V8 W2 k( e9 `: L 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
8 p/ ~& b) ]7 z# N- z/ j& t ! k* i( V$ {. }* ?$ b- D
% v8 U, y& g6 Z其他:! B" ^/ Q0 V/ ]* T' @
dasm 输出档案名,地址,长度
4 E0 V$ P P4 u' Z* I. o 输出程序的反汇编代码
^7 l/ o+ {: q& M- t4 ] g- s* H P 例子:
& F# z' {1 M: o. T4 T' \1 W6 i% `" Z dasm 01.txt,0,100000
& S- p5 d* D2 s2 d* U 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
& o8 h* n8 l& B/ |! V. q
' ^7 ]* f2 W! u softreset
, [9 C. A) L9 F/ R: {) N 游戏重启, 但不重新载入ROM
. S. l% d6 k, R- n; Z$ L1 V2 s( M5 V g0 W$ p5 ~( N
hardreset
1 X. }; K$ u& s: b4 o0 w1 | 游戏重启, 且重新载入ROM' Q+ d( n. i1 n: u( J- @' F( n( W
" E$ N+ z0 q7 @5 ^8 @; z
snap xxx.png
% D& g: c( J1 {; r. U0 K6 r W* {4 k 截图为xxx.png( E( W9 @& y- q% r- [6 }8 w
; E: Z3 J9 h( S x
8 r$ r( ~( V" A3 y, t1 R
3 q: U9 O3 ^! A# ^9 K* ?5 K
6 @- J, h" e0 J/ Q( h. g3 w! z$ {热键:
3 Z, E- K4 W P( C0 o9 ]1 | ~ 中断游戏* @! m9 j& v$ U5 ~9 Q& q; I) V" \# U
F5 运行游戏3 E$ Q# `5 I% P* ?2 f
F12 运行游戏且隐藏调试窗口
5 d- o) M$ v7 u0 H F11 步入, 单步执行, 会进入子程序, `( h( T. ~9 f* H4 a) b5 t
F10 步过, 单步执行, 不会进入子程序1 k0 Y3 q, v* P' x1 ?0 p
Shift+F11 执行到子程序返回/ ~0 N8 Q# M* o3 d f: M, I
Ctrl+M 内存浏览窗口
0 E' |$ v, {. E' y F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
: T2 }$ `, }- ?3 b+ l+ C/ M; S1 L* F: w7 s
{:4_94:}
* `% a% K( ]1 r
" o K, y/ T' x/ ? i6 j; s |
评分
-
1
查看全部评分
-
|