|
3 [8 u2 C/ c T7 Z
很快速的整理我自己常用的指令
1 R* R. {! Q4 `5 S" F0 S5 R* x: h+ x" _0 k/ Y* _
{:4_112:}
, b& h' @4 `7 [$ z9 I$ U9 o
1 I7 z2 U2 |# B5 o1 w' ]MAME DEBUG常用指令
8 r0 v4 u# P5 u( E# J7 j) f [
T" Q. q7 n- Q% M. f3 C内存搜寻: ci, cn, cl h$ n9 s# F9 D7 r8 D$ A$ f5 {; \
: ~. [9 o4 L1 E m8 \# p ci
9 U% x+ ]% c4 k2 I# ` 搜寻任务初始化, 每次搜寻一开始一定要输入这指令! V% \3 b/ \9 v
u. \) P4 D1 }, y: L cn) f5 H" f3 B1 j$ \5 @, P1 A7 B5 J- X
搜寻指令
- i- c; _: D' f0 o! g, k 例子:
* e e; k7 K1 V cn eq,60
+ |8 d" `! @" |9 j 搜寻目标等于60 (十六进制)9 d! F9 ?0 J2 a! u
0 y; V- T( |) P! K, v2 @* K cn eq,#969 ^, a r9 \$ f+ X d' U) Z
搜寻目标等于96 (十进制)
* o9 M# A, O- b- c/ G# d& c7 [2 U0 H' S$ V% ]+ K
cn eq% i- \& M% h$ ~2 Q! w7 s3 W. i
搜寻目标的数值没有变化
- J9 C: V0 f- T4 I" i
7 P& h8 t% k2 ]. Q7 W cn ne8 ~* s1 q% p, t5 w. `1 s, q
搜寻目标的数值有变化
9 N: x) v9 Z: _9 T
- M3 L2 D( ]3 \. I, f5 c cn +6 f L: k$ `# v) G5 C
搜寻目标的数值增加" r5 d) q# i1 q
5 Z' Q, U. ?2 z5 e& v cn -2 {+ l3 z2 O, M+ U. `
搜寻目标的数值减少
_+ y, @+ H: Z l( L0 @# `; Z # b) a( E8 `, T
cn +,3
/ ]+ t& d( Z6 R0 } 搜寻目标的数值增加3 (十六进制)* {# l, s9 V( [' x
8 Z7 m( f+ u* F. F cl
8 ]0 b3 v1 U+ p) Q 列出所有搜寻结果9 F* M) U! h# d$ K+ V
1 l' `; e- ^# r8 l9 s% e' w+ X& o5 G
cl xxx.txt. H* w l: y6 e5 m5 |* W# O6 @
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
1 T* }. \% F8 p' d D4 e$ Q V: v* i. Z. e* k# R- F
$ i- F- g2 w5 p. D+ y
内存监视点指令: wp, wplist, wpclear6 n- A# ^& K# [5 e7 v% h4 Z
例子:
" X% q/ V: _2 w wp 1234,1,r
4 @1 W1 t* _; s1 Z- f: ]) G 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
' ~1 k1 v* m( l8 ]) Y ]) ?7 o$ V0 M+ y5 P. F
wp 1234,2,w
# g4 |1 w. O0 {0 T7 z 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度21 i( Y# \! b4 `2 `1 `: ~+ v W8 m
( \; a& W7 ~* @ wp 1234,6,rw
9 W2 h# _% p, N* q" j 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
4 g& h9 `/ @% b* r$ {) [! \% @# M3 E, _& L' P7 G
wp 23456,a,w,wpdata == 1
7 J( ?: s O. k* c 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1* N. K; f) s* `8 B F, T( Y L
$ |; V S. I7 Y* E
wplist4 b6 V5 s% A) O$ \
列出所有监视点
2 o" z' U. k3 y: r' d$ r
M6 I% d$ ^( z+ T' p, ^1 g wpclear 3& F' P9 p" N5 p9 ?9 n
删除编号3的监视点
- i$ [& }7 w# u7 s2 M' C9 j7 J( q7 e' D" S% {9 ^& p
wpclear. G0 U" Y2 D* a* C
删除所有监视点$ l/ Z5 M l5 H( p& [$ P" {
$ A) ` F, Y+ ^9 L
+ H) ^. r1 w4 p2 R9 K1 G0 S/ P( V6 j/ G
程序断点指令: bp, bplist, bpclear
8 z% u; s @% f, U' m 例子:
, q5 z4 |5 `2 [. m- u bp 1234
5 B" _7 w2 [+ V6 y2 R% ^ 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断0 I! \. j6 @* A7 M% f* e/ ~
' l/ `: u3 v3 g7 w# H
bp 23456,a0 == 0 && a1 == 01 A9 w! K! c4 B! y
在地址23456下断, 且中断条件为a0等于0以及a1等于0( P" V. B r3 t5 R; F8 W0 e) Z {
7 i' D) W$ t6 F! w5 D6 K+ f
bplist
+ [' q) N6 X' d2 Z1 H0 g& `* H 列出所有断点
6 z7 C- J6 \+ I$ e
8 {+ \% w9 i( i6 P4 Q2 P& O bpclear 30 U2 U* `) j% k/ F! k4 p
删除编号3的断点
7 s7 w( H0 ^ G2 b% u
4 U( \) w2 k9 ]. j" c bpclear
/ _1 I3 j6 {' W 删除所有断点
" O8 {; T: m& p, Z, [$ O( B+ n4 U# c5 |% ]. T
+ \& ^' N5 X, }- z6 p* E6 \
# v" ]5 A9 p! E4 h
跟蹤紀錄指令: trace6 x& M Q6 t- u, ?4 Y. @
例子:
/ T% N; K+ `3 O trace 01.txt9 l9 ?' D: \3 N, X( J2 G
跟踪当前CPU运行的所有代码, 输出至文件01.txt3 C" ~, n1 G# K
- Y t. i* g5 U( i/ P8 ~ trace off1 I3 c. _6 t, k4 c2 x+ ?# R- B0 \! l
停止跟踪, 并且关闭文件
/ l \4 `; u7 K( N1 | j+ @" B
trace 01.txt,0! ~$ h* S! {; g$ L( g
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
$ {$ j2 z2 |# Q7 C& f; ]& ^2 Y
( `; U1 X2 g% M$ ~: [ trace off,0: X( ?6 f* a, n, u, c
停止跟踪编号为0的CPU, 并且关闭文件$ V; I! x3 S7 v7 y& Y' D" F( I- T: W
# w7 G" y( D% o
trace 01.txt,0,{tracelog "A=%02X ",a}
$ G- Q* |% ~* ^2 N 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
* a% M) X/ A! T# D% v" [ 并且在每一行的前面, 写上"A=a "
# i/ `5 O; V2 X "A=%02X ",a为一个C语言printf函数常用的输出格式2 r% v, R# T" {8 z, U. ?
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
& Y3 r/ m$ N( \% a8 C X表示为大写十六进制数
* |3 U! o$ Z! j% X* e6 P# [( F w3 o
6 |4 j, E- b" c' z* s0 J( q
; L! L' f. Z! n" z9 ?. x
7 o$ v( C, {& r内存直接写入指令: maincpu
9 O% A# G- u: z- ?8 E6 @ 格式为 maincpu.[][]@地址=数据
& R2 G( t, M) S9 }* u; O0 x! r, ?7 j 第一个[]:
6 ]/ j" z. f) R( H) C o 表示ROM地址
2 S3 G8 i# [2 Q. ?! {: {# V6 {3 W p 表示RAM地址
) l2 F' y4 I0 s9 p& f: m- Q4 c: a$ W0 e' u* \8 @ H
第二个[]:
# l, z% D4 F7 ` d 表示4字节) Q: b3 E" N I g' w
w 表示2字节) {0 y# e( P- @' i2 I. g
b 表示1字节
9 l7 u! H$ s4 T- T6 I9 i( w d5 Q4 F4 L2 Z
例子:
5 u/ ?9 Q+ k2 \4 w4 F4 P maincpu.ob@1234=FF0 x+ o- G# T& G @1 T3 k! R
在ROM地址1234处, 写入FF一个字节
o* h# t& y4 A1 H9 ]% \& c5 l
5 X$ L9 Y' d) L) _ maincpu.ow@1234=4E71( X. B+ z: D$ U1 ?
在ROM地址1234处, 写入4E 71两个字节
4 n: n' q) s' D, c0 X9 V) Q; E9 d0 a
maincpu.od@1234=600A4E71
& q+ F5 d( Q6 q" r" G% y 在ROM地址1234处, 写入60 0A 4E 71四个字节" x/ ^* {' V. {- w
. @( ^( g2 c5 H ~9 B# V J 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
n- E, ^: b' u0 M
$ S# @8 @4 D- \8 j) q6 @) t7 u% N" U( v0 n- u( C; H
其他:
5 r! A4 W3 T! _6 z dasm 输出档案名,地址,长度* N6 h; o9 v2 V9 Y) j6 m5 i
输出程序的反汇编代码
& g' Q& o' V( a6 ~' R; r3 B9 c0 d1 \ 例子:% V# J( Y$ I% G$ b1 \ ` h- A
dasm 01.txt,0,100000# {4 ]$ ]4 ~" R! [4 ^2 h
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
: k9 \1 U# {% S0 m B" p& M, v3 @% Y8 U
softreset
. [, t) S( d0 |9 A8 `2 U: m 游戏重启, 但不重新载入ROM- c6 R2 |% E2 g
- Y# X+ i) L/ F0 x0 W, x+ w hardreset$ }/ w# o8 ^ s0 B6 O
游戏重启, 且重新载入ROM# _ l( V" A+ P4 }: W! c! t
! H) f: Y8 ~1 j# C
snap xxx.png# T" H! q0 f0 y4 F1 F& A! l8 K
截图为xxx.png
. B5 [/ |: N$ b8 F ^: a, z9 Q% @1 D/ z) r# Y( {1 H+ q) v. P
, K1 c* S9 A2 R" X + K( ^, r1 p# D# [7 u$ N ?" z
- e9 e) m6 Y0 {, Y. U5 F: p* |
热键:2 s+ W$ v# [7 p& l
~ 中断游戏
0 c8 K- ]/ T/ f8 y/ Q F5 运行游戏
$ [: ` s! Z7 @ F12 运行游戏且隐藏调试窗口. S& u5 ^) m" w0 C
F11 步入, 单步执行, 会进入子程序) y' k1 y4 X& O C! W
F10 步过, 单步执行, 不会进入子程序; M1 j/ Y9 j& C/ q# \; u& r3 z
Shift+F11 执行到子程序返回/ c% X2 f. n0 G; Q
Ctrl+M 内存浏览窗口3 M) A+ A5 ~- j6 U& ^6 s
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU: ?4 ~2 b! D7 h% ^1 E
" s1 K$ S/ i4 }& O2 V. _5 i% i
{:4_94:} ! P- b# s) _. t3 ]! Z% i
) N& s' B5 r3 K' {
|
评分
-
1
查看全部评分
-
|