|
|
* k- p8 x) {2 Q9 z( F1 u
很快速的整理我自己常用的指令
) }4 w* r9 f; ?
) ?$ j. ^. p( X{:4_112:}
) I( c# m( U: s* D' e: m+ }& l5 D% L$ o! N& Y' ]* q3 M' x
MAME DEBUG常用指令
- W+ \$ i7 h% t0 W5 b
$ F( k, T6 u0 l: B内存搜寻: ci, cn, cl3 u8 ^5 s+ E' f* k; M: x( X, s
& f! o' x6 T* J/ c5 E8 ^, a- W* C9 z7 E ci
2 V7 N) g# D6 J* [8 P4 F. q( O* R 搜寻任务初始化, 每次搜寻一开始一定要输入这指令" K) O" s4 c, i( H
# E/ a$ w6 q0 O! @% W0 ~& P
cn
+ \+ F" e" ]1 S3 I8 D) ^ 搜寻指令$ w0 w$ ^& R7 }' t& X9 n; [; F
例子:, j$ e- Y2 U7 I9 A5 E0 ]* ^+ R
cn eq,60
& b# l6 Q7 K" P* U5 S 搜寻目标等于60 (十六进制)9 a' T2 W l# I8 p$ E' F
' ~* Z& _; [; ]* ]* P cn eq,#96# w6 O# b8 ^6 H- h* q8 @4 q
搜寻目标等于96 (十进制)( K4 S( ?. y# u% n
6 z4 e/ I% @) u. {7 s, d/ V
cn eq
6 t* c/ Q7 \1 m& R8 D8 R2 Q/ z Q# G 搜寻目标的数值没有变化( ~2 i/ c- r6 [" t
: ]2 g; G3 b5 ]+ B- z( i cn ne" c* ? F2 K( c
搜寻目标的数值有变化
& q; v" F0 p% S6 j6 T/ U " {% h! V* j# R
cn +7 W; f) a$ M! W7 X
搜寻目标的数值增加4 d) W0 I' P6 a4 ]9 \' q3 p
" O4 h6 b$ k1 I' z/ r* I0 X8 J
cn -/ E A1 M. C5 N! X" @) @
搜寻目标的数值减少
. a q8 M4 ^* u8 c% A0 S
' w9 Q0 q! r$ \' A+ a cn +,3
. l. w5 x |8 L$ [' e 搜寻目标的数值增加3 (十六进制); H% I$ F- j3 r o0 C" A- R4 y( H
8 f- d! e6 |" o$ m- {
cl( r) {8 V4 t. |. |( Y
列出所有搜寻结果* M5 z/ r' B; C) f3 }$ Z
; r4 G- K# C3 Q6 }, {
cl xxx.txt
# ^6 k' Z) r. Y6 ?, ? 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
/ X8 [) n2 ~$ S/ ?* Z6 o! b( O4 Z* A) k
" F" @1 K) S9 \8 y! A D; m
内存监视点指令: wp, wplist, wpclear
+ f" [1 y% U2 E X 例子:1 R$ S4 x+ l7 X% F4 e: ^& n) |8 a3 P
wp 1234,1,r& w+ F8 v; F7 g1 d3 W) ?+ ]' N" W8 Z- L
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度19 x' j0 G+ c7 Z* |* a( `2 U# y
4 U, j) t- |3 x& a3 X
wp 1234,2,w
1 b8 q2 U1 E* N; L9 R 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2" x! s9 M8 L: m9 J* s
: K& Q; A4 w {% ?- p8 `3 U" c wp 1234,6,rw! M' M5 W2 v* ^ E( `$ D& o
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6 c% X5 t8 O) _1 Y3 ]( c" L
$ E+ D6 z- u% V( y8 x4 T' m: f0 L
wp 23456,a,w,wpdata == 13 _. J2 \( D1 H" r$ l$ `4 h
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
) O' l9 X' P8 G
% E% t6 Q! j; M+ ~* T3 X7 B5 P. m wplist) I5 Q% u1 ?6 x4 z% u( v* c
列出所有监视点+ d3 [' {( X3 i' r
; K3 H7 S0 R4 `2 M* Q
wpclear 3# C* r8 A% K2 R; w
删除编号3的监视点* R' l; A( t8 T
7 o: X& Q+ ~5 a9 M9 } wpclear* r* n1 n$ r( O8 ]
删除所有监视点, ~3 c. ~; q/ T9 p8 \. p8 C
$ h4 ~# x: i1 |- O0 o
. w1 p2 H/ ?) N2 D9 t" \" `( u3 y. y9 g) ?$ C6 ?# k4 ~
程序断点指令: bp, bplist, bpclear1 J& z- R9 v& \; o
例子:( }* a% m# `7 s/ G) H+ @9 k3 t
bp 1234
% q( r3 c, C c0 Z1 t 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断6 {8 X( J- E- W/ L
" Z, C6 X) s% D, e& K! _8 n# H) i; ^1 ? bp 23456,a0 == 0 && a1 == 0
4 ^) ?8 t ~; L c, f& c( E 在地址23456下断, 且中断条件为a0等于0以及a1等于0) l( I# I7 |/ }( G. a% x# u
# u A" w, l. U bplist
* j4 `+ N6 {* `# m) { 列出所有断点- T p' D# v# {
/ {, d! G1 h, {5 r! ?# a! u% a bpclear 30 @1 V! |+ N y/ b( _! C
删除编号3的断点
+ L' }4 ?1 @5 O$ ]" W/ H: F1 @, a( M2 z
bpclear3 X) r& h9 R+ o- c5 d
删除所有断点
& N; M8 ?+ a! ~6 R- e" z- \) B
- t1 l) E: P+ Y8 N( v3 U' T4 Z
q+ x5 x/ m$ u! T
4 X. t9 R/ F1 R2 M跟蹤紀錄指令: trace7 c$ p; W H; I4 n7 g% S7 ?% P0 p
例子:
' O! s2 [6 C( F trace 01.txt4 G% p, G# M8 I" J: H& n6 o
跟踪当前CPU运行的所有代码, 输出至文件01.txt
7 |9 f x9 n/ T+ G4 T: z# v# d9 ^* I# O) w' B$ i5 j5 k" Z+ p# @
trace off7 o6 }) i3 O# ]- K* E4 q
停止跟踪, 并且关闭文件: U$ [& j* L1 C0 y: N6 {+ Q
4 s: @0 j3 o6 G7 [3 h- s
trace 01.txt,0
, o- q" [0 n' M3 J0 s5 ?2 m4 d 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt' s/ ]4 S% D3 \7 V
0 i2 n0 R6 v# r" b
trace off,0/ w- t. L& J2 V$ |% ]
停止跟踪编号为0的CPU, 并且关闭文件
4 z2 X1 z d6 t3 X, {; K) i% P- Y) [. V3 ^4 L+ h
trace 01.txt,0,{tracelog "A=%02X ",a}! `6 m9 t; \6 J& v* U
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
- N! S K$ Q# ]! @2 U* N 并且在每一行的前面, 写上"A=a "
& y( \3 ]& L% c/ t( N "A=%02X ",a为一个C语言printf函数常用的输出格式
" |) R7 k+ i# N1 o 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
5 G7 m# M- U4 j, K X表示为大写十六进制数
/ J- `9 v+ e3 @ p1 S: G
: H1 b( ~8 t) ?) V6 v. W, b# K" X/ w5 j' P5 w; ^/ X
* M6 F* x- W# \8 h内存直接写入指令: maincpu" {/ t+ U$ C7 w$ T
格式为 maincpu.[][]@地址=数据
. u& V* `1 @, \% i/ _9 P( a 第一个[]:5 b! J, |7 B2 k( I' [& N' k% V
o 表示ROM地址
* u, @2 q5 W* Z p 表示RAM地址
/ T6 F7 N8 d) t
/ X7 ?8 V6 ^, ]/ w/ Z* x 第二个[]:
/ z) r/ J$ |) r z# w8 A d 表示4字节) {7 T' p- W4 T; r
w 表示2字节
' t ^" ~- k- {& b b 表示1字节- O, |5 _3 T$ c y. F' Z2 l( J
8 r u; k* Y6 W
例子:
4 x3 X! f8 j( ^% i# ^/ ` maincpu.ob@1234=FF+ U- b) Z- B! A5 m3 y5 I$ \1 ^
在ROM地址1234处, 写入FF一个字节! z* B2 \, ^0 i9 Y7 G8 x
) Q$ H; i0 o3 a+ x
maincpu.ow@1234=4E71' c- S% Q4 j2 u
在ROM地址1234处, 写入4E 71两个字节
) X+ L: N6 n- j7 J+ T6 T0 i6 C+ n8 P* Y- ^5 y/ F: h+ j. |3 g4 M
maincpu.od@1234=600A4E71: {8 n- R; V5 z. g, k4 M
在ROM地址1234处, 写入60 0A 4E 71四个字节2 {7 X2 \- s5 x3 k% e
4 E f# l8 x1 r2 Z4 w+ H 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
, q+ @+ ^6 S) a4 @6 ^% q8 b" f 0 f3 |4 O' j# b# q N. p
$ j! T: C& R8 f7 j8 ?4 e
其他:8 G9 p7 W6 G7 N, P3 N: c0 c
dasm 输出档案名,地址,长度
6 O2 a% z( n$ V; G7 H m: X 输出程序的反汇编代码
" c& j4 r, U# p7 A7 ? 例子:
6 E' I5 w! g5 z- F. u% } dasm 01.txt,0,100000
5 V" ~% m" w j8 J. O& C5 }# Y/ D 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
0 B# o6 P( `3 L5 ]3 U2 c+ V1 S7 W f
softreset4 C, x% M8 O, d* b
游戏重启, 但不重新载入ROM
9 w, {8 L$ V9 O" s2 R3 A( e J; y- W: R* U, j, W3 ]
hardreset
) u- Y2 K2 w6 ?+ ?% \8 J; y 游戏重启, 且重新载入ROM
+ J) q+ A `' I `, y3 ~* l* @" `
% ?3 l8 d9 M- A" @8 S% Q snap xxx.png
- O0 X7 M) D6 r# M# W1 K 截图为xxx.png
6 v {' h; n# h. B8 d
% R' e% Y7 R+ S
+ ~! R4 z# X+ b4 z( @
$ U, ?/ _! B! g: o
- a% @6 J; q( Y ^8 i: S热键:- Y+ F: C* u. f9 N" k
~ 中断游戏
1 u( Y( R5 u- q7 C+ v6 y# O F5 运行游戏8 o R- c& l: S* {( K5 |3 W
F12 运行游戏且隐藏调试窗口4 k; t3 O/ ?/ |$ g: w
F11 步入, 单步执行, 会进入子程序+ A' l; w( X1 d& W1 x6 F8 J- k
F10 步过, 单步执行, 不会进入子程序
4 c8 Y3 h8 `( J# g2 i) Z" ~ Shift+F11 执行到子程序返回# b0 C0 l* U% M- Y8 E5 C# M
Ctrl+M 内存浏览窗口( c! W1 P, j* r
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
" T/ s' i+ H+ L7 b$ R
t/ l! w, d9 j6 l0 t/ P' _0 b{:4_94:} 0 u0 ]8 R5 P( H' y
5 B; n9 g+ B) K# n3 c$ P& S' K! O |
评分
-
1
查看全部评分
-
|