|
|
9 R, ?( r& `% R7 W7 G
很快速的整理我自己常用的指令
0 B& c- h5 u) B9 D9 w
( S# j1 |# q1 U7 X5 L# S{:4_112:} " r" R; D$ h5 I8 U8 s0 j% O" G
9 N2 W2 M& B# X0 t- `9 {, V5 LMAME DEBUG常用指令
4 p- Q; ?2 G2 }) }0 ~. \1 t4 x: ~
3 Z& O. P/ \& _' K) j# y& | M内存搜寻: ci, cn, cl, x, O! s$ u6 F6 L
# S( F4 j6 s" k ci7 D8 _2 D8 o2 ]* _
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
6 F) D. X- {, y; d4 u; B
* _) \! b' M' v' ]" i% G0 n cn
5 c& b( _3 T* ?: [$ D* J 搜寻指令2 x* L) u& d0 |, B- v% ]
例子:" c& ]# R7 H2 W7 O2 t, g
cn eq,60 o! A1 C7 G$ q) b" z7 M p3 Q& l
搜寻目标等于60 (十六进制)/ w0 H" z# T5 D0 }# L6 i3 Z
3 z* \* _7 O5 w7 D8 O cn eq,#96. a- j' j3 S' m3 q. A$ c
搜寻目标等于96 (十进制)# u: T B2 b, J- Z
" ^, @5 k' N5 [. o. g4 P
cn eq
: x+ U# i _2 F& c& V& m 搜寻目标的数值没有变化
- ^& h, u1 f; {( f6 ^
+ ? {: C* b. V* x: [- G* b8 Z6 C% } cn ne
: g7 ^ ]: u! D! e 搜寻目标的数值有变化9 @$ z0 B3 B" V* _! w' R5 o
& A4 _5 Y$ P0 R6 p cn +
( @6 P6 F9 Z2 G: u2 M 搜寻目标的数值增加2 n) Z8 S: D$ d; ?) |9 \5 L+ J! n
3 ]8 l: M8 H) C3 W( U% _ cn -. T8 p5 x- `: v$ c5 m
搜寻目标的数值减少
* C# ]* H& U0 Z# j8 k
9 {6 O" U" o- F5 l3 R) f cn +,33 l$ P1 e+ F4 ?- @% @. j
搜寻目标的数值增加3 (十六进制). Z2 p; E" S5 z) k" P# {
/ n/ l5 I6 ~& W/ W% z1 C
cl
. c$ V$ F& d( l' }" Y 列出所有搜寻结果
* d/ b% V6 J; A H: B& m! C* U: Y8 ~# R, N. \1 ^6 d
cl xxx.txt* X. { p# Q! d$ L+ K
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
2 i. B. N! b, M1 p' t$ _: ]
) H2 X" k6 v7 x N2 y
$ U- o R% V, Q) i内存监视点指令: wp, wplist, wpclear- I, v9 B# x# h, k
例子:2 m/ B, N8 A/ j& l& |
wp 1234,1,r5 |, b0 p& E! t; W0 W' B2 E. d
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度17 M7 S+ f1 i9 E v" V
% ~( m9 _3 [# ]! A4 @ wp 1234,2,w- K* b" B# ~) Q! `
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
1 k# g- M5 L. G& C. p) N
- W' J( g8 V' ?# n: _" C% n' Z wp 1234,6,rw+ J% G+ D( R" e3 V9 \' b* S
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度60 W1 z7 v# _/ B5 v9 q9 q, i: m
7 ]* V& o* X8 E& W- l
wp 23456,a,w,wpdata == 1) q' K; w# E8 Z0 c2 a G* s7 U u
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
2 m5 j% F4 y( B4 l2 A$ `3 p* {
4 a k9 v* N6 e0 `/ B6 G wplist$ g3 y) y5 _9 c) l0 {, h" l
列出所有监视点
% I1 f. W! z d
! P5 ~9 \7 J9 m! S. A9 P wpclear 3
O: W9 S4 c6 T6 Z; t$ `$ V8 u; r9 a1 X" ~ 删除编号3的监视点
0 r% c0 _# t3 s% s
7 Z' c3 z2 Z: w9 a wpclear
0 l" c. C! b- S7 L- F: d 删除所有监视点; j' m y* P5 @3 K- n$ |& ~
4 m) s) S+ V& z. |
2 `0 T* |* K. d. k4 {
' b9 f+ q. K1 U2 A& t程序断点指令: bp, bplist, bpclear: F: K9 E( X ~7 @4 J7 c
例子:
; H$ K' S& O" @; O bp 1234
7 K! v0 z$ H1 I8 v, U$ ] 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
/ {" ?2 U* L. o, O) C1 |5 v' H( ?. D, n' t6 g
bp 23456,a0 == 0 && a1 == 0$ r# R% U$ Y' l
在地址23456下断, 且中断条件为a0等于0以及a1等于0
7 E$ x( p" ~* U) {; ]$ Y( Q
: v2 z/ _2 [: {( M6 @/ B bplist4 F' N5 {/ C0 u' o0 J
列出所有断点5 G5 x/ M6 }5 h
. p9 U7 w; g: O0 L% y
bpclear 3
+ {$ S) K4 F. [ 删除编号3的断点
" \0 P+ k! m- ~3 d$ r) R: V4 g6 s& L+ k/ y& k" G& B \
bpclear/ |: Y! N/ ~% t) g: M& w f
删除所有断点& R, ^% c' J% h/ g, F
7 S2 X* H+ o. w5 R8 m/ M
4 U/ ~% Q* |0 z- l) k! b
0 @+ F7 i7 y0 l3 V7 }$ U跟蹤紀錄指令: trace0 h2 B0 ^6 O: `3 V
例子:
( s) j2 }: B* q- W* c5 L. F* A/ V trace 01.txt
; s9 |6 i) O% c# O8 X 跟踪当前CPU运行的所有代码, 输出至文件01.txt
. [9 u# @" i/ _) \" x$ k2 S d& ]' U9 D
trace off }' u3 _( p ~# N- ]' W5 ?( A- ?
停止跟踪, 并且关闭文件9 F( Y3 |0 W5 m
! [% j- p6 y* X& F* A8 l
trace 01.txt,05 ~5 K. }5 I6 {2 H4 X9 H
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt# s) p2 E; [) _0 f1 O- m
7 E& i( H. v0 q' h5 \# Y trace off,06 @( M# G. l- Q- ]
停止跟踪编号为0的CPU, 并且关闭文件$ ~1 m$ c2 x. U6 h9 H# ^
, ^+ e, M8 ^# Q- b0 T1 e1 s }
trace 01.txt,0,{tracelog "A=%02X ",a}! X3 K6 x4 r) j3 X
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
1 t- c, z. @! R) V' N 并且在每一行的前面, 写上"A=a "
% I, C( M/ `1 q4 N+ i$ A- ^ "A=%02X ",a为一个C语言printf函数常用的输出格式( ~& Q+ S: Y, T' k( Y# N2 y
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入# L1 `: @% D4 F
X表示为大写十六进制数% b' ~& X; D; b( M1 A) h3 V
; O: u' y$ z8 d/ {( J6 P" ]
8 k# f3 v7 n# U, I
) D' K3 F) ^9 |内存直接写入指令: maincpu) B4 m6 y( R4 b7 y
格式为 maincpu.[][]@地址=数据
3 T' H L& n" g$ ~1 V2 v' g 第一个[]:; b, `+ M6 I { h( s. K
o 表示ROM地址/ p9 F# k9 {# g# P
p 表示RAM地址9 l3 H% c8 f' G. M
( h/ k9 W5 {( u* H
第二个[]:
, O1 }7 Z8 {: R; C! } d 表示4字节) e2 p/ ?/ u2 T" Q6 g
w 表示2字节
* q1 K: a8 p- B b 表示1字节
/ y% U' [+ G$ C F9 R! l8 R# O
. ?5 n( L6 s( B+ L+ X$ r B8 y3 p 例子:
: n9 G" ]: T; l) O8 [7 s, r" F6 p maincpu.ob@1234=FF' L% ]5 a! |7 [$ X1 O. B
在ROM地址1234处, 写入FF一个字节
' Y6 \3 D0 F' ~9 \
+ ?# ?! Y( K3 @3 \6 ` maincpu.ow@1234=4E71
4 q9 j8 s- e+ _" K8 V! h$ W6 V7 q 在ROM地址1234处, 写入4E 71两个字节
5 d1 [2 u9 K5 H$ Z& K. _ O5 [: M% M2 m' m! Y+ `& A, M
maincpu.od@1234=600A4E71
3 M; a: l, w( x. q6 _ @ 在ROM地址1234处, 写入60 0A 4E 71四个字节, f5 n2 o8 u* `. n0 m) ?) y/ p
" }5 Y+ W' C1 w6 u* W) l+ [
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写; _' Z$ p, R! D$ P! O8 ~" L
( ~1 S; [, n% w# Z0 p; e
7 o1 I4 D$ p/ D其他:
! m0 D J. A5 n dasm 输出档案名,地址,长度7 u' j$ _' y% O0 J: J4 U
输出程序的反汇编代码& S0 G3 Z" M. \) o5 X, F( X% c9 M4 q
例子:1 D( U/ s2 C T2 y( ], b
dasm 01.txt,0,100000
0 W' P h; y, U: _- B' J7 B/ K 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
[" F9 O8 @! o; q
8 q! Z& z8 K' w) U) F softreset
; l" @4 d+ P' N5 e/ p/ J( W 游戏重启, 但不重新载入ROM5 T8 U8 z' d# h" j- N- y
1 S. b( r( K! z! s- r$ M8 R
hardreset E+ R6 K8 m# V4 L
游戏重启, 且重新载入ROM9 i) A- ^# F% n0 Y+ _& E
" F2 B. G' w9 ~. T- x) g snap xxx.png- m m& N5 T& z) K: v+ ^
截图为xxx.png
+ E% T6 w3 B) o6 A: d$ } E( _( D) f' M) T. W% W
& Z) D3 M Y7 a' ?* v# O " u( w) J! b1 M" Z1 F: M* S
( B4 \7 a" H9 R+ ?
热键:
1 g. y5 A" S( F# i$ D ~ 中断游戏, G! J6 T6 [) h) g# c( i0 r
F5 运行游戏
. J. H/ C" P9 C, a$ t+ U8 { F12 运行游戏且隐藏调试窗口: G: y0 v3 d1 N
F11 步入, 单步执行, 会进入子程序
, \+ m$ g. B* T7 \' P. X6 ]: q2 s F10 步过, 单步执行, 不会进入子程序
7 ~. X2 b d# z& I; j Shift+F11 执行到子程序返回
% c( ^; N2 y: |. z Ctrl+M 内存浏览窗口
- q I5 Z. [. Q0 l2 H7 l F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
! v' Q: w& r. w b8 y1 H6 i, F( P0 G" H) Y% [# |
{:4_94:} 7 v. J* U5 K. ]1 F7 M, k
7 E6 B/ y: A" g) Z' r- ~ h/ r |
评分
-
1
查看全部评分
-
|