|
3 l" J5 G) p+ D! c) @' @* K |很快速的整理我自己常用的指令1 Y6 D# E$ d- B- x, Q m; D
3 b/ I/ p) Y) V
{:4_112:}
( x2 o# s% u) e& q- o1 A- w, R7 T
: \5 w- D0 b2 ~+ ?& fMAME DEBUG常用指令
" z2 J8 d: w* a. o1 z# A) U Q- B4 I. w- v
内存搜寻: ci, cn, cl
# e+ h9 T% v1 W: Q N6 V
3 _" z2 y7 I5 S3 ? ci
9 B' N& B6 L+ t6 A5 {* a. I. S 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
% M% v8 _( X8 h* V
4 G; d* K4 s" \ cn
+ |- s U5 z8 @ I; k* h" q 搜寻指令
( k" ?, K/ M E: R 例子:9 b& l- [4 F" s; g' k$ ~5 p
cn eq,603 _7 N6 ~' J) f* l" \$ C8 ?
搜寻目标等于60 (十六进制)
4 f' D. k* ]" N( w, t . P" H0 }. p7 X4 Q! o3 t0 I9 s
cn eq,#96
5 c: _# `9 u: E 搜寻目标等于96 (十进制)# Y7 X7 v8 `/ N& t# K$ @0 y/ G
, u! X# n3 U3 @* C. D, ~
cn eq
/ s. A- a# f$ K' X- Z. D 搜寻目标的数值没有变化
$ {: j& [" j$ D: A
# Y1 ^9 h2 U4 w0 g! s" Y cn ne
9 D2 M9 [; P ^! T 搜寻目标的数值有变化% k* i) ?6 P N$ n
$ V8 J& j7 J: d/ l; z cn +
. B% x* |' i2 Q: m 搜寻目标的数值增加
; Y3 K, G% ^" P* w8 n: o: K 4 f) ]6 `' ^+ v9 \/ |: m" y' e- O
cn -
0 b6 A' y7 K ~ C1 M% M' ` 搜寻目标的数值减少. k# p; e( |8 f" s& }/ l9 X
# J2 G: c# l. ?" \1 C! u cn +,3; f; R( \4 P$ m' F
搜寻目标的数值增加3 (十六进制)
9 D/ @0 Q* {' z2 J. D: M3 r% P1 F
- s) R) B& I8 b( _ cl
9 a9 t$ d* n& e0 G4 F 列出所有搜寻结果
8 f& o s5 V0 e9 a# Y/ ]
2 T3 A$ p4 ]9 ~/ i/ P+ Y cl xxx.txt
2 w7 Q# T+ d. n; k( K) ?* u 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式) {" j) N5 \6 E# a4 l
6 @; ?2 `: h; }' y4 }( Z: s( x
9 R3 j% y/ k- a
内存监视点指令: wp, wplist, wpclear
0 G& v0 a: A( q6 } d2 O- G 例子:' t$ b$ `9 {# Q3 s! u* V% e- u0 `
wp 1234,1,r+ ^0 M! }: I$ w9 ]
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1" I! d, ~' Z- L) |/ a) ^7 |2 {
+ [, K+ b# E- u* Y4 ?* U: P wp 1234,2,w
' H' q* F& |: [- b3 M 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
4 y/ d, \3 z! v9 Y& ~' U# u
1 [& R2 | Q# D$ q wp 1234,6,rw
; A8 e7 j! W- a% e8 f0 W. p 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6- k* _4 s% B% d# ~' E7 K8 w# s
$ J. x/ n* U; v' I% y- ~+ Q9 d9 u, G
wp 23456,a,w,wpdata == 1* g1 O# r% O( s, r5 l
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
9 k3 Z/ \. B! S( W) v% [2 }& s ~4 _( i8 Y" s
wplist
5 e- S! X/ w* e0 K; v( o8 C 列出所有监视点. `1 v5 ]' u4 ]9 w) @8 A
- a9 B) h. m( T: R" V" t @ wpclear 3
* S9 E: t$ k9 B# v 删除编号3的监视点3 G! X$ \3 ]1 _- G* `
& _& q4 H) h" r# G
wpclear
4 v; h6 _: q; y I6 E) H 删除所有监视点3 @7 L$ \5 Z4 O; |2 [5 j
) {( s5 a! v s f
: L' l9 W g! k7 t
( a1 Y C t- e' c程序断点指令: bp, bplist, bpclear
1 I a3 I4 O9 S2 ~ 例子:
% d3 M2 t( d- ?, } s, | bp 1234
7 w" E! R- H! m X 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
! ~' J+ y- ?3 U5 ?
; l0 x4 x, @ L( P) N bp 23456,a0 == 0 && a1 == 0
# N5 y" F& v" \4 f 在地址23456下断, 且中断条件为a0等于0以及a1等于0
% q7 i. n3 j( `) I8 |8 W* H
Q% s+ s% u8 x( K bplist2 k$ A' c- l7 C1 u* b
列出所有断点 d+ U- D! P- E" q* y% \4 U8 a
8 \) t' N& U8 ?3 g# r bpclear 3
& b% Z$ T! ]- r5 e8 l- O1 u 删除编号3的断点6 V4 o% Z% u( e* D9 Z6 ^- f
* m% }8 F. g" ]9 c& |
bpclear8 \' E! c' K/ M% Z& M
删除所有断点+ h: D+ o7 {) O! ]; v" F3 f$ y0 J
3 w- u2 @1 \5 a# z% Z" M+ o
7 D- W+ Y6 W# v3 ]& j$ i' ^$ p, K
6 c4 ]4 h9 _ y+ h* [ B* X跟蹤紀錄指令: trace
+ K' H* j3 ?# f: w# I; K, G 例子:% H+ E2 p4 L( Y# [& R' H
trace 01.txt
# e, i: R& q3 R T- L/ r 跟踪当前CPU运行的所有代码, 输出至文件01.txt
* z2 x4 g6 V3 E" i+ {" @8 N( \; C9 w5 J6 q
trace off
5 v( c9 v- ~) U V, r9 V. S 停止跟踪, 并且关闭文件
p8 K: u6 n5 K b8 c& u* C, c, N" k \, u) d2 K1 A
trace 01.txt,0. P) T# j3 Y% c' F3 @2 ~) J& E
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt2 ^2 F5 t g% E% Q7 J% N, Y0 d2 k
) w4 t& L) L4 e# G
trace off,0' {+ o# s% k* x. x Z/ @* O
停止跟踪编号为0的CPU, 并且关闭文件( ~( U# a. u' H3 c
* o* N* S2 J& M5 o/ Q; a# x+ N& o {: n
trace 01.txt,0,{tracelog "A=%02X ",a}
! p8 j. q3 U2 m3 l. { 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
' b9 r7 b4 k2 o- s1 j% A6 \6 ` 并且在每一行的前面, 写上"A=a "1 a5 r6 _+ R0 H$ g# K' R$ W: m8 [
"A=%02X ",a为一个C语言printf函数常用的输出格式
6 E( L/ v! N2 c4 |/ Z: K 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
: P, s+ [; W7 q% D7 H X表示为大写十六进制数* `4 ~/ k0 R( R* g3 H2 W" y: n
; b3 ?9 b3 ]( P) c: J+ A$ B$ O+ }7 G
/ T, \ y: c; l内存直接写入指令: maincpu
: [2 H& u0 L) b% M8 x4 w 格式为 maincpu.[][]@地址=数据. i' F( i2 }8 B- |
第一个[]:
/ U, Z4 d1 S6 Z o 表示ROM地址
) T2 N, _+ @: i, F$ R p 表示RAM地址
3 O O- g; C0 q4 ?
$ {9 w$ d. U6 z+ z0 |& J 第二个[]:) M+ F4 P2 n/ n! i! I; L8 a1 ]8 g
d 表示4字节3 f' V4 `0 F1 H2 @3 M
w 表示2字节
9 g6 A4 a5 a: P1 [ b 表示1字节
0 x2 P; z' n' A7 d% I' p; O# C1 y+ L8 {& ]% Z5 J( A9 m
例子:& ]3 g: J1 z; A
maincpu.ob@1234=FF
+ p$ W2 t/ i4 N 在ROM地址1234处, 写入FF一个字节
; A$ i( U& ]. F- x( C; s" u( N c' v' v, k' x, T
maincpu.ow@1234=4E71 A5 I* e5 \2 S. F$ M. u, Q R' r
在ROM地址1234处, 写入4E 71两个字节* B9 J- B% e# y
& W$ J1 h3 ^) W3 m% t) d7 R maincpu.od@1234=600A4E719 H4 m0 h2 i+ e \
在ROM地址1234处, 写入60 0A 4E 71四个字节
+ q, U9 @' }$ L' r( L+ Y
) N# B9 l- F. ~# F; r; F 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写6 ~: k- T/ r- V3 V$ v" I) n
" a( C0 w( z* J4 ]1 y. T
5 \9 O L5 c6 R! o8 O
其他:( r9 Q$ K! R' E) E' r
dasm 输出档案名,地址,长度0 U$ \; b \# f6 q: F% j, a
输出程序的反汇编代码
( C: ?/ {3 ~, Z% ]" s' d7 W+ b5 g 例子:
v" |2 T5 o6 v+ ? dasm 01.txt,0,100000+ ?8 b5 m8 G) }! e: H, I
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
9 c' g% ?% R4 w v7 q8 ?% T7 s N1 j/ F1 L4 d; \
softreset
/ w7 [9 ~7 K% p1 x& I g 游戏重启, 但不重新载入ROM
" B+ \" s% b- k" w! x8 U, N& q* C) S5 e1 k# U( c: j4 e
hardreset- n4 \6 b7 u9 \/ b* g
游戏重启, 且重新载入ROM$ m% z- C. X; n, m V! w( K
1 ?+ Z0 F1 q" ~ q2 v
snap xxx.png9 c: l! l' t% I9 H3 Z
截图为xxx.png4 N* V* Y3 c/ G$ M
) F, P; y3 K. y& b- ^6 { 5 |0 u# |8 N! n7 }' l; |: k" b- u( ~
5 k% t- h; @& e% m
( d, r3 e6 q7 r! I
热键:
2 o7 Q! }" v* q+ M" _ ~ 中断游戏
8 z# y. H* i3 T# d/ l! z9 i F5 运行游戏
$ D. E$ o3 y- s+ p! w; W F12 运行游戏且隐藏调试窗口
4 O* n M7 b! P% m% `3 [! a0 T F11 步入, 单步执行, 会进入子程序
8 O$ ?! F( o' j* } F10 步过, 单步执行, 不会进入子程序
4 K) v+ z V9 v1 ~ Shift+F11 执行到子程序返回" I q O; E- E4 i4 f9 y d
Ctrl+M 内存浏览窗口
( l7 ~' e/ ]1 R( P$ F3 z. O7 x F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU3 r, u Q' P l& R/ D$ _( f2 J
8 z) w' A+ g! Z h4 u{:4_94:}
8 S# }! b' `- g( k2 G
3 V2 a z# H9 ?2 I |
评分
-
1
查看全部评分
-
|