|
|
0 h1 O% f7 W/ m6 s8 b
很快速的整理我自己常用的指令
! d& R% z/ L& v. |( [* A# _* T1 J& {( F8 m1 s
{:4_112:}
* H( ?& J1 m% L0 B
: ^1 N' Q9 l" |; P2 U* b; ]MAME DEBUG常用指令/ t+ [, M8 t" E. v3 h
) ^+ `' _& S- |" L0 m, ^# _内存搜寻: ci, cn, cl/ P6 I) H, J3 n- q8 r1 K; \+ B
0 o3 z/ f J7 X% i1 I5 G ci8 L2 `: A# C7 f( h
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
% E* J1 o- e+ q5 }. Z
7 E* z. q7 S# c W+ H# y) y/ x cn! t, G( g; ]' c% [+ q+ U$ ?9 j% A
搜寻指令/ v; P( C" O3 \( t
例子:% |* b/ z. d2 |) b* W3 Y6 w
cn eq,60& A7 v; {7 J; m; v5 n
搜寻目标等于60 (十六进制)
- |- d" t( g- S& e2 q, _ / A q( i- v9 I# I" k. w" \
cn eq,#96( H/ |- X: M) c# {! u6 A) p' N
搜寻目标等于96 (十进制)) t7 X6 @3 ^0 ?6 ]- s# i
4 }0 `2 m9 c! E$ f% e cn eq
* o9 k' Y. Z' W 搜寻目标的数值没有变化; C! C# f, Y7 c7 m
3 n* v _6 i/ j. J1 O- U cn ne1 P2 H2 D" j8 e( W" x& F) N8 r( {2 S
搜寻目标的数值有变化" d5 {& q% ~. d; F/ c. W2 x5 N
* u% s2 O( u$ u' I' ^/ N
cn +% R3 I$ M- B% F; g1 T/ u
搜寻目标的数值增加
3 X- }. [8 ^2 M& c! i i: [1 K, x
; k& }6 X2 S) B2 M cn -) m& l3 _* Z# K
搜寻目标的数值减少3 Q8 ?/ g- z! _6 ~. k) q
F. h. v. K3 i6 t5 P# U n cn +,3
. k. y \7 e' p n' L 搜寻目标的数值增加3 (十六进制)1 a2 l( p/ x' r9 `3 D
4 T1 |7 N7 J9 J: \
cl
, _: [5 r+ W1 A+ X% o) G 列出所有搜寻结果
: i( B+ a2 J+ n* `8 }0 a7 A! [! E& w$ |6 g. O" b Q& L
cl xxx.txt
5 f' l/ g0 V9 M$ m, M 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
3 f, m# S2 O) \: p2 H5 a8 ]: ?: p/ ?; x4 p. C0 S
; n1 Y1 {; U4 @$ p' ?& P
内存监视点指令: wp, wplist, wpclear
/ Y/ y2 F* Z9 s. x! b: e 例子:6 g" e3 Z% ~% d" H; u' x9 [
wp 1234,1,r% a/ }5 ^8 c# v; x3 w* L s, k
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度15 K4 z# P1 f* S( E
! p9 V1 I& b$ j+ O9 F! l, q1 T/ j1 R$ ~ wp 1234,2,w; J2 h9 k) I4 Z; ^3 k$ ^8 g
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
+ D& }6 p) u' E0 {" @7 Z! d4 I
0 k3 I% c6 r: x# `; c# R! t- G$ {; V wp 1234,6,rw
; F+ m+ t. w( T. l, ^ 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6- \- i3 G( C2 e( [
) T0 t0 {- K# U9 o- |6 h wp 23456,a,w,wpdata == 1
. p. ^ Q$ [( V1 ` 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1) B0 ^5 f5 B! ?# r4 i
- b8 |; Y! R8 {" t wplist
9 B, ]8 w( j5 T. `. ~. v7 R 列出所有监视点& |8 p: W; D. z5 u
D8 k; G. [9 P9 z
wpclear 37 J! P+ y; e2 P4 \& C* w& z
删除编号3的监视点- w. n ^# r% X6 Y
* t! H8 X) S7 } d wpclear
" U3 }; N" Q% v/ [3 N2 g 删除所有监视点
% U" y- J2 ~6 x; r2 V0 F; T; s6 S* G% _% G P3 c7 ^6 X# @
0 _% d% B* Q/ T8 C: {' S) [, H- ?( r
程序断点指令: bp, bplist, bpclear- Q, J9 P# g6 r! | g) r) k
例子:+ Q* k( w1 Y5 k$ ~6 S6 y
bp 1234
5 S2 V+ C o. O0 S' N, T* V 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断' T* i! W+ _1 r
) S$ K: U. T( _6 Z9 O bp 23456,a0 == 0 && a1 == 0
0 k3 U q/ M' |' f$ A 在地址23456下断, 且中断条件为a0等于0以及a1等于05 G4 W0 f8 S4 r+ E
0 T D6 e0 y3 `0 v( T" |
bplist
2 Q% U6 h# `0 C# h8 m, W. P# v& _ 列出所有断点
, i: ~% Q$ Z% r2 W/ W4 w' i; z" q" R7 a, x
bpclear 3/ ~" u1 p! C1 c4 h1 Z$ a
删除编号3的断点, W8 ^' F& \) u
8 Z4 u" B. ?8 Q' x
bpclear9 v: f2 E4 F9 D K i/ W% A
删除所有断点) @7 e1 Z! ]9 Q$ [2 M1 a3 m7 v
7 F) [3 a% U4 Y, }1 d; ~
/ q6 t2 u# P1 V: G9 S8 i2 L8 L2 z
6 F! N1 q! i8 h' R, j& I9 M7 X跟蹤紀錄指令: trace
& Z( W3 w- @% X- S6 t; Y& u 例子:, F8 e# k) a) S7 k. v( N3 A V! n
trace 01.txt
( d$ w7 i0 j6 x3 @4 c 跟踪当前CPU运行的所有代码, 输出至文件01.txt# t. N2 q9 Z$ i6 m( n8 J
6 c& ]$ f9 B1 o; [9 } trace off G, K) g) z: Z
停止跟踪, 并且关闭文件2 ?: p5 F, I% t8 k/ P
" [) A' ?6 W4 G" r f trace 01.txt,0
2 {) P; b$ e0 \" C( ~- y 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# O, O& i% H! y3 I6 [9 S
/ J. f/ o1 ?- A; F! M$ L" N! D trace off,02 g1 C# p1 X- s, l x2 F
停止跟踪编号为0的CPU, 并且关闭文件: D7 H; {3 C. p8 L2 y( {: a
8 h! g* c8 i( O3 n _ trace 01.txt,0,{tracelog "A=%02X ",a}
1 h- U4 b( |& q 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
* D- y; ]5 L h8 e- H 并且在每一行的前面, 写上"A=a "0 h* `# N3 x4 Z0 \7 Y1 N/ O
"A=%02X ",a为一个C语言printf函数常用的输出格式
' D6 R6 K' q7 K' w$ ?% y, _ 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
0 k9 ]- E4 b0 L X表示为大写十六进制数
! h. Y- u Y& F1 ]5 ^7 b: s2 j/ h/ I4 H# f# e# W
$ R% N# S, r6 T; g4 c9 j1 m6 E6 n
; m1 O9 ?' a1 C* s6 o内存直接写入指令: maincpu" ^( A: n: P5 ?) L+ x% V4 q; ^
格式为 maincpu.[][]@地址=数据, Z) f% @9 N. g$ G
第一个[]:& {/ Q G2 ^7 B
o 表示ROM地址
$ b- E u9 F1 ? p 表示RAM地址
0 |/ P3 T5 t: P7 Z/ W% _9 v3 x
( ], O' Z" q9 _# T2 N 第二个[]:
$ i. F; a/ F+ i, ? d 表示4字节( e" a6 F8 _4 U% U5 P. m5 U
w 表示2字节$ L2 D5 g7 V9 m& I* G6 ~8 }% q
b 表示1字节# c1 M$ f- f" }/ A# b
" l" |' M, E: ?# q
例子:
+ e, q" v: E8 ` N maincpu.ob@1234=FF
, V4 m5 O8 j9 E; B( {( ? 在ROM地址1234处, 写入FF一个字节- z+ t# q! U, Z9 p9 `9 \) m
, n, m2 s" v6 |! J& I M2 M) ` maincpu.ow@1234=4E71
5 g2 B4 z! A' ^. T/ z& j5 ?/ f 在ROM地址1234处, 写入4E 71两个字节
* H' B4 r$ N7 L' G" r; Q) O% u0 P2 ] z; e. o# a- y
maincpu.od@1234=600A4E71
3 C1 V- m& W7 [8 `: r+ V 在ROM地址1234处, 写入60 0A 4E 71四个字节6 J, b/ Z& F- J6 N) f/ X9 s
8 v' E" {. V& V! [
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
, Z$ `& h, ^* g x5 Y2 {
, l5 S1 c' W; e6 Z( ^
% A5 g2 V9 L* g& g其他:: F( p$ G' w. D
dasm 输出档案名,地址,长度5 h& m' T% u/ l$ t% {3 z$ ]
输出程序的反汇编代码% `( C+ T9 o* P1 [6 q
例子:5 X& l+ }# R' W! ], i
dasm 01.txt,0,1000007 \' ^$ Q) X7 C9 _& r) ~) [
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt1 G) ^" b/ i \
+ t7 p, b! k6 Z( q. E softreset
/ o/ `( x2 L2 }+ z 游戏重启, 但不重新载入ROM3 O- V# ]3 k$ n# _+ Z( @0 G
- d' D( `3 m" P) S& Z
hardreset7 M( {$ a% v7 _2 _7 l
游戏重启, 且重新载入ROM
' g" R8 ?0 l2 Q0 N: Z" ~! U: O, v, t
' J8 g4 R/ z1 [& f snap xxx.png
7 O3 j- i" a0 c) Z9 j# f( t g 截图为xxx.png. l) u4 T+ @& Z( x; P6 H& G' z* [+ o0 l
M1 l1 i$ E) @. l# h . B* d% \: Q2 a; g+ z
$ p' v+ F# x. M ! G; y' {8 A/ l9 L9 p
热键:& x1 j, N2 _/ ~' B. m( A( }; b2 [6 S
~ 中断游戏
, f, x$ X% u! P1 W) V: S/ S F5 运行游戏8 Q1 {: J. c! ~7 k" n) U( b
F12 运行游戏且隐藏调试窗口8 N9 o, j1 _7 A& d
F11 步入, 单步执行, 会进入子程序
( i4 v) N" v n F10 步过, 单步执行, 不会进入子程序' f7 m8 I8 j8 i# R( P
Shift+F11 执行到子程序返回
" l9 t U6 \5 d2 H1 x Ctrl+M 内存浏览窗口/ m9 I5 r5 P4 T* @$ C5 G
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
8 G9 M, f$ H" W- g+ N# e1 e: h* Y$ s) t) y. c+ V& h7 f7 g" A
{:4_94:} . z8 j8 M/ [( J
3 z& K/ O) R B" v" I |
评分
-
1
查看全部评分
-
|