|
|
& a9 _5 z# X, f O很快速的整理我自己常用的指令
0 O* R+ z" k: ]% P I3 b! f) s1 m, P5 E* ~4 g: u2 a/ c
{:4_112:} 7 h# y: d# Y* z* W2 \$ L0 F$ ^! o
' A7 u* {4 G0 ?- W# z' l
MAME DEBUG常用指令# J6 u) c6 p6 O* N
# }) k. A+ G' X5 l$ k. l5 ]) N0 ~8 d
内存搜寻: ci, cn, cl2 a( d. J- c6 k
" x6 ^! v% l" }: r+ a0 e
ci% S3 G' d$ e9 ?. G( |
搜寻任务初始化, 每次搜寻一开始一定要输入这指令' B' k# T6 X/ A" b
4 Z+ p* p) c# ^) P7 d* `; F cn
/ ^9 D+ _8 k. r1 W 搜寻指令
s/ N# V1 X( M3 j) ]7 K7 N* A) d0 m; S 例子:
7 {. v3 r$ a7 d. N3 C cn eq,60
+ W. s* s5 H: N5 i" w 搜寻目标等于60 (十六进制)
1 q- D7 \$ T* I" ^. h
2 A3 X( T* H8 u8 y* E0 k7 y, w) H7 ~ cn eq,#96* |; R. y! i. ?. s
搜寻目标等于96 (十进制)
+ K3 b8 W! \7 i, d# Z- s* A. J1 k6 j5 r7 e8 W* W1 i. p
cn eq
- [; ]: d: K2 b8 b$ m$ d( W2 | 搜寻目标的数值没有变化
% O& [$ e# d3 i' I; x
9 c# O% x( ~' N cn ne
: E! j0 g' R% p' F# B7 U& N% y 搜寻目标的数值有变化# s. X" ~8 @" ^% K1 n
$ ? b ?6 g* ]3 g$ A+ z" z cn +
$ G/ i8 ~7 a3 z+ C* ?/ b 搜寻目标的数值增加+ p6 M6 G X# H: M7 e3 ]7 N: J
5 r: t4 }4 g; { cn -8 N, m* ]# v0 A* H4 @
搜寻目标的数值减少
+ g/ x' W6 ^5 C2 ?' Y
1 O" T3 s0 q* n" m& C0 D# ] cn +,3
) a) G8 f, h; H) g4 [$ \2 ]+ T1 s 搜寻目标的数值增加3 (十六进制)
' I2 y; F( A t3 ]; C& E7 B
% H" |9 [ O! Y cl3 u* E$ ^- c( `5 F/ j! s7 u; T0 P8 Z
列出所有搜寻结果! @' t2 p% S8 x6 N. `" C
Y. n; r9 V1 ]; w4 A! u! f cl xxx.txt+ a) { \4 I A+ { | b! I
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式, ]. w. m% u! `+ K0 ~2 {( [# I
1 C/ c- n! `! y( g! C5 b) R
' }) X2 B3 Y7 [7 V$ z$ Q内存监视点指令: wp, wplist, wpclear
3 M8 D/ R* v( z4 o9 g" j 例子:
+ `0 w) p7 K( A U( I wp 1234,1,r- `. r( L4 T- L; C8 ?9 C `; b
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
$ Q: A- Q ~( V: T1 J" v, w# q" p- s1 y5 F6 A
wp 1234,2,w
% z. ?. \9 C2 w2 Y% f1 u ? 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度28 P2 g- Z- m% o( |
, x$ F% v9 J4 y wp 1234,6,rw# U) J) A! U. D- O$ x) b C2 r. s
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
3 I$ U' T' h- V( K2 |8 w- H0 H! v) @" D
wp 23456,a,w,wpdata == 1
" ~, y" n4 y- P3 k: V 在地址1234下写入监视点, 数据长度a, 且写入的数据等于12 @ i' k* q: N* r
9 q" V. \* h' {
wplist
* D$ C3 r0 A1 \- | 列出所有监视点
+ ]' o5 k" k; N, N: R, C7 I" W, _0 V2 D: X% H
wpclear 3
6 o( ^/ z4 i. P2 e# g" B 删除编号3的监视点! E% l5 x, F2 o! A, J2 h: u1 v
9 @% Y+ q) }) j) P$ W& i
wpclear' x, D& A9 W6 z4 ^& ^
删除所有监视点, O1 t$ c, W- K0 ]. [! _6 R, @
8 K5 u6 ]( u% K1 d) Z. e ! m$ M! W" l& f6 x' e: ?- A: Q
* z! ?. A: m/ A T' o
程序断点指令: bp, bplist, bpclear1 _# T6 {; r; a1 I' h0 K5 S. `
例子:
% i2 r7 W+ `' \ bp 1234! [/ x$ N# J) t5 E
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断2 y0 A1 P( O b8 I' u8 o
) ?7 |( a( z8 E' _8 z" z% }
bp 23456,a0 == 0 && a1 == 0
1 w5 P) L& p. x 在地址23456下断, 且中断条件为a0等于0以及a1等于0
% l. F1 F. l: {5 e8 c0 ^6 E" x! P. Z/ R) w
bplist, Z$ I$ h2 V1 X! A6 {
列出所有断点5 G- c5 R( H- A- F' P
[; F% D9 @, [: e4 B( ?
bpclear 3
' ^ g' P9 [8 C% \& ` 删除编号3的断点+ v4 U9 o1 G4 Y6 j" @# M9 d. F
& g: U+ @- a2 k0 S
bpclear ]! F+ W9 N% J' @4 }* ?
删除所有断点
) K$ v" K1 p; r3 c
+ _9 w. E. P- n6 \ ( v; Z' Y0 ^! y. {: v) j- C5 q1 J
$ m8 U# D& G: ]# O+ r5 Y) A跟蹤紀錄指令: trace8 O3 B1 Y$ ~3 t3 s1 u, k
例子:
, Z! ~, |+ m2 E' t6 w trace 01.txt7 ?/ J$ d# f! Z, R: E6 q" a
跟踪当前CPU运行的所有代码, 输出至文件01.txt& ]# l+ }4 @$ d: }9 {
/ I) _" w4 H- L6 r; i# @ trace off
. H" F+ |2 y: b( {) N 停止跟踪, 并且关闭文件1 T7 `1 o$ B l; c5 T9 ]$ \) h
: k9 a. y& t$ m: O trace 01.txt,0
) g9 \' U, u7 G* l) _% c0 x# U 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
8 n; L4 w' z+ r- V( S, O5 Q G1 g# Y- X a
trace off,0& u& E. P: q8 Z, I. i6 b( I: w) @6 }
停止跟踪编号为0的CPU, 并且关闭文件2 g* @* L* [4 O' s6 }# e0 I
! v" D/ d+ g# c( O( R L# U
trace 01.txt,0,{tracelog "A=%02X ",a}
6 e- q4 J& v- a, @3 a1 o 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ; g# H% ?2 w# d; k8 Q
并且在每一行的前面, 写上"A=a "8 E0 S+ e6 B Y- d. y
"A=%02X ",a为一个C语言printf函数常用的输出格式 b* I+ |8 {4 ?
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入) u) N+ q! r( y9 y% \4 D
X表示为大写十六进制数
( S% H4 y$ _' P. B( b" L( Q! g2 O# N0 Q+ ?+ k) s
& K3 ?7 ~ C1 A0 o/ {$ H; i/ {- U) N9 R. P$ a1 L* c3 v
内存直接写入指令: maincpu* R8 i+ m! \* T
格式为 maincpu.[][]@地址=数据
; F2 v0 K8 a# ]1 _# [/ H 第一个[]:
0 F5 N0 \; c4 t! y% t; e( P o 表示ROM地址- s- u. N1 H6 V, ]- s- {
p 表示RAM地址
& B% ~9 V7 J( R' ^+ o* n6 {- `8 ^; U* D
第二个[]:
0 d& e2 R2 |7 f( B! F d 表示4字节0 l( @$ m: h G' ], L4 ~/ U/ X
w 表示2字节
6 {) O5 R1 y8 ^: [4 z/ s b 表示1字节5 M2 |/ p& F$ G+ M4 e/ G, E
0 s5 ~ f( E, M 例子:) }: Q8 Z0 M8 d' a, ]
maincpu.ob@1234=FF
: p& c4 a4 v, W% |# ` 在ROM地址1234处, 写入FF一个字节2 u* J. i3 h& r6 o6 G
3 T2 s6 k I! J) w& p( i( q
maincpu.ow@1234=4E71* S; C# U; L: Z! r
在ROM地址1234处, 写入4E 71两个字节6 A- u$ n/ P, ]
2 o( m$ ] E9 p maincpu.od@1234=600A4E71
7 [( P8 }" F% f2 B8 F 在ROM地址1234处, 写入60 0A 4E 71四个字节
+ N# {8 ]$ m$ g3 t( }
! c+ F: n4 D9 g0 P! p' n: c 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写 b+ U6 O: b' s( y W
- ^4 A# S) [7 u/ p8 m" J# {3 T3 S' y' |/ p( A
其他:
/ a6 U( r( t# y1 s9 z1 U ] dasm 输出档案名,地址,长度
3 I7 r) D* h8 ~. T 输出程序的反汇编代码
, \1 W E& Z' c/ P2 E9 a 例子:4 Y3 S- N u$ K8 I( ^: \
dasm 01.txt,0,100000
& q+ R. d: r7 X) ^ 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
8 y4 @; s. c2 k4 i# k+ L
" {( C* m4 J9 h5 U R) K1 N, Y- Q softreset1 \8 F( \8 ^0 y0 F! g
游戏重启, 但不重新载入ROM
, ?1 Z6 h) b) Q& C i! w+ z' j* [3 }( k8 n
hardreset
3 {; f/ p4 I2 P& H1 a 游戏重启, 且重新载入ROM
0 L! c7 L: ^) G
- K; `" [2 a6 m! a snap xxx.png* a/ S2 I* y* @( |; F
截图为xxx.png
- U6 s' Y( z; s0 `+ d
9 d, ~0 Z, r( i, l; Y, c
" F( N7 P9 y7 d- x " X; ~* K j Z5 v1 V5 c {2 U
3 e9 h3 L* b2 i
热键:
% U/ Y3 V0 I2 O2 n* M' X ~ 中断游戏
* ]/ n/ H* d w9 X2 k; N7 _ F5 运行游戏
8 E0 a' g6 [: U: t" B7 w F12 运行游戏且隐藏调试窗口 c/ r ~3 F+ J7 i: }4 N
F11 步入, 单步执行, 会进入子程序 o' W: @& X8 `8 B4 z9 r
F10 步过, 单步执行, 不会进入子程序; b2 C. u8 R8 P0 Q# r+ ~
Shift+F11 执行到子程序返回( j- f0 w e! B- ]+ F& z
Ctrl+M 内存浏览窗口
( z2 o+ a+ @% Y% f F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
$ o, C0 B' a) ]8 {$ r7 a4 Y9 I1 W. t2 ~8 y# K; |
{:4_94:} ; a6 Y9 S7 y3 Z1 u* d Z# b, `" k
- p8 p: H7 \1 d( Z( L$ P5 |# ^
|
评分
-
1
查看全部评分
-
|