|
+ y7 S J/ i5 i很快速的整理我自己常用的指令" D! j5 M% \: a4 H; C; I' r
8 b1 \7 }4 P8 v0 b6 {
{:4_112:} ) w5 M/ l- R% X; A1 B7 \
l3 H8 d, L( @' |
MAME DEBUG常用指令
! i% ]$ T, M$ E: k
8 I) I9 R( m" j内存搜寻: ci, cn, cl
7 \7 h# b- G5 a6 @9 J
$ j( U$ Q! i. q. D- I. s ci0 [& D* x; p7 A3 ~2 t
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
5 ?( u+ f0 Z+ u$ F
6 _; |. B* \1 U7 B/ w0 X2 C2 s cn
3 a6 h# a. I5 K& X 搜寻指令. a4 s6 B# }+ G( x/ ~3 a
例子:" f" B! m i6 \% [6 u5 Z3 F; G
cn eq,60
f @: c& ]; s J7 x- J 搜寻目标等于60 (十六进制)2 g4 z+ E4 e, S) \( v' N
# M# k+ h6 `- v$ j+ b
cn eq,#964 s8 V, |* i, }2 G/ @1 A- A
搜寻目标等于96 (十进制); f3 G5 S4 v: J s, j: G- J
+ m! |9 c# i- B+ y( F0 S ^# p C5 h+ g
cn eq: J, k( Y2 `) B; u1 T
搜寻目标的数值没有变化+ u5 e3 E8 E2 q1 r2 t( M
; l3 h0 q; u) r2 F" k1 a cn ne* q: m1 R1 U6 {, O# [8 q) E
搜寻目标的数值有变化
8 t6 _0 M4 _; U3 ?5 E ! ?2 s, c: I+ ~- n& Y/ k7 U4 h4 J
cn +
! H" l8 `5 K9 ]( g" U 搜寻目标的数值增加8 D5 ?5 j0 ~* A: f
2 y& \$ E8 S, u- L) T* s
cn -7 K; _0 ^& p% Z9 Y/ l5 D
搜寻目标的数值减少0 w: y0 o3 d" W5 y8 _ _
5 c5 P4 [# Z* V0 }0 R3 ^+ \. y! U cn +,3
2 x& }, Z$ j! z. X8 t 搜寻目标的数值增加3 (十六进制). \0 W+ j4 a! O
, m* a) u$ Y8 i7 ^: S8 Q cl+ C5 ]! `, P; u! q! D
列出所有搜寻结果
" h' y/ a& ^& R1 I1 u8 R" h
7 x" F, e2 w" u2 z7 `" n/ M" |* V, ~ cl xxx.txt
3 @# r. z9 [+ t5 Z- X+ C 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
, E v- \, ]2 m% o8 ?+ I
9 _$ ^. x+ p% |2 c5 u. r5 ` e
: V( w5 O, U% p9 W0 U内存监视点指令: wp, wplist, wpclear
, l* f$ Y% Y+ z: c* h+ l 例子:: E5 }& P% X# ]- |6 C
wp 1234,1,r
; b7 s' f' A7 z2 E0 h# [/ d9 f( \, e3 E 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
* Q! y1 ^* z' F/ e
# U$ X! B3 b% \! h1 \6 ~- j/ }3 j0 T wp 1234,2,w+ E) l; R# m0 v# Y8 V. U: g, J- [
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
6 y- Y8 H* G. _" T& ` # n# Y) j+ g3 |1 D; U7 |. v
wp 1234,6,rw
, t3 n& u# D4 G3 T5 h* C 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6/ {- {" ~+ A# |- ?
% n2 f& E) a! T4 \2 f5 J/ O: L wp 23456,a,w,wpdata == 1
% ?8 f$ J' {1 q; Q4 w" \4 @7 M 在地址1234下写入监视点, 数据长度a, 且写入的数据等于12 y7 d; z0 J! M6 F3 u
, h# z- N5 n4 u4 |) A) }0 E" B/ t* @
wplist
7 [* l* `) W0 ^( b! R R& j: v 列出所有监视点 B! B1 i5 g% D U7 Y V2 J
3 N0 t4 F7 o$ Z, l+ m2 ^* i5 W wpclear 3" O$ B) f& y9 L
删除编号3的监视点
8 q. \$ u2 A; {) G# `( P5 i
7 d7 K5 D; e+ i. N. s3 I wpclear
4 Q: e, B O O8 z 删除所有监视点
% Q- Q$ J' L! Q6 _, B* G, r7 o' }- ?$ H
I3 Q& _- ~$ m1 u( q) ]& x, |5 S7 O0 t% c L" d& V$ G" q0 n
程序断点指令: bp, bplist, bpclear
4 K$ V3 E4 P$ n5 H# i: w3 A/ b 例子:
3 g- ?2 k6 t5 q! o9 L3 N" e bp 1234. J8 c; G4 ~0 e4 @. w+ [. P
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
/ \! b5 V; B/ i/ A# O
0 S7 Y7 t% U: ]) t9 E bp 23456,a0 == 0 && a1 == 0; Y0 u: e- k! r0 O* ~3 { D, r
在地址23456下断, 且中断条件为a0等于0以及a1等于0: _5 N! P8 L7 C" g
' Q7 l3 S1 N, t bplist
5 D8 q2 L" W% [6 V0 a4 V% {1 Z 列出所有断点7 S" R1 K9 h/ |; ?: a( S6 L+ w
( f7 f' e3 E; F. \' \
bpclear 3
1 A5 E7 c1 `& ^ 删除编号3的断点1 i$ ?- U+ o8 G6 P0 \
5 D! Z/ s |* V M L bpclear
5 I" F9 n: O/ r) N 删除所有断点
% z* w' K+ X* ]6 ^+ N4 s0 m+ J* i8 c! I4 t) ^3 H2 I5 h/ p4 c! Q
- J0 {! `' ^5 X% {
$ u+ K, }1 L" d) Z5 M2 x: T跟蹤紀錄指令: trace
* C% Q( e k' O0 p2 V' q 例子:
8 h8 j. B: P ~9 N0 r) F trace 01.txt
5 L, D, u: s' Q9 K: f7 i5 p 跟踪当前CPU运行的所有代码, 输出至文件01.txt4 G3 T7 x% P# m. e
- L7 ?& ?8 X' n& F2 m8 K
trace off4 a& L4 Y- P7 X g$ Y" p, h3 m
停止跟踪, 并且关闭文件8 z" H' r7 w2 C, o) z7 ]# I0 x
. u, e4 q- U* Y
trace 01.txt,01 o. G. o0 [- X% |0 R# Q
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
& W: E7 R. F8 a6 g0 ?0 F9 _1 L( \# i0 K& A; h- _6 G4 v
trace off,0
, _ ^4 ]: h) @ 停止跟踪编号为0的CPU, 并且关闭文件
! p. \6 Y, G' v! _0 u' @. k
7 v( A& I/ L. B trace 01.txt,0,{tracelog "A=%02X ",a}
' m" Y! a; f) m B) D 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
2 F% H2 |, ^7 ~ 并且在每一行的前面, 写上"A=a "( |/ y8 e9 L9 y* u. @3 N# ^
"A=%02X ",a为一个C语言printf函数常用的输出格式, W! m8 j5 V" a0 v
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
. o- R( {2 s$ P% H X表示为大写十六进制数
" _; L: _' L: d
8 u, f3 |' l9 l" h+ j4 ~
# r' J" g3 C% E' b+ c* j7 z, a& O1 T# _% b& v1 d) i t
内存直接写入指令: maincpu a3 C6 \- v, x, V5 {7 \
格式为 maincpu.[][]@地址=数据
6 `& n2 L1 z/ Z. s' o 第一个[]:9 _" P( I# t* D2 N5 j K
o 表示ROM地址
, c4 o' @4 c* w5 l7 V+ N9 I: j p 表示RAM地址# ]2 {- R3 C/ {9 y
% g( U4 q! o0 P j! G& k( u 第二个[]:
' w; P$ Z7 y5 X2 ]/ ~. l8 f. | d 表示4字节
$ ^, L8 v" x `/ B' i- \" q$ u7 G w 表示2字节% x8 `, f7 Q7 O* G8 S
b 表示1字节
! d$ r5 P, V+ q% \7 [
# u: C( M# _9 F3 E# U 例子:
" G* z0 v4 m* b% x maincpu.ob@1234=FF$ f5 w( W! z5 J8 U- H- |7 ]1 k( v3 ?
在ROM地址1234处, 写入FF一个字节7 B! N8 B6 a+ Y# R" D
8 o; W) t' w1 j0 X maincpu.ow@1234=4E71
0 o W* j$ z( x/ C+ p L$ \! w+ e- O 在ROM地址1234处, 写入4E 71两个字节) s2 J, R; d9 X$ h) {8 I: I6 A8 D U
o/ b# ~* r- c6 \" [! f maincpu.od@1234=600A4E71
: W& y8 T1 C5 f4 ?* y 在ROM地址1234处, 写入60 0A 4E 71四个字节" k) E. ?% i! |/ x
O: [0 i; b; O4 l 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
3 X& I# Y: _# u# h+ K( ]6 Q0 A4 h
; ], B7 P- x5 c$ e$ {: k8 _1 j7 q! s( [
其他:
8 p3 ]3 z+ ]" Y8 a* m dasm 输出档案名,地址,长度+ ^7 Y3 B V `' A
输出程序的反汇编代码 X% G9 a, U1 f+ s% Y) ~: I
例子:2 K) Y- V! d% \+ f! e, z
dasm 01.txt,0,100000
! G# |# [1 A/ g8 ^. g- H: C 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
" _& j! S9 [' m) J% ~& k9 K1 c! B e1 O7 l7 V' `( s
softreset
1 \& O. n; l' p2 X. }# j% K0 i! I% T 游戏重启, 但不重新载入ROM( s, O' S! D% \1 B) A. N
0 |0 }* ?1 L9 c+ C hardreset
/ O% q" o" s: @5 H! F$ ]9 E 游戏重启, 且重新载入ROM( e4 |+ f& F, C n5 d
9 i* D% y9 b: C& ?
snap xxx.png
& C1 e1 |" o; l7 Z8 m9 F0 g 截图为xxx.png$ B8 @' _! j3 t) {1 J& O2 N
. E, Q5 l% E4 o7 m' P4 B% G$ ^
$ v9 T% r8 J8 A" i* ]
+ C2 S9 P2 j G! j K* g0 ]0 q # D* ?6 j& f2 |$ t m
热键:8 H# G: i2 O, E7 x' `0 P( F
~ 中断游戏* {6 s+ m+ |. \1 t2 s5 V
F5 运行游戏6 n+ {8 u& Z( Z* Y% M
F12 运行游戏且隐藏调试窗口8 w8 l" J8 g& I4 T
F11 步入, 单步执行, 会进入子程序
$ [! k4 u" {8 p$ B F10 步过, 单步执行, 不会进入子程序4 l |( a6 h7 D" d
Shift+F11 执行到子程序返回
: I9 @/ A( W: t$ W1 k Ctrl+M 内存浏览窗口* [) A. F, P/ L, q9 j' c( }* q
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
+ A+ z1 L, D$ e# ^
: |4 w3 X0 v; c- v T, [{:4_94:}
% ~. P$ j: d) }( h6 l0 z _5 @7 \ j8 M/ `' x- u# V
|
评分
-
1
查看全部评分
-
|