|
|
' s) t: ]+ P, Z. v
很快速的整理我自己常用的指令
l/ k# U n& P. Q' a$ S. Y/ J. ]7 I, f
{:4_112:} 4 j* `/ `6 y6 ^- e! j$ [# C
, U$ n( j c, S/ k- \. ?# jMAME DEBUG常用指令4 F! h" o9 J. a0 j/ ]+ _% e
% x3 g5 q5 S" y内存搜寻: ci, cn, cl: m/ d0 q i+ C& e9 I# M3 X
# `+ d9 ?2 s, [1 Y, s
ci4 d! G/ n7 Z7 d1 I/ k
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
) x* O, E7 N3 P: f; F# d% A& j' Y% `4 `% c6 {" b
cn
' u! |2 E4 Z _+ G/ I- d 搜寻指令0 n1 P( ~4 I* Z# J3 j# p' u
例子:* ?- {$ w" l* H
cn eq,60( O" o% A8 b2 `$ h* L) }+ y
搜寻目标等于60 (十六进制)
0 T/ t- F& f+ [& n" F' P , h Z8 ^. k% D: R# ]5 Q
cn eq,#96
6 ~ Z1 y' l5 k/ s& p# j8 U& k! z. j 搜寻目标等于96 (十进制)
U! \& h) `! n/ T2 n. q a. f! ^% f) _: ~
cn eq
, P9 e- Q4 J/ o: P 搜寻目标的数值没有变化4 O+ `" V+ u1 \
& E0 R& u) i( R
cn ne$ _. ~) y: S& P) Z: J
搜寻目标的数值有变化/ k4 C& m9 d3 {$ V4 _% z5 }" a
9 I) h) U9 \, r6 E# x4 [
cn ++ v& M/ X4 M- u* p7 j2 N) S
搜寻目标的数值增加( q; w" K/ e5 \. ?8 ]. o
( M( h* l/ u5 ~! [ cn -
- R P: s. I2 g5 W; T 搜寻目标的数值减少: @7 |( D# L+ s3 c) O0 e! @
, z+ ?' W; S( _/ [& K cn +,3' L& H$ ]9 H0 _7 I! W1 ?7 v7 r
搜寻目标的数值增加3 (十六进制)
6 @% m& @4 x' z' `# \, Z4 @/ U
, u. v7 o& P( P2 c# U8 k, M cl( j. r' o) N& `/ h, \
列出所有搜寻结果
; {% P c4 P3 T3 w8 J1 L ?3 U8 Q5 a$ y: T0 O& ?+ G, E% v
cl xxx.txt/ v. M w! ~- o. r0 W9 t
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
3 j- Z2 ~1 h1 u% v5 }5 O& m/ `/ r0 g- M( M/ ^' G
4 O' N W& C6 b `) N% n* X( f内存监视点指令: wp, wplist, wpclear: H. x; m0 j0 r# J3 f: o* v7 m
例子:
1 [5 ~% e! t0 l! m6 T; S% h. j" Z7 p3 r wp 1234,1,r, J0 x2 I# B# \) B# w4 {
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1' }6 a; J: ]% z) x( @7 Q' W
% h& C: G! t, I" A# P/ O2 _ wp 1234,2,w
% d( r5 @7 `5 _2 ~8 K 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
* N* s8 Q# @6 o! B+ N # `# s% F2 _' s- V3 {
wp 1234,6,rw
* _$ Z4 y: \9 K# M: T8 P0 Q4 \ 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
( _+ M# M" ~# C4 R9 m
+ q7 A0 O8 Q7 z) D' Z4 _ wp 23456,a,w,wpdata == 1 u" r4 S# `" V+ h$ k
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1: r8 P8 o( F) s5 W1 B
! Z6 {8 j: o. @6 n5 a wplist
$ |1 \/ I! e& d2 F% _ 列出所有监视点
$ ` a( Z6 f% {- c% \2 }4 d+ ^( P9 c. f# x: T
wpclear 32 @" e2 D0 j% Y1 P% \ L0 ?
删除编号3的监视点1 p$ h3 ]& D# e6 h2 U# B, `
9 Q. Y( l9 H" ]& l wpclear
4 _4 X+ `1 ~2 F' R( N" X, V 删除所有监视点7 u) x* Y8 g4 {3 B; [4 W
, S6 S v- G1 }5 ] F0 ~3 w/ t
4 l) |$ ?/ D8 s% o' q! m( s
8 [/ O# f- t5 a) L8 i, ^
程序断点指令: bp, bplist, bpclear& Q8 `* i& C* I
例子:9 o: D1 Q+ ~) p9 K
bp 1234
2 {" b" |* b+ K, i2 _ 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
# Z5 D* b6 e% X: a6 s
* ]; d; [3 q: y& f/ v bp 23456,a0 == 0 && a1 == 0
8 W, Y' t4 ^6 {+ h9 v. e1 I 在地址23456下断, 且中断条件为a0等于0以及a1等于0
4 o0 x: ]( S! e7 C2 \7 ^3 \/ R# \! z' C4 e1 `
bplist
9 m) ]$ E" r) c! X* b# _% v 列出所有断点
! Q& ?. n% X0 {2 p* O$ A, f H9 Y9 m% b! X8 O6 B/ Q* Q
bpclear 3/ R- T8 M5 a3 U$ n
删除编号3的断点
; U. m2 K: p; u& b+ c; k
0 `* i: K1 U9 t! G! | bpclear4 f' q# G$ w* P
删除所有断点' }$ [- Z1 D! Y9 c
9 n' `. _2 I' e8 @3 D& Z6 T
7 E" s% A# i* a( r
/ [+ w/ u( ]4 J2 b! J
跟蹤紀錄指令: trace- I; a8 ?* @, x4 K+ G0 l
例子:& @4 [# ~0 Q, e/ G5 y
trace 01.txt6 G# `7 { i! z
跟踪当前CPU运行的所有代码, 输出至文件01.txt4 L5 x, P4 N. j
/ O6 s9 i- ?1 _/ }3 k! m9 V
trace off. I% _; m% o9 X9 l
停止跟踪, 并且关闭文件, [* x; y' `9 e! `0 @0 Y
3 c0 Y* \$ D% U0 T- e0 m, e3 \; a. x trace 01.txt,0# H7 g" Q( m2 q% Z# p8 T
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
_# M8 X1 I% u9 K/ Z4 O8 D! Z! V* h( Y+ v% @' x
trace off,0% \: ~3 d; A) {$ f
停止跟踪编号为0的CPU, 并且关闭文件& _" O1 q5 s' K5 \0 p
; c" U" i8 b( s* l5 Z
trace 01.txt,0,{tracelog "A=%02X ",a}
9 v. }' W. i9 G& I 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 0 S$ N) s) y+ n
并且在每一行的前面, 写上"A=a "
$ s5 ]' \+ ^. K2 O9 c1 q0 \7 p/ W "A=%02X ",a为一个C语言printf函数常用的输出格式
4 z/ x% X; C" {6 _+ \ 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入3 n/ x9 P+ B4 |, h) a
X表示为大写十六进制数
& Q# K( o+ W/ W- p0 e* K5 F2 |! O9 x6 D* f! r
/ G% N0 s9 r! U+ t$ P7 ]
: S! H6 R2 g' d7 }8 P7 k内存直接写入指令: maincpu. K7 c0 n' ]9 n' h* x: ]
格式为 maincpu.[][]@地址=数据( j4 J8 f1 J* y/ A6 s m {
第一个[]:. D+ f' F1 Y, e u
o 表示ROM地址
9 J" M4 c4 l+ i9 ] p 表示RAM地址/ U& o ?# J6 p1 a- A! l
7 J) j- F! b- o+ G, j4 G& R. c7 { 第二个[]:
; o7 O% I% M6 |6 n, ~' S d 表示4字节
" n0 V' f; e( g& f l# p4 A w 表示2字节
$ f" Q- s6 T* ~- u b 表示1字节
! B0 D$ d* ^, C$ V) o; n
+ P$ d3 @( ~) @ [$ S 例子:& X! ]( E/ p- f- P/ s
maincpu.ob@1234=FF
Q7 a( V& T/ Z) e7 g 在ROM地址1234处, 写入FF一个字节
) m' @9 v3 X; [ r# u P3 A+ G; S3 A6 Z6 S+ I7 x' T
maincpu.ow@1234=4E71 Q! J0 }8 P6 C
在ROM地址1234处, 写入4E 71两个字节% p6 b; w$ {. f+ j6 ^0 N- o+ ?9 H5 H
! F+ d. X1 H% d: j maincpu.od@1234=600A4E71% z- _: l' e# F7 V
在ROM地址1234处, 写入60 0A 4E 71四个字节( U) ]- b" ^. F1 v+ H$ D/ I3 l
8 n1 F. a# Z4 o# i9 p 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
" c: X8 F# v i S! u
$ ^8 x! M4 _/ O( C! {) S7 W2 z0 l1 W1 Z+ ?3 \8 o+ }
其他:8 U6 z& y9 c1 k# \4 A
dasm 输出档案名,地址,长度5 e' l' ?2 F0 m' M+ a) }
输出程序的反汇编代码
* _5 @. X+ @4 ]& M0 @ M$ n 例子:9 B' j) b# X1 Y2 z
dasm 01.txt,0,100000
# h' B- N9 f. u @3 Y 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
2 c) e' t0 u. g: K/ o1 z1 O6 |, a+ [. Y
softreset0 n: M6 a8 ^# N. E J
游戏重启, 但不重新载入ROM, E" X' h! ?3 m! [4 b) L/ m% y
+ F" a9 {+ _* E* `9 F hardreset
/ y. o: X+ {( ]) ^1 W+ T$ A1 S 游戏重启, 且重新载入ROM+ b( x# y2 [- W& p' L
/ v, B0 F* f6 x# k# [ snap xxx.png7 J7 E7 ]* a5 ?; I2 h) T
截图为xxx.png6 z1 B a9 V: b, L# | j
2 Y: }% S. {6 Z" x7 G3 d
% j# i1 z7 F* s * c; F) U; b3 F3 Y4 t8 f
8 b. z3 z, g4 \热键:4 Y. p- L1 B) V
~ 中断游戏% q' U7 W/ C8 v- f# b9 F0 u3 ?$ {
F5 运行游戏
& O d! H6 L, Q F12 运行游戏且隐藏调试窗口2 r: I1 @* ~2 d1 J6 q" ~
F11 步入, 单步执行, 会进入子程序% b" k" R% C# i
F10 步过, 单步执行, 不会进入子程序8 E( ^" p/ G$ f/ O1 s' c2 |# q4 n! x
Shift+F11 执行到子程序返回
# @) v4 G0 h* _2 h) z% a& m Ctrl+M 内存浏览窗口+ T4 _& e' ]9 l) z0 l5 }8 X
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
* F9 h5 M- b( J2 g4 f. R& ]0 ]6 x5 G0 w1 Z6 _, A
{:4_94:}
$ q9 i: _& R2 j: X# g6 ^
" L7 F* A" h: [4 A |
评分
-
1
查看全部评分
-
|