|
|
) ^7 |- M: a8 W h" C- s2 |- H) N
很快速的整理我自己常用的指令
7 L: ^" M. X( \% f& \& p
+ n; B! m5 n' u{:4_112:} * ]$ e2 z. c- H2 ~
& j) w% w' J% p1 u
MAME DEBUG常用指令; M9 I$ e6 r" j) s
' k# X: T- |8 k! U ~6 Q
内存搜寻: ci, cn, cl
9 ]" X+ l7 `: T- y/ e" K0 p$ N
" x7 X* M% g2 P- m5 g% [& o/ x, p ci; G( y+ r" X% p' X3 |
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
2 ?0 I" f4 s6 ~. q
; O) m; d3 y* Y$ u cn
: @6 ? i0 L( s 搜寻指令5 I" [* q1 q* n
例子:
9 E! d* O; t7 P; D+ l. a i6 t* ^ cn eq,605 c, i0 T- } w k" K& h
搜寻目标等于60 (十六进制)7 F" A# F1 r0 T
( [ v( o) n6 O7 @ cn eq,#96
( _7 X& D6 t) c 搜寻目标等于96 (十进制); D0 o2 D& S; M, Z7 t {
& r* N4 I8 l. h* v) l
cn eq
- W. ]7 a, A" ]6 E# O1 g 搜寻目标的数值没有变化- |& }- l+ g% F5 k& l3 v9 |8 j
# b3 p+ B% Q1 R" e8 A; [) I# z3 H
cn ne
5 |: f% `' ~% G5 _0 ?1 ~ 搜寻目标的数值有变化
- w3 `) X. [: {) c h& z
3 p; a+ T. i1 P! ?1 v/ ?* p cn +
2 t# u3 ^4 Y) y. E& C) R) l 搜寻目标的数值增加" E3 P/ J1 X8 v. J
' o+ _. z' l. }" F
cn -
$ q \6 D7 l# d7 n. V- }. g2 f 搜寻目标的数值减少9 h9 l5 O2 X+ C7 X
4 D9 q( m; t9 R/ ^% X ] cn +,38 U* l; b3 M" V7 P& y- m
搜寻目标的数值增加3 (十六进制)
: G/ T& P2 k; v1 n" m$ A) s2 U2 Q# D
cl( C4 g- S- ]! ~
列出所有搜寻结果+ n% ~, @) Y- Z1 S% V( V0 |
6 e* h2 r! M3 Q* A( l cl xxx.txt
% b7 U8 R$ w" H0 J 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
4 m+ j2 m4 j& A; [4 U( Y+ ^" l7 E# [" j A$ k( e% w$ U
D* H ]1 ~" f. c; Y: A内存监视点指令: wp, wplist, wpclear0 p; j, l2 |( X5 `
例子:
! b& {( j- E7 x; y* c- M- ~" g wp 1234,1,r. p ~/ V2 \3 S2 A: l2 x, z
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
0 r: [( Q: S* W: p3 P6 ~4 y& B' W: w. s# k
wp 1234,2,w
- N4 R; t! ?. g5 u3 r 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2 L. _7 x" h3 @, m5 g: s4 @3 o8 ~' N
) b" ~* i$ C* w
wp 1234,6,rw
& d; U8 M/ A" W* i" s5 t; A0 { 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
& ~7 @. K' }2 o& M% l3 f5 g2 Z9 m3 [7 Y" w
wp 23456,a,w,wpdata == 1! g$ s( ]. ^3 p& d" e* P) q4 C
在地址1234下写入监视点, 数据长度a, 且写入的数据等于17 q! Q% V/ e: t
" l6 H% y% x1 l0 F% Y$ |( O: W# n2 e
wplist
, g. k+ A0 F, F 列出所有监视点 f; Q7 B& t( e" Q
: J% z/ W9 Y4 }8 z5 }& l* u
wpclear 3
! O7 e+ o9 l0 s 删除编号3的监视点
+ p4 r: n7 }1 C9 C4 N) L d
% M2 L# G; r7 W3 w7 g, r% a$ u wpclear
8 b# D& v( n1 z 删除所有监视点* L6 C1 b' B& T4 a
& A/ J7 X. y' l+ @1 N
$ m& V/ y3 G5 G: k( V. p0 C. D: L: K) J" L# Q2 h* Y9 E- s
程序断点指令: bp, bplist, bpclear
" ?, j8 U' M& f2 w5 T 例子:
. Q8 V! _$ K! N% Y$ H" v, Q/ X bp 1234
/ W$ e: C) o( t- h- ]4 ?2 y5 r" ^5 n 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断$ m& E! F5 H" d& R
0 h5 M- U( M, Z' b( g z
bp 23456,a0 == 0 && a1 == 0$ m* `4 [ r7 k2 m& _2 T
在地址23456下断, 且中断条件为a0等于0以及a1等于01 r6 ^" ~1 V/ j8 j8 Y; m
[ s3 z+ }0 z: `& S9 o
bplist& c% L% ?' G# c: U' y
列出所有断点
) H* x2 }- c5 I @
% J3 }; S' z2 G) N- w# { bpclear 3
7 {% k {5 O p( w0 R 删除编号3的断点0 m; M G$ w. Q1 }; N+ h, v
: l1 s2 [9 P- u) F4 A2 @. s6 C
bpclear6 ]* n; M5 T% W4 h2 F+ p
删除所有断点
% \* V6 B' R/ T0 w
' `4 z2 Y1 s5 R ~9 [' s- m9 H 1 h6 q$ l) R, L( [( G3 i q+ G
/ B8 o: O- |& n* {& B L5 K跟蹤紀錄指令: trace
( C8 f$ w3 |, i# C 例子:/ f9 [; {( c/ t) U4 ?
trace 01.txt
' e) k3 \1 F# ` 跟踪当前CPU运行的所有代码, 输出至文件01.txt; R/ n3 J% _! F- Q5 C* t5 G
0 X* b* |% z) [0 i6 [
trace off5 J4 X- p% m- f( d- Z3 y3 V
停止跟踪, 并且关闭文件5 T4 }; q. J' ?, G: G+ G0 N7 V: a
% @+ ]/ K/ i8 _* y$ N' O& _. w
trace 01.txt,0
* Q8 O& ^0 w7 e* `' ~ 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
+ I1 V) f6 g- o& k3 a. I! h a2 A; d2 m! \( ?! ~
trace off,0
4 f8 C W; @. {: g) |& k; @ 停止跟踪编号为0的CPU, 并且关闭文件7 h# O# y- O% H, F; c0 P
) j" J9 }: @. K6 J, B: H" @
trace 01.txt,0,{tracelog "A=%02X ",a}
% `- W: S2 E2 g 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 7 L# k% j0 _9 Z% S$ q
并且在每一行的前面, 写上"A=a "
0 c3 m; ^' ~; u5 q0 m5 r "A=%02X ",a为一个C语言printf函数常用的输出格式
; D3 H# ^$ q0 \6 _; ]: I 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
8 U* ?1 _% R) A- c/ v- h$ p% Y6 U X表示为大写十六进制数& {/ N2 p0 E5 v5 O u
2 @* a1 Y- N: B# T) }" O
% P% j) a7 [. O" U2 s% a& `
+ z2 \, A) k9 Q内存直接写入指令: maincpu5 T; C" I/ n5 ?/ R1 c, G
格式为 maincpu.[][]@地址=数据' [8 t; |! m* h4 ^+ w: c2 n1 u
第一个[]:
% x7 B; k' d) ]+ h/ s: t o 表示ROM地址" r, R6 Z+ R# E0 K5 B
p 表示RAM地址: U" A% @4 v0 |$ |# Z
6 A9 S' }" d2 R$ F8 e2 \+ B 第二个[]:
2 o$ t( _6 q; W% N) Q7 |- G d 表示4字节4 r0 \9 P, @4 H. R! P8 x
w 表示2字节
* m! a. u2 }/ U5 N. E8 z8 Z& t b 表示1字节' h3 S8 T$ Q9 t. D1 e0 ?! X- ^
" Q, I2 E3 h. ?5 A# Q6 K
例子:
, K: ~/ ]4 b* v1 i2 y6 d: Y9 s maincpu.ob@1234=FF
8 t& k8 j2 |+ O/ J9 f Y1 ~/ W 在ROM地址1234处, 写入FF一个字节
- T% e6 r$ `& `! k/ ]: G- n
, Y, I* s) L5 k; f maincpu.ow@1234=4E71
& J4 D9 V. r9 g8 i, H 在ROM地址1234处, 写入4E 71两个字节
9 x/ j' f. V5 T9 s5 p9 Y
& F8 L/ S1 @! n, [ maincpu.od@1234=600A4E71
0 B% ?3 }2 \" W' s4 p. X6 J# q 在ROM地址1234处, 写入60 0A 4E 71四个字节
I. N6 i2 R- U- U0 ^0 N) r7 d) n1 p/ i
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
% l8 J! i& K2 k9 r5 R0 Y. ~
; X+ G- w D& X- T! S6 M' t) m6 b/ i' s
其他:
8 H" |* d( J" x$ L5 u dasm 输出档案名,地址,长度3 [ O# }, o* o- F( O
输出程序的反汇编代码
2 ~, t% K$ f! E" {& X, e2 G3 g 例子:
% e, T3 v2 ~( `; A dasm 01.txt,0,1000005 k' `& }- H9 R
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt( w, \/ j, d9 c% s! D" G1 w
9 w0 q1 b: U, M u7 l softreset; Z2 n6 H9 W$ a z
游戏重启, 但不重新载入ROM5 e F Q$ h: A% u
7 a3 x4 a0 O3 }; a8 C" U hardreset5 E* t/ Z& T. J$ f1 B
游戏重启, 且重新载入ROM; n0 `+ G$ O+ o+ \, u/ ` Y
_; q' Q9 w! Q/ ^- y
snap xxx.png- |* F8 Q3 a$ W1 j' e* j
截图为xxx.png
4 W$ ]/ \" }- z! D2 S! i
! \' N/ L' z% R! v. P0 c
+ _/ h8 @$ f- F/ B6 Q9 M9 f
" X: u( [2 ?/ k& X/ }9 L% Z. k ! s" H% {4 f$ y# u
热键:) j$ N" B6 [# b. d" R
~ 中断游戏
9 }' \4 l9 |7 p" s5 E9 |: t% f F5 运行游戏
, k# r4 o7 J( s; J! b F12 运行游戏且隐藏调试窗口2 l7 ]; ~ q0 j1 T& O+ {3 d
F11 步入, 单步执行, 会进入子程序$ B/ r$ g( e" p( h$ J% m
F10 步过, 单步执行, 不会进入子程序
1 P3 C9 G6 v5 }# y% t @ Shift+F11 执行到子程序返回
7 W+ l7 B% V& v1 s Ctrl+M 内存浏览窗口$ t$ R6 S* m( l
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
' |" o% q( z( |& r$ c
+ g4 W- y: }- k1 K w{:4_94:} + K3 o" ^! ^; I7 t$ W1 t0 R6 @
5 o3 `7 U1 S$ e9 f, x' G, G |
评分
-
1
查看全部评分
-
|