|
|
( Z( s: ~4 z4 S% l$ Z很快速的整理我自己常用的指令
- F4 b' m Y# T" p! {3 N
/ ]3 ]- y6 {# x2 Q, ~+ | e$ ]{:4_112:} ( A& Q5 |6 ]# V! j# I* U, B: h1 w' F
! [9 a- g3 j) V" L
MAME DEBUG常用指令
- h* I! P& L7 W! e$ v. z( q5 i3 k% @1 E. j6 o `( A9 U' B' ]
内存搜寻: ci, cn, cl; V H. A1 F) N9 T% G4 t# O
& U. L+ x" p/ D5 ~: \ ci6 v0 Q6 c# ^) {( {2 r$ k
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
* C4 T, R* ^6 y- `) V6 x' C/ D; @+ m5 g
cn
# o; `( f: a/ Y8 }7 k 搜寻指令
& @8 I' T2 ?4 f2 w, h N 例子:- K D; K7 _7 i
cn eq,60* f' r; u; K$ N/ m' A
搜寻目标等于60 (十六进制); O( u' F! X8 ^4 E U1 P! ?) x
! l: ~4 B2 ?) G8 O3 t/ k
cn eq,#96
% Q; y" x) h- u# g: W' P 搜寻目标等于96 (十进制)
6 i4 @$ x! W+ y+ ]% z6 _8 k9 v1 Z: {5 O& u3 @) P0 `
cn eq
8 V, d) }6 I6 ^ ], B 搜寻目标的数值没有变化9 L- }3 p* t8 q3 I! ?1 j4 e4 I
w+ d& I( F2 }# e. J! o9 N
cn ne" X: @! Y. b6 v4 W' c( i- R
搜寻目标的数值有变化
* m9 q- f" n# K , f, Q2 m- `( n0 G! H7 B. o
cn +
$ J! `- }; Q7 M9 c 搜寻目标的数值增加' C0 P5 M% u4 ] W3 T/ W
+ V5 @# }" `) ^* N' \# W cn -
. l7 {- b- g# ?+ A( Q! e 搜寻目标的数值减少
+ a" X' @, [. F. E+ b0 J 1 N& K8 `5 J4 V0 p6 R( e/ g* C, |6 T
cn +,3; \- q9 ^ O0 V
搜寻目标的数值增加3 (十六进制), `( n, S; _7 z) S% i
8 t9 E9 h0 e0 N4 \2 I cl
; [2 B0 t: Y+ d( G" E 列出所有搜寻结果
' N3 E# [6 N; u. F" V2 }# b4 U# d
cl xxx.txt
( R3 ~- N. g. H2 }, e" a4 a 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式" j( l! W# T7 E; c1 C, {
( q0 } n7 }# X! a
* j) U5 I+ [/ N: ]内存监视点指令: wp, wplist, wpclear A1 ~# e# R3 {. C9 }
例子:( `: i7 a9 J3 Y+ [: W
wp 1234,1,r
9 }/ E! X% k% ^* T+ R 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1; X) U0 }: _# ~4 u
: M5 t2 J; A: `: f. H- F# K
wp 1234,2,w( T7 U( Z/ E" h7 L& q- l/ e
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
1 ~$ J: y! W3 J& c: v
' J# F7 ]8 t+ k3 w8 ]: ~" U wp 1234,6,rw7 F$ e$ q& s; {+ L' j
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
2 @( Q: l( X! R* ]1 I7 {; D j4 W7 t2 d o, ^% K3 A0 h
wp 23456,a,w,wpdata == 17 q0 s! Y4 `7 o1 E5 \
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
( H: K1 w8 p, ^5 v$ @. ^2 h
8 N/ S% ^4 @) a+ p( H wplist
$ [' k/ d8 u- v3 @8 B6 {4 } 列出所有监视点/ R0 \ j& [& N
- ^# V4 N3 m" C0 O
wpclear 3( d. P+ t- V, k9 v- p4 [
删除编号3的监视点# Y g' U' F; J
2 q: D B+ r. o$ C, R2 b
wpclear; g1 o2 u* o: S. Z' F
删除所有监视点
0 ^! h ~( x+ h1 _/ F) }: D, c0 h
8 R5 a( ], L, s+ z+ s" l# { ) u0 \# B& T4 P, T1 _
7 H3 s6 W: D: R# P6 Y程序断点指令: bp, bplist, bpclear
* {3 o# t f; ?, }- N 例子:- s1 \& j+ i( _- |
bp 1234' V3 [0 m8 \$ c/ ~
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断5 ~% q2 D2 _8 ^) c! i
" V- T% G7 R3 L* u% G$ c* r bp 23456,a0 == 0 && a1 == 0
. }. \* g2 P: u7 i8 d- T( H6 P 在地址23456下断, 且中断条件为a0等于0以及a1等于0- t" b# u3 I c7 J
) l5 H: T! {1 A* W6 a1 _0 ?, g
bplist( b* V% V5 s' P% Y0 z# X
列出所有断点
% c. c# {6 U9 t" z" E* q5 p4 z+ S( o) z7 \9 N/ T# f0 j8 {
bpclear 3
& o0 a1 N) K; u* k9 Q# m. s8 u 删除编号3的断点/ X, h7 K9 C+ ~) x9 K; i5 c
2 |1 m. a& _6 g4 ?
bpclear
& d6 S4 @: g) W+ W& q- r+ t 删除所有断点
4 l' B9 A4 q, q5 J3 t; o0 L9 x- S( [. Q7 E/ c- f; j
6 @' P: m! U* q/ O; K- T) a/ |
: a# \1 V3 D1 y
跟蹤紀錄指令: trace& u( ^: k- I' g' U8 k% h" h5 g
例子:
, s, k7 f7 s. [3 L, x: ~/ O trace 01.txt& I; J v c3 P2 G2 u
跟踪当前CPU运行的所有代码, 输出至文件01.txt1 X: |: ?9 _: z. l4 J3 i4 J9 P
6 V/ F3 e4 W6 J! |
trace off
# M. m9 K* v& L$ F+ ~2 g 停止跟踪, 并且关闭文件7 m. y& U, {# W. A; x+ X
; E; K u; I7 V* g0 K# l
trace 01.txt,0
" L6 G/ S" T* l7 e O, B 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
( k# w" Q' g* x- h6 O
. v, t+ W2 A8 V/ b( F trace off,0
; o `; L) w* \* C 停止跟踪编号为0的CPU, 并且关闭文件$ J& P) t4 e4 v& Y6 I' q B( `+ l
$ v: c) R7 a6 @' c4 X& ?
trace 01.txt,0,{tracelog "A=%02X ",a}
; \: V* Y: D' l, l% t 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
& \* K4 q9 ^; j: Z/ f 并且在每一行的前面, 写上"A=a "* J: ~# P- ?9 A& ^
"A=%02X ",a为一个C语言printf函数常用的输出格式
/ e7 d9 P/ w# ] 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
; b+ I! Z* m. R* d# F" l c X表示为大写十六进制数
|9 p+ g+ m; r9 M' b- ^6 M' \/ u0 C K: }1 ] f
7 `1 H7 b2 Q- w N0 F+ A
# T4 R! B' A" n' [# P内存直接写入指令: maincpu
" l c: c; y4 D$ X7 |( @( a+ t. t 格式为 maincpu.[][]@地址=数据+ K# u; ^' ^2 N( T, f; m. y6 ^
第一个[]:
2 R* Q2 d) c/ ? o 表示ROM地址: J" q6 c0 f) ]8 a+ I5 d+ c
p 表示RAM地址
* V0 V3 W `: I4 ~2 J2 D) Y
0 T. \1 R: y% H5 y/ V5 g; m C$ h) C 第二个[]:
5 ^6 T: x4 e) W. z* } ? d 表示4字节
: t! _/ N* s4 X4 v" R- p, z. E w 表示2字节
9 T- s X s2 ]. `+ E$ |9 ^. T# X b 表示1字节
3 p z* q3 C0 p; S+ J# E' e( M4 E' e+ r _5 g" `4 d- L; ?% y# I
例子:8 U: W/ M/ [5 q: F' _) i( l6 c
maincpu.ob@1234=FF
( ~8 p" o% f, P- U7 e 在ROM地址1234处, 写入FF一个字节
: n3 N! q1 W) X% r. a0 f
X P) o* J& D' @* O$ n! g' Z maincpu.ow@1234=4E711 R/ I& s4 {3 p5 K) k, t
在ROM地址1234处, 写入4E 71两个字节8 A/ @- E" o& T! r4 j+ U; E7 V
( b: O: y7 V) L+ }
maincpu.od@1234=600A4E71
) g7 R7 E: B6 a2 f 在ROM地址1234处, 写入60 0A 4E 71四个字节
$ m: N' u& u8 N& }7 [4 \& {2 f- H% Y, Z& t4 c: q
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
2 M, |$ M5 V, L& L( t9 R
5 y/ P" u" p' ]2 F& A0 e1 S$ f- { Z% ~
其他:
! t- ^3 o- t& `, L7 t5 ? dasm 输出档案名,地址,长度4 r- z3 n0 ?2 E: D# v& d. q5 L) A# R
输出程序的反汇编代码: I: V4 z4 H/ b- W. n' m: s w$ F
例子:
9 u6 R: r" @$ j( ~/ y/ ~) J e) O8 a3 j dasm 01.txt,0,100000
. r$ s5 P* w- m; Z* H' F( S8 a s5 a 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt4 M7 w: ?7 O, ~: ?6 |
% [7 @$ _/ E6 @ N/ O
softreset
1 Y7 h3 d7 t& u8 S 游戏重启, 但不重新载入ROM
) R- Y% b+ S; s9 c+ ? }, G* K: ^9 ]3 g9 x
hardreset
- x' [7 l( k0 Y/ h @. Q% L% n 游戏重启, 且重新载入ROM# c; \: X0 z# B2 [! I2 p; D: O
5 Z. d: f6 t2 P$ G- V snap xxx.png
. k8 l0 O/ g0 f' c, L! ?( s x 截图为xxx.png
8 l% ^1 k2 j! L( {$ P- k
/ |6 d3 l% k6 @. v4 | f- N, t1 e$ D* k2 S ' r$ i: e1 n8 G. f4 R
6 j4 k& M$ t! G5 @$ h
$ Y: o! f% R K
热键:
; T# l, `/ ~0 L7 o9 A4 B4 h- }" O& t- Y ~ 中断游戏& S/ ]/ B: O/ s& K9 c! n
F5 运行游戏# m' d: P* A' H' C% D" t+ l
F12 运行游戏且隐藏调试窗口! H" I; _3 q* O* ~7 T. d
F11 步入, 单步执行, 会进入子程序9 X/ J0 j4 e0 p( L0 T' q; U( F; c
F10 步过, 单步执行, 不会进入子程序# H* a, c0 ]1 _, Q/ T; ^6 K
Shift+F11 执行到子程序返回
$ R3 R5 ^# A7 v) [$ B7 C Ctrl+M 内存浏览窗口
' y3 h: Y T8 D( n F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
6 x( B- @5 ^& r" q, v* b
% }7 V& E6 `0 l' e% Y. S5 _1 y, k{:4_94:} 8 _3 x) x9 ]. I) a
: z% q. o' O: K& d' S5 n |
评分
-
1
查看全部评分
-
|