|
|
/ V. Q+ g0 o8 @* x很快速的整理我自己常用的指令: l4 t! T/ E3 ?1 V9 P# Q
" v& E# W: j" |+ w" q( b
{:4_112:} - D9 y! I2 `7 @
, T1 _1 m- _# l/ q8 u1 c
MAME DEBUG常用指令
0 v$ e P1 w3 e5 V0 ^( @$ i* n) U) u% d
内存搜寻: ci, cn, cl
8 V" O' d) ?0 D6 r! \ ~. z2 k* {! {
ci
! B) z( n1 v% y6 W0 M6 x 搜寻任务初始化, 每次搜寻一开始一定要输入这指令. V% x0 `1 x' \# ]) @( r$ _4 m
# y6 z) b& y3 }% x3 W cn. J& [7 o" m2 h4 E' s
搜寻指令
+ A1 d# y5 ]& g 例子:
" } Y5 r- j( M5 h cn eq,60; b& P7 }+ | G+ I
搜寻目标等于60 (十六进制)
/ Q2 b1 ?6 W% h& `1 o( f; |4 S # f1 ~* z: F" u# ^! d
cn eq,#96
2 ?! v3 @: h3 v% O$ H) q 搜寻目标等于96 (十进制)
+ V1 K0 ?4 o/ e; F' ?; L* x7 Z. ?0 H( z6 Q$ A6 p
cn eq- w3 D, T) e* N7 y3 T$ t( G+ D
搜寻目标的数值没有变化
2 r6 p5 x' y# f% r T6 S6 w" D4 f% x7 Q0 t- ^: I
cn ne
+ H; h; {5 X3 N" u, |% G2 o; ^ 搜寻目标的数值有变化
. i d e- J+ J# V, |" K& F# E* i+ L ! v4 k: m9 t% Z) I( V
cn +% \( N% T; ]4 r2 w+ C' N% ^# q
搜寻目标的数值增加2 {8 B! b Y# _ N: u6 U7 d: k
; Q) i$ H3 v: V9 _* g cn -
9 ^2 U( l$ @2 X+ k! w6 p 搜寻目标的数值减少9 r/ l4 r$ I) [6 |
9 i# o4 N9 Y: J' X$ ^" r
cn +,3) M) l# W% X1 O6 h" E
搜寻目标的数值增加3 (十六进制)
% d0 e( |8 a8 F; @! j( R% k- T: K+ Z
cl& A8 ~8 s% x/ C# E
列出所有搜寻结果) }- G' k( o; e7 ^! \0 G/ O, P& Q
& b c ? [3 @3 C% F$ F
cl xxx.txt
" i1 `) K( ^, H- J4 R) f# i, M 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式8 w l+ L3 \& a/ p% Z
3 }0 _4 _6 a7 A& m. [
% O Q9 K" L7 I* R内存监视点指令: wp, wplist, wpclear
- ?4 V: c4 y& ~) y7 ~4 |- D- p 例子:& n9 B! k; f0 @# ~
wp 1234,1,r5 \/ A6 w( C) ~+ n! T& k7 F
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度17 @- M+ @5 L: ~; x) j1 k3 Y
+ J7 z8 \* q, G( `7 H wp 1234,2,w0 S% V3 `7 O7 l0 Z# i- t0 W
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2' R6 k' \6 a0 X5 r$ B- B$ A+ g
& y+ Z/ K, O$ [
wp 1234,6,rw G3 z9 t. K" ^9 I
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6/ `6 Q+ j& {$ h9 }5 x7 i+ L- a
4 X9 O( U7 v- h& w# H/ ]5 w, A wp 23456,a,w,wpdata == 1
5 w3 U! n5 O0 U+ l! f: O8 f 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
1 A0 P( O/ J4 R2 _ ]* L H1 ]3 s, ?" O5 m. Y$ N6 r5 A1 s
wplist* q! o H- @% u/ u* O, j8 p; o7 A
列出所有监视点
( Z2 c7 E: `$ B! s" s% A# F3 K! d5 |' Q& F; D( u' |) A1 B: ~- _
wpclear 3
1 j9 C/ G9 s% S4 I" ~; {7 N 删除编号3的监视点4 w) w, q0 K$ ]8 P2 b# j. P
) {, _0 `* C5 c/ s wpclear
. U: ]% H" ?5 X* { 删除所有监视点5 i& Y' j7 x$ J) Z
, R# {6 f. i& a8 I
6 n4 [6 q" E9 K: X& V, \8 L' `( J5 V
$ o" m; D( n7 S7 E3 u! f程序断点指令: bp, bplist, bpclear+ E9 ^4 i- L0 {( Z' h
例子:" x" S0 ]! c2 u! J1 C6 \
bp 1234
$ j2 k4 ?/ i' y' g4 q( z. [ 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
. o1 |/ `6 G. T, H+ u
/ j# u( A% ~* W/ @' {( g bp 23456,a0 == 0 && a1 == 0/ w$ ^# ]+ W" e( J2 x% i
在地址23456下断, 且中断条件为a0等于0以及a1等于0
* K6 r5 A( L1 @
8 v M4 K* L' K bplist
: l# Q4 `2 r9 F3 N 列出所有断点, z& b% p# j5 ~6 X( a- p
. M8 H7 j" }. s1 M) h bpclear 3) K7 q9 E3 Z$ Q) @
删除编号3的断点
& U4 [* N U' N4 R! d1 U$ w5 G9 f0 _8 {4 z; p2 Y$ c8 U0 {9 V
bpclear; q) e- O: f& u( j j y% Q: J C
删除所有断点$ G: [$ J8 `. S# P
+ ]7 O2 ?+ T1 ~- B; u3 E, T" G, b
4 p# c/ |4 r# C) R, @ ?
$ M+ a0 b6 V/ }
跟蹤紀錄指令: trace% O1 S# r% p* P- p* ^' m( V$ w
例子:
1 i: r/ \+ ^+ o0 J. j trace 01.txt
8 c5 R+ T& r* y 跟踪当前CPU运行的所有代码, 输出至文件01.txt6 L. b1 j' D h/ z+ I
$ x# t% ?, _9 b; X$ R2 ~ trace off
( L! Z. j- k7 y/ n5 x7 a 停止跟踪, 并且关闭文件
h1 Z( C3 y8 u6 P
+ Q1 l6 r m8 O3 _8 b7 a+ q2 F trace 01.txt,0
. M9 X6 m8 O6 t# @4 O( k$ ?! K4 h# Z8 c 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt* G ?2 m* k$ l# s" L4 E Y" P+ E
9 g& y' y# r4 n# k) H
trace off,0
+ R" \! A! s$ \* C: A 停止跟踪编号为0的CPU, 并且关闭文件5 H0 I% Z$ f0 R3 z
) n1 g- v% G5 b" W/ L* v) A1 w o
trace 01.txt,0,{tracelog "A=%02X ",a}, |% c6 P/ y& ~* s/ I2 y
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 2 W, {3 t/ w7 ^+ \6 R% l
并且在每一行的前面, 写上"A=a "
6 A+ {0 |- N" |8 }; R4 ^ "A=%02X ",a为一个C语言printf函数常用的输出格式$ ]/ I9 @# L% I4 c* l- H0 U3 V0 c
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入9 j7 ]$ D! v/ y2 f7 b; h9 O0 O
X表示为大写十六进制数, K9 L) n3 O6 z
& e5 j$ m" \6 H; k2 }
, @: y$ T' b' n
- {2 k' P- }, ^8 j" d内存直接写入指令: maincpu5 L" k. E7 E9 o3 @: q1 m
格式为 maincpu.[][]@地址=数据 j0 s4 w. W- T( ^* o
第一个[]:
1 f. A |0 t- ? o 表示ROM地址
2 f% r8 A' W& @% h! h; ~6 E p 表示RAM地址
0 F) I- N. T& u5 q1 N
$ K- j1 E6 v' H4 i" h$ f& Y' F 第二个[]:
j+ W$ K! A$ m) d5 ^# i d 表示4字节
; n1 _0 L3 e' y6 [( E/ \ w 表示2字节& X$ g% d5 ~' |9 \1 L
b 表示1字节
: w) U3 V# O% q8 r/ g5 Z1 b1 f8 o3 w' r1 o3 X w1 m& w$ }6 i
例子:
) {0 K2 i% B+ \, D& _8 X maincpu.ob@1234=FF
4 ^; p* { {& ~$ U" _/ ~ 在ROM地址1234处, 写入FF一个字节
: P/ f. |2 q. r/ H+ R4 u; K; r: Y6 c+ @
maincpu.ow@1234=4E71' m9 O% H3 f/ O
在ROM地址1234处, 写入4E 71两个字节( R$ q( {& O6 ?
7 U p. [0 g& o6 F# T3 N6 s
maincpu.od@1234=600A4E71
/ P! x3 a3 ^! V# m) X6 G. U 在ROM地址1234处, 写入60 0A 4E 71四个字节
9 v+ G$ q! M! o) Q* H- l5 p) @5 K) L+ F4 r: |
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
- t/ D+ U5 w) X - l/ _. w$ g4 C$ C# {
+ i' S& [( P8 U$ n! F
其他:: [- o; {' {" z5 }+ T- c
dasm 输出档案名,地址,长度
% I2 v( c p' C7 _) k2 v! o; L: h5 P 输出程序的反汇编代码
- V; |3 H9 H* T# x 例子:
! f, S) P! }* O) P, d! h# K dasm 01.txt,0,100000
! x2 @; ?5 c& s# k5 L3 ^% L! x6 k 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt, }0 v# u4 r4 S; y2 K
4 j( Z* L) h5 C, f! T1 Z; t softreset0 P3 L" E. }. c8 N6 E, c
游戏重启, 但不重新载入ROM
/ S) ^, C& Q2 I' H, g( A6 k
1 ~( F: _ }1 Z hardreset# l9 o$ X* Y& \) g1 t3 O4 A J
游戏重启, 且重新载入ROM- \' G ]4 B. G& k$ r
& B) `+ t- J, n8 u8 ], N$ ] snap xxx.png
7 ] N1 e$ A0 s2 F0 g' B3 g4 ` 截图为xxx.png
5 o& A1 J' Z4 G& N: ~# V- l/ {! v! V
, ^$ N6 [, t* [& Y9 J
; Z9 R& k! c k+ w _. e `
" I6 j4 Q, y, E# u% X. J
, }2 `6 {4 ~0 X5 B6 C# E' }; D热键:* }& v8 m3 G5 o5 x$ b
~ 中断游戏% ? ]7 S+ b% u9 d
F5 运行游戏9 p9 Z2 D: l5 ?- {* z9 k
F12 运行游戏且隐藏调试窗口5 c6 x( x7 M' z* }* \; o. N
F11 步入, 单步执行, 会进入子程序: ?6 {2 h2 T& a2 L* h+ ]
F10 步过, 单步执行, 不会进入子程序- T* |' F' t" V9 c4 z0 N6 d: s7 @
Shift+F11 执行到子程序返回' a. }9 ^, f& l+ K& ?
Ctrl+M 内存浏览窗口
( y* d( \8 m$ X9 F$ P$ ] F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU8 J# i* \/ s w5 r$ j% H4 e1 j
* T. o4 V+ z+ F$ A* d$ k& d{:4_94:} ; m3 h( R2 V; X* Z0 Z! z; _/ C, A
w0 t P6 V3 A% ~7 ^/ J" s |
评分
-
1
查看全部评分
-
|