|
6 @$ K7 H# ~; y5 n
很快速的整理我自己常用的指令
, V: j1 P; h+ X% Z& |& y8 w( y3 f" v: R( b/ A a) x; u, b
{:4_112:} # k5 ~$ y2 j [' q8 l- H t; z# o
S) H9 W7 P! |
MAME DEBUG常用指令
& U# E; o# j! n) L# L, D3 r; _) U: V" E G3 r" d, ^3 X
内存搜寻: ci, cn, cl4 `* P, r8 m: x, a0 p# W1 E
- e& o, U- Z' p+ M0 O3 f
ci
+ n$ K$ ^* i3 q" O$ ~7 Z 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
. R$ i% v. K, z/ ^4 t, \
( }$ ~" o& A7 Z; o* I cn$ I7 W: v* {( N/ I% ` z8 P; l$ T/ H
搜寻指令
5 n9 w6 G' T5 x: [$ c 例子:
, K: l+ H/ j% y! Z- i4 l cn eq,60
7 I4 t4 n8 d) s2 n: \( X- { 搜寻目标等于60 (十六进制)5 T7 j" j0 b3 E8 `
3 G; L4 L$ ~+ `/ C cn eq,#96
# L0 j2 j3 J: \# `5 n, c 搜寻目标等于96 (十进制)
: b" [9 G& o2 A3 w9 I
% b7 \0 O/ z9 L# _ cn eq' K4 s+ Q, u7 q3 }: R
搜寻目标的数值没有变化$ S1 r) V# e' B
( j$ K% c u: H; M5 y" }* O
cn ne
% {7 W4 [( f$ _* o0 Y1 { 搜寻目标的数值有变化, p5 R% j6 g7 U; F6 F
# u' j6 w! Y ~1 | F
cn +
' I! U' q# r' k0 ~2 \ 搜寻目标的数值增加
8 n* I% ^0 H, c' C' k
, |% P! V- [" ]3 K* W( h cn -3 d8 Z n. x! t$ b
搜寻目标的数值减少
: Q, M f2 L3 I4 z3 l. T
, w0 s7 A5 X% N$ ^ cn +,3
2 M+ |/ D, c- `, c9 v' l5 g 搜寻目标的数值增加3 (十六进制)
' `" D9 H9 w# K" }7 S$ K1 ]$ r3 l; S4 ~0 u1 S/ ]
cl
S2 G9 ?9 t. f$ E3 ?; a 列出所有搜寻结果 ^+ [5 k# p% E" X# b" a
$ x3 B7 h; r1 t; a( d cl xxx.txt4 {4 M |7 d# |
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式9 [: Q& ]" e6 e4 Q H, k
; c+ N2 w a4 J' T+ o) D
4 r& z7 g `: B1 s/ v
内存监视点指令: wp, wplist, wpclear3 i/ P* \6 `0 H% h
例子:
7 O5 c$ Y$ I& \5 p9 \ wp 1234,1,r
8 S8 @ L0 `1 S9 ` 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1: o8 t8 R$ g# F# E2 ^$ U J# n/ V" D: b
6 v+ I# y; z: L* [, Q
wp 1234,2,w
# M5 Q6 }, N: t: q u& R) m/ a' a" v 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2- y0 q: z3 p% p! }
4 @* W6 [# I/ g; u1 }1 P
wp 1234,6,rw; ?% |1 C8 K, x9 ~# _& l, g: b
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
0 a3 ?1 B4 g9 H9 C* o5 O
+ X; k- L9 C4 G) s wp 23456,a,w,wpdata == 1: L' C: v' }* ]; ?8 H8 v
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1/ Q4 ?1 k, e9 [& G; d
( X8 [: E' {& H3 W wplist
# @+ t( x/ H7 S! I$ w6 {9 \' |6 l 列出所有监视点
$ A) l, p& F% D& I& G. ~8 B2 l& L, U
wpclear 3 M( O, L; ~. n: X- C" F
删除编号3的监视点$ I5 I1 ^0 M4 ?5 Y' n0 ~7 s
/ _& y' f P. I# [ wpclear
5 v A1 ?1 S8 E: f: J4 X 删除所有监视点1 A4 Z8 f, l0 G) ~! T0 M I) ~
x! B) ^2 k* U5 V$ {" ]/ f
. X# M* x6 R c S" C: Q6 K8 U* P$ x4 [* Y8 e; S( K+ V3 J
程序断点指令: bp, bplist, bpclear
( U! u: u4 a- p4 W+ y 例子:0 v( d! d* N) t- {) \6 K v
bp 1234
4 d, `; L) F0 M \ 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断. L- z3 t. u6 H
! G) `6 w, m+ a
bp 23456,a0 == 0 && a1 == 0
: p2 y, t$ B6 T1 F 在地址23456下断, 且中断条件为a0等于0以及a1等于0
( O$ x1 N. U9 h. z& \ P9 O
% e! F2 {9 o4 h% T0 k9 {6 p L bplist
' h' s/ r, N7 f! l+ z- B) P 列出所有断点
' |# C- c1 ?/ \( b6 q/ T, ~% n" S+ ?( b* d2 s9 n
bpclear 3
3 h8 U( b1 \6 A+ b; E, w 删除编号3的断点0 _5 {7 Z0 m/ p. r3 k9 D
" i6 O# D* u0 l8 w+ u1 n' S
bpclear
5 N( B6 u+ A$ e, i0 j2 S: L) h2 |7 p% Y9 } 删除所有断点/ y6 x1 |! A" i! y. G
$ F9 N" e: a/ u6 [4 j! a
W* [0 O5 Y n. o* X % v, O3 ^) ~* q- P
跟蹤紀錄指令: trace
0 {$ p; J! W7 P+ q+ }2 B: P, s2 B 例子:
- u ^0 q: J4 ^' Y trace 01.txt3 X. L' m2 M' T3 y9 a* q5 N2 o$ x2 Z; d
跟踪当前CPU运行的所有代码, 输出至文件01.txt
1 j( w0 S) j4 G% k9 o1 c# V' H/ i
9 M+ C9 q! } U$ @ `- m" x, w' V. v trace off" ~+ M1 Q5 ^3 ?$ ^- P8 a7 L9 s
停止跟踪, 并且关闭文件
1 k, V- i' P0 F# n& o* ^: H
; o3 R( R& |) z7 v" f1 W" [ trace 01.txt,0) ] a5 n3 w' J9 f5 h" Z4 g, W# `
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
$ `) Y1 O; n4 g5 c% G" w) F; o
9 l9 M& } i: |# i4 z" R7 k" h- m trace off,0) O' x; {/ N0 R# v
停止跟踪编号为0的CPU, 并且关闭文件! p/ |' {, E/ C3 A. Z
9 k4 |+ b1 m9 u trace 01.txt,0,{tracelog "A=%02X ",a}/ S) z5 E- ^7 j3 w. M
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt # f( g, E3 f0 Y' f
并且在每一行的前面, 写上"A=a "
) W0 M2 L1 ~, z$ P "A=%02X ",a为一个C语言printf函数常用的输出格式
6 Q- G% ^$ l/ l5 ? 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入4 u0 n9 v/ j- {; \ w+ d$ z! x
X表示为大写十六进制数
& p# `! r5 U4 v9 g5 ?' E2 v: R( r3 {/ j" {
4 Y# l5 ^% ^* H. S0 H) Z$ X5 F9 s8 Q1 B4 U A
内存直接写入指令: maincpu
! j1 s* P, r/ l1 h 格式为 maincpu.[][]@地址=数据5 Z3 _9 b6 w: ~1 s
第一个[]:
$ Z3 O: h' s2 j; h& k o 表示ROM地址
/ D. \" G1 _# \, y. m6 J0 L" Z p 表示RAM地址
! k, }: w% Q Q. ~8 D& s7 x7 Q! v7 [1 f
第二个[]:
( P" \ R% w" v2 A/ w! j* U* N d 表示4字节2 h$ r7 L8 C ^8 q; N
w 表示2字节4 U' V/ {' s4 d- }- y, V
b 表示1字节
- K! ^; H% Q* Q2 R5 G" l, E) Q3 n, r
例子:
* ?/ ]* O) Z- X( | F3 D maincpu.ob@1234=FF
9 ]9 H3 s9 f1 l 在ROM地址1234处, 写入FF一个字节
% o, h! y, H8 w4 @/ j* r5 H- ?) u+ R: P
maincpu.ow@1234=4E711 e6 h( @& e; C; z1 t) a9 d; C, M) s
在ROM地址1234处, 写入4E 71两个字节1 {6 `& L2 U4 H3 N7 h
# S( [5 z7 \5 m: l* K5 M5 ^: ~9 I6 P
maincpu.od@1234=600A4E712 ]9 [2 n- [2 e1 r; @( }8 ^4 b
在ROM地址1234处, 写入60 0A 4E 71四个字节+ g' e. Y- d5 F
2 q+ a9 ?1 l5 ]8 K. r' s6 W 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写) y3 ?/ |8 i6 o9 d
2 q X( Q) w c# t3 _9 w" z
" e% [; Q2 w+ L) o8 `7 g% n7 M其他:8 y1 z0 [+ {* ^+ D7 a. C5 K
dasm 输出档案名,地址,长度
4 p8 ^0 b6 N0 B# q8 o 输出程序的反汇编代码% ^+ {: s9 W. }- b2 v
例子:
1 T$ f* s' w/ B3 U( G& N: l! O dasm 01.txt,0,1000006 h/ T7 V: E" L Y$ l7 X
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
) M& i% y H: V. k
( {6 \ q* M5 o# T& s, A. Z5 @# _ softreset3 t: K9 o+ p8 A, s
游戏重启, 但不重新载入ROM
1 F T; f4 c$ j# V1 b) K' ~% i: `$ m8 p! q
hardreset$ Y6 p/ v' ]' P! H# U" D. B
游戏重启, 且重新载入ROM
2 x9 i% U# V3 n1 `3 `
) O( O1 J% |1 b7 v, e* Y9 I: R; x2 r snap xxx.png
4 ~% H' o6 f4 k 截图为xxx.png P+ D) t9 e0 N, @# N7 i; o
! a7 K& F3 k) h3 w1 l- A: J- e7 P
. i2 l# {8 {' X
( r% c5 a3 x! N6 u5 L+ h3 [
! D, [( N& s3 w Y' O热键:& }" l& u! s0 M
~ 中断游戏. S) J) _8 Z, i6 I' c
F5 运行游戏7 k& k. f& h7 \% H# I: v6 F
F12 运行游戏且隐藏调试窗口
" A/ S; e. _0 U, p* m+ p F11 步入, 单步执行, 会进入子程序, P4 L2 M; }/ B+ D* W
F10 步过, 单步执行, 不会进入子程序
K. J3 @5 p1 l) v5 } Shift+F11 执行到子程序返回" U7 _# R1 ]; R0 y' f" E# m- J
Ctrl+M 内存浏览窗口
( O- Q4 E& J- D# B$ V1 Z F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
[: F5 h( H; V1 |+ N
$ i. m7 E: J/ J! B) V! R{:4_94:}
) S0 R, \$ N6 u5 j4 s5 R) f
! o6 k+ t0 [* _; | |
评分
-
1
查看全部评分
-
|