|
|
& h$ l- B1 A+ J/ V8 z/ a6 z
很快速的整理我自己常用的指令
0 n2 N m7 u! R2 |0 n2 d$ Y
% k: a+ d4 p0 y- B' N{:4_112:}
* z% l( V h! Q
0 ~) f& x G ~. S5 m: `MAME DEBUG常用指令 p) ^1 S6 k! Z4 ?7 a f" W: x) y
( z+ ` V7 Q: Y3 z# `+ F
内存搜寻: ci, cn, cl2 m( ^; R/ O; I
" m7 g3 ]+ F2 i* E. N2 V: c# }" U
ci
! h* W6 Y& v2 G, ? 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
2 } |! r3 S: `
% K" G" o3 ]# S cn( \5 K, p+ n$ i# Q' Q
搜寻指令
$ P' o+ M4 G/ ], ` 例子:( j, Q+ w q( p" T% c [' G
cn eq,60) `* u1 o1 \, p
搜寻目标等于60 (十六进制)
8 M- t, o( J! f $ l8 R3 G: e* y- U: F( A" ~
cn eq,#96
; {! ], I4 [: p0 N! L$ B# O. Z/ u; O/ E+ ] 搜寻目标等于96 (十进制)9 ]) L, L' g" t! {2 i4 `8 f6 Q, A
9 [* u* p1 p5 E, M* N& Z5 W
cn eq
0 o- F# j' {, q 搜寻目标的数值没有变化+ u0 r3 V1 s! K- F
( n R' W8 ]. _! Z8 y cn ne
' Y- ^4 W7 G* _) E W, p 搜寻目标的数值有变化
' L$ ^+ W! @7 L% b8 c 7 _" r4 ~1 p* \. F! o& g% ^4 I( D
cn +5 `* }' ^; n$ f/ H
搜寻目标的数值增加
$ C" _+ F: U* p& d. [2 r& w
! A# t: D8 V/ Y6 K6 M, o+ e& ~ cn -
; R8 J, |: j! r8 M7 N+ r 搜寻目标的数值减少
* U! B+ [% x3 q4 {
( N- ~. y6 R6 h+ Y( }2 `, A cn +,3+ |- T5 p+ c9 _7 I( Y
搜寻目标的数值增加3 (十六进制)
+ l, y2 U: J( [. q7 ~2 r6 r
7 J1 F2 G- {; T cl; d. ~" P" o1 V$ v# v9 H* i. ~
列出所有搜寻结果3 N& w6 E) R ?/ g
6 W. y# Q. r2 J$ A) o4 h
cl xxx.txt) b$ |7 A) i0 i g j
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
* C4 E/ {' `5 j. d1 U" N$ I: y6 p& E! c8 J
- q7 @- E0 a0 R; B/ e; `
内存监视点指令: wp, wplist, wpclear5 B; Z- r9 {* ]7 w7 O2 o1 W
例子:
7 X6 V* Z" `% b& s9 v wp 1234,1,r
/ p6 ^$ i8 a! z4 ` 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
: j) \' i. z8 p% \& T1 s
: M7 |, V" }/ Y" a% K7 D/ K& [' @$ { wp 1234,2,w P$ Y1 r' k! d. z, b: V
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度25 o- } u5 m( o. x! W) [8 ?
7 ~9 v. x G, W' K# i* o wp 1234,6,rw1 }; X# {" W. V( J2 V# f' S
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6% r& x! c2 W- m: @4 W
, v' D3 t7 n; Y' O6 `* z wp 23456,a,w,wpdata == 17 g. C. |4 W9 w3 N( P
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
* h% m& Y6 \) e) {2 W. B- @/ `5 {, p5 b6 R1 I& \1 X! i
wplist
4 {/ P9 g$ j4 T, E' `% G 列出所有监视点" D- j! N( P. O. i* w- M, o
+ q8 O: ^* G b% R wpclear 33 A. ]! t( U2 |3 x) b
删除编号3的监视点, o9 `- U, O3 K3 s; D" l
7 ?5 C+ C; q7 u, x! ` wpclear& N: D" N6 D& |' ]- R
删除所有监视点
r" d# Q! f" L0 j" V1 @5 c
+ w" n. C0 j: ?: g! {5 r) K
6 W* J& J/ p+ R. Q8 n7 @
4 ]1 Z1 f: h: @' q; l/ J程序断点指令: bp, bplist, bpclear
5 c0 O7 Q2 i. H; m3 P% s& P 例子:
9 }* g p* d$ x0 x. y2 ] bp 1234 ]; @/ e( |7 {3 v; b# a
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断6 I# m( _( f t" L& U% \" W
- w: V0 g" i. g9 o7 ~* K. k/ R
bp 23456,a0 == 0 && a1 == 0
: y5 c- Z; u: o6 ? l 在地址23456下断, 且中断条件为a0等于0以及a1等于0
' I; M* ^0 q0 R& n- l7 K% m
( u& F9 l: W' t0 [7 S" I( E bplist
$ ~+ }. y5 g& U- X) i& w1 Y$ Z P 列出所有断点7 i7 T1 h4 P0 b: ?
' h: R, h2 j; c bpclear 3! k3 V( E* Q+ [' `" h/ y' J
删除编号3的断点9 C* f3 p8 M7 _) p) S( ]
B0 a/ g' G. J$ N" z6 y+ m1 D" |& t
bpclear5 g0 c& y# v, i4 V; I0 x
删除所有断点
1 s$ H' p; r. h6 f
; |) M, b$ z4 }
% }' d. `( L1 Q ` : x6 r2 u$ l- j+ ] q9 Q, B
跟蹤紀錄指令: trace
- L2 q$ X8 Z4 ] 例子:
: Q0 Y4 L) Y2 Y; K1 Z- r trace 01.txt, e+ i# f( X5 L4 ?9 |; z7 g7 b
跟踪当前CPU运行的所有代码, 输出至文件01.txt
r9 W+ d9 @9 ~# ^. k# x. h h. R1 s1 g" l
trace off, N; L. z y7 D
停止跟踪, 并且关闭文件9 L: N9 ~+ I" s9 |3 Q7 }( j6 Z+ K
1 ~' C3 ]) a+ q
trace 01.txt,0
/ B) \2 ]7 b. e" B 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
/ v' `: U, C/ P/ n M# c; U+ m' U& Z$ L2 }
trace off,0
8 l) e, x1 q5 v4 N$ h3 P 停止跟踪编号为0的CPU, 并且关闭文件& b2 E" ~( O2 d3 V7 p$ E1 J
: L4 u0 q4 k6 h- |7 h trace 01.txt,0,{tracelog "A=%02X ",a}0 u( N% A$ Q8 Y3 v
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
) A( D3 ?# @/ x% `: l1 _6 C7 G 并且在每一行的前面, 写上"A=a "4 h; G+ K4 I3 e* m# @
"A=%02X ",a为一个C语言printf函数常用的输出格式
. ?3 t2 v/ U% q- V9 I, g1 X# K 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
" |: I& @0 i" _. s& D X表示为大写十六进制数: O" P- M5 X" [
. K/ e2 N. E/ s, m% l
4 _/ M$ L7 L6 ]5 V
2 v7 a% }$ v, D/ B- F7 k! u( w内存直接写入指令: maincpu
+ J+ G0 B o8 m 格式为 maincpu.[][]@地址=数据
, a0 |" z4 a1 o2 A9 z 第一个[]:
9 n, x: |+ u+ }7 A9 B1 U) x/ d o 表示ROM地址& c; U; E# `4 L+ P- q
p 表示RAM地址
, f. c( x) ?( h0 h3 {3 R4 Q
0 Y! C$ b9 L$ J1 A 第二个[]:- i6 y+ R% d4 a& i1 F, J# J- Z/ L2 b+ k
d 表示4字节, D4 O8 U+ z' Z! h
w 表示2字节
7 a0 v+ x. k A! D/ c0 @ b 表示1字节) Z/ d5 ^4 t' S9 u6 j$ H
4 M p6 K! `+ D. h: Z* B( @+ d
例子:2 c) ^+ K6 ~( m: z1 e6 C
maincpu.ob@1234=FF
! [& `9 D- A+ ]/ P6 s5 H 在ROM地址1234处, 写入FF一个字节9 A; e+ V$ A; h) L; o" c1 L
- G, A$ O# s2 s maincpu.ow@1234=4E71( M, k5 E" P, C( F! w
在ROM地址1234处, 写入4E 71两个字节
/ z8 `1 [, Z. o" V, j/ j' w i; W9 k; `7 v: B. i& ]
maincpu.od@1234=600A4E71
3 S6 U- I8 N5 r L+ j* y1 B 在ROM地址1234处, 写入60 0A 4E 71四个字节
1 E% N2 g8 N/ V/ v% o9 n a# [4 a }+ p: M) q8 q
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
7 `- d$ ^, a2 B x) a" r1 I ' {# `* S. M' r% Y/ p' d
/ {1 J9 \6 S- f4 l3 _) y: Z1 W
其他:
) X9 ]& Q% I$ R dasm 输出档案名,地址,长度
: h# I2 V4 m2 g8 b- ~ 输出程序的反汇编代码& B8 f; k4 H: b0 v1 h
例子:
2 ?6 r, m8 a Z! z' H" N dasm 01.txt,0,100000' l4 d/ `! T* `9 n( f/ e
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt5 [. O7 F- w1 w) ?3 H3 c% a+ l8 c/ @- ]
: {* @8 }3 ^8 k' j6 X
softreset
) s }$ Q7 D0 s% r& Z+ r0 F 游戏重启, 但不重新载入ROM' @" \- O8 q* R0 B# {! q) \' G8 U
( D& f$ b: o/ \* J
hardreset
& [( d+ D( h/ q- h 游戏重启, 且重新载入ROM2 t% r. r; p' p/ f8 ?
/ K {1 `' p) f/ j9 x
snap xxx.png
, R ~# O: o! a( z 截图为xxx.png
$ r6 P" }1 w/ L! v( b$ J: E* P4 r: F" Y
% a3 q1 b! S ?5 \& U( {+ d
+ f& W! |! [# d( b. M
: s) e$ y" E, ~! ?+ t热键:
) E. O2 }, e {( A# w% p ~ 中断游戏. o) l2 I% { @; R3 ?6 H
F5 运行游戏% ^1 x$ y9 D/ B6 p
F12 运行游戏且隐藏调试窗口- c2 r! s: G5 n0 ~& d$ W
F11 步入, 单步执行, 会进入子程序
7 A% F- I1 c' M1 x0 R& S) m F10 步过, 单步执行, 不会进入子程序! k. ]4 H+ m* p) Q4 r
Shift+F11 执行到子程序返回8 B7 j2 ]1 ~. v) x# ~
Ctrl+M 内存浏览窗口2 H1 E" T9 O8 L9 n5 a
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
* @' B0 X; B1 V$ s C9 r$ r( W3 P& m! ]2 m. t7 E
{:4_94:} 6 p* H7 w* B2 D; |9 `
( x# g: U2 k) M( p5 z) l |
评分
-
1
查看全部评分
-
|