|
|
3 ]; @/ x7 h s$ L3 n很快速的整理我自己常用的指令
3 x7 Q" }6 f: ^9 h
* _# W( z; E0 R# Q0 u0 d: x{:4_112:}
( C' _' G8 ?( U2 O4 }3 A4 y; c+ H: f& }& v; E
MAME DEBUG常用指令
3 i9 F4 {3 w: T! E( s& A) l9 V5 Q. q, P! i8 d7 n1 R# \. q
内存搜寻: ci, cn, cl% ^4 L5 V& A% O3 ^
0 v% D+ M4 f8 T9 T' ], v
ci
( B8 M) ]! K0 f. B* s( N 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
/ k1 @/ j0 L% \1 x" Q/ {
" @2 _( Y, T# u. x5 {; S cn" r, u- @2 ^2 e7 _' ^
搜寻指令/ y" }4 J! }+ M
例子:+ x, f8 G4 s" W0 Q
cn eq,60
& g! J2 R2 Y; J 搜寻目标等于60 (十六进制)
* e" E2 p5 v) D$ T8 J: m 5 @4 O" G% p- }$ X
cn eq,#96
) G$ U4 b e2 w 搜寻目标等于96 (十进制)
' i, B4 Y' b2 j5 C1 R
& A) @. z* P; }: }; f5 C cn eq7 D' L( s( {+ }0 B P8 t E
搜寻目标的数值没有变化
! e2 f D% S# j: C2 V- D- L8 I9 X- ?& L* h, u
cn ne# ?+ {+ R8 `, P* s
搜寻目标的数值有变化
, x& b! e+ C$ a
+ R4 L, d5 [0 |& z& C' n9 [ cn +
- x. d' r- F- i3 D" u( d H, M 搜寻目标的数值增加
2 O* _+ |+ _& a ^
& w8 R: b8 z9 v) M- s$ n2 a cn -: I1 ]; ^9 Z6 U: N5 r& R- ?5 i
搜寻目标的数值减少6 T g. ^' M" A
: ^# s0 B& O# H" Y
cn +,3& Y; t; D/ |' z( O5 Q8 Y! p2 H
搜寻目标的数值增加3 (十六进制)) ~& i+ j: Q1 |# R) t
$ H. Y4 }9 z+ k k3 L cl
+ a" s* m' ^: _, l1 ~; v z. O- J 列出所有搜寻结果
9 ~* {/ d# D v4 D1 ?, d9 x& J0 [0 c, i3 p" P
cl xxx.txt
+ w q( W! M2 {6 d) ~0 [& R( p 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式% P: R+ d# z1 C5 B3 }2 Q4 G
7 Y5 {) N1 c" \8 x
, I0 g- d6 I, V8 \* {0 o+ r7 Y) R- b内存监视点指令: wp, wplist, wpclear. J' f, C( I. ^( E/ I
例子:
: A2 h2 u9 h6 @: b wp 1234,1,r
" q2 e0 }# y( Y6 l9 ~ 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度15 O3 \& E' t& e) T
5 S! B6 \$ f# X' u+ U7 }5 C) g
wp 1234,2,w
+ ?0 ]5 [1 F7 W0 @/ h; e 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2, A/ n+ c1 [" t" B v) ]$ X O
- t0 s& n+ E' _3 b wp 1234,6,rw
2 J: o" {' O' g# m5 H 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
) C( Q: Y- r9 b( v2 v( r9 w: t2 c2 l) [
wp 23456,a,w,wpdata == 1
9 ]5 h1 p8 [# X 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
% U! A& \ \1 r# h
( B1 r7 c: w3 T) ` wplist# K, [' i% `; _ R. ^
列出所有监视点4 Y R4 Q+ y& A* K8 L8 ]
6 t! r/ j5 A% n' `0 V2 o' X3 U wpclear 3% d- f# k/ b9 _4 x8 ^, d
删除编号3的监视点6 H2 N0 D) U% K' z7 k% X
" t5 N6 b& |, }" a7 D3 z" v7 c5 c
wpclear s$ C9 D. A" w3 f7 M1 f
删除所有监视点
& ?: n" J( m# _: O
0 g4 b/ N M5 f6 s8 Q q1 f1 S
' l$ R) M, ?( o. j" D% H1 w( g) o# |1 N0 u
程序断点指令: bp, bplist, bpclear
- y9 Z( Z% b0 F- |% B8 b( X 例子:) @! [, _+ D! p! w+ \; @
bp 12345 w0 n" Q) ] Z5 V: S; d. p
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断 f; d2 g2 f4 y, N
# e( ]( N8 E. f4 p3 T g+ a3 Y7 H5 e
bp 23456,a0 == 0 && a1 == 0$ D. i7 N4 \8 R" C1 {( _
在地址23456下断, 且中断条件为a0等于0以及a1等于0
, X5 B6 R6 J0 o8 g- w% ]& k5 i
# v2 D0 u" X2 j `2 v( W0 v bplist
4 W6 T0 T) r4 y, K% ` 列出所有断点# w% I! q; m% c; j
5 ]# z0 d5 v0 S) p6 G- f4 D: O* }1 N+ }1 e
bpclear 3' `; Z W$ \8 X% q* j
删除编号3的断点1 Z( R) k0 f+ ^3 @5 h; D, f
$ C0 C' }% V0 b) b6 t' t1 m bpclear
4 [4 O0 L5 M* n 删除所有断点6 P/ o: d( z8 U! n2 T/ |
) P/ G! C, l* R, G F
/ U# p+ x+ e+ M4 {( o& K% V+ D) z
) z- g6 o# Z* U6 w) ~跟蹤紀錄指令: trace
4 v& q9 _, E% b* t 例子:
& F' k3 p, `7 O* @# i trace 01.txt- O5 Y; V$ {8 k B8 {# Y3 m0 C' y3 C( u
跟踪当前CPU运行的所有代码, 输出至文件01.txt
; o/ k- ?( H0 C, C, M9 L: i" @9 R4 o# G0 ^, r, e" h" M5 A
trace off
$ Y0 M0 V0 i5 N. u0 O% B6 W 停止跟踪, 并且关闭文件; h1 {4 n* W6 g& U; ^: a
6 o# g. _0 A; X% P
trace 01.txt,02 W5 l5 j* ^0 V! d" J
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt# Y1 {; e9 |# f0 t3 I. p
" ]" {! h4 \3 q' a5 R$ L1 j* I# J trace off,0
6 v) r+ f* j- {+ Z 停止跟踪编号为0的CPU, 并且关闭文件- I# [* y6 j: e" Y7 v9 z& f
4 x% }# @5 ]% U8 `4 | trace 01.txt,0,{tracelog "A=%02X ",a}( g6 e0 }& p# r/ D/ O- }- } k
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt B; ^. n0 ]4 o4 z5 W
并且在每一行的前面, 写上"A=a "4 _" B0 L$ ?* I
"A=%02X ",a为一个C语言printf函数常用的输出格式
+ B# `0 K% r ?1 V H* d; q 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
% C$ ^" V8 r/ R+ U; D X表示为大写十六进制数 D6 t; S3 G: ?0 {$ N
& S" |- ?0 d! ?$ i1 b
: @$ ^' P- n: B3 V( V
/ P9 ^! i! C, a- h8 C e5 T. d内存直接写入指令: maincpu; g2 B- y. X& A9 e
格式为 maincpu.[][]@地址=数据+ @0 X6 A6 B) v+ O' w; R
第一个[]:, `( ]9 O5 z% o! Y/ `+ k% p" V
o 表示ROM地址
/ k. _4 |* t9 Y" ~% h! X- E p 表示RAM地址
2 J; y. Y& i3 |) z( F# Z2 `1 K5 C% F3 O; j. f; E
第二个[]:& j. M0 `7 c- z' J" d
d 表示4字节( D Z! T2 |( v% ]( F
w 表示2字节
, |% V- U1 O- g/ I b 表示1字节8 Z0 \! D: s; @" F1 o' ~( ?! L
* D4 n; p! C& O 例子:
6 k9 K, c, j) @# E$ j. e$ S, [: a maincpu.ob@1234=FF' G8 c* ~7 S! l
在ROM地址1234处, 写入FF一个字节
3 [6 y* D j% _+ t
' R# R) [' L& ~ ]* @ maincpu.ow@1234=4E71
) ]& N+ j4 |$ w& M2 J9 g' M 在ROM地址1234处, 写入4E 71两个字节2 ?! \2 D0 `, i. n) C. K& [3 v
6 a: u# t* \2 l: i) P
maincpu.od@1234=600A4E712 R( v; h3 _1 j
在ROM地址1234处, 写入60 0A 4E 71四个字节
# g8 W7 r4 c3 x9 R! D( V: N# r
! F( G6 @) C2 N |" ~ 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
9 Z4 l q K7 o- D/ |
1 E8 L; e* U5 c8 n
. B% m7 y/ @7 d; ^: V# S/ V' Z其他:
/ F2 T; G/ z' N7 D dasm 输出档案名,地址,长度
0 r, Z5 v+ O4 }2 U) U$ n( h; j# o 输出程序的反汇编代码( R# \& l* P3 i
例子:
2 b2 ? A2 B9 U7 O dasm 01.txt,0,100000
. o) r# [- d3 G$ ~) w 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
) Z3 F$ L6 C% d# P. P9 o
! A3 n0 M( V0 H* y1 ]0 N5 I softreset/ d6 U# C2 U5 W! a
游戏重启, 但不重新载入ROM m4 H2 O0 |8 @7 r% F
' q& X( g3 ]5 w% s" m% I% G
hardreset! ]1 N' Y* v$ V+ p2 g H
游戏重启, 且重新载入ROM Y, X# Z5 Q8 @- C. G4 X d
3 k$ {# O; C6 _2 E3 | snap xxx.png+ Q6 [" e5 b$ B3 f6 b
截图为xxx.png
1 N2 F' i) a% S, M* x$ V% U
5 S) _5 r, t" a" n
1 x0 R6 c' n9 `8 u
, c6 O, ]+ @& p( P/ B ! B# B8 u8 w8 O! ~( x
热键:
3 @9 M' f" k3 S0 ] ~ 中断游戏
: Y R+ F; @3 Y, e F5 运行游戏
5 N$ q% b, f, e! k" S$ D! x$ W F12 运行游戏且隐藏调试窗口
. [* w# Z+ m7 I9 x1 p F11 步入, 单步执行, 会进入子程序9 S) n% O: E( x8 z1 {5 R
F10 步过, 单步执行, 不会进入子程序
7 d/ [6 p; Z$ `2 m" c; _ Shift+F11 执行到子程序返回
1 a, R1 i' ?) S( H' H' t. s Ctrl+M 内存浏览窗口
/ b. R, F% [3 b7 Q/ l F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU2 m7 i( `0 p4 T8 t
$ Q9 {% |/ w, M% L% ~) K" Y
{:4_94:} 9 V e4 S4 m0 v* i2 n
3 I. a" Q$ {3 f) U, _# G
|
评分
-
1
查看全部评分
-
|