|
|
/ k2 F0 \- l* i
很快速的整理我自己常用的指令/ x) u2 J, k8 P9 V" `
# A# E9 `& _4 ?2 W+ p6 i
{:4_112:} 9 |" S* v9 o% _& P
9 g6 w5 Z. }' u7 w2 F0 [8 }3 aMAME DEBUG常用指令; A5 Y) T5 Q, Y2 C$ _
% i- G8 o, l& K2 h6 B% u, A
内存搜寻: ci, cn, cl
- [ b7 Y0 [1 [) O/ m- V5 f O: k! B- i9 q. G' G
ci
" q$ h4 t2 L( `& ~8 |& U 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
# G S7 { k F, [1 `2 `/ P. X" j
5 G/ w( x. y l$ s( J cn
" r' Z( F/ X( ^( N d 搜寻指令
; y3 i8 {: A! y: A& }) u: B 例子:
$ D$ q; o4 A y+ D( S0 T cn eq,60/ @! R a8 i- H4 J( W9 F
搜寻目标等于60 (十六进制)
1 p0 h: x; M9 q, e - \7 [ l8 T4 K) m) U' {4 j
cn eq,#968 F1 |# u4 A- \) f/ M
搜寻目标等于96 (十进制)* k8 _$ e% m7 P
8 \9 t/ }+ P/ j cn eq! {) x" C8 N" ~# F
搜寻目标的数值没有变化
% ]/ z4 ~' Y% W; r
$ G, e" c5 f6 u# O4 A- W cn ne; @" |& s2 ?% y9 P9 c! [1 q0 V3 p+ X
搜寻目标的数值有变化
$ c) S u# M* h6 O# _, C
: ]% T7 K0 U1 u& C9 B& Y cn +
. B! h4 l+ V# ^ 搜寻目标的数值增加
6 N, P, t6 [" X
, R( F4 @% |6 I+ o cn -
n0 a2 f( @ J3 S+ c7 w$ K j 搜寻目标的数值减少
& ~( v! U* R+ g" Z" z . ?# A7 ]5 b% M
cn +,3- i; T7 X% Q Z5 v% A# E% f
搜寻目标的数值增加3 (十六进制)9 |8 m! }" |) H$ U5 ?
3 @' P# q. k+ Y$ P cl
7 l$ {& a" H! v# D 列出所有搜寻结果# A: S4 a6 n1 I, s6 N/ R
+ ~ [9 U! }$ ?6 M4 I/ ~, |
cl xxx.txt
$ X! ]6 A/ U5 }3 }6 k" H7 { 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式5 Z$ v; O# \$ [; U0 n. U
0 Z. g6 D) }7 _1 w 1 C7 h- a6 |; o/ W9 Q) N3 r; ~7 j
内存监视点指令: wp, wplist, wpclear
9 S) q) D5 a2 u7 U2 A2 ?0 Z& p 例子:
. c+ m% O% w; v( H- C wp 1234,1,r, k+ o) P+ a1 T+ Q* f
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1 u1 O2 x$ h5 g. w9 u, C
2 ~) Q$ a) L$ m1 [/ W
wp 1234,2,w. v6 U8 b, m6 f. }. x+ Q; Y2 O
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
8 a& X4 B& Q" L7 N( i" T
8 b- U( J' y' R wp 1234,6,rw
' u7 g/ l+ }, ] 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6) X) E+ T# N U3 G7 O" @& a
$ F9 d3 g$ ?' C; |; I8 H% v wp 23456,a,w,wpdata == 19 _6 \; l# N" ~5 _9 n5 t
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1; F' A# K: P) t4 {; g8 A9 _, U/ p4 d
6 [% Y" l i8 h8 \
wplist
/ \( r$ I% u: t( h& H3 f; Q9 x6 A 列出所有监视点
0 B5 o4 R3 A @; |: R$ Q. X7 N( k+ Z& Z* F9 I3 Z# C+ B
wpclear 3
* F3 R# P9 \2 R. K% e% x 删除编号3的监视点$ \0 P0 u' ^1 n, v. f: b) P9 x1 X
& \# Q9 D9 K8 e. b wpclear
5 m) |2 {8 T- t& e' N 删除所有监视点
) A5 `" y* c! i9 F1 F: j( m/ B0 q; S7 ~
( _8 F: P/ E' E* z6 ~
% N8 I: ^- p! F$ v1 b, F* u程序断点指令: bp, bplist, bpclear
: K# S \# N% O% q& c( L8 y 例子:
+ F/ `9 W/ j `- A2 {4 x5 p bp 1234. b6 u0 [/ W2 [
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断, w! W- ?1 X3 {4 @7 l3 X
- e x6 A% m# V& H5 Z! ~5 `1 y: Z
bp 23456,a0 == 0 && a1 == 0
7 N' m% Q1 a8 L; o4 g1 f 在地址23456下断, 且中断条件为a0等于0以及a1等于0
! u- ?+ l* ~, W I" T+ E7 `2 L% U: w8 L( G
bplist4 {5 m' `" m( I1 e8 `$ o
列出所有断点
5 } M. Y, [# ]! `6 i# W
1 p3 ^! H5 c- e$ h( E# F, V bpclear 3* s0 t; i# O4 }6 Q4 [% Q8 ]
删除编号3的断点2 l7 D# `' d( O+ V1 y
% u& R- h2 X% Z! N bpclear
9 M5 k& r3 u, D; b7 d. D( i; Q2 G5 Y- y5 k 删除所有断点
' z5 v/ \) H; ~% ?% T. U
1 l$ K+ X, U6 X
5 D9 h Y; K8 f 6 w4 k5 U5 @2 {4 A
跟蹤紀錄指令: trace/ _8 F( g7 }* o3 m( T; a; c
例子:, e& W5 X$ ^5 Q
trace 01.txt
# d7 v9 ]1 b$ F 跟踪当前CPU运行的所有代码, 输出至文件01.txt
% ?: C9 [" s4 n. ?3 p+ j# `- b& A4 n7 e' L! N
trace off: R( B, M: M$ h- g
停止跟踪, 并且关闭文件1 B4 N B1 ?) U8 u: C3 ^
* D, q1 }" ^: U# I: U trace 01.txt,0+ p/ Z: K2 N7 a
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt6 E! r3 O1 r, E, P0 D( I3 w
{" l( Z6 _- ^- x- m1 A" j# L& z2 u
trace off,0
4 {2 H) L0 s; k, _8 M5 n 停止跟踪编号为0的CPU, 并且关闭文件, a' M/ q: ~0 g1 f: B$ |: O5 n3 Q1 s
8 M6 }0 @5 e- U! f trace 01.txt,0,{tracelog "A=%02X ",a}
- K; b& ^+ u9 h* b' P* A 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 7 Y0 {2 b, C' P$ C1 x t
并且在每一行的前面, 写上"A=a "4 j" H! A1 J$ Q$ y5 h. C
"A=%02X ",a为一个C语言printf函数常用的输出格式
$ y; {9 x6 A/ ?' o 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
0 h9 N% ]2 u& ? X表示为大写十六进制数
8 R, L3 g8 {4 e, Y+ j1 V5 F+ u( s. g: L8 K
" n1 O( ?0 n! {. t
0 L3 p0 m! \$ B9 i内存直接写入指令: maincpu
0 f# I0 S* O5 i. I" c1 e9 C 格式为 maincpu.[][]@地址=数据
8 ~" E1 m4 n$ f 第一个[]:
4 x2 a( d9 _' y4 n) y o 表示ROM地址
8 K4 @3 ~, G# L, T7 P% h p 表示RAM地址3 e; F8 c- W! E: M& U* E7 A4 c
: e; o7 e( ~( Q# ]1 m 第二个[]:! T3 z! |3 \2 _0 R
d 表示4字节
2 a. R/ u5 W. _: N/ {) v+ R w 表示2字节
' V1 U7 A4 j* J8 c b 表示1字节8 Q1 h4 y+ U2 l$ I
% u B2 a" I1 O5 F% c 例子:
0 l, n3 u( @5 I# A5 t- E% ]0 T maincpu.ob@1234=FF1 Y) q: H! K5 m; `
在ROM地址1234处, 写入FF一个字节
; t3 `/ t, K- s( o7 U6 _$ m& T8 W5 N% X+ A; l6 }
maincpu.ow@1234=4E71: k: C% ^$ j& S3 d* s
在ROM地址1234处, 写入4E 71两个字节
" W7 q' Q! w$ m1 {+ c H& x4 d) n ]
maincpu.od@1234=600A4E71
% O. i5 x2 R- l 在ROM地址1234处, 写入60 0A 4E 71四个字节
+ [$ I* _) b: D) ~# z+ L4 D @0 L4 {6 M3 A
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写3 A; c2 c0 d7 ?) X
$ W+ B. s/ }2 u: [9 X6 O) @2 e* q" y3 N1 ?! J' n( l9 ?3 i' Y
其他:& V& O# c$ \, k. I2 u/ `( J6 @
dasm 输出档案名,地址,长度: C8 d7 D+ ]2 p% S- z0 [7 g0 W) R
输出程序的反汇编代码& a" O9 o% B r4 x- h. m# _
例子:
& j1 x7 p9 N4 j2 J Z dasm 01.txt,0,100000) |1 t4 p# a! \( Q
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt0 I9 E) X4 z& b# s0 _# A! F0 X
, a$ `0 U# b) d6 e0 u. w- S
softreset
/ g* v2 v9 R6 c5 X/ N 游戏重启, 但不重新载入ROM# z) i& }2 e! a
5 R; Z( B$ ?: I- w
hardreset! d/ y8 b( |5 ~# z
游戏重启, 且重新载入ROM+ {# @; t& Y4 T( c- f
5 X2 X9 }/ r6 ? S. Z4 v* U# b
snap xxx.png
4 Q; l2 a# f- B4 l* ~# F6 I, u9 H 截图为xxx.png
; ?) Z0 y9 e2 Q
3 k; `% F9 D* U; d9 d% f% ^! ~. | - v( b$ f$ H ]3 B) n J
: |% ]: _' U+ N6 m a , \; T5 L! L" X1 ]5 ?: \
热键:, G, i: B& a2 _, w
~ 中断游戏+ j% j5 ]! \+ C2 M$ a$ R' P- ^$ ]
F5 运行游戏
5 W' j, o$ E1 w, p/ }* C* F5 R F12 运行游戏且隐藏调试窗口* W! p H* w. P( _* Q0 W! @: o& l
F11 步入, 单步执行, 会进入子程序/ b# ^* j( @+ m. L: a- u3 T5 ~5 v
F10 步过, 单步执行, 不会进入子程序' t0 c1 s: M+ [: H
Shift+F11 执行到子程序返回9 G+ g0 ?; S% ~/ v& o, a7 G* p
Ctrl+M 内存浏览窗口! U& k" b, s0 Y2 R) f4 |& S. m4 }/ A
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU6 ~; O( Y! _2 V
; m$ R- q. {9 Q# {{:4_94:}
8 }4 k6 L& D' O/ M8 J% ~% V' [. Q4 ^2 q& r P4 r( ]
|
评分
-
1
查看全部评分
-
|