|
|
~) w' b R1 q( m9 B
很快速的整理我自己常用的指令/ B% R: _7 ]; h/ V5 Y- W
8 K( N7 g" \0 O/ ?9 W{:4_112:}
4 ~! y/ J9 e% u( c+ t6 `; w
5 s' i' m9 V) s/ q9 {5 wMAME DEBUG常用指令6 d1 B) ]% |& O: I+ T8 \; T) U3 W
( ]- G; q! |2 _1 s' l
内存搜寻: ci, cn, cl* T7 j6 t9 E' S. e! x
( N4 b4 d5 n2 M: U ci) [* Y# a9 K- d. ^
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
& }4 C& K. F) c+ [# _) i3 E+ e
) K! c4 {* S' @3 S* \ cn, _% a' ]0 O2 U+ Z3 w9 c/ ]
搜寻指令
2 j0 V+ X0 W: _0 e k- L 例子:3 F4 z8 r- [- z- }, x' E
cn eq,60
7 t6 R% T7 C* e4 l 搜寻目标等于60 (十六进制)( Q3 _5 O9 J7 ]
" @2 [4 ]1 \- N. `1 u. [* j
cn eq,#96
. y9 J6 G/ h8 m 搜寻目标等于96 (十进制)
, p0 q# W' |" a2 `( I/ ]- b" J8 K; z8 p" O& L7 _7 P2 H
cn eq
6 M. ~5 Z8 C" T 搜寻目标的数值没有变化4 Z& R( q5 v4 }% T B
9 g: a y$ J) D# t) x- J
cn ne% s3 v1 Y* g! ?+ a( s5 A/ z r
搜寻目标的数值有变化
/ J( c* i$ i5 p9 v 0 m0 G* W* ~" ?2 S& r
cn +3 d9 Q8 W1 e3 p* p
搜寻目标的数值增加
+ ^9 ~$ E; v' d4 x8 b0 z
1 L2 o s+ C( a4 M' U cn -& v; S' G" Y- w# ^. L2 }
搜寻目标的数值减少) P7 t7 E6 S0 S/ Z& D1 b
, z0 C, b! U. P6 l7 e- {9 C cn +,3
3 g0 Q ^- G9 X 搜寻目标的数值增加3 (十六进制)7 j7 W2 q, h5 D/ o6 n
) {' x: q2 w7 ~) ` cl
\* N0 f' ?# o 列出所有搜寻结果
# M' w. q; |: n% x5 g1 I' K N' A3 W) ~& O5 d6 {
cl xxx.txt5 k% ]: W( m q% U
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
5 B$ p8 F7 V& p' [# P- b! @$ r$ s5 d! U
0 w1 [" m; r. r
内存监视点指令: wp, wplist, wpclear
3 `. i' _8 D" t1 P0 Z, F 例子:
) Z3 R0 _3 k2 g wp 1234,1,r
! X% S1 r' b# {8 [. t' E( ?) m 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
s! r( ]! Q) B. ^
$ \- ^2 M* i; j- Z" S' I wp 1234,2,w
* L8 P$ y( @. I% `" m: z) d 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度27 o$ N, i* P$ x9 r+ V
5 P- I0 x L- V c wp 1234,6,rw
5 q6 C: D! P# Z! d 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
" t- `5 ?% L& ~! d- ?; @) u9 T; O+ s. I
wp 23456,a,w,wpdata == 16 b# T$ W0 T" m, K& j
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
9 f1 o% ~: e5 d7 F( Z. [6 P3 D6 r C y- Q0 _3 O8 c+ }
wplist
/ e+ d4 ~3 x9 |" A3 v 列出所有监视点
8 P: y' D/ X, S% J; d m" ~: R5 I# t) A9 Q
wpclear 37 C) q8 I+ O4 X4 D, C3 c' ~
删除编号3的监视点% H/ T7 N4 T! c) m+ @, K2 x
$ g9 c: c' o0 j2 a1 K- M$ g wpclear
( c4 ~" m# A, L/ ?( U! W4 C# k 删除所有监视点# D4 f: j+ v" X8 p9 M$ S
9 F6 A! Y0 ^3 a6 U6 a$ q y5 `
9 x: J* L+ m# [) O: B$ x' P1 X8 y& }" r9 c) D7 N3 j( e
程序断点指令: bp, bplist, bpclear% D2 h8 `2 k8 c
例子:3 w) u; c0 M& H7 J- J& v7 M9 l1 X7 m
bp 12347 O, F, w5 L& x; ?- W* {! W& m2 A
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断( c" j3 I3 w. q" ?& r9 [$ p
2 [ w* [0 s; i- H bp 23456,a0 == 0 && a1 == 0
, I' x" k6 N1 c8 @) }5 u+ y 在地址23456下断, 且中断条件为a0等于0以及a1等于09 _1 ? Z. @0 ]) C: H; `
7 S/ G0 ], R! L I7 p: A! ? bplist! b, F9 d. o5 t+ v
列出所有断点
I0 |/ i- r! Q; q* r5 b" f- h
9 V- |6 L! e& {% t8 b1 _ bpclear 3& W& T n* `1 e9 [3 ~3 J+ h4 p
删除编号3的断点# a( ]8 z% i |( E! x2 G
' _+ g6 k) ~1 E$ t+ ~. u bpclear
: z8 X- J- N$ R E# C- s) ^% o 删除所有断点: R9 ?+ P' N7 a, x
! C0 g- T. I- `9 L; Y9 f5 _
/ x, E3 [0 G S. c C . O, {. B2 q. K
跟蹤紀錄指令: trace
+ j- A8 b& h% T* h3 r0 A- F 例子:
! l6 P9 J& O0 y h# e* V' B5 ^1 M$ G trace 01.txt
9 o- W5 i' J/ S2 Z+ q' Y: j- E8 Q 跟踪当前CPU运行的所有代码, 输出至文件01.txt2 N s% x' g+ C
! u3 E, E* n- E' Q- e trace off5 |* O' I6 a. L6 o+ H4 E+ q
停止跟踪, 并且关闭文件1 P. K d2 S9 L- a# h
! r2 J5 O* P9 x/ Y
trace 01.txt,0* r) j C+ O7 { {, z3 D: n
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt- S: Y9 Z0 z) i" X4 d4 X
0 c+ `! k% n, [& f( T" Q trace off,0
% N; j" L; d# n/ r2 j/ o 停止跟踪编号为0的CPU, 并且关闭文件: X% W1 ], T( r, a- z9 `
# @" a% t; Q9 z) V trace 01.txt,0,{tracelog "A=%02X ",a}
" j' K/ \* v; F C% f) U; l 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
- H' U! ?: n" W' @4 ]( s 并且在每一行的前面, 写上"A=a "* V/ C1 N- t7 U1 `; A3 A" _6 L
"A=%02X ",a为一个C语言printf函数常用的输出格式9 i$ `' r! t. Z& t& f
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入7 b" c' k+ u: E ]9 t* [2 c
X表示为大写十六进制数
1 q1 [3 {4 M% G% |/ e' f
2 Q' O0 J4 Z( c/ S/ t6 J. S9 w- v
1 u: O3 }! u' Y7 g8 I) M" a9 U# X! B; [5 D, M9 y$ m7 Z
内存直接写入指令: maincpu
2 Q% F* x. S8 H! S. D7 o 格式为 maincpu.[][]@地址=数据
* R" T8 ^) w4 C- r. z5 l 第一个[]:
3 N; a. z! k1 h$ A: `% s+ g o 表示ROM地址" Q# e# @+ K/ G+ z4 C
p 表示RAM地址3 N% p+ U% S8 Y8 t* I& G
2 }, @5 n$ M" x1 T1 G 第二个[]:
% m6 |" [/ c1 C2 ]' E+ g: w d 表示4字节) Z9 ^/ _$ @' n, v2 e) c! E
w 表示2字节3 ~/ S, b# Z) p% T
b 表示1字节* Q# H5 q L0 i& i; e' c9 D
# j" a/ y$ F9 Y' W# D 例子:
; \3 m! z# |$ S7 K! h maincpu.ob@1234=FF
5 Q& I5 W s- ~# Z1 ^% p 在ROM地址1234处, 写入FF一个字节4 {$ [/ _6 H# n% A% @' |" D
0 z+ W5 E& y4 ~ Z J' e
maincpu.ow@1234=4E71
7 Q v- q4 e6 l8 D0 ^, e: L* v" { 在ROM地址1234处, 写入4E 71两个字节5 ~, K0 L X; r0 }( S
8 L2 V c4 H7 ~5 b9 W
maincpu.od@1234=600A4E714 K: Q. X7 z9 @- T7 q* W
在ROM地址1234处, 写入60 0A 4E 71四个字节( Q7 u- c! Z! B1 @
% f# X1 J- f, E* B3 q
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
2 \2 [* ^# x9 A. q( A6 v9 P5 o
- D4 l2 |+ P1 J: [: T+ K* X0 |# h. i8 m
其他:7 h, y1 N2 }2 X/ S" e
dasm 输出档案名,地址,长度" n, A3 ?) i/ I( M6 h/ o' H C$ K4 @5 l
输出程序的反汇编代码
. ^, _: g% L$ C1 I0 Y% E 例子:! L/ w9 ^+ {/ i/ |- ?2 m! ^
dasm 01.txt,0,100000
# y1 H5 ~8 N4 l8 \- U- ^6 F 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt: U- ~0 z2 E* p$ v9 R' A7 s
J7 c, S' v1 u softreset
3 X8 ^) Z! I% T0 T/ G+ P 游戏重启, 但不重新载入ROM7 o2 I, [3 B$ u9 B
9 M- L# W% o7 N' B3 c. I$ q
hardreset
4 c, B" ~+ _2 D& q 游戏重启, 且重新载入ROM: Z' {+ n7 j* p5 L2 G Q
; H* Z G& v: [/ j snap xxx.png
W( K; N% l. p! N 截图为xxx.png2 X. H! L4 }9 G3 j7 J% }* B7 T
' {- @8 f2 d2 ~9 q4 i# x
# i8 O; |3 K: C+ b: h5 g
W/ w% O' ~! W# t! B7 a. \3 V, ~
- _5 }2 f$ ^3 G7 Y热键:
5 u. d" L) e9 P; \ ~ 中断游戏
, N& y: r% d5 j; y* S F5 运行游戏
- F6 M& \5 B/ r- M4 T F12 运行游戏且隐藏调试窗口- A+ w/ H2 F, T) R8 o
F11 步入, 单步执行, 会进入子程序. h0 P4 A1 \4 U. @+ V
F10 步过, 单步执行, 不会进入子程序4 O4 P4 u: R3 U
Shift+F11 执行到子程序返回* V9 Y5 G" L0 U- d" J
Ctrl+M 内存浏览窗口
# C/ G" ~* V" a7 _& x9 F F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU( |2 {2 q0 z" @1 A% i; a* o
" k/ A' n. g& _$ m{:4_94:} / \4 D7 w/ R- Y
2 a' E2 R% w. F9 T! H) c0 H
|
评分
-
1
查看全部评分
-
|