|
|
5 R" f/ E$ g' r$ E1 Y0 f6 m
很快速的整理我自己常用的指令
/ e% B4 X j4 n5 P8 m
6 I* m8 f' z0 ?2 `{:4_112:} A) K; Y$ R" G& I& |' N4 M7 w0 ^
! B9 ]+ n* [1 x! `
MAME DEBUG常用指令) D( \! j: H* T6 p4 o0 W9 b
* c1 K+ Y2 q& E$ B+ b% ~
内存搜寻: ci, cn, cl
4 V- t% V: G# T2 c/ K
9 U9 K1 J2 k6 E8 \: |! D2 ?) _ ci
$ I9 w. _0 F7 R9 S7 e7 h 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
' m( y4 B6 [1 r J J
- Z4 {" i& B* N, F- t9 q% h( h$ T$ Y cn( R& E, e8 q; R9 `4 V+ ^! w6 j
搜寻指令
- _0 I$ K' X$ j% d# T 例子:1 z& i r5 i9 J- E b" F, Y! x2 x9 I
cn eq,60# }8 g3 x$ k( u- M" b
搜寻目标等于60 (十六进制)
7 K% X) j) O C& a
, s, g& f( n% Z! j( j/ `- L cn eq,#96* @1 G. w0 z m2 q/ O+ d1 {1 l+ }
搜寻目标等于96 (十进制), I! z6 u& s3 y: x/ f+ f
8 W2 e4 {8 ^0 g' y: B" n5 a9 T cn eq
* ]& K/ o j' b+ x O' x 搜寻目标的数值没有变化* X4 b% d M- s+ o
) P0 J% A: A; H# \0 |9 J
cn ne
3 r+ x* i% H) P$ z! a$ J* o 搜寻目标的数值有变化
# C2 P8 A |1 I! k
' P9 ?3 _2 n8 d8 P. m) C1 Z5 k cn +7 T7 w/ F) ] H
搜寻目标的数值增加( U( W- Z! ^- Q7 Z3 f; Z
' v7 ?8 o9 c7 p9 L
cn -0 T5 o" g E& j0 U
搜寻目标的数值减少
; t! l( {; \$ _! w
$ ^8 j- V9 N% q4 I& v8 z' _ cn +,39 U$ O! q/ X4 P6 E6 t% d7 a6 m
搜寻目标的数值增加3 (十六进制)
t$ z& R! O4 f$ O
9 ]: W/ F7 ]! w. v/ K cl( [& `1 G8 a4 p
列出所有搜寻结果6 r) ?4 o2 A. d `& q) z
- V; x% c# j8 C5 V8 ]' y; t
cl xxx.txt- F3 k, ^: d+ V- k, |4 H
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式) X+ @" p+ Q0 Q, @, h( [! v0 ~8 L
. O$ F0 o# z; A8 p/ C/ f0 o8 N
& b" p: y$ g3 D) F/ G! j
内存监视点指令: wp, wplist, wpclear5 l0 o" i# H/ p& f8 i1 L/ F6 }; B
例子:2 G9 M( b$ u V$ i: U$ K9 N8 }! z
wp 1234,1,r
# ?; b" |6 j# H5 c# r% { _" \7 n2 D 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1: H" K* N9 P" K) b6 j9 I
6 r& {: }6 \1 s0 V! o. U
wp 1234,2,w& o2 c: ~ e2 q2 l7 c* q
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
2 V4 {! Z4 t P Z! c# f# p ) n4 ^8 z+ S3 }; V
wp 1234,6,rw
' X' X3 Q7 L$ @9 C6 y5 s, }3 t3 p 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6! i* T& Z8 [! [) Q" o
0 C0 u; q2 g5 Y( n E- H
wp 23456,a,w,wpdata == 14 M1 T5 ~7 C, X: H0 c; r. v
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1$ O: s9 U$ ^) f. d1 G6 ?- i: }
7 r8 h( \$ z' m, N0 } wplist
! z v, E. c0 L+ ^ 列出所有监视点7 V2 ?5 I) i' ~2 f: a$ ~: W
" a& T0 J0 C6 F5 W1 p4 B9 B1 u; O wpclear 3
. Q" s* r# c$ E2 e I! a" A 删除编号3的监视点$ I: D" Q9 U$ D; {9 B
( F5 Q' w% A6 W! g" T wpclear
! T$ R9 Y( _* Q/ H 删除所有监视点
/ D. L+ w, m, ?' T! |( E
( E" c8 d( ~0 D7 e. i. V# T3 r5 _
) P6 W$ ]7 g! f q" M: ^
1 m* \3 ~ X1 h% [; [& w5 W程序断点指令: bp, bplist, bpclear3 W# w2 i; g' t% F, i4 w m
例子:
& `$ r& p* w+ D bp 1234, U- C- T8 _+ G3 J7 n" m
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
, R+ K: v3 ~" s3 d8 s: |( c5 M: D' P B0 ~+ v6 h
bp 23456,a0 == 0 && a1 == 0
5 z& N& z d( i4 A 在地址23456下断, 且中断条件为a0等于0以及a1等于0
q9 T! } D0 p6 k/ \- f2 }5 j! U+ F* G+ _$ @1 N' _
bplist
# R: K8 K3 i5 y2 [+ N9 F9 ] 列出所有断点
# r G( M3 p* O" p4 E. M0 ?$ F+ k9 U9 a' B/ A
bpclear 3
! P8 P" d- s& d; Y3 A$ t 删除编号3的断点
( j- M7 H/ o; f7 ?" P% K" Z
, W6 _; J6 Y3 D l bpclear" x, Q( L- R4 M2 ^ d! I6 M
删除所有断点
9 U6 d& J6 a/ D. D3 I
' j1 I* m: ~4 \: T! w0 h. U % m1 F; K4 Q2 ~6 ?
* [( T0 s# e" \* B' i. G
跟蹤紀錄指令: trace
% Q. [7 |9 K+ S 例子:" l5 o% t: U+ i2 P+ X4 G, b6 E+ X
trace 01.txt& }/ E1 a3 c8 C" W" Y$ O
跟踪当前CPU运行的所有代码, 输出至文件01.txt% ^2 C8 ~/ A0 R$ r
: X5 s* G8 A+ }3 m) L( W
trace off5 N9 B7 P4 ]1 \' }& k- M
停止跟踪, 并且关闭文件
; Y8 ~' j1 S# M2 h' h" [! U
3 u' U9 p9 X6 C% c l6 U5 r trace 01.txt,0; `+ E1 q! w- q8 q, g" Z0 a
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
& ^% O' ^, n& [# p. |# F2 ?. b- j9 f, a+ r3 q
trace off,0( [1 X( l4 F9 V) N& Z) \1 i! M5 \
停止跟踪编号为0的CPU, 并且关闭文件0 s7 I' ^! B! P
8 x& b. W0 q! e, C trace 01.txt,0,{tracelog "A=%02X ",a}5 ?3 m& a9 ~1 Z/ L5 a) q! A0 u
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
' N5 n4 |4 D% [) x2 G+ O- U 并且在每一行的前面, 写上"A=a "
- s* D+ A! n3 I7 o* t& ^ "A=%02X ",a为一个C语言printf函数常用的输出格式
) g& N0 w) E5 L' h" h! Q$ m; h3 P 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
4 A( K. b. u. H7 {. r M X表示为大写十六进制数
+ v8 s5 Z+ G5 e( e4 x1 |. P5 i) i
, v2 \6 d- {! h. P0 ]9 w9 J
6 Q4 ?$ I) g( O( ?8 I# F7 t# G, O( }0 J
内存直接写入指令: maincpu
+ z6 _! P0 V8 [4 |& n- E9 o) a% j 格式为 maincpu.[][]@地址=数据
& e. ]% p$ p* z& p" U- Q, r/ ] 第一个[]:
3 F! n: Z w+ m d. G: T$ ` o 表示ROM地址" O8 k3 Q" c% V0 F' f ~ r
p 表示RAM地址, v" R: Z2 `8 E" }% e3 M
* ?# v, A* ~; \8 x9 \8 F6 ?! _
第二个[]:
5 \% v# F9 b9 ]5 C d 表示4字节
! R! P0 C, u/ G1 z& B8 |+ j/ B- G# G w 表示2字节1 w% f+ C2 N$ y1 t1 ?" M# q
b 表示1字节
2 C) b6 ?( k( p" g7 f l
9 J W' B, Q, e" P 例子:
. J4 n; o& l% G- W maincpu.ob@1234=FF$ d( K4 b5 x+ K+ |
在ROM地址1234处, 写入FF一个字节
6 M$ [* e5 L7 f# a" v/ y# Q3 {- R2 y4 N6 v9 N* w
maincpu.ow@1234=4E71
/ v1 Y, K5 C0 O3 Q) C# e$ [; s 在ROM地址1234处, 写入4E 71两个字节4 c4 j# g' M8 _# v
8 d1 S0 o* r! r- p7 }" O6 q
maincpu.od@1234=600A4E713 m* _9 i0 Q2 R5 J+ [3 J+ {
在ROM地址1234处, 写入60 0A 4E 71四个字节
- J# l$ U$ P: ?, a
, Z1 b1 Z' ~% ?% [+ a8 q1 { 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
2 y' o/ Z0 K! l; q# Z. R ( D: f8 [; C5 }! [" p
' M: b4 B7 p) N% r' O5 z其他:/ W0 t+ x) _; I
dasm 输出档案名,地址,长度
4 ^& Z# O! @% j; b) m' H& ~ 输出程序的反汇编代码* u5 p1 p$ f$ J- n
例子:4 [% _: k# a0 s+ U$ f* D2 y/ j
dasm 01.txt,0,100000
. O5 V+ q6 J! ^9 L4 S 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt3 N3 H5 P6 z" {' T/ F
) i9 m0 J+ C: M- M
softreset
, z( |% [, `" m6 |* H4 p 游戏重启, 但不重新载入ROM
4 y) N9 f& [% V. K1 z# P" l" S) n8 l& V2 d6 \0 f
hardreset
- L/ {# `! B+ y% D 游戏重启, 且重新载入ROM
/ z, p1 F' `( f
/ ]* n0 o! E& X- a& \8 j5 I9 J& `# G snap xxx.png
, V( K |9 l; A S% f 截图为xxx.png; I8 W& r2 v4 G: _
) ]3 V2 u8 b* B, ? 1 q, w+ @( B4 d/ @, D
0 q$ O+ R3 f3 M6 O6 \% s5 n; P; C ; i" J( w+ ^2 R: ]
热键:/ p: d$ r# c$ w% L( y# U, W
~ 中断游戏* K! c& A }- c0 ?1 y {& N
F5 运行游戏
& `6 J' X! b$ S w F12 运行游戏且隐藏调试窗口6 Q. O" g5 f8 W: t. `/ P
F11 步入, 单步执行, 会进入子程序' ]3 k$ i: `( {, A1 w8 n! t
F10 步过, 单步执行, 不会进入子程序9 k/ Y! K; l, ~
Shift+F11 执行到子程序返回) i+ H$ ^" G3 I) c C
Ctrl+M 内存浏览窗口0 s# z9 ?' Y- p! f, _0 t0 C, `
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU/ I- x3 W) U/ h1 r$ [
, {0 X% M6 ~- \/ m$ x9 L& T{:4_94:} B! p! u& l/ [! b3 Y
0 Q- B) `4 h o9 D6 d |
评分
-
1
查看全部评分
-
|