|
|
. c2 c) B0 L t1 {/ ^7 e) `
很快速的整理我自己常用的指令9 `& T% D) d3 F7 K! P. r
* @5 m6 t! h8 ?! z# ~7 @( E{:4_112:} 7 l8 L9 p7 g" \7 t/ ?
L9 Y' [0 M3 ?
MAME DEBUG常用指令
[" h ]! j3 [* `2 `& ?1 J& ?
: o _# q! U2 a% W5 M内存搜寻: ci, cn, cl; j$ i$ p! j( t- p+ L& _
( A% @' }4 f, A) U3 g ci& Y4 d. w {+ A
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
# @* d9 a' t8 w1 c* c6 m
# n; i4 M6 `: s* b x% O6 B cn1 A" |2 t$ y' p# O" i B5 q
搜寻指令$ `4 u6 h' {' G2 f6 a/ \3 A+ m/ @
例子:! M3 s2 I* q( d- N3 {3 t
cn eq,60
& @" I c+ c. |( N 搜寻目标等于60 (十六进制)
5 P% u O9 \; P 1 W9 f& u& X* z/ J, l
cn eq,#96
2 K7 Z% } u- R 搜寻目标等于96 (十进制)
: f- v- ~6 b) L% f( a4 U5 Q. M3 @8 g2 @6 h3 D. D) `
cn eq
( Y. ^) a$ J& [& r' s& s 搜寻目标的数值没有变化
- z: Q9 y7 K% V! J! z
+ V3 S6 g3 C( }3 h cn ne
' i& ?* Y, o; ]/ I, l: L 搜寻目标的数值有变化5 a. U; ~7 w! `8 G" I. w3 X- \; A! |
' V0 G( H6 q e cn +
u; p! M7 m( Z g 搜寻目标的数值增加
' s; b0 Z f# h2 @4 _! h; T - B& o( K" X. p
cn -* E- f7 A# N( x* w; D
搜寻目标的数值减少4 P" c G: |8 @6 s$ _
: l: e* z! I" f/ C
cn +,35 S4 i9 p: l: X+ G$ @7 x
搜寻目标的数值增加3 (十六进制)
! Q- _9 a, G; O% Y1 o0 i. d' P3 {+ k2 l/ A7 w: r9 T2 }6 J
cl
3 ]" i' M. V1 _% y 列出所有搜寻结果
! g' q6 x3 x' \9 w! E1 d* ^+ L, L5 r) {+ k
cl xxx.txt
" l- M* {, m( V. j- T' A 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
+ ]' g8 F2 h2 U; g- Q4 Y7 K8 H6 }9 w
( e. L" ^$ R- ?1 u
内存监视点指令: wp, wplist, wpclear
- q0 H# t6 V5 H- l8 |' A 例子:
3 x% U0 B7 w- f) k, K: @ wp 1234,1,r( `- r( h- @% E! w+ ?9 V, |
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
: d( T; q, b, w9 }* A% i1 G
# T4 x! V" m7 D6 b( o- A8 U' { wp 1234,2,w
: G' _, j6 r2 _! V. ? 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2" _6 L0 @( X# p+ G* t
2 I! x7 T s( U& t. g, i3 G8 h wp 1234,6,rw
& X. h2 {7 Z/ k& U 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
, y7 r; q# w7 g4 k0 g+ o
/ v+ M. I) v8 q wp 23456,a,w,wpdata == 1. m6 D& V, k# t0 |3 q. U) m
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
% H5 ]0 G4 }% ]
4 j+ w8 l+ { O, M) S r wplist
4 g2 p/ L$ j$ F4 H: g& l7 ] 列出所有监视点% h' A4 c8 L% z- c" E- H
2 Q8 P$ ~) [+ G5 Y
wpclear 3/ K( T! G6 G: t
删除编号3的监视点! s) P) M" H$ f# b/ `+ ]. b) s
, h$ R% ~$ E' l( h! c
wpclear
- s# J! ]/ W! c7 I: g* x. R4 h 删除所有监视点; H/ A2 E4 T# p+ ^% B# E3 q
+ _% _4 g' h* l$ s
3 i ~1 U+ b2 w( [3 b$ r; g- ~
" w! t( Z, X4 z9 ~# A' |) ?程序断点指令: bp, bplist, bpclear
* X. F! _2 v. U1 p" j2 n) [+ L- h 例子:
' N& B+ x3 n0 {- C4 \! z5 b0 I bp 1234& c1 ~+ p* q+ m% n, w
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
4 [5 s- V" N" a8 v0 H. E& X# s2 X
bp 23456,a0 == 0 && a1 == 0 c I& y! c' `
在地址23456下断, 且中断条件为a0等于0以及a1等于04 P( Y/ }0 `" X3 W, r* h
; @* L z, ]/ _% ~- z. d
bplist9 x* k/ B$ v' u2 |' M
列出所有断点
z6 }4 H" U* P$ [9 f
' M8 u# S/ c1 q- X bpclear 38 L1 n, S! f! [$ y2 }
删除编号3的断点
) I' N4 K1 i# |$ }" b a
4 k: k+ M, w! L bpclear
! V& E8 J) L( D% r 删除所有断点
/ l# e" z e" M
5 N3 t9 J( k2 l$ R5 b8 f ! l8 N8 ]" P% I3 v7 [
. q; _+ G3 S$ L z+ W( Y' Y7 ?( T
跟蹤紀錄指令: trace3 P0 H. j# D3 k# N; @6 G# Y: _
例子:: V1 W+ K1 a/ X. ~2 O# o
trace 01.txt
- q- u( M9 W! g8 H1 D: y0 K2 ^) T 跟踪当前CPU运行的所有代码, 输出至文件01.txt
3 Q$ z7 d3 b! G% N: g6 b: j) L% I
trace off$ M$ i) _+ E3 R, k7 z: j* R; e
停止跟踪, 并且关闭文件) z4 {0 L( f5 i- \
) e1 c( U" V6 F0 Q
trace 01.txt,0& |) J8 s( L& P/ O+ I8 n
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt. ~4 M1 v, G. {; k9 Q! [9 f9 p) K
7 ^6 Z5 L0 |) r* Y trace off,0
5 \: v# u: P4 [& Z 停止跟踪编号为0的CPU, 并且关闭文件
% K) h# s) {" {% ~0 |4 y( B+ P. I* U+ m; R
trace 01.txt,0,{tracelog "A=%02X ",a}
* @& F7 }, P$ N3 L) Z 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt & C" W; H% t* {% \( T9 _
并且在每一行的前面, 写上"A=a "/ t- U/ {4 z7 K( ?4 R8 k3 M" o
"A=%02X ",a为一个C语言printf函数常用的输出格式
) s1 @6 _/ z3 t8 c2 ~ 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
/ f' q4 R% }# V) e- ?7 {* _ X表示为大写十六进制数9 v7 D0 A" N. i6 ~
# m: m8 X( I8 W, Q/ d7 p
: P2 w/ S5 ]3 l2 C9 `; D# l- i2 h# F( F* A
内存直接写入指令: maincpu7 J! A9 q9 X6 F$ u0 E1 C1 R1 o
格式为 maincpu.[][]@地址=数据
2 s; a9 Y( Z# q3 T+ | 第一个[]:
( Q0 ]5 [; G0 q o 表示ROM地址
5 @, Y- q V$ ]' A3 {" F p 表示RAM地址0 m- t# j% V# v: U/ J2 S9 t
$ l# R- y3 `0 a) o% H' t" ^* D
第二个[]:2 Y2 B) B1 {* G+ u. D" ~8 Q9 D
d 表示4字节
$ H& O( p6 D5 C9 y z; \ w 表示2字节6 V9 T6 q+ d) Q5 h8 B1 ]6 n
b 表示1字节3 K0 [: G' R) D1 Y: _
5 P( h* J3 t% s+ D# F 例子:# S9 n3 x6 {. X+ T, Y, g* G6 g
maincpu.ob@1234=FF
. g) B* K3 `4 x P3 i" E6 l n 在ROM地址1234处, 写入FF一个字节' p5 N [; Z5 y3 E2 O
" { @1 U, c- T3 f9 ]0 v1 `! e maincpu.ow@1234=4E71
1 ]6 b6 o, ]# O' V. o 在ROM地址1234处, 写入4E 71两个字节 m; \4 s( M. m2 O5 m1 n
' B4 O9 o% }& }0 H0 o0 B2 g) F
maincpu.od@1234=600A4E71
) ]: v/ `3 D) Y" Q C 在ROM地址1234处, 写入60 0A 4E 71四个字节! A" G% q1 F p4 P9 \6 y* Y3 e
7 B; {( _7 y2 f9 n9 {$ O
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写( c/ ?. b3 y, U% P1 C# _7 W
$ E' @) D' H8 f9 Y( q9 \
; l6 s7 S% \" o" P" Z2 U3 M0 [) {# N其他:0 D: T+ |+ E! @8 t* e9 w/ S2 L) C
dasm 输出档案名,地址,长度
L. B' A4 g- D% t$ F# q1 p; Z 输出程序的反汇编代码, c: t2 [8 r% S% k% d
例子:
% a9 P9 | @- e. ?! }; W' Q m dasm 01.txt,0,100000( d8 k0 T, s. ?, I
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
! b# _; w& w6 w% Q5 j, L7 k+ _* h# j; C& p# {2 a
softreset* a& T+ N, @* ]8 Z* S, R
游戏重启, 但不重新载入ROM
8 D5 C0 m% ^0 x! v+ w8 k2 T3 V
, m, a$ m7 F$ c3 c% ]" d7 n# c# r hardreset3 }% a! r* Y, ?6 Z0 F
游戏重启, 且重新载入ROM; w; A( w S& B
0 U) a! E" s8 K8 y! @
snap xxx.png2 z" C: c$ r3 V7 F3 U
截图为xxx.png# J6 z, |1 O. ]# c$ _
0 b3 U; c* p% p! N* ^4 T% I
/ x4 c4 R% }2 T( b5 n
2 | J6 V4 c) o8 m- F7 b9 N
; B; x! C* T) C v1 t) ]/ }热键:
0 {; Z# ^" g# ]6 U4 q0 s ~ 中断游戏' f4 l6 \* z2 A# P
F5 运行游戏
- s+ z- F1 I4 w$ x$ M. z F12 运行游戏且隐藏调试窗口3 r, Q4 E# Y. R$ U# s
F11 步入, 单步执行, 会进入子程序
6 e+ ]: E- p( `$ w" K- n$ s6 q3 t F10 步过, 单步执行, 不会进入子程序
8 _7 `( ^$ E# Y- }: ~6 R Shift+F11 执行到子程序返回
% D' [% r( c5 C4 h% X Ctrl+M 内存浏览窗口; R& r4 d2 x6 {) V1 t6 p6 z
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU- ~# T$ l2 m9 K4 g. M. r
* p- n6 `" f$ R{:4_94:} ' V+ e* m2 t3 ^& D0 X
* P3 ]0 I1 P: d! w
|
评分
-
1
查看全部评分
-
|