|
|
: r/ {# M0 V5 ]. z4 q很快速的整理我自己常用的指令
8 r1 q/ K. k9 K! S# A. | R7 Y% d) o: [4 a
{:4_112:} ; L5 E! H% w0 e8 J
5 A& `/ _" X" M, F- ?; F
MAME DEBUG常用指令. [7 Q5 M" t: C- v Q" D- z( |1 g
* S5 Y$ n7 B7 G5 p. `/ n+ L$ P9 E内存搜寻: ci, cn, cl
/ c% H9 E; `4 Q* l# ~9 l9 g. P" L! E$ M$ [
ci6 @' W) U" P% R$ l
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
2 L, U- {+ m4 T6 X& n+ f
6 Q9 y6 m. [' x8 ` cn
6 X: ~! v6 l+ m! `* I 搜寻指令
) f9 p& I2 f5 e; M0 v3 g/ t, o 例子:
- I( Z/ `5 D/ |' {% t/ ? cn eq,60
1 r* L, P8 L3 L 搜寻目标等于60 (十六进制)' ^( N; @: E: D) H& G
+ b9 ~& o1 e9 D
cn eq,#96
h3 a+ V0 s" ?. S/ |4 j% [2 M: M 搜寻目标等于96 (十进制)
" _1 ~: j# f1 o7 p
+ m6 y5 N3 P6 r. ?2 e cn eq" a% N: {$ ^$ F7 t3 u( @
搜寻目标的数值没有变化- I+ Y% d% K5 w' I
, }/ }5 l& }. B cn ne9 l% x$ q% ^8 n) B7 ]8 h6 O. U
搜寻目标的数值有变化
, q: P3 l3 D( {, a6 ? ! b( L, g9 ?8 J" a4 L7 c
cn +
1 s% R& D* o# _ 搜寻目标的数值增加: l, x: l7 `: ]( o$ ^
/ _0 g k; G& R$ {
cn -, |( I% D# N( S" g3 A
搜寻目标的数值减少
6 b% J: f$ S6 x/ ], |
" f% z3 k% J0 s7 g cn +,36 Y, p4 \5 s8 w7 C9 A, Z
搜寻目标的数值增加3 (十六进制)8 z! [, ~8 R8 t
% s3 Z0 v# N& j2 q8 V, Y
cl; D' r2 x! t' J% W2 ?# g( d
列出所有搜寻结果
0 K/ Q* K- g) M3 K, [; U4 ]* x2 I: u, L
cl xxx.txt: ^; a P( G: N8 F! @2 g1 s- F0 s7 ^
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式2 z6 L: u% g g# ^+ F- ~" |+ o# N
; o9 P* d1 K V1 M1 t7 S# n
% @% K% l! u$ f8 `7 Y内存监视点指令: wp, wplist, wpclear
0 x4 t3 }6 w" v5 a/ i P 例子:3 }. r8 S% e- M$ y
wp 1234,1,r- u; |$ i+ J! j
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1; |* ?5 t+ p6 y4 s5 }+ k2 l9 ?
& [) Q# s) B p wp 1234,2,w" x. e: u) Y6 U: g
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2( |# N( Z$ k8 t
$ |0 V2 {* E, p5 J$ b9 k/ _( p
wp 1234,6,rw
5 u) J/ S: ?+ _6 R/ s4 P" p 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
; B6 j+ D( D8 G7 Q, D5 a+ m
C" Z5 G$ k6 r2 Y wp 23456,a,w,wpdata == 1, G/ Q( M3 W9 o! c# G2 S F- }
在地址1234下写入监视点, 数据长度a, 且写入的数据等于11 `! u; Y9 ?3 ?- n2 |; W5 W3 a
" J( R. W5 m; m; M
wplist
2 Z" R, g- x3 _# C+ _. M) C 列出所有监视点
' y) r$ e: Y. B$ _
/ W8 [- d) p' b0 x wpclear 37 ?: S% M3 O4 J! j2 x" D
删除编号3的监视点" D* ?( f$ O6 z
9 Q, v& w8 e/ u# E" P! o2 M wpclear
, z$ L% w" V# C1 B% W6 i5 q8 \0 x 删除所有监视点
) Z0 S7 `1 B5 D
4 ^( ]% q$ y5 J8 e$ o& `( D2 u * a0 ^& l2 i. ^0 I! q% g2 F
4 P/ X( ]) N, y, P) P1 i程序断点指令: bp, bplist, bpclear8 k, C/ R4 F/ l2 M- b. Z( p
例子:
7 G9 i8 K. m: [% G: N/ q. x& Q bp 1234. N0 w8 N& G* L T2 [& V- g
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
! {+ T! U% Z0 A1 S, |
( Y+ l& ^7 D/ U! j2 J bp 23456,a0 == 0 && a1 == 0
" J2 z4 K3 z# w) q6 f* } 在地址23456下断, 且中断条件为a0等于0以及a1等于0
" S0 @1 u7 k+ ~! v4 s1 Y
. m$ S+ X, [4 J& e& c2 c bplist
1 i H7 a. n4 N/ d 列出所有断点! M h. l5 Z: m$ m
" ]+ v2 q2 X5 o8 @9 ^0 o4 @
bpclear 3, S) J2 [+ _! g0 ^) @* M
删除编号3的断点: O f' X' z6 c$ X9 c
$ V! ?9 ~% \& S* m bpclear
" L& R9 Q& f; z" z 删除所有断点
6 ^. l o0 k+ n; m2 ` D9 \& c! J' |
9 g) q6 {" u7 r& J& m- j5 H% \$ d
) S9 A$ O$ z8 d! ~$ w1 |9 x跟蹤紀錄指令: trace
( N) Z* y2 S. t3 b+ L8 Y 例子:) g5 {0 a# c2 W r% G
trace 01.txt
) u, A( p9 {7 j, h. R! b# k9 M2 K: m5 w 跟踪当前CPU运行的所有代码, 输出至文件01.txt' D4 c) P+ V4 w8 X- e9 l
% j: m# w0 ]# _: i! L* X
trace off
6 g5 Z1 b. n- _8 y, D 停止跟踪, 并且关闭文件
: \3 M, w0 C( o# I$ ?0 V @9 X# y0 R2 L7 J, y; w" m* I, T
trace 01.txt,0
9 ~7 Y9 E3 {4 R c 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
6 S0 ?- E& m) I0 B5 ~9 Z W% j# F1 M, h1 j
trace off,00 Y' ~' ` Y5 }& \% A2 A$ k: @
停止跟踪编号为0的CPU, 并且关闭文件& A" a3 y: @ R: F: g, \+ q1 g
& e4 Z, J/ L0 S$ [" g. \5 F) O7 G- s trace 01.txt,0,{tracelog "A=%02X ",a}
! H. e: ~% C0 E/ N 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
" ?0 H, W' B, y- a7 ~ 并且在每一行的前面, 写上"A=a "
6 a" _; M( T8 E- g2 _3 j! ^5 | "A=%02X ",a为一个C语言printf函数常用的输出格式
$ s8 `3 b' ?6 V" X 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入( t1 a3 u; Q0 J" x9 B
X表示为大写十六进制数
) i; u1 j+ |. X" L Q5 {9 B$ Z6 m' z# b, H; d0 W$ k' r
2 |- z4 Y6 e8 F% `
]" a: s) V" w4 j" }
内存直接写入指令: maincpu* [1 L2 k s' x1 L* k
格式为 maincpu.[][]@地址=数据( y8 @1 K( Y9 U+ _* [8 Y$ v
第一个[]:* F, c8 _& w8 j" H s1 O/ q
o 表示ROM地址) k9 z8 c. q. g. Q# V
p 表示RAM地址9 s. L) `! G; U. p/ i' P4 _
3 d* d$ F4 Z% X, O4 k
第二个[]:4 M* w! X% ]8 k9 R
d 表示4字节
1 A; D. d, o# v @( d' o w 表示2字节
& l3 p. [! ~7 q; g1 J' R b 表示1字节" x; z. U `) k1 J6 d% C3 W
8 L( G3 i- l) @ t. N 例子:
5 i9 y9 @, B. m, T- x- { maincpu.ob@1234=FF
' u- Z L- M$ z9 h! F W 在ROM地址1234处, 写入FF一个字节5 T; T7 L" K8 }& a
1 `( I/ R7 ~% W m5 M
maincpu.ow@1234=4E71
% b! l8 o- Q2 D3 R& ? 在ROM地址1234处, 写入4E 71两个字节# f. P" D4 n- q3 B3 Y* f
' Q6 `. q% m3 m" y
maincpu.od@1234=600A4E71
! C+ S; w+ j: f9 c9 p6 I 在ROM地址1234处, 写入60 0A 4E 71四个字节2 D0 S2 b1 V* m A
, C, x$ f8 B& [) _0 l 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写7 ?4 Q# ?% U; c4 J
+ q0 V; |( F! R& p+ w5 U
$ r& ^ g. i% l: W% u其他:
- ?& X g1 U, h4 l, \/ [1 F# W dasm 输出档案名,地址,长度
' x$ L. K6 N) }) x' o( o/ v4 z 输出程序的反汇编代码 n, s( w# Y3 N, x( V; y& p5 [
例子:
5 @1 V7 ]5 [( @/ b9 m dasm 01.txt,0,1000007 J! o$ N8 x) F9 N
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
9 q% o/ Z, Y' T( U) l7 b4 F: @* E- p+ E3 A
softreset
: ?0 g: [5 Q. {. D1 H1 @% U 游戏重启, 但不重新载入ROM
1 @3 t& W" ~1 q2 C4 \) i5 |+ w. O; r' e' Y6 t. i# o
hardreset# d+ A/ m* P7 |! W8 O% [% I, c
游戏重启, 且重新载入ROM5 y e$ a, V/ B& T( Z$ u9 j
& I7 e; ~, b0 n
snap xxx.png
2 e% n% |# @7 A. ~! q 截图为xxx.png
2 I5 U& W: w, H# N6 _
; a- S* F6 T1 G9 N6 f E ; C+ O* R0 w* [6 z7 W( @# t
5 [" N# f2 \2 _& o6 n9 U3 F" d6 u
+ m8 Y) S" E2 \
热键:
. I( A0 Q4 N; { ~ 中断游戏
" ` ^* N' y1 k) }% M8 M F5 运行游戏
) N, v1 d. I( q$ k) ` F12 运行游戏且隐藏调试窗口1 f% K+ B1 L, u: ^$ G" [2 f
F11 步入, 单步执行, 会进入子程序8 @& h( L5 ^0 G8 ]4 O4 e
F10 步过, 单步执行, 不会进入子程序
8 d: N6 @6 ]5 b4 a Shift+F11 执行到子程序返回
# `4 f' z/ y$ M2 k$ b4 Y Ctrl+M 内存浏览窗口4 j _: T5 ^% ?) j
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
2 [! i6 y1 q6 `6 }- i9 H; a" _. N. k0 ~# X& W
{:4_94:} . L9 C" P. O* L$ P& ^0 y: @8 g& d% ^& |$ C
3 z$ m8 [( C7 [0 F) Y4 S, L8 _# U
|
评分
-
1
查看全部评分
-
|