|
|
- c- C+ w: p; u很快速的整理我自己常用的指令
9 `, L& I' ^# A: p
8 k# c& }+ R$ F$ m* K* W{:4_112:} 2 {9 O" t- V# V8 c6 k5 s. }9 l. e9 V% q* t
. Z2 k9 A Q% I+ B
MAME DEBUG常用指令
! j( q0 R' P2 t; x" d( j3 g0 I
$ H0 j& g$ |4 g$ e5 h! s: I% _内存搜寻: ci, cn, cl
" D- y2 p: P9 c0 Q% b# l' k2 o; X8 H
ci. a n( `6 }8 h/ O
搜寻任务初始化, 每次搜寻一开始一定要输入这指令) T: |4 K) _' Y4 q7 R6 e% L; [) K
, u$ p* u B* `" K cn
* ~7 R* v) x |; S 搜寻指令( o/ `# @0 G* x+ m! L- y( k
例子:
2 J/ r6 W8 E1 b' l" |, ` cn eq,60# m) X3 r% K% ]# F' S1 y2 W
搜寻目标等于60 (十六进制)
, R1 u: s5 L0 _1 C8 s, J
% N! l( n8 _9 T2 \: Q* m. Z. p0 q cn eq,#96
. V8 _# f. ^2 e% f2 V/ ^ 搜寻目标等于96 (十进制)! g/ |0 s! Y$ N7 R$ U
3 v- G8 B& G: P) Y
cn eq8 v5 W9 G8 Q+ B9 P- Z
搜寻目标的数值没有变化
3 i x* r5 a$ }! z! b7 g
+ x7 g/ F2 S s4 f$ R& f# t cn ne
2 a7 b( A R1 b" l9 p 搜寻目标的数值有变化" M; i& [9 k( \; t: Z1 [, ^2 D
4 W% E% H5 J- L! s: ]
cn +
/ o' i- N: t4 q- f& ?; D 搜寻目标的数值增加
7 y' B5 c, \9 b
( g0 n$ ~7 T3 u* C: K cn -
: S4 I3 S/ C+ `) {% Z2 J, t 搜寻目标的数值减少
9 ?" A' M$ O8 I/ W' A+ V 6 L' A) a2 p9 O# o0 T. ]
cn +,3
1 J4 M. s9 N2 a 搜寻目标的数值增加3 (十六进制)2 K' U1 b# V7 C2 L
- u9 |7 R+ P3 v6 K5 {4 w
cl
6 O. g; M: ?4 ] 列出所有搜寻结果
. K# p+ a! L* w2 F) ?6 K5 a2 C* V
6 T: F) P" @ X cl xxx.txt
1 i( ]: A" R/ o; Z4 y. p 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
U2 P! c3 e# [; `
9 e R8 p, A0 r- l4 t $ N: G- i$ n. p: ?7 p% c& n
内存监视点指令: wp, wplist, wpclear6 Z/ ^# A6 c. I) J) b6 k
例子:
# Q: @, d' \" u* ?+ x wp 1234,1,r, j( v5 I; j" d( s+ ]6 F9 [
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1( R; ?/ T- a* S
( p n2 d3 \ Q/ S+ x
wp 1234,2,w+ R( p, B/ w5 y
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
" Z9 c ~5 o/ u b $ V/ s9 I7 B9 |* J7 y7 S4 |
wp 1234,6,rw
5 j, a, q4 N7 a8 w* x% B3 R' D( a 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
3 p. M g. u1 U' V7 [6 O
, f) b5 i8 E& {5 C1 K, _4 B" b wp 23456,a,w,wpdata == 1
6 ?- g! Q/ T) t/ W! @9 a8 \& v 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1/ z' p, X* Z8 `# [) S: h& I1 I
8 l7 C7 H! p n. ?7 w* Q
wplist8 m. `& k L$ M+ F" ?! r
列出所有监视点
' Q1 q7 g: n4 L; H6 w, q
# s i8 e. L; \3 X; Y wpclear 3
: s! J) E4 n$ H. a" Z) W- x W 删除编号3的监视点; H% m2 Z% \! Z" l" [% Q
! v0 p( w$ S5 j5 ?8 k E" N& `
wpclear( X8 z. \% w* p5 @# |. K4 r
删除所有监视点
# `4 f* _( q# d# p3 x( d8 d8 Z
/ o5 h# u: K" k' z
; H0 V% Q/ j$ {6 i: s E4 c$ z; V1 B* M4 T0 h- ^6 X8 v
程序断点指令: bp, bplist, bpclear
% h3 b7 x. W. q* [6 w5 w! B) r 例子:% a; ]5 \ g4 j* v
bp 1234( I, H1 V/ h) [1 Y! ] M ?
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
' u; D0 w7 p! s0 Q" _) W; W5 f9 n9 F$ E# J6 l6 @
bp 23456,a0 == 0 && a1 == 08 m) C% [' [0 P9 o) ?# D
在地址23456下断, 且中断条件为a0等于0以及a1等于08 U% t+ G. i' P5 Q5 t
2 ~( V7 I0 X0 Y3 g* y- U7 C0 R bplist
+ M8 l: U( Z/ k7 u 列出所有断点
* b7 C7 R2 L" S# x O H" t
' m- B. ]1 f6 T9 ?& y bpclear 3
& a3 | P" }* r* `2 B/ N4 v 删除编号3的断点
% K$ F" g2 v$ g( w6 r( [; u. W( a1 D M, N
bpclear
- l2 a, T1 v2 o+ x 删除所有断点
; A! ]' R) J$ `" m6 p3 }6 }) [& q* Q' ?
0 w6 Y w8 g: n# I d: H4 L! I% b * B# j* t+ u' Q0 W8 @7 [. Y
跟蹤紀錄指令: trace2 S7 h9 \8 q5 B9 [$ r3 ^! }- }
例子:2 h# p9 h9 t' U
trace 01.txt- v) u, R+ L+ G; Y9 d' i! {2 r1 l
跟踪当前CPU运行的所有代码, 输出至文件01.txt
. l8 X' ^+ o( d. G. o
. f$ R- Q" M% I! q1 A trace off6 y7 [+ \# ^0 q/ u: R1 _
停止跟踪, 并且关闭文件/ ~5 M/ }) i) \ q2 m9 ^
7 B5 n% o! N6 i( A% x9 L; p
trace 01.txt,0
) ]7 Q$ W% ~+ l* m" k 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt& I2 f$ S5 C( U3 P% v' m; K
7 a! L- s: d9 H7 a' H7 E7 M trace off,0' e9 x% D( Z B6 Q5 h T
停止跟踪编号为0的CPU, 并且关闭文件* Q* p0 R& b4 e5 m8 U! x4 n
' j' c3 s+ Q! O$ A0 \- t trace 01.txt,0,{tracelog "A=%02X ",a}+ p; ^4 Q. r1 X9 \% Z0 X" A
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
0 E! Q D8 _ W5 N( e 并且在每一行的前面, 写上"A=a "
/ N8 B1 ]/ U6 Z3 L7 s "A=%02X ",a为一个C语言printf函数常用的输出格式$ J" M5 T6 Q5 t5 t% K$ a
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入% O1 f! L% a3 i. p0 a
X表示为大写十六进制数0 O `9 i! O5 w4 w* S; D. ^# }" o
* B9 r; I9 U4 Z" c" J
# |3 v2 U3 E H1 C! m# g% d3 Y# y$ a
内存直接写入指令: maincpu% _, G j$ o( f% r9 U m
格式为 maincpu.[][]@地址=数据
% u9 n1 W& Q0 r& P% f9 y 第一个[]:
: I7 u" S) E3 Q0 P! `: t! i o 表示ROM地址
0 h) K8 O0 @( w2 J) j p 表示RAM地址
# h( I( V" U+ x) v; @; o
: ~: ^( Y6 k) U ]; Q 第二个[]:
" s6 Q/ o: R( Z- Q" q7 v/ ~( } d 表示4字节5 V2 r/ [( m3 @; }! b
w 表示2字节
) J/ ^* l4 |! K) Q8 ? b 表示1字节9 a% W% S ~0 P! b! q' C
; W' k1 K2 q) v5 Q( L- \" A 例子:: \5 [8 ~3 }! [( h
maincpu.ob@1234=FF! z/ o7 m M" R& N: b
在ROM地址1234处, 写入FF一个字节0 x4 m4 y3 ]! c+ M4 W
6 n8 o4 o9 w5 X* t% C4 I
maincpu.ow@1234=4E71
j* i0 x0 ]) u7 W4 C6 k 在ROM地址1234处, 写入4E 71两个字节
0 z3 r. u. p( B; d( P0 D
( s. L9 m# F' ? maincpu.od@1234=600A4E71
3 `2 V: K8 K+ C+ c$ w( z. b* ^$ T 在ROM地址1234处, 写入60 0A 4E 71四个字节
+ u+ \1 v( r# S# {+ K
: H L4 Y( |% t; k 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写% C' `1 f& J4 u0 A; Y7 A
- Q' P6 \1 `0 a) `" x; t
+ J( @5 d# t, v" {
其他:! c% l, L! ^! R3 K4 B- X
dasm 输出档案名,地址,长度" M. E3 z; C& P) M
输出程序的反汇编代码
- l2 u7 N8 l/ O* K3 ^6 p 例子: y/ o6 c+ \# n6 k, P- O3 f
dasm 01.txt,0,1000000 d0 E/ a( d G. H' e. r$ w
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt' j* K9 J1 ~ T+ C; J: N
6 y: N! {8 D3 O" R$ t4 l' ~- i
softreset1 @4 N( Z& G+ i7 S T F4 i- f" N
游戏重启, 但不重新载入ROM2 a8 J+ ?: M6 H- n1 ^6 I
; p% h6 R+ o# S: h( M8 p$ d& w$ x
hardreset
9 W C2 v* c; R, _, | 游戏重启, 且重新载入ROM
( _1 G" c$ J# E' ]% y. n7 f( @3 g
9 r: t$ D0 x; ]( q: @' n snap xxx.png' z2 V i& G% W) r( v8 b
截图为xxx.png, F& q" v/ `9 k' D C
) B* P2 n+ L( c$ M8 }) L2 w . ?9 u) _0 G* |5 O1 Q' {6 A* K
( L) v l: b( ^! \
* }1 P8 c! [, Y1 ^! C热键:7 [( }- p3 U& X6 N8 \& j! `# m) @
~ 中断游戏: T( S" K' D a6 q) E
F5 运行游戏
1 z; j; V2 F& O& i F12 运行游戏且隐藏调试窗口0 V+ I* {; D [+ S9 L
F11 步入, 单步执行, 会进入子程序
* g4 U; p. {: f, ?8 d6 k% O F10 步过, 单步执行, 不会进入子程序1 Y M/ w8 z0 i3 }/ v
Shift+F11 执行到子程序返回 B* G* a+ v1 s; {1 U0 d, r6 x
Ctrl+M 内存浏览窗口5 [* {2 r7 G( S4 e" N( ~) V' N
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
`7 p P0 x: m0 w( O/ ?! A. {1 L5 s' V$ Z
{:4_94:}
! r* \. f* @! J$ r) J
$ `9 c8 n5 d4 u! G& s2 S9 b |
评分
-
1
查看全部评分
-
|