|
7 `( P5 X) A, V; p. m- w
很快速的整理我自己常用的指令
$ E+ J0 \/ s: O
7 l* j) _) F/ D2 c2 m t, D{:4_112:}
9 f* ~% U4 E- \ w7 D5 T9 Y% g2 V- M6 e3 E3 x- J' ]. I
MAME DEBUG常用指令3 L, l. P8 |* F7 w( |* E1 m3 |
! E) `, f# G/ F `5 |内存搜寻: ci, cn, cl" k L3 f; u! }$ h$ f
7 ~4 J! c/ @! i4 U3 r1 ]
ci. x% C. I. ~! N
搜寻任务初始化, 每次搜寻一开始一定要输入这指令" `: P% h& C$ S, f4 K' R
* l% O& G3 j. C( W: x8 s
cn
' m+ O& g: {; m: F 搜寻指令
; i4 F. S o+ p1 r2 n 例子:
& e- I% T6 ~- s8 l" u% B cn eq,60
) m4 ~4 r7 y+ t0 w- z* d 搜寻目标等于60 (十六进制)
# Y, R* m' a# @' F 9 h) L% h2 T( @9 B5 \9 C0 [1 G, E
cn eq,#96, s$ B* ~) B2 X/ x4 e+ f
搜寻目标等于96 (十进制)7 @& K9 M6 Y1 n" N+ q; F6 e
8 k! a8 j9 u% h cn eq
$ l: M: J6 A5 X" H* E/ I) k0 l 搜寻目标的数值没有变化
' A7 ?6 K7 s( V7 |- o' j3 g
7 l: b) C0 ?4 i) W9 B. f: G, @ cn ne; l9 T8 j$ g7 O- j S
搜寻目标的数值有变化
' W! D3 w* z2 b0 K4 [ ' i/ b! s N6 d5 W4 U
cn +5 s) [$ h/ l# i# K8 R1 J! a- D
搜寻目标的数值增加, w4 j! Z0 G6 ^% E3 v
" i9 o) q7 F9 N& c2 v
cn -
: f# B! |2 L6 |' O8 ~' q" } 搜寻目标的数值减少2 S) O$ \! [0 X5 n, x
' B, X+ {. z3 j9 F cn +,3* d1 V3 o( X! p! }" l
搜寻目标的数值增加3 (十六进制)9 A; n) |+ b6 M" z1 ~; h
: G0 @; i9 j/ J% t) ?$ R cl$ h% Z* i% ~' y$ B) J$ W
列出所有搜寻结果/ g( ?+ W. l% ^8 w6 q- e
6 h% K; q# Q5 |# y. F7 |0 w3 ^ cl xxx.txt$ ?+ d2 h: W' d0 v1 Z, E
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式6 v$ Z9 D: K" j0 ?5 N9 a3 r
7 {0 a8 f# N# h# N$ }; I0 J
$ j4 R& H, L/ X# d% l) r
内存监视点指令: wp, wplist, wpclear
, r6 h0 P' `/ U4 I7 a 例子:/ f* v! @ l1 J# c5 Y
wp 1234,1,r
( w! O) e4 l3 `1 O1 d/ v 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1( s# _5 l0 g" t: B7 R
1 l5 x7 Y. j$ N5 a) _3 }. n wp 1234,2,w6 ^; A' b$ V+ V& ?
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
; }, F! D* X6 k b9 [- ?7 w* S , @! p" i" Q6 x! S0 g6 G
wp 1234,6,rw
6 R1 f7 H" Q% ~* @" p 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6; C0 k" P2 q a
, [ \- a1 F( A' c! b S wp 23456,a,w,wpdata == 1
" C9 P% A e6 K7 S$ w 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
+ u2 o d& ~. q5 B& o2 Q% h0 C7 h/ @+ b6 B
wplist" t# M, a* G8 V; u9 m/ b& s
列出所有监视点8 F& F$ ~% ? E8 C% G3 m
, S5 X( a5 D7 s, P9 O% ? wpclear 30 ^& T7 L3 S2 }, E( `9 l& G, d
删除编号3的监视点! a/ t. W P C3 Z1 M3 W8 {: B
H k7 Q q4 B3 }2 G9 V6 g wpclear+ c# c, `) k, V3 g
删除所有监视点; z$ v2 U6 y# b5 G& Q" | c( }
3 W% f: s% s, E
% h* q; O! f8 S; M: n9 P; W5 k" f
程序断点指令: bp, bplist, bpclear7 }. _* A* M5 @ X
例子:$ I9 r( a. ^. b' J- A
bp 1234$ c- m! v: h4 _: c* ^5 N
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断& G; ~ v) |; M& x
a0 a% e, z0 s$ H3 s+ @; O
bp 23456,a0 == 0 && a1 == 0
/ t& ^/ K: T0 y$ Y 在地址23456下断, 且中断条件为a0等于0以及a1等于0" o, J4 A1 _$ o3 @
, P6 _) j" M6 ^9 S: [4 N; r6 U bplist
: {& g& w% o0 c1 J" t. s; x7 ] 列出所有断点
; G1 \! D( a/ C( P: n6 X7 o0 I6 T2 N8 t& n. \# h: o# {8 i
bpclear 3
8 f( r) k* _. R7 x' a# m5 a4 k 删除编号3的断点3 c' I: u+ p8 f8 R8 n' M/ g
6 \" z; B0 L3 \" i# ^
bpclear
) z! ?4 _9 @1 O$ {1 _; u9 I 删除所有断点) j$ o2 A- @. H2 h% q8 g3 D" ^3 K
( a: J& Q4 Z! V1 k1 R( P. ]" L; q
0 m; s- w4 s4 [$ G: h# l6 b; v ; z9 v( j+ R; v, i5 o
跟蹤紀錄指令: trace
4 [. E0 }( c+ o0 @ 例子:: B& ^7 l8 h2 O% `6 M. v! c5 {
trace 01.txt3 Y+ S/ R/ Z+ J/ ~# D( T
跟踪当前CPU运行的所有代码, 输出至文件01.txt1 s" }2 B0 f/ N; d. }7 `. Z! N
5 i0 ^9 ]" K* J b0 a! {/ P
trace off
' Q4 ~: c5 I1 Z0 w 停止跟踪, 并且关闭文件4 g& u2 U4 P+ f6 W- ?
# D" q+ H+ o, w& S! z8 @6 O: W trace 01.txt,0
D2 ]7 i( ?( u. n 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
! v: j( W+ e6 `- X8 ?! Z. X8 F
/ |, j9 z0 W o8 y# K! t& } trace off,0
" S" @& L0 a8 q8 z, J! n2 y 停止跟踪编号为0的CPU, 并且关闭文件, g2 f4 U) b# C, k! x7 M
# p' J' e+ k( g1 P8 j8 w4 h trace 01.txt,0,{tracelog "A=%02X ",a}8 O# j! G& C" v) V! d8 d
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ( N8 X A8 `3 `+ Y
并且在每一行的前面, 写上"A=a "- {8 k3 N* R! }
"A=%02X ",a为一个C语言printf函数常用的输出格式
4 E2 Y4 L& @* A0 v% X! u8 l 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入. L% R- V- D. F7 N( i' m5 s' T
X表示为大写十六进制数
' @# Z- v2 i, [ I5 Y' l# B) V5 ~$ Y; |+ h
9 ~8 V3 L2 e: F- F
" w0 D0 l/ v! e0 j3 H- u5 D内存直接写入指令: maincpu" v M4 ]* C7 H1 x! V% ~
格式为 maincpu.[][]@地址=数据- U2 O$ a" {. o, s- O
第一个[]:
2 |! L* X1 s; I% P' n" b2 W o 表示ROM地址# @2 j f- I/ }; R& x
p 表示RAM地址
- }. ~+ |8 l; ]5 m# |) ~5 ]% v' \5 U& J& z+ i
第二个[]:
! ~/ E$ O2 ]% L+ | d 表示4字节! ]4 i6 p. {+ x
w 表示2字节* u" p- V! J5 H2 W+ U& H0 `" T( L
b 表示1字节
% T7 r$ H! D# v( h; x; j. P8 w/ v# m# Z& L. m
例子:
" J1 P) i" o/ v0 h, d* y" j- s maincpu.ob@1234=FF
7 U5 Z& W+ z7 H y L; n 在ROM地址1234处, 写入FF一个字节
5 s$ t# j8 U, ~0 U7 s# P ]& s8 t* ^. q7 u) f- s6 k
maincpu.ow@1234=4E71
) p1 f, w. f/ t+ z4 {/ m8 D# h 在ROM地址1234处, 写入4E 71两个字节
6 ]' v+ d# X! B6 Z3 N/ r" t
0 a- j) p, l7 T9 l maincpu.od@1234=600A4E71
; L; P. e" N% t) E0 A( X- e# Y 在ROM地址1234处, 写入60 0A 4E 71四个字节
& L' e! R( t5 ~" v7 J: W" e! W: O# {5 e
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
# ^4 F: _- J: Q0 d! J" Q! y
0 F1 \) Y; j3 z7 w* _' j, T0 O8 s a* F7 Y4 H I
其他:" h& _: z9 D6 g
dasm 输出档案名,地址,长度! u6 W4 o" J( B1 n: T
输出程序的反汇编代码$ @% G$ ]% C: N8 |; _" \! ~1 m
例子:9 ^2 Z6 x1 n8 {, i$ W9 `
dasm 01.txt,0,100000
! [# B, X9 D8 B0 d 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt3 [4 a v! C) p6 m! R
6 P, r' {+ |% g/ h, J: ?" }! b softreset. h7 W$ O9 N2 Y# [# q. p/ x6 v" Q
游戏重启, 但不重新载入ROM
+ r" @2 n1 @3 r) @' Q
$ v" G: y$ w$ p8 D2 L hardreset1 _/ `+ l* k2 h# x% g/ M
游戏重启, 且重新载入ROM
9 m! s5 n6 K9 ?* T" X# o' y* G6 K2 A1 P
snap xxx.png
& G! w. Y& S" B9 j 截图为xxx.png
6 |$ w2 P# n7 x* P! S
, c5 z( s9 M% q7 ^! K: M % `$ a% u' h2 T9 t. J R' ?
C* H; v- V, U% M5 B0 ^ : ]# f' P- C7 [ c' ]$ V
热键:
+ b3 S+ I: [2 U( @! P& O& s ~ 中断游戏, ^4 Y0 Z8 P' i3 n. v: A" S3 s
F5 运行游戏
; H) I0 S% d; x4 y- C. _ `" \( F F12 运行游戏且隐藏调试窗口
# O2 o: n1 p% m) O# s, G F11 步入, 单步执行, 会进入子程序
$ n; b U& N5 @7 `4 G, e7 r F10 步过, 单步执行, 不会进入子程序' |, A/ c* p( M8 [" T: s3 k( w
Shift+F11 执行到子程序返回
/ F+ \1 B4 G, j Ctrl+M 内存浏览窗口. R' Z) d; i( \! l7 n- P! B3 b5 ?
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
, Z6 t( u* k |9 j, `: H
. P2 g( q6 t) m$ }{:4_94:}
" X2 d* n4 d, k1 \4 b D0 I# f. s8 ]0 r# u9 P0 E0 ?
|
评分
-
1
查看全部评分
-
|