|
|
% M3 ?- J, [2 b1 U; {很快速的整理我自己常用的指令* b- M3 b) R/ P9 c5 }
: Y4 O: ]( j; l1 j5 ]' e2 p! M. M9 w g
{:4_112:}
5 B* G: F* r. i' f& p4 Y
2 [9 |: A* ]$ cMAME DEBUG常用指令
; Q# m) v( ^8 |( \" N4 e& T o; p' x7 |6 y) h! E0 I7 b8 f \
内存搜寻: ci, cn, cl% o: X$ @# O9 @
0 w) Z6 N$ x; N& ]5 h, \. m ci. d" |- S3 R! K3 E3 r2 J: \
搜寻任务初始化, 每次搜寻一开始一定要输入这指令" @+ O3 L' \( o9 O" Z$ I* H
. `( X$ B0 a) ]3 e" D8 q cn
8 p+ O- l% m; a 搜寻指令
4 P6 n( x' ]1 J 例子:/ m% |0 f. E5 d' B3 m& m8 J
cn eq,60
- `+ u5 f: v, j8 J9 ^% O/ x% T 搜寻目标等于60 (十六进制)7 e1 o$ Z* T, j4 Q, u
/ j6 w8 F& r: V P! ^+ ?
cn eq,#96
7 R, h4 f) @" I4 q 搜寻目标等于96 (十进制) e4 V/ L! g: f7 j* @% P
$ g8 W- e5 d# X1 t9 S' \
cn eq
" X3 t0 }* I0 J4 V4 g9 d1 r! ~ 搜寻目标的数值没有变化7 b: Y% K C" P& D4 f6 C* L9 j* Y
9 [9 h3 A" y9 i) ? q" f4 X
cn ne
( {- `1 G1 q% L g) Z 搜寻目标的数值有变化
# ? F; J4 t$ E/ {& |/ ?2 x# N" G9 {5 v ! ^ h& F7 b0 ~# _! i: |8 L8 \
cn +
" q/ r, ^, _, q 搜寻目标的数值增加% o( s* C! |1 u( a# h h
1 j5 O1 a$ y' Q6 O! R% i" G cn -
) h- I& @7 {- E9 z 搜寻目标的数值减少
! p1 d+ p9 W- q 4 H+ k/ P8 C H2 y1 ~* u8 \1 k/ ^
cn +,3
% U5 B* ~- K3 G: h+ ~ 搜寻目标的数值增加3 (十六进制)
9 X/ \9 n! e" p0 N+ E4 u% h4 s0 @; z( A2 B
cl" T' j: T, H& Z( I) f8 i
列出所有搜寻结果* v5 X& n G) f) G: B; \
: l% {" C/ R) ]& R* n- q# |! o
cl xxx.txt* E5 j" G# R8 @( e) Y
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
1 e- s5 K; J b
* `8 c. R* j: a& q
* N2 C6 t/ U4 x: N) M内存监视点指令: wp, wplist, wpclear$ j' `' b% S) m4 L! B: R. N& L
例子:
4 e i0 G3 r) A3 Y wp 1234,1,r% `4 ^$ _/ m% \, [7 P4 s! h9 @8 \$ Q
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
; `8 g0 f$ ~; t( @4 e+ h7 P
/ ]5 y* |; d1 p( A, ^/ p wp 1234,2,w) k' u7 T B: O# L0 Z
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
3 C9 z6 W9 P+ f8 j/ l. t6 @* {( B 9 O: x6 x7 I4 J5 ?- H
wp 1234,6,rw0 a& _5 b, O. M+ }1 k
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度61 o' {" F ]- Q# a5 A3 e) l4 s1 |
- Z3 {) _2 P4 |6 w ~8 n+ j
wp 23456,a,w,wpdata == 1+ g6 m$ }+ D. W! W
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1- x# z" L. @- B
, x" l& F. {9 F. F& R* p wplist! w" Z# I( b) [ v% E
列出所有监视点- y# V! t4 X l& |
% S2 U; a C. `9 K* ` wpclear 34 Z5 K G: W2 M/ {+ ^# m
删除编号3的监视点8 u7 K7 u- a: m o, d$ A8 U% m; r
7 F: x; ~' U; _, T$ ~! s wpclear
, L& C1 G @5 j5 F1 N' Y 删除所有监视点
k9 u. H& i' e- F# p2 l/ e$ Q
! }# q2 t. v) q
, o) |! j C; ]9 \/ |! j5 r3 @- L M' p+ a
程序断点指令: bp, bplist, bpclear, t& D1 P7 ~1 ^' P9 ~
例子:
0 A# C: L# z) ^# | bp 1234
8 M# ~$ `) O/ {. I( Q 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断/ d& C* y# K. c, Z7 f$ m O
0 q. E. f5 r. s3 _; @ bp 23456,a0 == 0 && a1 == 0+ H" O7 g0 {/ M. ?8 W6 U
在地址23456下断, 且中断条件为a0等于0以及a1等于0
9 r9 T- D7 A) u7 h$ L. x' w6 O# l# D( E m
bplist
" \, o3 W% L1 h+ \- y 列出所有断点
8 f) ~" G7 y0 o
% l+ K9 H' l' p+ n- M2 o# R) w bpclear 3
5 ^0 ~( \% q7 b7 c* n+ k 删除编号3的断点0 u4 H+ N8 f3 y1 k1 V! g% y
( ]* U8 r4 K2 h3 P2 v; w
bpclear7 V9 J* w3 R/ c; d
删除所有断点+ @) g" k6 X/ v" a1 _) K6 }
; f# R% }( c) z5 K+ X' A' W
: v: V* T( W* q2 Z" t* N , e8 l5 V. w$ ^
跟蹤紀錄指令: trace
% V* t8 c7 ^2 }7 ? N; H2 s: L( K 例子:; m, w; [2 ?- c
trace 01.txt1 |( E `1 S( o' {
跟踪当前CPU运行的所有代码, 输出至文件01.txt
6 v( }1 ?6 M; D& j, h
5 F ?3 \, H- s6 I% I3 A: k trace off3 p- M. |1 p* n) m( E3 i6 r/ r
停止跟踪, 并且关闭文件
( N+ V% h4 j2 o3 L- o. ]& }0 x9 u- h( J$ q& v1 M7 `3 g6 o, @
trace 01.txt,0# m7 X: d, O1 G) d$ g1 P
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
" V" ~4 s3 d2 I/ m
0 y! r/ W& ~" M% L trace off,0! ?" a. v Z9 Q# i( D- \$ ~
停止跟踪编号为0的CPU, 并且关闭文件
- ]$ S; k }6 ?2 a
- |: _+ u) x" ?8 N5 y; d1 ` trace 01.txt,0,{tracelog "A=%02X ",a}1 R7 @+ r& F: U: e3 `1 l
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# O2 Y" [' q: Q2 j( r 并且在每一行的前面, 写上"A=a "4 [( r7 Y: \8 V- ^
"A=%02X ",a为一个C语言printf函数常用的输出格式
1 V3 P( B+ Z) y 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入$ C+ A& ^5 `6 ~! N% n" O
X表示为大写十六进制数0 y f, l% W4 @/ k; b1 j; R. E. {
' O& j# V& ~) f+ X9 ]
8 H4 u m; v- j7 h- A% `. ^0 @* N2 k' t6 b4 [8 ^' P9 V! q: @
内存直接写入指令: maincpu
4 W3 `' p, V3 N3 _8 N: u; s 格式为 maincpu.[][]@地址=数据. d$ N, V. |" ^
第一个[]:8 o% t3 w0 g! A8 V& i+ j
o 表示ROM地址0 f9 u* v3 \+ T
p 表示RAM地址9 s9 O) q! H, c+ m8 _
" d' W. r$ R, R" R6 j
第二个[]:1 R- N: Q( r) s, Q
d 表示4字节
& K- E6 S f5 I8 }) Z w 表示2字节
0 F# |; q9 n) ` b 表示1字节
; B+ ^4 q; O# R3 n9 s; G$ o$ Y9 G! V
例子:, C9 q& ]9 }9 v1 K
maincpu.ob@1234=FF
$ A' k; P4 v: Q S- |' c 在ROM地址1234处, 写入FF一个字节
% ~2 n0 [ K( G
, t1 r. m, b$ J' d maincpu.ow@1234=4E71
+ c0 N) f; E2 ~: N8 X6 a* f 在ROM地址1234处, 写入4E 71两个字节9 l& M) }4 l/ X5 M' C$ J& Y
0 C8 p n) ]1 E! f maincpu.od@1234=600A4E71
% T$ b2 r* b ? 在ROM地址1234处, 写入60 0A 4E 71四个字节1 N( e7 |( t: W; ?1 w
, o8 U& `6 b8 w, k* n$ s 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
4 }3 `. h# C* I% l ( h" Y [ d0 }1 Y( l% Y
' D; ?6 l' C* Z- Y+ C8 n其他:
. w* T+ J6 a2 E8 Y& O! Z3 f dasm 输出档案名,地址,长度
3 z+ S% N1 T5 Y4 q9 { 输出程序的反汇编代码1 i Q. e, c9 A/ G
例子:
& g, N" ^4 q# f( \+ I7 @! N dasm 01.txt,0,1000002 P1 @1 ?1 a# p$ d4 ^* t
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt ?" X# @; r q, T. ~
. M# R4 D2 Q% v- @
softreset: \; j( @5 d" f/ [
游戏重启, 但不重新载入ROM3 v4 n; U5 U: L4 k
8 ^8 Y1 Q; [0 {+ N- w# ]' A' `, f# W
hardreset
g$ N. q- ^9 L0 x4 n* | 游戏重启, 且重新载入ROM
* Q" L+ A8 X+ I1 w! `3 j! u- T l" q
' `& ]' M; B" F snap xxx.png, K, a( {' W( X1 D
截图为xxx.png9 `: n' m$ A. Y% O
7 I1 T M' Y1 A: C6 W8 H1 T
T& V1 m5 h1 T0 g
5 P9 @" T# T* o* B4 X' j4 U% i
) u2 u) z: w* f: }8 o/ z7 t( a热键:0 b' H- P3 K* A! }' M! a; Y/ g
~ 中断游戏9 t& T3 j' a. p
F5 运行游戏 p3 L8 X+ B- ]3 C
F12 运行游戏且隐藏调试窗口1 D0 t6 B3 z) E! ^
F11 步入, 单步执行, 会进入子程序% }" Q7 K! }3 }0 S
F10 步过, 单步执行, 不会进入子程序% D ~ F3 [( n
Shift+F11 执行到子程序返回
& U' Z$ C, |. b1 a6 b Ctrl+M 内存浏览窗口* ~- ]- F0 p+ b' Q' z. E% b, {8 z
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
# ~) H9 B) V, a4 `. I ^8 u
) o4 v5 K0 M6 K. N/ o3 u5 }{:4_94:}
" M/ z5 _! k! n
7 E1 v* J+ S- h1 s |
评分
-
1
查看全部评分
-
|