|
9 H: Y& N; H% F4 @5 `* i
很快速的整理我自己常用的指令
+ E7 k* N- n; n& B! |7 \' Z2 l% H9 } w( F* w4 E
{:4_112:}
- y0 A; E, V4 d8 i Y/ U, { ?, c4 S7 ^
MAME DEBUG常用指令
4 ?7 I: E x& ~# r; G4 v
) t3 p, X3 Q6 e, r5 p# T; F内存搜寻: ci, cn, cl
; J' g+ N3 M: r. g# L
1 B) A' s& u* w3 U4 k ci
3 u! W$ s! b1 u6 p5 d4 t 搜寻任务初始化, 每次搜寻一开始一定要输入这指令' x/ ]9 x& p* S
. \9 ~ S' y( {3 w1 p9 Q cn
" F$ a' ~6 U* V$ j& k7 D6 v" q 搜寻指令
! r# D* R4 C- L1 G0 \' b 例子:& `+ P+ Y. U9 r! s, e
cn eq,60
0 l: T: g# |# ^, ~( n9 j 搜寻目标等于60 (十六进制)) x! ^2 q) y2 U! a
I- w! W" ^' r7 J8 j0 [+ ^$ m
cn eq,#96
* P5 R9 m% L) X7 Z) ] 搜寻目标等于96 (十进制)5 j- @9 s' k4 ?- W) [# Z4 P
! `& {6 {/ c! a0 o# F5 q cn eq
+ R. Z+ c! \+ U2 ` 搜寻目标的数值没有变化
3 ` p+ q; K, ]* h- z
( K, _- h( ? @) `2 U cn ne# o8 t1 ^* P- D _
搜寻目标的数值有变化0 P" C0 I- _; J# R2 Q
% u- b' E) ~5 t2 q cn +
4 l! J0 N& `3 B 搜寻目标的数值增加' A" }- h$ r, u& E4 E0 ~. C4 D I
8 x, b. D$ X2 G( d0 M/ B( D5 a cn -8 n' a; A2 p" i$ B# b
搜寻目标的数值减少
. H8 _( h' t! q0 W- @ - k, d+ X/ j, z" r/ }' E
cn +,3
. q% o2 H6 c: K* _% o9 \$ ]5 m! m ^ 搜寻目标的数值增加3 (十六进制)' }5 k: f: \1 Q Y4 a
8 R w7 `2 N$ [4 I: B* Z( U
cl) U; N: H9 [' O: a
列出所有搜寻结果 S. w3 z7 }! z/ s/ _* k- e; {5 H2 x
1 O! g9 I% T/ Z: t8 e/ ]2 ~
cl xxx.txt
5 N4 X8 T$ G' {2 M5 J" S 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
3 W; q& C" k5 ^, g( c: s
" N4 ^! x- m+ @2 Z. j - r! K5 n* ~' a3 {0 ` {
内存监视点指令: wp, wplist, wpclear
; r. p8 N7 I- Z% W 例子:3 }. z R+ o* {- v9 q
wp 1234,1,r
" B* G; s6 D9 [8 H& Y" D 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
8 d' Z P$ h( S/ x/ i% I7 Y+ i( _$ _: q& I
wp 1234,2,w
8 i7 n* d# o3 ]$ P 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
( s/ Q, T: ^; {0 [ % e" \1 F' F# Z& k
wp 1234,6,rw
2 O/ X2 K J0 ?6 C- W 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度63 D; d* Q/ N" u1 P$ {+ S
' d; L# }# `- x5 U* I1 T wp 23456,a,w,wpdata == 1
% ]3 q' {7 M% K3 [ 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1- c7 c( T2 V9 B5 c. N
# j6 h8 k1 `* V' P# H N. }
wplist
' b# u. r" K0 k* x 列出所有监视点
* w* V/ D, e2 c% h4 m. i" q* d& ~" s- g' C* }/ |5 e
wpclear 3
" ^" g' ^. S- G 删除编号3的监视点
8 o4 P! l: n2 y
) ^7 x3 q' J0 U [( [) m& ` wpclear7 e$ d5 i$ n8 H' [( Z
删除所有监视点
( L0 Q+ e! ?' G. _) a! T" @0 r7 I* g4 z8 i4 C% A
) n! p' M. o$ [& {& E% w+ e# @' ?/ L3 y6 Y6 _
程序断点指令: bp, bplist, bpclear
+ R# l1 w, M3 U2 |! f& ~ v 例子:" T3 h6 g$ r/ s1 J3 d; [# V2 T
bp 1234
( \% t# g" M3 f7 t 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
& t0 N& e0 @# o- d- R4 E$ y: t
& A2 ~1 q. }+ l0 X: \( T bp 23456,a0 == 0 && a1 == 0
( I, `' V+ e- ]2 W+ ?1 A 在地址23456下断, 且中断条件为a0等于0以及a1等于0 @3 k, D; B, W. b& l5 V
2 e9 \5 l% n. w/ m8 {9 u7 h3 ?
bplist. n0 g4 V5 j9 s9 r3 S" S
列出所有断点. [, P1 F) u1 t' O& I8 ~5 p
( o! H$ L3 E, O" O3 z/ B7 e bpclear 3
2 i0 @$ K/ i# O0 p 删除编号3的断点
+ @1 B7 y0 H' O2 L6 v: O. J; R
5 W3 P# D9 J$ ?0 D. M6 D: ] bpclear
1 L/ G! h7 a, D4 J0 O4 W* j 删除所有断点+ o( O' A" `* G1 K
+ L& [9 p3 E0 l D
4 b5 L7 x( g2 i: P( P) a% m$ x% H
* i/ f( I. I2 j跟蹤紀錄指令: trace: d" h) [6 c7 N: ]% y5 v# T
例子:
6 d7 w3 b+ P! @, e5 v trace 01.txt
' d) u$ k' |8 ^) e; V: p0 j 跟踪当前CPU运行的所有代码, 输出至文件01.txt1 C, G3 T, M4 a5 L
4 M( s/ g% n) l, J, e
trace off& K" L" H, A, M
停止跟踪, 并且关闭文件. V$ F5 |9 J8 H9 Z% G( h8 X
i9 K$ r3 X+ I% U l5 r% Q; t/ F trace 01.txt,0
6 H7 F9 g" F$ X/ e" ]" h# {" o; U 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt0 r5 N; X7 n. O
& E- @# W0 o% N0 Z! @
trace off,0
3 s: Q7 R! b5 H( M: ~ 停止跟踪编号为0的CPU, 并且关闭文件! w( ?, `2 I8 h9 W) B: v
* a( B! F% g: Y( N) O trace 01.txt,0,{tracelog "A=%02X ",a}
1 O6 i9 @! H& y/ d 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
+ _" t1 t, f0 o. S9 m2 j! L 并且在每一行的前面, 写上"A=a "
) n( t3 p& H" m7 R" ?- b- J0 L "A=%02X ",a为一个C语言printf函数常用的输出格式! r3 A1 l9 U' o1 T! Y% M
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入5 s1 Q6 @% j3 f' N
X表示为大写十六进制数
9 R2 N. T1 D; \# m/ V3 o3 o' f; n! l6 Q# p6 Q- Q7 P8 t4 a+ u8 i
; K5 G( e/ a9 [* c
' l* H! z. m7 ^1 Z: D L
内存直接写入指令: maincpu
. s2 u. v' u) {2 g9 \ 格式为 maincpu.[][]@地址=数据
( n$ G2 v# A; T% G a" T) T 第一个[]:& }' `5 _3 w) _- Z9 c" R6 v/ ^ j
o 表示ROM地址 x- T4 S. B- o1 ]/ d+ j
p 表示RAM地址" x( l" x, F# E# _7 R9 H
" C0 [3 j! @* `: P! Q( y! V 第二个[]:! v& \; \ f1 y+ X- I: [
d 表示4字节
# _6 G7 K P+ Z w 表示2字节 Y! S9 ]* \* c* |0 L
b 表示1字节: s/ a U5 {5 I0 c) L+ g; t
7 M' \9 F! R5 T 例子:. v0 v( ^& j V; O1 g( z
maincpu.ob@1234=FF
5 H- p$ \7 I! j- @$ o 在ROM地址1234处, 写入FF一个字节# {' Q% {. s$ S
. q d4 p. M, z% O6 L5 O3 F
maincpu.ow@1234=4E71+ w( ^6 J' J$ w% b$ H x
在ROM地址1234处, 写入4E 71两个字节
; c: a3 x5 V Z) Z+ X% S# Y6 ?' Y. b- a
maincpu.od@1234=600A4E712 O* D3 O- @# q# \) W) E& ?
在ROM地址1234处, 写入60 0A 4E 71四个字节
; s5 F$ I* L, _; |; v5 @. n- ]' |, Q& [0 }, U0 }3 |5 Q) p
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写6 B+ Z4 ]$ D) B1 ]8 V) y& s) n
" b2 j: p+ n ?5 {
- ` m+ L' o e/ v其他:
) m/ q& a1 I- V dasm 输出档案名,地址,长度4 P& A& v& A8 U* p, q) s8 z' a
输出程序的反汇编代码
/ ~" a+ Z! s9 R* ~% r+ ]: i: b 例子:6 _ {& `, R2 Q1 t- w+ M1 t
dasm 01.txt,0,100000: v; u; h. m# C" U
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
' }. c* j$ x- e' C5 V# G1 R9 d" l: E$ [2 A0 @; W3 v2 u6 C# |9 J8 d
softreset
8 X* ]' G- k! r$ @+ O 游戏重启, 但不重新载入ROM
! P2 t! Z( v% @
* F* r8 i, I4 t) Q5 D hardreset" h% }( R U% [9 D- S( i
游戏重启, 且重新载入ROM
; p' w* Z8 d3 L1 f6 R0 g+ a6 r7 O; Q
snap xxx.png
% V+ U+ u. L, ~; A2 L" a7 [7 c 截图为xxx.png. g5 k: }# U3 S3 V
( D" V/ k% g/ |9 J, u7 z . P5 g/ l9 A: u! @0 w) ^/ E* C
# T. B% x, Y% m" l3 {7 A6 d0 Y
# }7 `1 M/ {, ^% O7 B热键:- R' \6 @6 A. F9 Z7 c5 n% h
~ 中断游戏# X% B3 y4 `$ B6 i" i) m# r. Z
F5 运行游戏# s0 \0 F" B% f7 x$ B4 n+ c
F12 运行游戏且隐藏调试窗口
) D! W. }0 ^* u F11 步入, 单步执行, 会进入子程序. O' f, s. @2 R) `9 x0 |# `+ K
F10 步过, 单步执行, 不会进入子程序
/ D& {0 a7 v N+ t0 Z Shift+F11 执行到子程序返回
+ g/ T4 ^$ X& U3 a4 ] Ctrl+M 内存浏览窗口
5 L {7 e! o6 e) u! S' ` F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU: x3 t( _1 p& x6 E0 t: J
3 s, x' b* e; M) O; a# d& k6 c# J{:4_94:} ' |8 _" @! S4 p( M8 G' c o
O. a$ G5 M' M: D# M2 d/ t |
评分
-
1
查看全部评分
-
|