|
|
4 x' U1 [8 N, B' k0 N
很快速的整理我自己常用的指令) x0 p; S0 x8 j/ H" j9 [$ m
3 M( o' @ O8 K6 s
{:4_112:}
. i; P9 s% d& i* t* [+ u6 C/ U2 u2 W9 ^( r! s+ t6 q
MAME DEBUG常用指令' y/ f: R; ^+ D& b& f, x
8 d5 m6 g* H8 k2 i* s% x
内存搜寻: ci, cn, cl7 b6 L1 W$ w0 ?0 U |
" e( c2 M4 O3 d; I& w9 R/ z ci
# ?& W6 A% s1 p; [$ g; P 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
- {& P) ~6 C+ R: w
$ j; h$ F! _' |: d cn
% o: Q4 K' O) V- p6 |7 ? 搜寻指令3 T2 G5 x6 |& m) ?4 H0 {
例子:
- H) I; z0 A P1 ?, N& F1 i+ G cn eq,60* T* e! G) }# Z. T8 r+ ]7 N W
搜寻目标等于60 (十六进制)' u3 B. m; k$ h8 u
: E) A6 w3 w7 h7 Z
cn eq,#96
/ H, O; e4 @- S! I3 D, o3 t 搜寻目标等于96 (十进制)
2 r# ]0 _9 K: f" Q( p; u: Z! A# V3 b* K- O) N. |
cn eq \0 a2 y h+ a1 L) k) K* k4 F
搜寻目标的数值没有变化
! r* O8 Q2 w @3 M5 `& b
1 I9 B+ [+ A0 ]$ @5 x0 T cn ne3 Q5 E1 ~3 s; ~, j- P4 J
搜寻目标的数值有变化' r: \1 H# f- D( w
8 t, I! G- ^6 \5 [
cn +, L! }3 {5 n$ x. ^. f/ \! f7 O
搜寻目标的数值增加5 E% c0 ~, T, M* e7 a
' d8 G5 Z7 p* {4 T% u cn -
% b$ e6 i8 r& v6 j# L# D" T; u6 P 搜寻目标的数值减少, B2 J! j" w; A" k. _
: I5 b/ c) K3 q2 @. B
cn +,3
. _3 [4 _3 {* Y) P 搜寻目标的数值增加3 (十六进制)
, j u4 S& p: ]) O: S( A* s, P+ M1 S9 P2 j8 X0 s/ l; r, k
cl
7 Z3 e/ D$ A* E# G8 P! z. i3 m 列出所有搜寻结果
& N* q3 n( k I8 x1 F8 y7 a! ?5 t; @5 U
cl xxx.txt
, }5 |: H3 ^" @9 f* _3 K- t 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
( I2 N' A7 }% `3 z
% ~3 z# J) |' s X8 P7 G
. \0 U5 }' n( Y) z: ` i2 N+ ^内存监视点指令: wp, wplist, wpclear
: A2 F. ?: n" ?8 d I 例子:
2 j0 e4 [' d. ?0 J* v/ \! ?) M wp 1234,1,r% Z! a) Y. G/ R6 [
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度14 s/ v9 |! X* l# M8 }3 i
* i* e) u) Z7 }" v, ?& Q
wp 1234,2,w
' Z$ F) |9 x/ o1 g. x& R 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
% s1 a* [3 X( B+ _4 G6 Y: b
( F8 h; t# N2 B2 T5 ^3 c wp 1234,6,rw% H2 O4 s1 A1 `
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6% K" E8 t$ G( w& Y( U2 _! N& Z% G7 z9 z
! y7 q8 y+ U7 \
wp 23456,a,w,wpdata == 1& o" I* e2 {( _# V: M
在地址1234下写入监视点, 数据长度a, 且写入的数据等于13 Q2 a1 W$ ^2 S& `
$ v" }: F5 C' O+ {
wplist0 u5 N+ Y" R' }6 U9 z% s
列出所有监视点
5 n A( H/ B1 c( g8 m( b! p$ Z
9 N0 V/ K. n, {) t, }+ g wpclear 3: G/ A0 {- H( b, B9 e
删除编号3的监视点+ t" f* x( q6 T8 A' U
' n6 p$ ^' S# P i wpclear$ j* h2 K5 ^) q, K* R& A
删除所有监视点
6 @9 O: z2 s6 s! R( c; v
1 C1 S+ k( Z. F
! G. d' w+ T# M. R. T2 e/ o( T* j
. b) A: r. N4 V$ ?% `程序断点指令: bp, bplist, bpclear
' ?" L, }" |; l/ a+ a' ] 例子:/ K8 z. j$ w' r4 L: F' s+ Q3 }
bp 1234- M+ g ]. o8 y" j8 J; l# r
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
: L( x! ^ b' V7 W, P3 T+ r+ z$ _. W# Q8 s) L2 {+ X
bp 23456,a0 == 0 && a1 == 0
9 L8 r5 }9 [) y8 `) L+ t 在地址23456下断, 且中断条件为a0等于0以及a1等于0
8 c5 |' {! q; D; a! q1 g
% G J T5 x& f* I0 Z4 G' l! p bplist
% s& X: {4 |: I& M, U' H1 y8 o 列出所有断点
/ A; ?0 J1 o& Z$ i
1 s& h$ O( p. v" j& T' ^ bpclear 3
$ t, n& x0 G2 {# n; b2 Y1 Y8 E0 ^# x 删除编号3的断点
2 l3 @# R" r5 p/ U3 N! n4 O3 r( K, h+ f7 w" l% d* n. p
bpclear
3 D D6 e" C3 `1 ^4 @' D' W 删除所有断点( }, p9 j3 O6 `' J$ w' M
6 S) N8 w. h6 i" \ r7 J8 e( v ! v) j% F8 P9 p8 e+ Y2 F% @% b
|6 k6 v( l' a: H' M) n
跟蹤紀錄指令: trace6 D, {" n& s. d7 W, Z. a
例子:
* \* h& H! m3 F1 |3 a4 ]) C trace 01.txt, {8 P& {1 W: D# l7 j6 `" {+ q
跟踪当前CPU运行的所有代码, 输出至文件01.txt3 U b, U. o! r/ x+ Z
8 J% f. g% k/ k: A/ m* I l
trace off9 K3 `! O2 q. m( _" }8 f
停止跟踪, 并且关闭文件
2 L+ W8 `. t; r! J! l" l/ ], l
trace 01.txt,0
. [/ L0 _5 [8 Y 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt3 J4 R L; h' P S% H2 u( b/ _) ?, L/ E
# u: ?0 v! q8 {) y- M trace off,0
& ]) m* K6 |- H& _4 t 停止跟踪编号为0的CPU, 并且关闭文件" p2 V) f# |7 x2 ~8 [& V1 E
( }$ ]" i. ^% P+ c
trace 01.txt,0,{tracelog "A=%02X ",a}, w" f# U: o* |" k% h
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ) R5 n* h4 k, ^* D5 x8 B
并且在每一行的前面, 写上"A=a "
" X6 ]# G- o( ^, r- } "A=%02X ",a为一个C语言printf函数常用的输出格式% K; Q J- J X& a: v5 S
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
# X& D0 F1 U$ m- E X表示为大写十六进制数
* }2 z. U' ^( `+ Q' o) |
/ K t/ j- d. Y& X0 m* q
1 M4 K6 P: a; j9 U0 l3 {$ G6 \* U- A9 S" ^) {% ~
内存直接写入指令: maincpu
$ f& T3 |' q" u9 B 格式为 maincpu.[][]@地址=数据
& e3 S6 u2 L! j0 _. a* ~/ i& _ 第一个[]:+ S3 w2 [% ]( ?
o 表示ROM地址
& x% T! p4 ^/ A" z; M p 表示RAM地址2 h1 v) w- C4 ?8 y8 F( s
/ Q5 C! `" ^0 b+ z
第二个[]:) M) x- E) O( }3 W& O
d 表示4字节2 Y) u5 `, E. D
w 表示2字节+ i, i( i' I; ~2 d
b 表示1字节. A" j( K2 c2 g+ i/ o
- Z$ O6 O3 g; ]
例子:3 p# u' m( H, A5 K
maincpu.ob@1234=FF
$ M% |8 o9 F+ l/ k! {# H 在ROM地址1234处, 写入FF一个字节
6 }9 \( t" f, s+ ]7 A! h4 o& H( W( U) A
maincpu.ow@1234=4E71+ g2 H0 {9 A3 Z, y
在ROM地址1234处, 写入4E 71两个字节
# r4 k; |. d8 K. h/ C9 O
4 F( |5 w4 q7 `) A/ x maincpu.od@1234=600A4E713 w5 @/ S7 r+ n
在ROM地址1234处, 写入60 0A 4E 71四个字节( F# { I& Q1 M$ {
- c X# O0 _( }' C 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写8 m0 A6 g5 p* _. a0 J6 J
L% W) ]9 k/ K1 {5 y% @' o$ u$ H; s2 m6 C: {) T" f- u
其他:
7 `$ }9 t# b" x1 Y& g% V: W dasm 输出档案名,地址,长度$ U! N+ U" w( w- o# K/ l
输出程序的反汇编代码6 k' D$ n# y7 M0 c0 f4 h6 j9 [
例子:
& s m. v4 R3 C+ W" D dasm 01.txt,0,1000001 A Z- d4 g" r# t0 }' H( K) |
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
" M5 y; }1 O& S0 p( c" {
9 }. ^4 K. [ z7 ~1 C softreset1 J7 R4 X: }' J1 Z+ [% e5 d
游戏重启, 但不重新载入ROM5 D8 C& A: n1 L+ T/ b
+ C+ x; V# n: D6 b+ ^9 t5 e
hardreset
3 P8 S* q) H) C3 K5 w) M( q 游戏重启, 且重新载入ROM. J. \- E2 c: x
: _ l! U) d' x snap xxx.png# |8 i$ P# X) O. R; X$ l
截图为xxx.png
4 {: r% L/ K! _" o- Z# G2 A: X! }4 S
" k) t6 S# i, f! p- u5 P
; M4 F2 Y% ?6 |7 e6 z2 k0 g$ h' y' t+ a / W+ c' S1 @- G, t4 g3 K0 @
+ R: ?, l, N6 ]* ?- H
热键:. q9 G* m$ X5 f& x0 T
~ 中断游戏
/ W% l0 L0 E5 t' N9 ^5 T7 P F5 运行游戏
$ [. l7 p0 L8 k F12 运行游戏且隐藏调试窗口, ^: A R3 u) Y
F11 步入, 单步执行, 会进入子程序
j6 Z$ a: I1 G6 c4 N0 h* f8 t! D F10 步过, 单步执行, 不会进入子程序) p/ |3 @9 T1 }5 H1 e4 x
Shift+F11 执行到子程序返回
+ ^" H' K8 T: Y6 _3 j7 ^& I* q Ctrl+M 内存浏览窗口/ y/ @+ O3 g g# J! n, U' Y8 v' I* \8 e
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
' R1 I. |, L- @2 J) T1 A; X2 V
{:4_94:}
3 O& u; r# B) }: ~7 U! z r) F% E! W; k# D
|
评分
-
1
查看全部评分
-
|