|
|
: {" o3 P- o" ~ q( x很快速的整理我自己常用的指令
4 t- r# C; A; @- i7 w. a
7 c* D. _+ {' x7 A{:4_112:}
+ O; g; r2 E3 {7 n" K/ t
; X9 n9 I* G* b% Z f% cMAME DEBUG常用指令6 P- ]2 F2 m* J8 K# d5 x$ b
: S4 U0 P+ G" u$ i4 T; Q内存搜寻: ci, cn, cl
$ N1 ]1 ?) c+ r6 |* ]2 ?: S
0 X R0 M, s4 Q0 s0 | ci* B9 ?9 t0 |; b! t7 i3 V4 ~
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
, a) f# U4 `% @" [6 n5 b P
7 @2 ?. l0 f, ^ S" k cn
/ @" y5 c. z3 {7 o5 `2 m 搜寻指令' _( s6 ^ b2 n8 e1 W \4 u
例子:
A! N+ [9 S, Z& I. \/ n; u8 _2 j1 F cn eq,60
+ B2 j n; f( U" Z7 l/ M 搜寻目标等于60 (十六进制)
; ?# S* S9 F" i
; ~) R+ x3 w# J t: b P cn eq,#96
9 ?0 L2 i# m. T5 ^% Z* p& A 搜寻目标等于96 (十进制)
- o7 ^ V0 X$ f4 `% o
[9 ~1 q+ I: P: H cn eq
- f- q' \) t+ t 搜寻目标的数值没有变化
1 w2 t% y5 x, d2 {4 d* y' }; U3 ^( @ w; w1 g% W% G
cn ne
! N- ^5 N- ?, |1 ?9 r( E$ } 搜寻目标的数值有变化: K. W/ _! N) h# S1 }4 D
. o. a' V! ^4 n8 M" E cn +7 W. d( ]1 g1 h
搜寻目标的数值增加( R9 q( m7 f! h8 [( v `3 g+ x1 O
' Z% F2 F1 @) i0 w) Z" s5 A2 k7 l: F
cn -; o: }: M. M* w( |3 B& I8 U' G
搜寻目标的数值减少- t( r* f: @. o. s2 E) O, N- U& R
' ^- y; M% O6 O/ \& R6 y
cn +,3
' g; `% D9 k' `3 W4 X 搜寻目标的数值增加3 (十六进制)
; D8 x: s3 q# d
; V# A9 M: ^: t# L* M* F& d cl: j/ e5 ~' h; q* a9 {. A2 ~& T
列出所有搜寻结果1 Y) n5 }" g( I K6 M
% L5 g7 }; q' j1 C
cl xxx.txt- o P" g j( L2 u# n) N9 L
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式* f; e" ^' Q& r: y# e
& M& F0 U+ B2 K0 B% }8 r& o * T6 x( ~3 i; U/ n
内存监视点指令: wp, wplist, wpclear: [) y% L6 m, f) P/ b" m
例子:
2 H6 y( E3 B* q- X7 O) I) S- O0 k) q wp 1234,1,r. Q( B& M) n) Q) c
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度10 ~0 C3 ]$ G( x7 ?2 R
. C, z( b9 M8 ]3 U
wp 1234,2,w; M3 j. }* Y8 q% @
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
1 s# G2 ?5 j% o7 o% o
# z E! m0 \# L: R) ] wp 1234,6,rw7 U; h3 q% N6 {4 @( q
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6% H" J- W4 s1 P) ]
7 z6 h+ ~# [( y7 r wp 23456,a,w,wpdata == 1
. Z: ?& U- b( R7 k; q. c 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1" N% ^6 N$ p. Q/ \
7 f& o2 W1 s& {# S9 I/ x4 j) w wplist
h$ C- z$ q6 O- \0 [( B2 D 列出所有监视点- v0 i1 c. b, j# w" G! M" x1 o
# t y+ i5 L+ j wpclear 3
* r. a4 i! W/ p, |) n2 d/ z( Q( [ 删除编号3的监视点
- q- j9 ?' q! L) y5 H- O) I* n0 C
" L9 y& J! O, c$ A1 E wpclear
- x- N* R) U$ \- z! q% f1 C8 {7 \3 K% \ 删除所有监视点
* a- Z5 A; w; o- D. f" q
% ?7 t6 w. U1 _3 | ' X i; H: g; V. d
" X9 A Y0 p/ D3 E
程序断点指令: bp, bplist, bpclear
5 [; K' ~6 D" P 例子:
3 h2 g9 o! W7 [. _ bp 1234
# z( C$ _0 b9 r& i `4 P7 y# l8 m 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断0 ?5 V* W6 U1 V# n; z: N. Z
3 z5 `) U( a% o) _
bp 23456,a0 == 0 && a1 == 0" R, H! H G& U4 P [3 K# ^
在地址23456下断, 且中断条件为a0等于0以及a1等于0
! s& o5 R, ?* b: L8 |+ T0 g! l5 z0 b" P5 p+ ~+ e
bplist
) W. P) j M% u% l( ^ 列出所有断点
$ v. ?7 v; o) w
S* I) P W& t1 M bpclear 3
8 {2 K* k; a5 h) D) r; } 删除编号3的断点7 [( D8 I. i+ o( c& ], `! i, K
: e% O8 R" _* {4 E; g; i
bpclear
0 [) I% w. w; R4 E 删除所有断点
9 h# ?$ z% J5 \* ~) g1 k, Q/ {; u& \
" F a, W: a, k0 Y f0 K+ e3 v$ u! `3 g4 y
跟蹤紀錄指令: trace, Q% u" R; _+ F" }9 N
例子:
8 G& _7 y+ X' C: t; v trace 01.txt3 |$ C* [6 H3 u3 V+ D* [
跟踪当前CPU运行的所有代码, 输出至文件01.txt% a% {0 v9 m) \
- {0 Q- V/ H4 U$ K3 d, k( I
trace off4 d& B! V! I- [( e4 ?% N$ m
停止跟踪, 并且关闭文件2 h. |/ {0 G5 P# ^1 h
) V* V8 w3 L; a U trace 01.txt,0) l7 N% H4 `- s5 Z, l2 z0 [# u
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt) O1 }2 t' K3 N0 p( m
* S# u- ~% r1 X7 _' e trace off,0
+ ^7 D8 M6 y! u) N2 p; A 停止跟踪编号为0的CPU, 并且关闭文件2 N: k; ]5 z4 @
5 m7 l- A! I, @ V0 U8 w* g# P trace 01.txt,0,{tracelog "A=%02X ",a}
& m6 ?! D% `( y 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt c. Q6 T# [# ~) @7 _( ?3 J
并且在每一行的前面, 写上"A=a "1 J, V8 G5 i5 a5 g
"A=%02X ",a为一个C语言printf函数常用的输出格式5 w5 M' v0 T% k+ I; O5 }+ Z
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
0 @' ] z6 E3 T8 [3 P X表示为大写十六进制数
, X4 r t2 G+ M2 L l7 m. \5 h& T* e0 m$ i( h, @- c
5 M) T1 C3 e2 s# T. n1 N( H( G
9 e; w7 [. R: A% b
内存直接写入指令: maincpu
" {7 u4 I k9 D' P# V: R 格式为 maincpu.[][]@地址=数据3 x( Y1 G! O# g8 [
第一个[]:+ `: C, u; q- X- X1 U
o 表示ROM地址 c% O, w8 y" |4 ^+ }
p 表示RAM地址' g0 Y2 C! q4 S" }
/ l2 }" O8 I! G$ [) H 第二个[]:
% ?* C# U9 E* x& ^8 z' b d 表示4字节
# h4 w+ Y4 j; F w 表示2字节
& L# s, x W+ q7 B b 表示1字节: U9 [, g' z$ u: K9 G
# ~2 r) j" w# I" N) d3 H5 I% C L
例子:) z9 i2 l/ B) | m+ O6 s- N
maincpu.ob@1234=FF
* }2 `; w' N ~7 K1 r 在ROM地址1234处, 写入FF一个字节( ]0 d) d1 j+ D$ H. s+ S2 G
- g) r1 o# q5 s G" D- P) t W maincpu.ow@1234=4E71& S6 [7 ]% Y s3 G* l
在ROM地址1234处, 写入4E 71两个字节
4 b- v# N0 b1 U; ]6 g9 e5 z, ?; n3 C. O0 k6 ~
maincpu.od@1234=600A4E71
# K$ `9 V P4 ]! c 在ROM地址1234处, 写入60 0A 4E 71四个字节) Z$ s( ^6 w) n$ u7 R& z# ]
4 k% N# m0 |2 g& p. Z7 T
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
8 V4 s" L/ m% @1 M0 v
" V8 j0 j8 I; B5 T n1 _ S: B( q. @8 [
其他:
' z) Z* f5 e5 l) ~0 L+ s dasm 输出档案名,地址,长度
; w& b4 ?4 j/ w$ ^# d5 U0 h 输出程序的反汇编代码
/ M7 v$ z; K# { v7 t _7 { N 例子:
. Y: h' \/ B& t' R/ B- [9 o dasm 01.txt,0,1000006 Z& k9 Z f X l6 |8 ~5 r& f. k
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
$ I! o3 B1 _" b9 k
1 R- D& o7 s. L2 A& {. Y6 Y' a softreset0 ^! L( L0 A# N5 `( B" T2 q
游戏重启, 但不重新载入ROM
! u1 |( K) @1 w. \3 x2 |) o
; y* e! x4 J$ \' ~) X7 p hardreset3 M7 {4 d- q' U) D: f2 m$ n9 j
游戏重启, 且重新载入ROM
7 J3 [% E- K" o i9 {8 f! V3 t _' d$ s
snap xxx.png' x! L3 r, w* X2 H$ M* x2 u
截图为xxx.png
. ^+ W9 k* k I9 s u' w0 p. e% y) P6 W; F" k0 h( \( Z
- A+ @ i; T9 X; [; l3 O , w2 Y: C$ h: ?% P9 `8 q* K- }
M2 c- g$ \" ?; U) G
热键:% O, [! I7 u& [
~ 中断游戏' P3 r" o- W/ \
F5 运行游戏6 h+ d Q, @/ w0 p1 S
F12 运行游戏且隐藏调试窗口
" ~+ Q: b; `# y { F11 步入, 单步执行, 会进入子程序
9 \/ a! m5 @' L1 W }8 G F10 步过, 单步执行, 不会进入子程序7 q8 G: ~) D" H) L# m; ? @
Shift+F11 执行到子程序返回
/ V0 d, u1 Y$ p8 M* [0 E Ctrl+M 内存浏览窗口( ^ O1 l$ b3 q0 f+ c2 o
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU* ?0 C! C8 D- ?1 ?+ k
: d# C% c% C$ o1 [
{:4_94:}
4 q- y+ s* K \% f
/ H: J8 C6 n( r0 r3 a: W- d& { |
评分
-
1
查看全部评分
-
|