|
|
0 N, t+ u- Q5 I8 t9 R2 l: h很快速的整理我自己常用的指令' x* [' S+ G0 P3 K3 h
8 M+ e6 y3 [1 |9 q# N' [
{:4_112:} ; w% o5 j9 R- @: Y
2 M1 f# l+ I+ h; Z* X4 M1 \MAME DEBUG常用指令0 v# s& v+ a; P
5 j8 g1 P: k7 [7 [内存搜寻: ci, cn, cl8 i8 u g) u3 a; H6 c$ p6 r
5 i0 C7 `* a) J0 J* s4 B ci5 ]; t f+ B9 o5 m5 |1 l; b3 E
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
8 V" h; S& a" `9 G: q2 V% h% b
9 N9 q8 m/ e) H1 `9 ]5 k cn0 S, p. r) t5 R- \7 |, ^+ H! s% @2 v: ]) b
搜寻指令+ \+ k( `/ k n& U% k6 }
例子:8 g( R+ _' T4 ?6 G7 K
cn eq,60' q1 Z1 \4 P1 v0 j: g. L# {% J
搜寻目标等于60 (十六进制)" y5 I* }! ]$ w+ _3 @
@+ u! d" c1 I8 }+ k a
cn eq,#96
( A- {1 }- I! _ m3 j* j 搜寻目标等于96 (十进制); ~' D$ s6 h9 q2 i
3 j/ o& a' S. a$ e cn eq
* C" o! a c* F) w, m- ]8 r! K 搜寻目标的数值没有变化
+ [! j, H! p+ ]4 ?0 t
5 r' e- r5 o. G/ V5 O: d1 H cn ne
2 [. X6 b3 w) l# X 搜寻目标的数值有变化: [: d* l8 O$ _/ l3 P
; ?: z8 h; I8 i- A$ L
cn +
3 I7 H5 [. P# X% Y2 p- B 搜寻目标的数值增加
# R" R* j* N4 c6 J3 a7 a/ s
( X9 E I4 a4 n3 C; w k cn -! H# i# U4 X# x* W' y1 C
搜寻目标的数值减少
1 ?- E6 b' y- o) `+ Z8 T / E7 z' V8 e5 N' e
cn +,3$ _+ }9 }+ _! C# F
搜寻目标的数值增加3 (十六进制)
. N3 [7 r* e. b+ o9 |. c# K" {, k3 h/ W' ~
cl+ K4 O1 t( n) E; [7 w$ n
列出所有搜寻结果! \ m) ], P {3 G
- |* K( r0 s- e. d( c cl xxx.txt" z3 s: q) g) {9 |; k7 P
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
' G! b( Q6 x {& _+ l
2 e/ W9 D3 J! O 4 D- l* i2 V& z
内存监视点指令: wp, wplist, wpclear( s1 _2 k5 A* _, `, e9 a5 c) ]7 o# o
例子:
4 P# i; m: W6 ^ ?" T: E5 K9 R3 @6 w wp 1234,1,r$ M% t! B+ H" {! B; }; }, p- h
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
* g$ }, B) x# {
) P" s: s+ a4 C% I8 @( t! ^3 y wp 1234,2,w
; h S3 ?$ h1 g( i, G( |9 c 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2! I( c/ C* U6 O8 D0 k3 U
$ R& S- A1 I# l# \ wp 1234,6,rw1 p0 _( q* d! d! }
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度61 Y& J1 p+ m! O s
. G6 H+ C: V/ L0 k% K D5 X
wp 23456,a,w,wpdata == 1
3 ~" g7 F" A* q$ l6 `' r 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
! O3 T* Q7 `. F# n; V+ V) `+ I" d* x9 N0 N
wplist* C9 V, O8 L" {, X
列出所有监视点
7 l+ \' j, i! J% _6 m
5 M: W- {- n; Y# A9 m: t wpclear 3' g- ^+ x/ c% y- R! {
删除编号3的监视点
# E f2 j! p- N. f* L5 p7 t4 @! g. ~
wpclear
. f3 O8 p3 e6 G* v 删除所有监视点, M/ Q+ Q/ i- F0 |' ^& }6 |8 g
$ S# J) V, [2 [7 b* _
- U1 J4 |5 @/ w( F* F j$ D& u- U# R# H
程序断点指令: bp, bplist, bpclear7 l- k3 N0 p' F* ?1 O3 |% J
例子:
! l4 j! c3 q9 Y' r: o+ A4 Y bp 1234' W4 z _% h0 o) o: m6 s" }5 @% Q
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
# U3 e0 Y+ ^8 ?/ p
7 K" J" r* D+ P, {9 I, V bp 23456,a0 == 0 && a1 == 0
' ?, `) s, I( X2 e7 R+ h. h x0 m 在地址23456下断, 且中断条件为a0等于0以及a1等于0+ H/ O- g$ {3 b2 e
/ x- x! z7 j6 Z/ a6 Y6 S
bplist+ B' I }1 q% ?3 b
列出所有断点
& A: X) u: S4 E$ W3 c* E0 h4 a: \1 L9 f0 w, g+ y% W8 G
bpclear 3# {, D5 l- \4 r. w9 R
删除编号3的断点
" x8 B. ?% V* x" u5 t1 `6 L8 l) J/ k& g1 u8 ]) v1 s* g
bpclear
5 M+ d$ h, z; l" O$ M' t K: k( B 删除所有断点1 \) y, t8 {' ]. N
, B& O- ~8 f9 |( ^ " i& b7 a1 k6 ~7 M
. T- h! o1 V4 p9 u: C5 Z+ O8 ]$ s2 P跟蹤紀錄指令: trace) f$ E9 X& m# Y! u/ f2 N: V
例子:* B6 Z4 t9 R3 c1 m
trace 01.txt
" i+ s6 p# n" a7 H+ r- B 跟踪当前CPU运行的所有代码, 输出至文件01.txt
5 c2 X# O3 A4 R7 |# |( ?" E3 y5 ~. p6 w: J) F$ J" c9 u% e
trace off) t5 m8 N2 l' @5 t( z- N
停止跟踪, 并且关闭文件! K) r8 Q9 D# H
8 C9 y$ d K2 W
trace 01.txt,0
& [: J# R! o& f# h- C% ^; @ r 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt3 w' C# M+ v& h% u4 u
. n4 r6 S+ D9 Z- B' l# `
trace off,0
3 T' ~+ j. b; j 停止跟踪编号为0的CPU, 并且关闭文件0 I6 D* }: z- a/ C) ^
. }6 b( I. M+ S' K8 F trace 01.txt,0,{tracelog "A=%02X ",a}
/ _6 [4 i9 t+ x" P% C8 @% }9 | 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
0 u" z! R a( x% J' ?6 d6 F6 q 并且在每一行的前面, 写上"A=a "
# D* R% a! _* i4 ~9 ? "A=%02X ",a为一个C语言printf函数常用的输出格式( v) b0 A3 ?, k) |6 G4 f% [
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入* Z6 A0 d& o9 }6 _" x+ F9 `
X表示为大写十六进制数
: [9 l/ a& a3 [; m0 e2 y; [' C; d ]) s& p
$ I% P' g/ L% s' I0 T5 `; m
; @) J4 g8 K! b) V内存直接写入指令: maincpu* _4 v2 Q1 Q8 p r
格式为 maincpu.[][]@地址=数据
3 S& o S* r6 Z. z1 v8 b 第一个[]:
( e0 `. ~/ d' a o 表示ROM地址. h5 {; w0 p9 y ~
p 表示RAM地址2 `( Q$ v9 j% T% N3 m4 q/ H
* l0 a0 L" ^) d4 q# r9 t 第二个[]:
0 q; U( U: V1 A" o5 O d 表示4字节
, N- @* k% f4 s+ }# ]- b1 K w 表示2字节. M7 j g. D' _) W g. o$ V
b 表示1字节2 J- P. a# }6 w& A1 x
9 o, Z" r0 J5 @: c& ]; A1 g
例子:
# Y5 }! A0 L* B n. d9 Y' e& s5 n maincpu.ob@1234=FF, D+ g0 t8 S4 A, Q3 b4 z( V" {9 d4 {, K) D
在ROM地址1234处, 写入FF一个字节2 e' y3 N, @! v0 s) l
# }9 n# p+ m4 ^6 q( I" T maincpu.ow@1234=4E71
5 t3 r# K w. v s6 B 在ROM地址1234处, 写入4E 71两个字节6 ?: `1 C+ j1 o# x9 r5 T
& k2 p2 I9 Z/ i- b8 T
maincpu.od@1234=600A4E71
5 K0 ~9 u( |3 T5 I4 I" D+ D 在ROM地址1234处, 写入60 0A 4E 71四个字节$ l, x0 h7 K, L& R' A& E
5 h- V5 x1 b; j/ O9 J- B$ V+ X2 W) ~ 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写9 i' o6 _* ?+ _& o0 i
+ e) y% Q* c& G: | Y
! z; |+ Q% d: i ~, K5 E/ d其他:! [8 n3 N \/ ~1 h
dasm 输出档案名,地址,长度
$ A$ h2 o+ O% X+ [" S 输出程序的反汇编代码
, K; x% r H( S. s$ P, ^6 w 例子:
. y- j1 t0 J) C" J: o8 Q' _2 H dasm 01.txt,0,1000008 L! d5 ?) ^1 b
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt Y% p5 s; l+ @/ [0 P* {
7 C- B \& B; W( _" C# L! [" S5 q: N softreset
! [( v9 Z9 U7 z 游戏重启, 但不重新载入ROM
# Q2 F- J9 E% T2 }5 q0 L
! v3 q; Y: T; [3 e6 g! @ hardreset
* P7 y9 o) a$ ^% g2 ]2 } 游戏重启, 且重新载入ROM0 ~5 q2 M" u+ b" j. N: T7 [
0 H* M- p& H1 M/ y( u: I% U
snap xxx.png
# }% M0 ~+ q6 l+ `* ?4 z 截图为xxx.png) z T1 k1 D+ E; Z; R
2 \0 A$ k8 d# H1 r& K+ ~ S 0 @% E4 ~6 I) L4 u
2 ~+ B* s6 t9 C+ i/ g" d
1 O/ C/ s5 D8 d& a3 E热键:, V8 ^4 ^2 X9 P0 U* E2 }
~ 中断游戏0 M$ S" P( Y! [6 |' j$ w
F5 运行游戏
' |* \3 H: e" [7 k5 p' p) z F12 运行游戏且隐藏调试窗口
) o# d( V" P! j N$ R F11 步入, 单步执行, 会进入子程序+ G' f5 E0 M/ E
F10 步过, 单步执行, 不会进入子程序
3 k5 A5 l/ t" j Shift+F11 执行到子程序返回
7 l: a0 [. ]/ \+ Z$ Z) L Ctrl+M 内存浏览窗口7 _" C& f8 V+ ^3 f. N& V4 X
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
& J# g3 V J, _4 ~! A5 X8 K# G2 E; R: u* I2 S0 }: W! v
{:4_94:}
3 z1 l( `8 d9 N8 {
& v/ S$ ]+ q' M# t |
评分
-
1
查看全部评分
-
|