|
|
欢迎注册EMU618社区论坛
您需要 登录 才可以下载或查看,没有账号?立即注册
×
8 q2 z! Y$ {1 d6 r( A3 O. A, A4 l
很快速的整理我自己常用的指令
" Y: X5 f: L1 ]# k6 R5 H
6 b+ N4 P; V) e1 O1 c9 n. Z{:4_112:} ) F8 j9 P6 k g
5 d: W, e+ I1 x) c1 \0 ?MAME DEBUG常用指令
9 J- ~; y6 ^6 O! p0 G) j: \+ n3 U0 P9 ^
7 J2 x( G- I( q4 v内存搜寻: ci, cn, cl2 [ Z* Q T$ ]- u
* m: u8 r( \8 F2 L ci$ J3 u/ A' k' R% H( R! }) Z% @
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
! p% r( b1 z# ?9 T9 c6 ^1 b) k0 H, ~" Z4 }+ P7 r! ~
cn
- Z/ p3 H4 \+ {% Q 搜寻指令( @( I1 ^# l0 R; t5 A; X
例子:' E6 ?/ ~+ _0 y& S: }
cn eq,60
6 Y& s" I$ n; h9 }6 E! m B 搜寻目标等于60 (十六进制); w4 v) H, C: A* z! W
* P5 h2 o0 `9 l- @, W cn eq,#96
$ ]# I3 O; y% }# y' Z6 m! z0 W 搜寻目标等于96 (十进制)
, ?. G; ?6 ?( h/ t# @7 Q6 O# Z9 U [7 s8 p; j9 [6 c; v8 e7 C
cn eq1 Z$ c* q$ Y* S+ V" _( c
搜寻目标的数值没有变化3 O4 G+ Z5 L5 A, J$ `! c
, a* l4 C) }" L* A! {! e cn ne3 Q! c0 Y' t+ h5 D4 W; {& @
搜寻目标的数值有变化9 E) m8 D% p7 T0 O. B- i7 m" Z" l
B, A- v3 q$ j. `7 X0 z" B M
cn +
2 G+ Z. M* X- N9 I x6 v 搜寻目标的数值增加& N3 n( \, }- O1 R
M3 R- g( o) U/ K- s) E# w cn -
) c- c3 q5 ?( q$ x3 ?& ? 搜寻目标的数值减少2 I" g# g- w$ {! z6 z
: E# H. B z6 t0 O
cn +,3
2 h7 r! g: H# l) r$ p5 {/ k5 m 搜寻目标的数值增加3 (十六进制)/ |5 B! q, m4 [9 e
4 |" w. \$ B9 h; K/ Y
cl
: K7 h* B) R S 列出所有搜寻结果
8 w, ] H# o! F2 K" N7 f
# T# {9 m. @- f i( t: h* D. M1 { cl xxx.txt
' p$ I! E9 T8 D2 R 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
$ E4 q. W, ?7 z+ k3 ]6 l- n3 v# y" |3 s
7 b5 n" q% s0 e% g! Y
内存监视点指令: wp, wplist, wpclear! E* i4 F& l9 I& D9 Z
例子:6 d6 Z" |% V0 ~* {# p! \& K
wp 1234,1,r/ `& c o) D* T; y& {
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
% O6 Z1 d. S; g& S. m/ l" |- L+ }* c7 }
wp 1234,2,w
+ q9 p5 H0 S/ L" M o2 S 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
. y; N f: T& Q5 [4 l& Y, B
, R5 g% `4 ~ F* q' [& h+ { wp 1234,6,rw
; q g9 U# H. C& {* h 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度68 m/ q- G/ k$ x; a3 P- Z
- }5 n+ O+ D% Q U$ U! W
wp 23456,a,w,wpdata == 1
; R' j2 }8 h6 Q% ]9 m 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1% m- a3 s% [+ u
' ]: l/ l& e& d6 P+ w! X wplist- P7 }5 r( Q4 U
列出所有监视点
1 k: j8 ]/ X4 o, [# L3 F7 D7 o4 N V- ^! n
wpclear 3
; H; m1 m+ A; N 删除编号3的监视点0 u' s o, D2 E! t1 R1 _5 _
# R1 w6 U( }) Z. Y8 J1 J: m! z) q wpclear
$ ?2 L h/ ] o; ]- x# f 删除所有监视点
$ l7 l' M, g1 U
( S# s/ k: O( {! i! h$ B# A) q1 o # G. i. _; V5 a7 h0 x
, U. F" c% y$ n
程序断点指令: bp, bplist, bpclear
/ i2 { s' E, g( L) X' [, K4 u 例子:
2 Y9 O$ C# {! s bp 1234
7 ^( }$ W) P* W 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
9 F) P* W+ c& r
& L+ Z, c) g) @, }* X bp 23456,a0 == 0 && a1 == 0
4 e4 e$ b! N% Y% \ 在地址23456下断, 且中断条件为a0等于0以及a1等于07 ]2 Z3 V5 I) i/ o
0 i7 b" b! x( C' t" h bplist& h3 C6 ^* u( v8 F; ~
列出所有断点
7 A3 Y: h1 s( P. q# b/ c5 S. R& ^' }0 w! V0 S" j7 [$ p0 s
bpclear 36 t* G5 j1 D8 K, a
删除编号3的断点# T% j9 |& {+ x0 |
# L6 [, X! k$ Y9 n0 s) S$ m bpclear# x3 z6 {4 _# o
删除所有断点4 ~9 |/ r5 [$ T! `
8 j1 `. z1 t. e v1 \
) ^: U) Q: B4 @/ W( m& n( K- j6 s
' V4 l: G6 ^8 k$ _$ v跟蹤紀錄指令: trace& H N% w# d$ G: f8 @2 C& m3 t
例子:5 P& b! r5 i4 s( ~1 N( p- P
trace 01.txt% I0 g/ y5 S1 x9 P7 o! p
跟踪当前CPU运行的所有代码, 输出至文件01.txt
3 Z9 H9 ~% {. ~4 ~3 E, Z5 i8 b& E; a8 p% a: J
trace off5 T. `! [0 F: V6 ]
停止跟踪, 并且关闭文件
( w0 |4 W/ O& l& | d& B
" A2 w* [8 Z% s) u0 I trace 01.txt,0
7 G9 t7 z8 g" d 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt) u% J! @/ K$ |: Y
+ F! t' ?9 j/ T l trace off,0
" C: @8 ^: ?6 w& o 停止跟踪编号为0的CPU, 并且关闭文件
2 f" E& g, g% C& ?7 E
+ O7 `9 {$ B6 k; | trace 01.txt,0,{tracelog "A=%02X ",a}
. }% i6 v$ j- t' v( g1 M( L. F 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
1 n! \9 I0 G# \ 并且在每一行的前面, 写上"A=a "+ u$ _5 t" O; H+ _" R
"A=%02X ",a为一个C语言printf函数常用的输出格式1 [' u d' k5 L+ b' R
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
9 }$ n8 `8 P8 j5 a+ S X表示为大写十六进制数
& t5 b" v* J v8 m5 E4 f, h
- v- Y, U7 Y/ h6 H; c4 D% @" l! a; C8 G: L7 h* W
8 F [, F ^6 u$ A) D内存直接写入指令: maincpu+ Z2 x8 B0 b. R/ U% S- w% `' \; p
格式为 maincpu.[][]@地址=数据
4 L4 y; }- T1 }/ @ 第一个[]:$ T$ @* J, k8 C P
o 表示ROM地址
) j2 W* m6 @+ l9 j+ R p 表示RAM地址
, v- y' G& ?0 R8 N. e9 T# q5 J( v% L: t( @1 `3 P
第二个[]:+ t- F( n! O! G0 P4 n) f/ N
d 表示4字节: ~7 h9 i! s5 A3 X2 v ^9 L+ w
w 表示2字节
& K: x. _% z! G: q3 E# o8 Y b 表示1字节
# F0 N: m' f" U, q% V4 e# y' E, s+ S5 \( N$ f+ Y; V
例子:2 d) q$ R; n$ ^% \8 Q8 j' b
maincpu.ob@1234=FF
. V- u+ U& o8 c) L# U 在ROM地址1234处, 写入FF一个字节
4 F7 v( V% G2 S
4 K2 A3 T" J7 |/ [; G6 q) D( l8 u maincpu.ow@1234=4E71
: Y* Y9 a$ X, @* `" P 在ROM地址1234处, 写入4E 71两个字节8 @2 A7 o/ I6 ^( J$ b
% L7 D' C$ x* d2 Z2 B& Q maincpu.od@1234=600A4E711 S, p9 i4 C+ _9 A3 V
在ROM地址1234处, 写入60 0A 4E 71四个字节2 u- x9 D0 R6 f; G; d- E
* c% ^3 U' `7 T; C3 S( M% y6 H
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
; A# d2 r6 X6 G ]. ~0 d
9 k7 E' z' h& ^0 R3 k
1 {, m v6 T+ j' E2 p6 D! j其他:
5 w2 E( v& i5 `3 m( Z; L& X, _ dasm 输出档案名,地址,长度
+ |! \, `; a$ Z h$ {( x+ e 输出程序的反汇编代码5 O' N W F6 y
例子:
( I1 v/ _% m) }/ I% ^" K dasm 01.txt,0,100000, N% ^3 U! z/ ~2 }; J4 o4 j+ @
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt$ P& u; o$ w# q+ Y
9 Z% v, ? ?" q0 r0 d8 v9 Z softreset4 G8 E! S& G( k% H8 P
游戏重启, 但不重新载入ROM. L* ~* J/ w, |2 {% I) k
8 |/ @6 ^! j* Y7 K& m3 D; h
hardreset
/ p' u1 U: V# V: H 游戏重启, 且重新载入ROM
$ M6 Z J% w* |" |" H4 H4 L0 w
snap xxx.png* G3 B( X( Q$ X9 y
截图为xxx.png' {& |/ Z# \9 H. y
0 P4 [% A0 P9 U: b' Q7 p4 ]# l
- N+ y+ M- X( ?: w0 m$ o
/ @2 K' _( c: D6 { 5 L0 }2 F: h* ]; m. F1 d( m
热键:
7 b: {0 x$ h/ q7 w! z ~ 中断游戏
% F# [9 z" y7 }8 p. V% F F5 运行游戏0 d( O# a5 N0 |
F12 运行游戏且隐藏调试窗口
* {0 h/ j# z6 t1 Z$ a. L9 P" A F11 步入, 单步执行, 会进入子程序
7 x& O& \6 Q- {6 A( a F10 步过, 单步执行, 不会进入子程序' k: P4 L/ O H# @2 [6 @
Shift+F11 执行到子程序返回
! R6 ^4 [6 z8 s* K+ _* [- _ Ctrl+M 内存浏览窗口
1 A7 J7 F* x. j( v N. B( ?0 l F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
7 ?. M5 |5 G+ H8 h9 A/ u& f" j, ^; c z6 G+ A
{:4_94:}
; T: A( U' ^' ^; B) m* Y* v' H$ ?! Q( ]0 e6 K: l
|
评分
-
1
查看全部评分
-
|