|
|
. U+ ?5 z1 f& q" E* I很快速的整理我自己常用的指令
0 b4 Z2 X" e# B7 X8 P l, e7 x; ?8 f$ m$ j E! y# W6 @; F5 i
{:4_112:}
; e- W" ]7 I! B* m, {4 W7 t- q0 o3 N2 j& T9 z2 L2 E
MAME DEBUG常用指令6 Y3 ]0 ^/ a1 S: e$ r
5 P+ S( `1 o8 V7 g
内存搜寻: ci, cn, cl
1 {% k$ ]. m, H& X2 i" b/ b) T+ l/ l3 y; j, I2 H7 p
ci+ r. z% ^' I8 `5 s1 h& P0 U: R, u
搜寻任务初始化, 每次搜寻一开始一定要输入这指令( I& t" T1 j3 {; k1 m T- r% j: A
+ _+ B! @8 t& d) l
cn: e) e# i& t* ]% i' b( [" l
搜寻指令* A7 C+ U+ B+ D# x6 ]
例子:0 u0 o& @6 E' |# ]# t K, Q
cn eq,60
2 e* L4 x; [' C J* ^/ s 搜寻目标等于60 (十六进制)( f, a7 M3 o- s. f, h. b
/ H6 ~. S1 {' `: ^* o& n cn eq,#96
% ^* b* ? N& ~ 搜寻目标等于96 (十进制)
% o* _ q. H+ x" B" X8 Y; H
" |. Y4 B3 y/ m q% E5 u6 A, U- l cn eq& W6 r5 ~- n: P: X5 U" G
搜寻目标的数值没有变化! v8 n+ Z) \6 t8 j2 \
~5 P. M$ b2 _0 ] cn ne
) C8 K/ E" ^ n5 Z/ G 搜寻目标的数值有变化
$ j! i0 g( x6 L) L ( V5 F9 X' e6 m( K! `
cn +
1 K4 @8 b5 ?. ^: m' w! X 搜寻目标的数值增加+ O" t/ P E' t5 M7 l9 |
* s! ]% L3 Y8 E; D4 c3 i
cn -
: Z2 I. M& P6 K& c" E @8 O8 s7 @ 搜寻目标的数值减少
9 \3 k0 L4 H+ l" h
1 Z+ L3 U$ L9 F/ R( n' _" j. o0 G+ w# E* x cn +,3. d1 e# x9 a8 ?2 S# n6 C
搜寻目标的数值增加3 (十六进制) C @0 k/ e. {* T9 b! u+ r
" h5 v5 f' V( R9 H8 O cl
! }! Z. M2 D, C& Q# Q 列出所有搜寻结果
) m% D4 m; ?) x* P: X& H4 t
9 J! b- ~) r% ]. V$ W2 e# x2 u I cl xxx.txt4 _: F) G# c! V3 V3 `9 ~3 p0 D2 Z& Z
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
( ~- k0 G# R8 h1 q- G3 `$ _/ `
: j |/ j3 w9 y* v
& v6 [) E- S9 v% t* x$ ?内存监视点指令: wp, wplist, wpclear' a0 P5 ]+ j0 Y1 ~, U3 R1 M: p" ]
例子:6 O6 I: W7 I# Z" u8 {2 [
wp 1234,1,r
6 f# X4 K6 N5 j' @; @ 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1/ y+ U' ~6 d5 t4 U* {# D
( G5 v3 }. W$ p# j/ I
wp 1234,2,w5 v0 i& e: \6 E
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度21 @, c7 _7 H) p+ L' N
' w) j7 K- z2 I" e wp 1234,6,rw
5 P- K4 L1 j) j& `/ a 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6$ K* C; @/ Z8 Q/ b8 ]- f" \& s
/ r* q" P# L7 F d( M wp 23456,a,w,wpdata == 1
, |* o) t) p' `. o2 O 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
- v' I+ k, w3 E" E4 y: n% i
3 E+ u3 A2 e1 l4 f5 v wplist
6 f: U8 [' U) ] 列出所有监视点
9 c3 Z- b) ~; o8 c6 F ]+ [7 k# i4 u. c+ j ]2 `* G
wpclear 3
" l/ L; P8 i' r1 y, m7 H$ p 删除编号3的监视点
' o. O4 i2 p- T0 R8 O% z; t/ d% r0 i7 G8 |6 _$ b" W* H1 ^
wpclear
# p5 r! V4 M4 R1 `8 S 删除所有监视点# h5 v1 ~( D, {% P# p3 |2 A! o
4 p- `# V1 X8 U4 a- J9 X
( @% W' H8 _2 c/ S# @7 ]
, V+ n8 d/ g$ x; C# F6 K9 U
程序断点指令: bp, bplist, bpclear
( X3 r# Q* a6 }: o- a+ z 例子:% _. W p; P0 r" w5 E) E
bp 12341 q, C5 i4 W- @/ x4 M, T4 ]
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断 s8 L7 e, c& [: Q! m
3 m3 r8 r7 s0 ? bp 23456,a0 == 0 && a1 == 0
" F2 @3 E6 a1 j( U( @4 @. m 在地址23456下断, 且中断条件为a0等于0以及a1等于0* e. `- O% H9 ]! \" {2 C
, @' z. H: ~6 U
bplist& J! k6 I7 K+ W* Y" X
列出所有断点3 K( `& B! `! X( ?4 \
2 t& _3 D7 W3 s. ?
bpclear 3
, {5 I Q" ^% r. Q E 删除编号3的断点3 r2 C8 b7 V) o9 V! w$ n7 G( u
# p4 D; [4 E4 x) K$ m bpclear
0 c' u# M5 K, x/ `0 v 删除所有断点
. e a# R4 M" ?$ \9 Y J# s2 H0 t
0 l) x# V7 N+ }; Q' ]2 q 2 n+ g- ~: z' q2 i
9 p1 [& e8 ]9 S7 @4 X5 |
跟蹤紀錄指令: trace. d# z2 ~9 S4 x% I/ {
例子:7 P/ p& o X% h }
trace 01.txt$ D$ o0 T9 q/ ~6 c+ Q+ V" M" r
跟踪当前CPU运行的所有代码, 输出至文件01.txt* |1 j7 d2 J" U( v$ x6 l* {
0 K& }0 {9 E/ B* G1 i* L$ \
trace off
: B/ s! M, S8 X+ I" T, Y; ~ 停止跟踪, 并且关闭文件% k" J* ]' X; c; ~
, L* l @* n9 p/ d( W
trace 01.txt,0
) i4 f, A' R: \9 u( [ 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt& _- M3 B. |/ q/ g
' ^1 j& p( E5 s9 r+ ]+ }' i6 t" a
trace off,0
- e3 D0 }/ \. h9 o; o6 [ 停止跟踪编号为0的CPU, 并且关闭文件( {" J' f& O# G- C
/ V# T8 E) F. L trace 01.txt,0,{tracelog "A=%02X ",a} P" S* l) \6 j/ P9 G
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# f0 _4 J' N' f/ J% A" c6 Z 并且在每一行的前面, 写上"A=a "
+ |' u+ w$ z' J# \+ q% O "A=%02X ",a为一个C语言printf函数常用的输出格式
5 c/ o6 e/ b! ]; Z 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
4 P0 ^, _! u7 T6 c3 H X表示为大写十六进制数
3 Q, b' b. V" @9 ]
0 [3 z. P Y' R: d$ C4 n: \" K
$ V( H+ Y* H7 u0 ?
0 H2 J, X1 I5 q内存直接写入指令: maincpu
! t* Q1 q+ D2 i4 Y2 [) a, p' G9 T 格式为 maincpu.[][]@地址=数据/ N% Q; O t$ b; K# a3 F4 U
第一个[]:
6 L, N# k4 K o% G8 ~ o 表示ROM地址$ {6 ]- @7 m0 s* I1 n4 p' t( L
p 表示RAM地址
6 u+ G% Q3 I! a; a4 Z% c# q6 ^5 h) m& g R) t' u
第二个[]:; H% s- Y7 N2 @6 y
d 表示4字节8 t/ }( [0 s6 a( b' c
w 表示2字节: T% ` M# |4 b( x' O- D
b 表示1字节! y" E" e+ O* B: U( ^
& `% C" n: M+ ^- `( h4 Y 例子:; P2 M& A4 w; N) J# X+ ^
maincpu.ob@1234=FF2 M2 f1 y# A" B8 S
在ROM地址1234处, 写入FF一个字节" E( l% P- J- }, p
7 K9 C0 D! P% O/ S: t2 l* o, j
maincpu.ow@1234=4E71
0 w; D$ [( r2 T' a) G# k! r 在ROM地址1234处, 写入4E 71两个字节
3 t+ y) E: z8 S7 Q
) w0 r3 A, s! ^: A) k+ `2 G maincpu.od@1234=600A4E71
# x% Y3 p6 T& V% V 在ROM地址1234处, 写入60 0A 4E 71四个字节
# c7 f. l6 ]0 P+ l- j+ a! C+ K$ F7 C0 P
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写$ U* P+ p3 b; U1 a' Q& x
, K# Z1 M; u2 ^1 x$ O
2 H! x, o* @8 i
其他:
" u: _4 E/ j7 A7 G) f! n% n7 n dasm 输出档案名,地址,长度' G: Z T, z- \& R, j
输出程序的反汇编代码
( ?( g' i; J* x% M/ ], q 例子:
8 K: s" B. }/ D$ u) n# s3 J dasm 01.txt,0,1000008 a" f+ i- @( V, C' ?+ _
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
3 R+ h3 I1 X2 ?8 \: B9 [& d
! \$ [0 @! J) N1 _2 F softreset9 o. f0 \( |( U" Z
游戏重启, 但不重新载入ROM$ g3 A) f4 P1 Y& A* A
% M9 K( p! s; G n: c/ ~ hardreset
3 v% \' w( c- H* M) n 游戏重启, 且重新载入ROM
; l* R2 g# P* L+ v: g
, ?# \. ]7 b) t/ n5 ^. ^ snap xxx.png
- e- N$ H/ q' a0 Q" e 截图为xxx.png9 A. E5 B* I" t
$ k1 D! a' ?; |# K, P# L
0 K& ^0 t( _5 [6 F+ N
, n5 q" e6 Y1 ]" Z& J1 i
* u8 g" z8 y) ^! g" ?1 O2 _热键:
+ W# P) P( n: J1 ~% n0 C ~ 中断游戏0 \7 W8 R/ f$ V) g% X8 ^
F5 运行游戏
; ^ Y0 E1 g3 j P- h% x F12 运行游戏且隐藏调试窗口
; F: N" s F$ Q( v u F11 步入, 单步执行, 会进入子程序& l& l* [: C; {4 j V7 m; {
F10 步过, 单步执行, 不会进入子程序2 d8 Y( N; G# w3 a- h
Shift+F11 执行到子程序返回
2 I+ i$ u0 M6 P1 Y* _& n9 @- C Ctrl+M 内存浏览窗口2 h5 I" ?0 \& `, A2 w
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU T3 c) G9 z$ _+ `
. I8 u6 X! `5 }/ h: [; X{:4_94:} , Q+ M u: u, c- c5 _; H W3 h
V4 y" ?/ L/ I; O8 Z( D9 N5 Y0 E* t |
评分
-
1
查看全部评分
-
|