|
|
. @% B; ]8 l, y4 F8 K$ g
很快速的整理我自己常用的指令( r- j6 c5 C# c$ B! p8 b
6 X9 \% g ^$ B0 J2 e5 }, j
{:4_112:} / ^# @; C( k, Q: G: e: c
) ?: X3 B3 S* cMAME DEBUG常用指令
" h; @ y" P: x% y7 F5 j0 }$ T. t4 p1 L0 b
内存搜寻: ci, cn, cl
( @2 e) Y5 V% Q1 i. C
4 A: o9 h8 f/ p( E7 Y0 X ci
' d$ b' i4 w# h ~ 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
# x& F' `9 g. ]0 v1 C6 c+ Z- a3 i4 S5 v
cn
2 m; L* }* N; `8 d 搜寻指令
6 h* C: C0 g8 h0 }' j7 a$ ? 例子:
1 s+ k7 x( w. {8 T4 M% J cn eq,60
3 V" l4 r6 m- y& ~5 ], U 搜寻目标等于60 (十六进制)! ^& S5 V6 E; Q
8 d; j; O3 L4 z5 O! J cn eq,#96
* k4 x+ \8 g; P- @. Q% Z 搜寻目标等于96 (十进制)
, ~- n* @( a5 D; C) y% Y- h' r* |8 i: s$ W6 r y) C) x
cn eq
9 f) v% g x1 T) R 搜寻目标的数值没有变化. a, l$ u8 ^/ q- G+ r
0 R! H2 P" V3 m cn ne
/ _& w ?/ o# u4 v: i 搜寻目标的数值有变化3 |; s& w" Y- n5 Q7 |6 n! r
: d' c! |- H. g/ s3 f6 M6 r, p
cn +! ]4 u3 \7 ~+ M: o/ Z; }
搜寻目标的数值增加# m9 b" V) J/ q7 a: J: M: w n
3 o. P) Y7 i/ f2 q' W9 n$ g
cn -
/ [5 g% p* ^$ I) B# J U 搜寻目标的数值减少
. o# G% T$ w h; a
- W& q0 a9 G/ j" } cn +,3
; W. G/ N& @ u+ b$ C5 b% ?. `( a 搜寻目标的数值增加3 (十六进制)
& S2 v% d6 _$ u, j* z2 r
2 K1 S8 ]* V9 }8 k- n cl& k- w" m. _4 ~1 u
列出所有搜寻结果
: h! x( u% B0 b6 A5 f; O3 d/ ^6 @3 p5 X f+ d3 B
cl xxx.txt5 l/ A8 K6 d4 I2 G
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式2 d7 L( M. Y# s+ _9 Q
$ `: \5 V0 R1 m7 ?+ q/ z
! I- Z" \/ J. `$ k
内存监视点指令: wp, wplist, wpclear
( J; r8 S/ n8 [# r3 C" c# A 例子:( Z- n, L/ K# Z2 r- N% [
wp 1234,1,r( c* H) }: Q( v+ r; y4 |
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
0 V/ x% d! G! Y" }9 x# I# x9 A' }5 D" H, B4 S: u' z) r
wp 1234,2,w
$ m7 b( a' B' U 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
! C/ x# o4 K6 h5 f6 W, r / r* \5 }& Q7 r1 P0 Y0 v! ]
wp 1234,6,rw
' }8 v8 O8 \+ Y3 Q5 q% }3 w 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度65 P6 G9 K, V* I w2 p7 b& i+ |
/ z' B! g* b) F2 F9 c+ ]; y3 h wp 23456,a,w,wpdata == 11 I! M R3 ~9 F* p
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
6 P; r( z3 T0 e) ?7 m, s/ _3 W- {$ W* E' E* y* m! l
wplist Y1 i& F) i9 N8 F8 }7 E7 q
列出所有监视点
5 f6 O, f0 Y/ b" b% g! R1 F: ]- o; W) d, \3 ]: I6 ~
wpclear 3
6 T0 k" n# {. b5 J0 _* b% ` 删除编号3的监视点+ C H- O' s3 z& ?- |7 X' l
6 f; O+ ^! a) L ^; g4 j
wpclear
3 q! y3 a! s1 w7 ^+ ~ 删除所有监视点
5 a' J, J! F* M& l! |1 }. P
/ V: r: A1 B U
/ a: o# ^# J: P# ~) {% r3 ]9 k5 Q
/ F7 ]/ L$ K) c7 {. I程序断点指令: bp, bplist, bpclear
7 P3 ]9 S$ g( r* s2 E 例子: B# n r8 S6 D( g, q; v. _
bp 1234
- r f- K4 `- v5 p" e0 B 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
2 X( W* Y8 W# N- o5 S5 B! z* k. H0 g' \- I5 ^
bp 23456,a0 == 0 && a1 == 00 H. P( |/ T- l* N7 f. C% s, Q
在地址23456下断, 且中断条件为a0等于0以及a1等于01 h* y% \6 s% N7 e% d
$ a0 r; ^" L9 Z4 ~. S" n2 ?, u bplist" x9 M) X, g+ U9 f9 E8 ~
列出所有断点
6 G% I6 k' Q% t- E* v) n$ P) {" J- f: G8 D4 Q
bpclear 3; T" b( |% f6 ?2 Q6 t) c
删除编号3的断点
& L k+ p7 G6 @, S! M& z+ \$ n) n
* j0 x$ a) j+ a4 h$ d$ K1 T bpclear
% H7 G0 U! ?$ S. t5 I 删除所有断点2 g! c9 w# l% f/ d
" C' r- P! c" m2 `# g- m
; i2 k/ w/ }$ Z; o3 w
/ }( x+ W* {6 Y: w( Z
跟蹤紀錄指令: trace5 w5 z( U0 z4 G- t
例子:
/ \% M; L+ m$ }, B8 L A trace 01.txt
! B5 ?1 v% X/ K2 b. l# @$ o9 q 跟踪当前CPU运行的所有代码, 输出至文件01.txt( L- m. p. ~6 S: C1 B2 x
1 \# l1 I5 B/ p } trace off
- b# z+ |0 }( ?- Q6 y 停止跟踪, 并且关闭文件
@0 Y1 S6 m$ n7 C. v5 R
) o( o$ m$ |& y1 e8 D trace 01.txt,0
+ x$ O( F, B4 P& h3 b$ X( ] 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt$ R& O4 A9 K& `1 Q! H$ V
$ `* [, b9 b) m% {6 F) d( V0 @
trace off,09 j) ~8 d. x! Q, W
停止跟踪编号为0的CPU, 并且关闭文件
2 Y" {& m6 s. H1 B# d
' U8 A1 q# E1 A trace 01.txt,0,{tracelog "A=%02X ",a}4 J/ z( g; v. p8 m9 g2 D. P I5 m
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
" K: N! C6 c9 w( r: j- Y% A, Y 并且在每一行的前面, 写上"A=a ": ^( e3 \1 Z* \7 C8 y: V$ ^
"A=%02X ",a为一个C语言printf函数常用的输出格式! u+ @7 X) G: P5 E" E/ f
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入 O3 U( j* E, c$ @ m8 P' e
X表示为大写十六进制数
2 C* f$ [) W2 J) ]' u
! i2 u! G6 `" }/ G& o
q7 N: k0 a$ G% b; q# B& R8 U( L( M, H6 q# y
内存直接写入指令: maincpu
4 J& @/ c* [+ n$ C: m9 Y 格式为 maincpu.[][]@地址=数据
$ S7 V' Z7 x% V/ o4 b6 e* p 第一个[]:' X/ P; y- m/ [8 F4 _$ n
o 表示ROM地址# v& H$ \, `; |, o. Z5 ]
p 表示RAM地址2 r- z u: Y& z) {3 j" S
9 j! `7 |3 y6 z& \
第二个[]:
1 {4 _ e7 \+ T0 `6 n# @% ^1 K d 表示4字节
7 h( ~& e1 S8 q7 K* B8 k w 表示2字节
- ]3 G* S9 _0 s b 表示1字节
W+ D4 {% z8 P) D( j5 k! D8 h; B: V( \* ~, j$ v1 C- X Q6 j
例子:
. o% f0 p1 D$ h4 Z0 `, F maincpu.ob@1234=FF
; f) E) |7 p% V8 X8 l0 G 在ROM地址1234处, 写入FF一个字节
. u! ]( r8 R9 G/ c: L: F
w- }6 f4 u( G# T maincpu.ow@1234=4E71
o6 m4 K8 N/ `& u 在ROM地址1234处, 写入4E 71两个字节
0 ^) r+ N- D/ \! x/ E# n, @, x0 f
maincpu.od@1234=600A4E71 J3 L5 [9 s& w( z+ C& c: |: m& A
在ROM地址1234处, 写入60 0A 4E 71四个字节
/ H' ^4 E, O8 Y& B0 B* t' K5 ^. c k" C
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
% }* K; @/ Z- E# M x, ^ $ T' z1 S% a. Z* Q6 _& p) s
; q! L. z @* T# Z' v& g- f( |3 D# t其他: @, K! e& e8 l. M. Q8 d
dasm 输出档案名,地址,长度
5 H7 e" Z5 L2 {2 y/ C; ]3 @- ~) q* T 输出程序的反汇编代码- M$ B, Q: R: @: b
例子:
8 y7 x! C8 M2 e% }. N) h' k8 t E dasm 01.txt,0,100000
+ Y, _/ U3 L( E* G 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
! P G) R" o" W/ x6 v2 C. ?+ K5 F1 ^9 m# M0 s5 t
softreset7 L) R" z( A! C% E E7 T4 r
游戏重启, 但不重新载入ROM# {8 j; Y- [$ D8 t0 T6 Z6 m, N8 u! K
& C2 s4 F. ?; q' J: Z* U
hardreset
7 Q; W0 E- H% P+ J8 H 游戏重启, 且重新载入ROM" b! ?/ W' g% K$ Y% _4 v
1 w+ i; \& {* p- b/ H: r9 c& s
snap xxx.png5 o& P# B. h5 l, T
截图为xxx.png
! `) i% Q. v! C% P3 T% C. T( d& S, `1 G t4 Y" ?! s
% q7 P1 h; |) w) d! b( X3 d! Z 4 v* S( o" n4 V7 ~
, |- l7 {* d$ \热键:
6 h9 u; H$ U b5 B% S; M+ [6 S ~ 中断游戏
5 A# [* ?9 {. L' X! K% H F5 运行游戏. b) _3 C2 s0 \ o% q
F12 运行游戏且隐藏调试窗口
. x0 x' k& L8 E9 O F11 步入, 单步执行, 会进入子程序
5 o3 W0 h# L3 _, R/ z* X F10 步过, 单步执行, 不会进入子程序
$ L# g7 G$ P: j: P+ a5 r2 r Shift+F11 执行到子程序返回+ ? [+ x7 C3 O% o4 _, Z5 {
Ctrl+M 内存浏览窗口7 S5 l0 {) d& j: c
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
9 R0 m0 r+ U& Y# h1 G, N6 g$ @" e v1 O- K3 ]; O( z& H
{:4_94:}
. V) H& i+ D: Z4 u8 [3 O! g; v% D
7 }2 U2 S" \ Y* O9 P7 l |
评分
-
1
查看全部评分
-
|