|
3 {- k5 `6 S' V
很快速的整理我自己常用的指令, e+ z4 J( W' m3 ~9 g
3 z$ @2 E' [/ ]. S" [{:4_112:}
! C ] e' l) s! I9 g& T b1 i. i7 t# j% w
MAME DEBUG常用指令
( Z0 L8 e+ m# K9 |: r6 J5 p7 o% I! Y
内存搜寻: ci, cn, cl
% r1 u( A9 ], b9 o. x( B! c+ W
" \: j5 `- J# ]0 m5 J ci0 q+ D# |) V# A K+ c/ h/ X
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
( K4 S% n9 Q! d" [5 W9 a% b
- _; P2 m6 J1 W, Z0 F cn
& l1 _8 o7 |8 w 搜寻指令
# F6 Z1 y7 G! `6 ^5 h 例子:9 G3 H5 L* ?& B' `* H& H. s: Q
cn eq,60
" ~$ [ o e2 i3 {9 w) {. Z D 搜寻目标等于60 (十六进制)
- _1 q; |: Y$ T( r1 [
0 D+ z1 d" u0 R( r9 Z; E' X" R cn eq,#96; B% |' L7 ?! o6 g B/ Q1 z
搜寻目标等于96 (十进制)1 g c# @' t w4 r9 e
: M+ @" K# e X7 f cn eq$ b8 ]6 p! f2 q
搜寻目标的数值没有变化
: c$ r! @! U7 \6 l0 Q2 |; W7 M
cn ne
# T& X1 Y6 x9 N8 S5 b3 f n 搜寻目标的数值有变化
. b m% {5 z8 [5 \' { 0 Q6 U& a* Q% ]) e
cn +
. ?$ q$ K- H) ~- B( D 搜寻目标的数值增加
) v/ J4 \- p& y
5 H4 a7 `. _! ?! C9 ^' n: V( ~# I cn -0 C/ J* M$ C7 R1 K4 a
搜寻目标的数值减少
8 Z5 n+ l( p$ T1 a3 Z: [ 1 V' S8 s8 P1 r4 r0 O5 E% ?
cn +,3. \7 z P8 E% O
搜寻目标的数值增加3 (十六进制)" q) j2 _0 K# H4 s, L1 q' |$ G( X
1 y" Z* D% x+ P7 K& N
cl( r9 Z6 Y7 Z, q) R" l& T1 o
列出所有搜寻结果
5 p+ c& H5 I) v. m: l2 } J! g& a4 y0 |/ N. i
cl xxx.txt* T8 z( z% A# M) C2 U
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
, |. J7 C) e& f+ O5 f+ Y+ D# F# p+ z) |. j1 ?
% d, v- L3 m& m内存监视点指令: wp, wplist, wpclear$ N- @' N R0 ]$ p. S4 n
例子:
v. D5 N# m; f0 c8 y wp 1234,1,r6 I. Z2 b! ^$ G9 q; b
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1* c5 P6 B$ u, D: @- J# _, a
1 @. v1 c8 E4 u, k. ?/ K' g wp 1234,2,w
% Z. h9 R4 M5 S7 h. B 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2$ Y3 M6 Z F. j+ X. W$ x2 B
# j- M8 H4 t$ M7 p. u1 _ wp 1234,6,rw( t Q% Z0 z: w6 X6 Q: X$ ~7 A
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
/ I# l# w9 D4 z# y
+ D1 |3 n! I8 L9 u# K- V wp 23456,a,w,wpdata == 1. Y% ]; Q7 K% c, G
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1( I: D0 U0 y* k: S3 w
3 l) Z0 c* j6 X% U, ?
wplist
; i) j7 D8 n9 g: I0 Q$ @& y 列出所有监视点+ x1 D" G; W9 @4 p, p
" d: \# _/ u' e" c% m1 o# r wpclear 3
4 N6 J3 z |" ^% H2 U8 e! F' _' P/ j 删除编号3的监视点$ ]: E: t0 l9 ]/ a" p
) Z; U" K- A' Q; @) ?0 s
wpclear5 p7 u" r& b; o7 ~9 \
删除所有监视点$ R& r w# y }
8 _; B0 M* K; q, @/ O7 u/ z + a5 {7 F, S5 `
$ k% O0 X- u2 |$ \0 y程序断点指令: bp, bplist, bpclear
% ^7 d. @. ?$ g, q( `0 _- q, A. t 例子:1 q3 p! s" o3 l
bp 1234 e: x" Z* G. Q* K, U
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
2 Z; V7 w8 l* G; ~ f) t1 G* U! o: @6 \' w1 L
bp 23456,a0 == 0 && a1 == 0
5 P: V) i0 \* T4 h; } 在地址23456下断, 且中断条件为a0等于0以及a1等于0* e. c( K" z0 {- Q' T
+ L8 ~9 A6 L3 v0 V: U bplist [2 N" |+ ?, Y7 I4 |" v
列出所有断点
9 {2 _2 C L* I3 e. A
" S$ P/ r- H5 h bpclear 34 |' ^ J/ s& c$ l- {& K
删除编号3的断点; a( r3 y! z/ _% s- j+ I. D
1 x/ {% Q- ^) J2 q4 Y
bpclear
8 S# [* L3 ?$ J1 r9 O 删除所有断点8 J4 H4 J9 J# J2 q! V" y1 G0 |2 Y7 ^
* b, L, h/ x+ }8 K
% \$ l. `6 B( B" \9 O
& B$ R+ H) {8 M& r跟蹤紀錄指令: trace
1 D7 n5 `7 v8 I, \ 例子:
6 a8 \% E0 B+ _5 O trace 01.txt6 R6 I4 U, E0 g' X" f$ C9 E8 t
跟踪当前CPU运行的所有代码, 输出至文件01.txt
! ?# t: e8 |. R) b! N
7 W: Y' L, n' k8 j# b) K3 ? trace off2 g' S) C8 Y& Y" k
停止跟踪, 并且关闭文件
/ X7 d7 \2 _* i& Z% v, _8 m- h1 V H5 k/ E6 \% n
trace 01.txt,0
! m: i2 Z: m5 T/ v( g4 Y9 Q# H3 V! `, M 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt1 Y( S% E1 P8 {9 U4 {
7 |! B# r/ w4 k" Q! v
trace off,06 m, q& ]; q( F* u2 w
停止跟踪编号为0的CPU, 并且关闭文件
. \ h& I8 r4 P; M1 Z6 B' b: g5 N7 g9 g% H/ J; r3 J
trace 01.txt,0,{tracelog "A=%02X ",a}
x& t0 J$ r- ?$ \ 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ( k8 M. t2 n9 ?, A
并且在每一行的前面, 写上"A=a "" J% r- O+ e: ` _" v' S6 j/ ^
"A=%02X ",a为一个C语言printf函数常用的输出格式
6 z8 ?5 y; h! O* g2 l P 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
4 Q# [8 `3 Q7 l S- K$ C8 C X表示为大写十六进制数, P# p; f6 }0 i: j& I; J$ D/ b
# w% _& }" o. }
0 d& I! j+ m/ O( j" Q! Q6 i; v" r2 J, Z' P
内存直接写入指令: maincpu/ G& A1 w' v2 v: r+ V1 N5 D9 K
格式为 maincpu.[][]@地址=数据
9 ?. Q6 V4 I' `5 {1 ^+ ? 第一个[]:
# x! i. {# _) b8 J0 v6 |- Y ^- ? o 表示ROM地址
# h: E7 r5 r; \ p 表示RAM地址$ q# n2 l0 q' y. M) a+ J2 [0 z( W
' X5 Y$ V# G4 O' K2 i; l9 k
第二个[]:- W5 O w( P5 p" p! c0 ?0 f
d 表示4字节6 U0 E9 Z$ @% q7 O# \
w 表示2字节
, Z0 i: I* y! D m' j& a& m: N. p b 表示1字节7 `% J. u; {* b/ @+ j
, q. }( @4 I* {7 L) l8 H' R6 R/ o
例子:
' L+ L! D0 }, g2 w maincpu.ob@1234=FF/ S5 c- u% f4 J4 E" |$ S* q4 n. }
在ROM地址1234处, 写入FF一个字节
4 z5 c% k- m. l3 F& Q$ L+ O
8 P" Q# R: M$ ^- i+ o# H- f maincpu.ow@1234=4E716 z( Z6 S! E0 S6 P
在ROM地址1234处, 写入4E 71两个字节+ d; Z! ` b* g( Z( A
9 R! [% X7 D" K/ z( |% I maincpu.od@1234=600A4E71
. b! L/ W: L( r [7 J* E* e 在ROM地址1234处, 写入60 0A 4E 71四个字节) ~- ]7 R& ~5 l% Z
) o+ T# k' A# g% C8 p
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写7 y& {" r, i5 e6 \2 p, q
$ T4 J9 X# y O' r
6 d1 C0 l) E& h: m! _3 }: A
其他:" x- n; \: s5 V4 L" x$ b0 x
dasm 输出档案名,地址,长度! ]+ d; F9 P$ N4 k. A0 O& P: l
输出程序的反汇编代码
[- o% e" d: S7 r; Y+ I6 B# t* t8 \ 例子:* O' F9 S/ t) `) r# Z; \7 }( j
dasm 01.txt,0,100000: E+ ^, j. ~5 @" O6 s" v
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
: p0 i; K( t+ |! a: j7 F6 e$ m& s" u
softreset
& ?% A* p3 r0 }6 P" n0 s7 S- j4 A 游戏重启, 但不重新载入ROM. u! i, D4 A |# G; l& m' Q
8 ?# B! }* \5 s2 Z" W6 B hardreset
) g( A/ c1 p8 P! m/ ? P* g$ D/ A) w' f 游戏重启, 且重新载入ROM+ K+ e# c& G# S% W: b% g9 Q6 M
# I; j B/ ~7 m" [9 G7 k
snap xxx.png
) H o8 ^3 K: M+ y: w- V 截图为xxx.png8 n& @9 u( Z% \0 }' s
" V& Q+ D w3 q S
# v! v' F d8 w. c& G7 M' ^2 V( @
- @# y4 U4 Q% J; O9 [" S) A' E( I
- n7 m3 [5 h+ U! T2 ]- Z3 Q( ^热键:- z' k. i5 M9 [, l# x! `( k$ l
~ 中断游戏
' r5 n7 w5 |1 r: t' H I# Q; F F5 运行游戏
* z0 [% B: b+ | q$ \ F12 运行游戏且隐藏调试窗口
: O7 [$ R1 x1 T G" U( X J6 u5 F5 w F11 步入, 单步执行, 会进入子程序
# f& m' ?8 I( U/ ?% I3 ]/ V F10 步过, 单步执行, 不会进入子程序
9 m1 o1 g$ u2 ?9 K2 V Shift+F11 执行到子程序返回
! E3 I6 r5 p: j' ~" J Ctrl+M 内存浏览窗口/ f( r* b) \$ @7 O- o+ y/ @
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU1 O) {; p3 D5 o# |4 A, N& _
' l8 |$ M$ ^& y J4 L0 u- b- d{:4_94:} 8 K$ {, k& s, b, U# d! y9 @
X) `# k. I6 X
|
评分
-
1
查看全部评分
-
|