|
|
* u; X' ^0 t; U- I% d* B" M
很快速的整理我自己常用的指令
9 \" g8 b# n9 V: Y3 P0 a3 w9 s: N9 M, Y2 U6 D
{:4_112:}
' f' f$ S8 ^5 i+ f! Q/ C& Y+ v D: c: F& }) J% |3 J
MAME DEBUG常用指令9 A6 u7 Y+ A3 K# ] R. p
' n6 |1 w2 Q& H+ e1 t0 w
内存搜寻: ci, cn, cl; V* p9 p; n$ X) J2 U8 X, F
3 ?9 E/ m" d8 s8 }; j m9 I
ci) B+ ^3 J1 r u/ j* ]0 S! k) h
搜寻任务初始化, 每次搜寻一开始一定要输入这指令1 W& j3 L8 k* [& \$ d6 T0 u
$ X5 D+ q! j9 S0 N3 J# E9 a3 M
cn7 x: E1 N. Q8 Q2 a( j
搜寻指令
$ |' G: D _ U+ I7 o/ V 例子:
( j3 i7 C' R' O( w cn eq,60
& ~$ d# S6 Q5 S5 I% S+ l% s- C' } 搜寻目标等于60 (十六进制)
! D' R+ [8 V; N% _; F + `" W/ n( w; N( H, Q/ U7 N
cn eq,#967 T& ^3 t5 t. c# t. }$ `
搜寻目标等于96 (十进制)# y- X1 t# |+ F/ a
) f/ C' r9 ?6 ?. D0 A
cn eq
4 h7 i' a: W$ k9 R7 H3 u 搜寻目标的数值没有变化
+ ^2 T1 ^2 A! K$ {$ ]# e2 K( V" U4 {
cn ne: g m9 x' B3 O
搜寻目标的数值有变化' g! d. d( _% S" Z
6 Z& t0 P; G9 N5 a6 l2 g" {9 a: F
cn +, M; I. o$ B8 C' d6 p, x) l* [
搜寻目标的数值增加
( y( I' {8 d$ z: u a/ r7 F; _( X e
2 ]6 D, |% H8 p" ] cn -3 F4 F( P9 C g- \7 n2 P
搜寻目标的数值减少
C2 Q1 w% |, g0 V$ J# u/ ^ 1 @' r1 \* K4 M
cn +,3
8 P6 W2 L& y' Q( e4 k) { 搜寻目标的数值增加3 (十六进制)8 g; H7 A* z( j4 [3 z6 E
8 h% a0 p; m" c* [/ Y3 h cl
& s% V0 T- t/ ~6 z 列出所有搜寻结果
0 X7 U9 S5 Q5 ^& l' u g3 u, ~
N$ Z2 e. i: d cl xxx.txt
5 x' |$ T! U; A4 m1 W 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
. H7 X9 r+ U2 H, l3 q# J3 o7 A
I4 Y8 e) @- L$ ] 0 U4 ~$ Y1 L. j% g
内存监视点指令: wp, wplist, wpclear
3 Z# @3 a7 t# O( }3 u$ {7 C 例子:
3 b% ]- {- m" @# b# ~: B wp 1234,1,r/ K7 ^: W; {$ G# s- }
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
`0 M; S& [* H$ p
2 @$ _$ x2 m# M wp 1234,2,w# c# V: Y7 H# V/ `& S8 P
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
9 E+ u h! Q/ V& I a8 I+ i
/ @& a1 D$ v7 f M/ d. a# | wp 1234,6,rw
: }$ F2 w) W+ k8 w7 `5 h+ J 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度60 [1 }8 s2 A- c- B
+ Y3 K3 {/ C1 s' M wp 23456,a,w,wpdata == 1
7 ?4 W0 f8 b& v9 _, U8 y! f 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
8 t" g5 f& q0 Z6 C$ D9 |6 W% ?7 r" m
wplist
$ R0 V& \, L# T1 s, o) g 列出所有监视点
! Z0 U: E8 h' g, W" l' u2 A) A& H. t/ r) f5 T
wpclear 34 F& X% S: K: E' M- |5 P; L
删除编号3的监视点+ K: b. E' _2 T! b; G7 L/ }8 _4 ]
' n. v) C, `( q% i# w$ t. k
wpclear; Z \8 C @/ W2 B& e; h4 K
删除所有监视点
6 @& g7 l1 `' d
" p5 ?; e: _* K% t
; l, }# C2 ~9 O8 i0 [4 ^. z
4 U1 z4 O6 ~4 d, B7 f* E, f程序断点指令: bp, bplist, bpclear B) C" {5 c/ B+ j# h5 \# N
例子:) R; H& S/ p/ K' `
bp 1234
0 M$ A6 B: c' L7 R& Q) c 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
5 N# [0 D" W7 o/ d
z% o3 B4 E( y bp 23456,a0 == 0 && a1 == 0# ^0 L% l6 z( N( I, R
在地址23456下断, 且中断条件为a0等于0以及a1等于0; B! E: i; g$ i( d8 O5 }7 F- K" b
& U! s: [0 ?, {5 [% X5 _! I
bplist6 O( M# E3 ~2 ^+ A
列出所有断点
- h+ T! o/ C. b3 `/ i( b
8 X+ u+ i0 j2 m% o6 Y5 N! r bpclear 3* H0 | l( X( P' p X' X& F& d
删除编号3的断点: b# j( `) c# F+ u5 o
5 m$ y5 |( I: V6 q" L bpclear) `. \. A3 f$ b: D5 k2 b) N+ ]
删除所有断点
4 R! E# U+ S J- f
. Z$ y2 x1 H- r/ z. Z 1 N( C4 i$ _) j T. S; B
8 u) k1 i2 P4 l( E R6 q2 F9 T. y% H跟蹤紀錄指令: trace
+ E4 p; `5 M! f* ]( J 例子:: K& Q9 [" }: K- B* U) i2 t
trace 01.txt% U/ W4 _6 H9 D' O- b& A
跟踪当前CPU运行的所有代码, 输出至文件01.txt, r! v" V9 k! s) V6 @+ O
" b( J/ A1 u0 T* d+ x' i* p5 u
trace off- a: @+ h- K2 N) L0 ^2 H
停止跟踪, 并且关闭文件) L( f7 H/ O: P' z! q5 {9 V
& A9 \2 c0 P; b$ P
trace 01.txt,0
' {% C- Z1 |- S6 d 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
& \( N) o. h& p& A5 A
: `" ]: j0 D7 a" e( R$ n7 } trace off,0) m8 b9 R/ P4 g# D4 U
停止跟踪编号为0的CPU, 并且关闭文件% R/ w, |, _6 @/ a) R. L q' d3 I- m
' Z: l/ f- E7 B' r6 F8 D7 ]
trace 01.txt,0,{tracelog "A=%02X ",a}) m: ?% Y! e: K$ z' T G. d7 e
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# o1 G) G" e. x- D2 P7 c 并且在每一行的前面, 写上"A=a "
" I% H+ O7 C5 B/ P "A=%02X ",a为一个C语言printf函数常用的输出格式$ G+ J* u# L1 p
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
; g6 I- c( s' a- D, U7 v8 p X表示为大写十六进制数. z+ B; Z* D! I3 j2 L( I0 T6 R! U
) Y' S T, b4 V% c8 {; T: U5 `; O" R
) ]/ Y5 N" x1 I' Q5 h内存直接写入指令: maincpu
% D3 b2 i! J0 @) G 格式为 maincpu.[][]@地址=数据
; O: ^5 J' D& j! V& \, N 第一个[]:
/ M% G K2 G' @' P! J( L o 表示ROM地址/ D5 Y0 |. ?6 X, i( k
p 表示RAM地址
8 ~4 v3 Y2 n. F6 D8 `
' B9 m0 N% w" B& n8 _ P 第二个[]:' Y: Z6 ?+ D0 P
d 表示4字节
; `( s1 D( u& N [% W w 表示2字节 o% G* W( v7 B" }, i
b 表示1字节2 w/ `) X" V9 s& ~; V$ z$ ^% R, y$ i
: W, k0 A/ b3 `! }! r
例子:. H9 F1 Q" j( ]0 G: f9 D
maincpu.ob@1234=FF ~- Z/ J9 k; q2 S
在ROM地址1234处, 写入FF一个字节
' E9 C w6 G$ G; n! g* k6 C
% |) @. A2 M# m! ` maincpu.ow@1234=4E71( m& y% `; M1 J% w' P5 l+ @6 `+ U
在ROM地址1234处, 写入4E 71两个字节
8 i1 L* d0 b5 m1 [5 K: Y7 h2 ]/ J) r1 ^' g) k2 C
maincpu.od@1234=600A4E710 W) m1 U" n1 q& Q# k! M
在ROM地址1234处, 写入60 0A 4E 71四个字节% C3 t% F7 p. C0 [" T8 R7 e
( c% n4 K: K7 b& _
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写 H6 [3 [: r" @! x& R, ?
Q3 J: N6 T: k2 X& Z
$ t! b; z b# {3 a" [' U1 Z其他:
% @4 e1 v6 t; ?) V- `$ }) } dasm 输出档案名,地址,长度9 Q4 E6 ~: E# S$ V. q
输出程序的反汇编代码& J4 O9 W& s) \! Q8 j* R
例子:
% w: g" k5 Y7 N9 M dasm 01.txt,0,100000
8 q& r; \- _. Y4 d) \8 i7 K l 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
: y/ e x; I# e4 D" q: C, s: Z3 @- L* N3 D2 _) U; ? R
softreset
& ] B: D% t9 c2 | ?6 `. d 游戏重启, 但不重新载入ROM
5 _, w! p) M/ |. `- x! M/ j
5 Q& L ~# o3 H3 w& @* n7 q# u hardreset
, h! t" d0 h7 A/ f% m- [ r 游戏重启, 且重新载入ROM
9 `1 R( j, R5 R
# q, Y( ^* E* r \" j; b snap xxx.png( F$ v t) x3 [0 O2 T0 f X
截图为xxx.png4 h+ T n2 V' [7 t! B& Y
2 G) R- Y! |3 Q
* ?4 z7 [7 C. `8 S3 b. f6 d 1 Y- p6 S/ f# [' Z- m9 H1 y/ H" y7 E
' x* z# p1 p' A
热键:. ]2 B3 f m& f; m$ S" @/ w
~ 中断游戏' m s2 s& K$ y- R& ^
F5 运行游戏
' Y$ h9 F3 L* r$ s% x( x" J F12 运行游戏且隐藏调试窗口$ ?( _: N2 \8 w4 G
F11 步入, 单步执行, 会进入子程序
- c4 T+ ]. f6 D0 R3 ~+ C% \ F10 步过, 单步执行, 不会进入子程序+ q) a3 x& I5 ]+ w* j/ v& B/ X# V
Shift+F11 执行到子程序返回
; {- x: P, L& w9 J Ctrl+M 内存浏览窗口
- G0 ]. A: {; Q! u) X/ X F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU9 T7 O0 k y0 ]% \
5 Y* q7 `/ ?' }{:4_94:}
( {! G! O* @. {7 `
3 K& r6 [% t- ~7 Q% }# ? |
评分
-
1
查看全部评分
-
|