|
|
3 I0 `+ s- e+ p9 s$ a2 ?
很快速的整理我自己常用的指令- R9 M1 V) H4 D0 Y Q5 C3 K/ y
9 F! t' @+ Y2 S0 n
{:4_112:}
1 O6 N. |& N) G. o. R! T. K. {% h% U4 f( ?+ ]+ r
MAME DEBUG常用指令
* a( ?' o) t7 t; r' G2 J4 o: ^/ `+ u* m; p; @% E9 i5 v7 C
内存搜寻: ci, cn, cl
1 w, `: q% Z3 e. ?
& \8 h8 r) t2 t ci
1 g/ j) M4 ^3 d$ u) i) S 搜寻任务初始化, 每次搜寻一开始一定要输入这指令$ G( c8 R* Z/ C/ t: S; L* Q; w
$ B1 q- X$ N [# n" X u2 e& h5 y
cn
L8 Y( n" B3 N3 `6 T 搜寻指令
6 I( f( e% E( b3 y9 f 例子:3 F3 n6 \6 Z5 t6 ~
cn eq,609 H* l% u# H& O+ f
搜寻目标等于60 (十六进制)8 _, p# y4 h+ }9 U
! o* A4 a0 H- r. V; _, i cn eq,#96# B6 S y" H! J8 O' o
搜寻目标等于96 (十进制)
9 L) u4 a9 R* Y% ?2 S) g2 A- W
5 i. X; D. h U. q& @6 ^* ]6 ]: t0 }* T cn eq
6 j. i6 l9 p9 f0 b; ?. l6 Z& k1 s4 m 搜寻目标的数值没有变化
/ u2 E, ^2 Q3 j& ~9 }* z8 n! k! f" r5 f% R
cn ne8 K9 E9 R* Q a$ g- P% `
搜寻目标的数值有变化
1 p7 {+ J* [. w1 e, ~, k& m
, ^7 L3 F- M* z y3 H cn +
& O [5 F0 v0 M 搜寻目标的数值增加# ?& e7 j1 c& |
0 {/ _' p. x6 K6 R7 K7 ^/ k
cn -
" z, T0 {8 j! u' D- } 搜寻目标的数值减少. G6 L8 p. `. L; D& c' h
6 f* I- k8 b/ o$ I. c* _9 d! Z+ S cn +,3' c+ h7 P- p) T2 o# N$ u1 \7 E
搜寻目标的数值增加3 (十六进制)/ c2 E. }) b' L1 v
/ t. E3 s+ A' d$ R) E5 @ cl% r6 B; l0 X: |& _0 u/ U9 q. S3 W
列出所有搜寻结果
. z7 S: q4 Z; V4 Y
1 M* w7 M$ Z$ F8 m9 U cl xxx.txt
" {: ]7 P' X' M6 t% \ 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
/ ` X; l( v3 r' y8 ~
% E, j% z% M7 J, [% k" q: g% u
( B# F. I8 I' ?内存监视点指令: wp, wplist, wpclear. F j/ }5 v3 A8 F3 F- e
例子:
( l0 u9 w7 O! M p" ~7 A5 M6 G wp 1234,1,r1 z' e$ I$ Q7 u; u" f
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
! M% n, [% k( ?! c$ E
; c6 F' R: q) v wp 1234,2,w. p }# P3 q. G0 R
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
5 d: N& Q0 m$ ~ ! P2 f# [( r5 U! G7 @5 s- Y
wp 1234,6,rw
( M' B- _6 Y& i, G 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
1 _0 L! c" p2 J0 }1 P2 r# L& A' L9 W+ @4 H) }& u
wp 23456,a,w,wpdata == 1# S* { b2 I) |$ w- {8 J0 l
在地址1234下写入监视点, 数据长度a, 且写入的数据等于15 F. t7 c& K$ E1 U. r' A
, G- n `2 q& e5 r wplist
' s% y6 ^8 M+ G4 f' ~, w 列出所有监视点
! D7 W# r, }. i
% [0 @+ e# y( b- _ wpclear 3
5 K2 H2 i6 Q3 o2 ?0 K j& V 删除编号3的监视点
9 \$ S$ ~5 }7 Q! p4 w2 c7 a* w- J( g2 O( @+ k( `
wpclear& H8 A7 j# f$ \
删除所有监视点" ?- j, s; E; R/ }
# t2 s+ p% a2 i W4 n8 I, R# O# g3 ?! x * @2 R5 g6 a7 F$ {; d1 b( f; V/ A
7 b: Z) }4 a% `: ~6 H程序断点指令: bp, bplist, bpclear5 B" M* y5 {* h7 A( J; Q
例子:5 O' M7 h9 \' S6 v4 f. d0 Q
bp 1234
* c; w5 h' T* y! g" h5 ^ 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断/ {2 B8 c6 w4 H4 l
& ^# D' g% S7 M7 X9 h bp 23456,a0 == 0 && a1 == 0
! Z4 }9 M% I! V W2 m 在地址23456下断, 且中断条件为a0等于0以及a1等于0
' H* l% H5 i% F: C" u( w. h1 G1 ^ [- ~/ v$ G0 ^3 X7 q
bplist `3 [. {/ P: b* _; b2 V
列出所有断点
5 ~4 f1 }( O* X8 n& Z5 d& ^4 ]7 I4 g" S1 s
bpclear 3
~6 M: V% z8 | 删除编号3的断点
2 G6 W* {' H2 l5 b! v v, P) d# `
bpclear7 l. B6 o }8 C! ?% Y5 u2 \
删除所有断点
" e( y0 _1 Q: l, e- y# n2 o! P
# b2 v3 }/ Z# {6 T* ~1 y& X
0 a9 x, r( N+ `$ L4 V 1 M6 ^, X7 V4 g) K2 Z( b+ T
跟蹤紀錄指令: trace
% @* a9 }# E( A5 v! h 例子:8 \( g( q) [1 ~2 K' Q7 [
trace 01.txt
0 s ^9 M+ O; L 跟踪当前CPU运行的所有代码, 输出至文件01.txt
5 ^8 x) c, Y7 A7 Z- P) H& \' p
5 D9 s: M3 P: r9 l5 O trace off
, J$ H" D8 x" n) m3 j 停止跟踪, 并且关闭文件
! w0 W- h9 N6 D& V
9 X g; u# |3 _/ m0 R/ Z0 i trace 01.txt,01 v6 s2 e* Q% P: ^5 A& J# I
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
$ v# V$ e. U" l4 ^9 q' C" P$ k" f% ]( R6 ~ P! h4 r
trace off,0- `: Q, ~! ]+ P; U* `/ E/ q; f
停止跟踪编号为0的CPU, 并且关闭文件
Z4 ?- d- |# {8 A. n- v6 U/ }! {; U: m3 r+ I- v
trace 01.txt,0,{tracelog "A=%02X ",a}
/ \( o ~2 ?' J+ A7 y 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
* w Y9 \) ^2 M1 R+ s4 F4 z! [, z" g# w 并且在每一行的前面, 写上"A=a "# ^8 U: K& q) C# G$ V b
"A=%02X ",a为一个C语言printf函数常用的输出格式
- V7 t' G4 s9 s) ^$ Q 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入( B+ l$ a3 a5 J6 O2 k; Z3 S, @0 g6 y4 c6 o
X表示为大写十六进制数7 f6 I7 W$ H1 T2 ]9 J
! c* X0 s0 A# Y6 P- X4 L% l, m& T
5 G4 x. u6 }, y
C. h, X7 B4 h( l/ I内存直接写入指令: maincpu3 e, X3 u8 E) Q3 c. ^6 _: o$ w
格式为 maincpu.[][]@地址=数据. F% ]( ?, t* F) {! W# ^
第一个[]:
7 J% e* |; s0 |( } o 表示ROM地址
0 a, L& G; W+ Q: c* M" g; ^/ ^' _ p 表示RAM地址5 i D2 p2 t# O+ O
. c2 I( Q7 O7 }" Z$ D$ { f+ X
第二个[]:
0 ` ?# {: Z6 P. \3 J9 B d 表示4字节
2 T% `! D# X" C7 Y w 表示2字节, e% R: _4 I2 Y1 p
b 表示1字节
. d" R H6 @" i- Y' L" B9 m4 c0 n9 G
例子:1 K% S3 g$ F4 y
maincpu.ob@1234=FF
5 Q- H+ k4 y" \; u: D' a$ Q 在ROM地址1234处, 写入FF一个字节3 L8 s+ ?* g: I( h0 t2 g% l
* s5 S8 Z9 _$ W9 }6 o maincpu.ow@1234=4E71
4 ~; j5 z; Z" J5 D8 B! `0 I+ C 在ROM地址1234处, 写入4E 71两个字节* D; F& o" s% M4 y. G4 U8 M8 q+ a
3 j( Q& R6 j! |7 w. P, R4 \! q maincpu.od@1234=600A4E71
4 A0 @& p3 H" J2 e$ w 在ROM地址1234处, 写入60 0A 4E 71四个字节
" `( L. [' d+ s: U: |: X( p) F; E5 }% e, s: f# D
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写9 Z$ r( N- S* R+ i' l
. ?. t7 v5 j$ b6 `
X, K. M4 O: u- {2 j; F其他:
* C0 k- M2 A& M7 c3 y6 |# P dasm 输出档案名,地址,长度1 m* a. k5 Q3 w* f5 g$ q; C
输出程序的反汇编代码
5 w; _$ G8 Z" _( g$ L0 N" G 例子:! n% Q7 R9 }0 b/ A
dasm 01.txt,0,100000
2 h8 @& r' ? [2 B' \9 ~! H 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt4 i& q c$ J/ O9 N/ V# p: k1 B
" W1 ^1 B5 y$ l) {
softreset$ M% A2 T9 B, o7 ^( n' D! }
游戏重启, 但不重新载入ROM# w1 }$ ]% L) ]6 {# Z" U' E
6 A1 L" N8 ?# Z- \2 ~ hardreset5 n1 |- b K" R6 m
游戏重启, 且重新载入ROM
( v1 E: Z) a8 ]+ H" r" x @% s# D
+ K- l% q; g7 L5 T6 o3 K( C snap xxx.png7 E$ H9 L% B) \4 w1 y+ M
截图为xxx.png$ h% O0 }* z* ^4 ^% V- D7 Y8 ~! A
% t4 E( ~; s& |0 c7 X6 ^
, V9 ]1 S3 G2 B$ |, j4 ?) E
, V: k5 P% w5 Q" U7 g3 |8 }( W) [ . c* p9 S9 J9 G: O l) |( ]' }
热键:
: l2 X! a: i6 j# o ~ 中断游戏
2 M& [) n" p( ~, K# {( t& v F5 运行游戏
1 i& k; e' o* }& j! I/ L% I F12 运行游戏且隐藏调试窗口
6 j0 I- ~2 e+ J: x3 A: m F11 步入, 单步执行, 会进入子程序
, a0 X9 Z9 w& V, ^: b F10 步过, 单步执行, 不会进入子程序
% K8 w$ f1 L$ a4 b [8 v Shift+F11 执行到子程序返回
- q0 D0 A# @1 O3 }+ u5 D) a9 ~ Ctrl+M 内存浏览窗口
+ F' c1 Y4 z) e# l: y4 r F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
( A6 \# @% c) [! Y O4 x) W j5 M; K3 X8 }
{:4_94:} ( K, x2 E2 v! @/ S
, Y/ Z8 G+ w5 Y# R! v1 X8 t
|
评分
-
1
查看全部评分
-
|