|
|
7 G7 S- }% }! _, _: \3 j; I' \很快速的整理我自己常用的指令3 \$ M. Y! K- C- Y. s' |7 Y" }
8 U: D6 x7 P1 m$ P- t{:4_112:}
" N ]4 g6 h, l/ Y6 I8 P e( Z. e: \* p( M+ ^
MAME DEBUG常用指令
) T1 y% ]6 N5 |. u
4 c7 x- c, W/ o. j H$ V内存搜寻: ci, cn, cl/ S+ w! O' f) F9 ]- U
( e# E6 T1 j: i! J0 c( _7 ~4 U
ci
- y7 E/ k6 R9 F0 l' |& u& T; \& D 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
|3 F3 T4 e1 ~9 \3 G3 b8 R0 z3 E) C0 i2 V, k1 q
cn/ c6 I. C1 ~2 Z
搜寻指令8 k( H' v/ N0 R% c* [" I3 h
例子:
B- }1 p! p- `% O! \; m cn eq,60
( h1 J$ i4 v6 b; J/ v8 j 搜寻目标等于60 (十六进制)4 N+ w* o' z5 d$ Y F
[: L% S' T5 x
cn eq,#96. [; ~) Y% B( E7 A# u
搜寻目标等于96 (十进制)
& a [6 K* I5 S1 g/ r7 I$ t ?8 H9 V9 O a9 D/ M
cn eq1 y5 ^5 o8 H$ U
搜寻目标的数值没有变化0 w! u F) E+ H# g
J3 t4 V2 ^- T/ f! ^
cn ne o- g3 [) n7 w/ b' O7 t
搜寻目标的数值有变化7 L+ t+ `$ C- B
& C7 `, E* \- _$ T# U P2 M
cn +
2 D& K+ ~6 }8 h* W( o* c. w' Q 搜寻目标的数值增加8 I9 c. p! @9 _0 f! o: o0 U
* E! t7 U. t! Q- C$ C1 k! y& F3 u4 k9 U cn -& x: {$ A# @ Q! k; C( R
搜寻目标的数值减少
. a, t1 }- s- Y: l# `, _
- u3 u! |: }5 M+ ?2 f# d% @9 I cn +,3
. m* E, q% Y r4 g8 n" I 搜寻目标的数值增加3 (十六进制)
9 b% m7 l) j/ w, D
4 B9 Y( L: T1 Y5 w2 C/ z- F" O cl
) K, \$ Y1 J( C; |* E 列出所有搜寻结果1 B. R" S! m& I7 `+ S$ G
7 G* v0 U2 O$ F4 \
cl xxx.txt
6 l9 n4 \1 I6 B, Z5 @ 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式3 |' ]$ m7 Q0 _; f9 @) s) i d
& F- s, O$ A- z8 t/ {# ~! i ( I: I5 b, q/ e/ j' {
内存监视点指令: wp, wplist, wpclear7 M( v( e2 X- V$ d/ I
例子:
: l3 [; }# @1 |& s; S! ?9 c wp 1234,1,r1 N, d% t: `; y; J5 n' G% B
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
3 U. d! u2 J: `3 o! |( ?7 a
3 {( L/ v, g, R D* g3 \2 a wp 1234,2,w& q. p! z' `- C% [ ~
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
# \8 h& X ~; E* ^5 h2 \* A; u M( f
2 H2 `, ?& W! K3 G$ ] v3 n wp 1234,6,rw' t0 X8 ?" Z: K" ~' ?2 P3 K
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
# K) p) X/ E+ K8 ^+ P- b6 E( G
; S# I0 j1 y1 ~2 u- }1 G wp 23456,a,w,wpdata == 10 e5 Y9 X: B8 @/ X2 ~
在地址1234下写入监视点, 数据长度a, 且写入的数据等于15 p& U4 \5 O) `0 _3 M8 m8 \
0 R+ y4 R! W1 v$ U
wplist# b9 T: E- @, t# l; P0 A' v
列出所有监视点
+ }+ r: p e% N: F* z7 k2 {& A! k+ U/ f
$ B0 v% F# S$ C# t- {; X; y# L G wpclear 3" z* a! v! s. P/ O0 l* L/ H
删除编号3的监视点
8 K& A3 u x5 j: n8 ]
9 J# W3 A& w/ w9 u q0 {/ g/ A1 d0 W wpclear. p& g7 n' O& l' j
删除所有监视点
U$ v! `. A& u8 Q9 L$ r. U9 |- r7 V( U. f. f
' u' {% P: V1 N6 q7 Z
$ L! x/ F+ q V* S% w; M程序断点指令: bp, bplist, bpclear4 n$ y6 p3 ]6 F1 S9 N d
例子:6 R3 ?4 S$ r0 l' v3 W5 m$ [
bp 1234
5 @3 j) w+ j6 s 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
. U( c3 N" ~0 R5 c2 H6 s
% {" ]4 @9 W) c+ E& x$ N# z bp 23456,a0 == 0 && a1 == 0
r- G+ D: l' _5 w# _- J0 T 在地址23456下断, 且中断条件为a0等于0以及a1等于0
" J; j" X. p8 B3 a( n/ Z
( A5 [; v9 a, O/ p' X5 c) k* a* s bplist
5 K; Z4 v8 i# b, W 列出所有断点0 t) H7 G) |! x
; T( x" T3 G0 M( @! U
bpclear 3/ s4 O/ j/ G5 O. w {0 _ }6 a
删除编号3的断点
+ o4 A$ T+ c7 D3 E; A$ V, w! l w# r
bpclear
* }/ d+ C. C6 e2 f8 I# f 删除所有断点
! [4 b+ B0 Z+ Y u
0 K/ {8 P( H$ C! }1 K. {7 K# Q3 P 6 u2 R# a; _% _
) v! c* w. i- h% i/ b# s0 R
跟蹤紀錄指令: trace
+ q; k) z: k: E9 t9 P 例子:
6 U/ B1 @- C' H+ `+ h trace 01.txt. [$ u" C! h8 H* d& s3 `) {& o0 f
跟踪当前CPU运行的所有代码, 输出至文件01.txt
5 u+ p" u# m8 i+ V* e4 x, T G5 l* q' w, _
trace off9 i0 C) E/ e2 w, g6 b
停止跟踪, 并且关闭文件
4 U9 h# ~- T+ Z! x4 t, T, G
3 B& L7 d G2 ?, k+ P trace 01.txt,0
$ Z0 F* v& N6 V' ]( U) ` 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt. `6 B1 d' R5 j# w
; @' Q$ ~& G/ A a0 Z3 K trace off,0' i+ P9 B- F: {9 U$ Q* y
停止跟踪编号为0的CPU, 并且关闭文件
- M9 ?, T' I3 t B( a: U" Z8 U9 Q8 v& k2 G+ G! W; d' S% \; B
trace 01.txt,0,{tracelog "A=%02X ",a}
- ^- C5 ~ s: }8 L8 y, c 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
1 Z' w% O, j/ n4 s' H 并且在每一行的前面, 写上"A=a "' F3 i0 s3 R. d7 V& R; F
"A=%02X ",a为一个C语言printf函数常用的输出格式
, z9 m; Z5 Q* G" j; o# N U2 ` 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入/ @8 T+ A7 G0 V( N2 `' A8 g7 E
X表示为大写十六进制数
5 Y3 n' J' \& d/ }0 j; @4 ]' K7 ^$ V, O1 n2 R% v1 f
1 Y& O `! ^/ M9 J
5 B" V5 M9 T9 j1 o8 ^& b& z+ c9 q内存直接写入指令: maincpu
" @+ l q+ `8 p4 `& K 格式为 maincpu.[][]@地址=数据
/ i6 a4 ^& }; j1 ?! G9 O 第一个[]:
0 Y' ~6 K6 S4 [( w o 表示ROM地址
1 I2 {1 x2 z# m: F p 表示RAM地址
8 y! s$ g" l& D1 P- ?% o" l' Y& {+ N) @* f4 Z4 M4 X
第二个[]:
5 }% |/ F$ @/ M/ [ | d 表示4字节
8 r8 m1 K. n) ^. `4 v, s w 表示2字节, t; U7 d- U0 u3 S$ {0 T
b 表示1字节$ o$ a2 X, W/ y) g% s" s8 e8 B
; g' B* _; [! [/ w3 F 例子:
, @7 q3 _( k* E0 o' y maincpu.ob@1234=FF
+ x( a# k6 e6 j k) l9 d" i 在ROM地址1234处, 写入FF一个字节
$ z' A) H; M8 P5 X
) t J! a5 u8 ^# k maincpu.ow@1234=4E71: u. j5 u9 F" |
在ROM地址1234处, 写入4E 71两个字节- w/ [1 S9 ]1 I: ^9 a
& V" H2 ^" ]6 m% w9 A% y; b$ m maincpu.od@1234=600A4E71+ g- L, J" O; @$ H; o' U; A
在ROM地址1234处, 写入60 0A 4E 71四个字节; P! o! C+ y& m
9 S8 F& Z3 w& U5 N9 I
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写2 P+ @$ R. {7 W7 |) ?& `: s
$ {9 T$ e( }! F! c7 L3 E1 O
7 B( m8 r+ i9 _! R. C, o. W
其他:9 _! u4 M- D, r! P, t0 T* R
dasm 输出档案名,地址,长度% ?! g) V# c& H, f( ?
输出程序的反汇编代码! j" ~* g& d2 g! K
例子:7 F" n/ E6 G# {, l) |6 i
dasm 01.txt,0,100000
4 A' J7 f/ m% {7 I8 N2 { 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
8 Q( V1 R4 r0 y- }8 |3 v! n' V& R$ s8 P3 I* Z' y4 o. M& |3 Y
softreset. w5 C) Q3 k3 a" s
游戏重启, 但不重新载入ROM
# W1 @/ G; k! k1 D+ J; h
) f+ y& M& L! _ hardreset
' E) i% X w" Y; a6 }& l 游戏重启, 且重新载入ROM
! J0 w/ s# m& i1 ]
" O7 K8 N/ }. R4 h. q+ @: u snap xxx.png$ S% k7 U$ O! B5 j8 G# E: m
截图为xxx.png
4 T- L& i# R3 S/ l8 ?1 N7 G4 K' @; C% S
5 F# u3 f- M4 L& h4 x
- f9 ^( _7 p; h8 ~; u5 t, g
" n1 Y: g- f8 N" j热键:
5 L: j; [ m4 u# k ~ 中断游戏6 k ^2 N7 o" E! I+ D O, b
F5 运行游戏
0 K- J$ Z. C1 u9 k8 L" r) J F12 运行游戏且隐藏调试窗口
% d) Z$ t1 q" G& q F11 步入, 单步执行, 会进入子程序5 g/ w" h, T* `! P
F10 步过, 单步执行, 不会进入子程序; T6 J+ m7 w/ E: J( e& y
Shift+F11 执行到子程序返回: ?% h7 r. I/ X) l
Ctrl+M 内存浏览窗口/ D2 g- r* X; Q9 i, O2 r/ S! a1 I
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU# `2 K" O/ A) S$ t4 s6 N7 n
* f) O/ @2 H% l3 L4 F
{:4_94:}
$ g" o- H* c. z1 }/ d/ O
" w# B+ ~' |. A$ K) f9 K, |* Q |
评分
-
1
查看全部评分
-
|