|
|
1 u; n8 _ O3 {1 W4 _0 G& s, \
很快速的整理我自己常用的指令3 r, W9 } O C" _8 S. q9 a
' L4 S( W0 A$ i/ E' s{:4_112:} ( }8 d8 M- O' }) T8 j8 p T
* ?. N0 ~" s% r8 J3 {MAME DEBUG常用指令' n$ n4 I* I& _- n
. L& b- z8 {1 I- q3 y& w) B
内存搜寻: ci, cn, cl' a, n. X7 M# [) X; J
: A. ~! [; @( n- Z' F
ci
; ? X. ]3 G$ i9 B4 b. w1 T6 E! D 搜寻任务初始化, 每次搜寻一开始一定要输入这指令* f) I8 X1 v: U8 K& U
4 ~4 g7 o9 _( T( |
cn; e' H& V" h/ Q/ {( O4 l" J: m
搜寻指令4 s8 f @) _# y B5 _, W4 J
例子:
3 M! ~ ~' o! f' m9 ^' [( U cn eq,60, S, }" |4 H! j9 I4 r
搜寻目标等于60 (十六进制)! Y, f- e! `+ B! t
e) ?+ v+ ?$ X0 `+ R1 Q1 w, N# D
cn eq,#96' Z+ _) a) D- b# Z# A" \- I
搜寻目标等于96 (十进制)
" J8 f6 n& d/ w: b3 q
7 ~& E) L: B5 c6 l; Y$ o cn eq; y% E/ o8 f6 L' n
搜寻目标的数值没有变化9 B. l( o# F7 \' b0 B& e
* P5 j% _5 r2 p& l) Y2 Y! I
cn ne
3 t& N3 s3 Q1 h& v: [/ K! S" a 搜寻目标的数值有变化
; K; s# Q$ K! g B* y : \/ l) Z* @& d& ^( ]# g7 f
cn +
* d$ X) u1 p f- h6 p! b6 Z 搜寻目标的数值增加
, p2 p6 y) B2 u
# [' b) a* I, ~+ p cn -
* }$ ?2 n1 T0 l" S; N 搜寻目标的数值减少* g, H2 [% I2 s
4 A0 c" B: J( I; u7 k6 b9 W cn +,3
4 W# q( x$ U+ t4 Y! s% P 搜寻目标的数值增加3 (十六进制)
6 A# d( _# C7 }6 p
7 T' C7 m* o1 v# }: C! g0 b1 b cl' P( S$ j. L1 R
列出所有搜寻结果# K. N0 @* M# B: @4 G. { m$ g
3 d9 ^2 ^; S. t; h" j
cl xxx.txt
$ V7 p( ]6 K; T- b9 M5 v3 f: R' y9 H+ J 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
1 F V" P4 g# @% O0 w6 u! T% R& H( w' c# a2 W. |" @# R
! p4 L; |& _+ Q' I内存监视点指令: wp, wplist, wpclear# t' D, j1 e6 E$ h" }# T
例子:
* Z& Q# {! V' ~: k& K7 V# U2 e' y wp 1234,1,r, W& j- h# C0 p1 Q
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
1 U$ Z: ~9 s5 ]& D3 H! ^; }
X0 G- }0 A, e6 ^, I wp 1234,2,w
" n/ p+ y, `. C# L. i4 C 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2# z- O; r3 V" z, K1 n# Y; q
" \$ @; j$ ^$ g" n" b7 R9 @ wp 1234,6,rw, S8 [1 T0 Y/ Y9 r; B
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6* y! Q% c" Q2 m& n% {) a# \
1 q! [* H% h& X, e, X8 {' l3 T% f wp 23456,a,w,wpdata == 1
* e. b" K" f: F% G1 p 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
, J+ M' _/ P& V! v, S+ e3 a9 j- N; H+ @5 u# q7 ^7 ]
wplist& E) Q0 L+ G. N# ], s
列出所有监视点: d% l6 ]" d; F+ P+ f+ t
$ D5 o6 k: \3 _; e2 S7 `
wpclear 3# a# k0 ?2 u* e: z: o0 ]3 @
删除编号3的监视点
! q$ l1 `; C, \; S; A* v) k, f# n4 I( }! k7 R$ z5 d
wpclear6 x1 Z! U# h# z' c% x& e7 D9 ^# _- Y
删除所有监视点
0 [5 l' l6 T! l, h
7 _. c$ [) H7 h& ^7 q1 y/ x$ y % @6 U6 u+ A/ m6 }
( {& K" x6 X3 A2 `; U" l程序断点指令: bp, bplist, bpclear- Z) `0 Z' J9 Q! u% d1 K, U
例子:( R7 T! M6 C1 ~" R0 P7 h& s: u
bp 1234
$ N; D: z( c5 X( W' g g. f9 k- M2 e 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断2 i. w T3 B/ F$ K
3 l* y2 O5 W3 v @/ b, s$ \& } bp 23456,a0 == 0 && a1 == 04 } Q3 Y R! A0 v" |
在地址23456下断, 且中断条件为a0等于0以及a1等于0% f) B( r. u V. W9 W5 [
# I4 i0 y3 B5 h
bplist3 [ E: j4 {" H0 I8 X" k5 q9 w
列出所有断点
$ t" e7 r8 a0 G& c: `
+ B& I0 C- g2 r# C; j: | Z bpclear 3$ m: \% |# l$ t% [9 J5 o$ M
删除编号3的断点
/ {% q) P# v" c ]; _- `$ w/ u
bpclear
( e2 C/ w2 }$ c! x" J- I' y2 d2 x3 { 删除所有断点3 h6 {# ~: ?! O2 I, Z7 t A' m
* L3 A: _& W9 @ @/ E% c" S
8 a" `+ w- g) q0 ?$ D6 X# ~ 6 {3 s2 ?# `9 |8 j
跟蹤紀錄指令: trace4 _2 @; [2 {5 w0 g6 p5 _+ y2 c6 p, I |
例子:. ~: [& R& }9 x4 n, V
trace 01.txt* n1 m5 g5 H3 E
跟踪当前CPU运行的所有代码, 输出至文件01.txt
( u) G7 X7 d; @; {
/ D0 k% W& k. O' A trace off
! F& B- Y6 `% ]2 U 停止跟踪, 并且关闭文件
$ |5 R8 s; G, e( e2 w, e, I# F
8 j9 d" l0 C& F s5 c trace 01.txt,0
! }" c5 ]& R2 O, h0 c& Z( D 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
- c$ e0 n, h# T: Z) X( {' R+ W4 E% ?& m7 m
trace off,0
7 {/ `6 _; O6 m" L4 ^, s+ v 停止跟踪编号为0的CPU, 并且关闭文件9 [- |+ w- s$ _; Y9 x3 e6 u
$ A, R4 m! e5 t R* |* q trace 01.txt,0,{tracelog "A=%02X ",a}
* O$ C- ~0 A6 B' s3 x 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
8 d. j! W5 q2 a) ^ 并且在每一行的前面, 写上"A=a "+ S& t5 w/ W8 q5 s+ y
"A=%02X ",a为一个C语言printf函数常用的输出格式
3 i- D) O0 M O) M 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入& S8 k7 L7 k+ P0 P6 f8 t
X表示为大写十六进制数& f; k+ }0 B* q2 h& v
2 K8 \( O8 @- }& s( l) S/ t0 N4 ~1 ~ c3 ]
& B1 Y o* L. S" o$ r内存直接写入指令: maincpu
y( z- G5 V2 B" I- Q$ q) [- H+ V) k- T9 \ 格式为 maincpu.[][]@地址=数据
: `- d2 L& k$ i: A6 o 第一个[]:, a" d" W& }! f# N8 a
o 表示ROM地址
# [4 o& f4 h# L1 n0 |+ H" I) V p 表示RAM地址
/ A) s% ^9 O5 L% J3 F
9 _* h8 h& L) c+ s) `+ V* q# x! D 第二个[]:
) l) j+ g; r& `. m9 t. b5 C) T R d 表示4字节/ A6 c6 M( M, a6 `- ]$ l
w 表示2字节
% x* Z. i" p# M8 Z" M b 表示1字节
( i* D6 C$ |& y* o! i+ Q+ }: Y/ z+ B8 |$ v: o
例子: v5 w* x( b: o0 T7 C" k" Q
maincpu.ob@1234=FF( ]! a' f2 H6 K9 a! q. f
在ROM地址1234处, 写入FF一个字节 i6 Z, c; j7 S. r1 h" W5 d. K% p
. z2 q9 B* K- `& r" A6 k- H maincpu.ow@1234=4E710 R, E0 |. S, [! o, Z& m: M
在ROM地址1234处, 写入4E 71两个字节# ^) g, f8 f' W% q) d
- T+ l. U4 k5 n( |5 X" u5 x _ maincpu.od@1234=600A4E716 ?! j& H0 }+ Z' y: P
在ROM地址1234处, 写入60 0A 4E 71四个字节+ s7 [- o/ t6 R& q: F3 J3 D
) P+ E" w( V& K0 W, p; b: C
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
' P2 G( j$ I0 K; g9 S
5 L! `! O* k2 M4 x8 `
" X- R, a7 X0 x9 N, m其他:0 H9 }6 r' g- I0 D5 Q" I+ ], l
dasm 输出档案名,地址,长度; q( A/ m; R$ B4 D! D' L- c5 D
输出程序的反汇编代码
/ }; R% P. r7 b 例子:2 s( u' p L% E; T) Y# L E
dasm 01.txt,0,100000- t9 y/ U! Q* \7 w( p
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt t' v; |2 \# P J3 \9 v
; H7 L1 e! w1 e# R6 c softreset* _6 d5 R. l5 L/ F$ Q
游戏重启, 但不重新载入ROM4 _6 j9 A7 D1 [# O
0 k% _ h% T* n hardreset* Y$ m9 `: {( c; n2 j) ?( r' w1 H7 P, @
游戏重启, 且重新载入ROM
5 n6 ^; ]+ Q1 r
# J! @% v1 O; _+ j3 _$ U snap xxx.png0 R9 e7 q7 y5 j( f2 w: Q
截图为xxx.png8 U; P! I! m( D7 G* U
! U4 [" s+ l7 }& K: k/ t& N % W7 ]- B& i' {" h! ^8 h
7 l, k) \0 }: {
0 \3 h o$ ^4 {3 ]- n! u热键:
) [( X) p- }4 B. V/ b1 y# ~* i ~ 中断游戏
0 j, U: ?8 r! S* [5 Y9 x. I3 A F5 运行游戏2 j8 n0 j/ [' Y% e, ]8 o
F12 运行游戏且隐藏调试窗口
, w/ Q$ [5 T! v: K- K8 A F11 步入, 单步执行, 会进入子程序& n7 g; t d- N8 J% D$ l
F10 步过, 单步执行, 不会进入子程序" P: y- u! n- a; X D
Shift+F11 执行到子程序返回 }9 w* c& M X' V% @' t
Ctrl+M 内存浏览窗口
+ [; g; s8 t/ i* v$ z# x, H F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU( \2 H( R% s- f% h6 |5 h0 J
: h- C% E ] F- N- f; w{:4_94:} 9 u) r8 _* E: C
* J+ M4 N5 ^1 i. U: v |
评分
-
1
查看全部评分
-
|