|
|
: }6 w9 T9 a1 A& s很快速的整理我自己常用的指令, h+ W! b# m( M2 p$ e M2 i* H
4 L0 g( C# B) ?' D
{:4_112:}
9 ?0 U1 l3 ~) o, A6 n# V/ ?9 W0 Y: h \: {
MAME DEBUG常用指令+ C- W' H4 J+ }2 W# \- m8 X- i8 m8 u
" G* e$ [- A# }* k3 v
内存搜寻: ci, cn, cl+ Q/ y. Q6 O V# V- Y% u; E/ M
6 r* V3 L* e ^* S! ?# j ci( x9 y* Y! C: \3 a' O7 `
搜寻任务初始化, 每次搜寻一开始一定要输入这指令) I: K/ V Y2 @5 `' h' L
7 R' i; I1 Z# n0 |3 {: f cn
; v& b/ H3 p1 w 搜寻指令
. S2 n3 i' y2 H3 d/ y 例子:/ g6 K, p1 T4 E% I/ ]# G' p/ ?
cn eq,60' x8 }' M9 |1 @6 f+ \$ C
搜寻目标等于60 (十六进制)
D" l6 b; |$ n) @' u+ F , O r+ S# f+ @* t
cn eq,#96, I9 C& G9 f1 U: ]0 G
搜寻目标等于96 (十进制)
: G' `5 _8 y+ B, |1 z; B* s6 s. i' d* {- ]; C
cn eq
. _. u$ @ D" I7 g- \: @" ` 搜寻目标的数值没有变化
! Z. n3 e# \* k9 T& i! }, h6 A
( Y/ P, S' n8 k cn ne+ ?# y1 p0 p% Z/ _: D8 |
搜寻目标的数值有变化
; h' R$ e' j! a9 R7 p; S 0 N2 @* ]. ~5 J* S% r8 Y" s4 p
cn +. x+ z) t- ^6 n6 ]
搜寻目标的数值增加
$ o& ]% S- G' E: U: E# H
: R) y7 `, G% J- t) B' M cn -' q! ~$ e: i: k
搜寻目标的数值减少0 s# L( o1 `/ q7 G8 k
/ ]0 ~6 E; z8 n! R$ p' L$ v9 [ cn +,3
, I) j, `$ R5 b0 @8 B% ?! B 搜寻目标的数值增加3 (十六进制)
& S5 \% Z% @& w1 a3 @1 d6 Q/ ^" P( F' z& A4 I
cl* t9 O5 X: t. x$ O# f7 o* ]
列出所有搜寻结果
% t1 C# S7 b/ j* U" r, i6 @2 K- P* \1 p
cl xxx.txt
2 ]5 K6 l- s: m7 n 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
- ~- [2 x$ }2 J# H' O5 ]3 h+ x% ?- j" y, K8 A
+ C% i) K$ {. F5 j5 W内存监视点指令: wp, wplist, wpclear! ^; ?' e7 R# R* @
例子:
6 {( M6 @* i% `2 O8 H+ Y7 W wp 1234,1,r
- P. Y$ W7 y) K3 I4 k 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
1 M) b! u! U" A3 _6 m- h) C* p2 g: Q% c" q- }" e
wp 1234,2,w
6 r( b5 J2 Q" t: f/ l; ~1 O 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2; p- m' V7 Q# [: ^& l
8 n) ?/ `; Q( r& l# g wp 1234,6,rw8 H3 w" l/ j' p _% b% g% Z8 }! B; C
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6# u7 z& o! j: V9 M2 V$ }4 E/ U( H
) r; E$ o E" B# E$ }
wp 23456,a,w,wpdata == 1
* Z1 O* I0 w9 E. j# ~ 在地址1234下写入监视点, 数据长度a, 且写入的数据等于18 T/ P& U- Y6 X0 ^# O7 T# B# H! x4 r
3 l. S/ a3 S- Y5 @* _# x, f
wplist% n, y$ ?* T! V2 U# z; f1 J1 h
列出所有监视点2 k6 J, i1 `, o& }) m
- [$ s: o, ^2 I# m% j a
wpclear 3$ N/ n7 X6 k' y
删除编号3的监视点
/ d/ ^) t/ O7 Z* _& {7 w/ i* e
wpclear. o1 O5 W) k I5 D7 U+ X: a
删除所有监视点
7 X* M5 o+ h" O' n# l! ]
" A' ?5 m0 Y% j# Z, s ' D6 ^' j2 Z- m( r# @) D/ S
$ H+ v$ B! Q- W" m
程序断点指令: bp, bplist, bpclear' t3 {9 v2 y7 j. t2 e( X+ q
例子:" Z" ]5 B7 j' X0 n0 W; ^
bp 1234( p( a% G7 k( W8 x' W5 ?2 L1 a
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断- m- Z* s3 F- x* z! A: X
) k7 E: Y" q! W( e: E bp 23456,a0 == 0 && a1 == 0
2 {; h- C+ T( d6 v/ }0 j8 I 在地址23456下断, 且中断条件为a0等于0以及a1等于03 \) N ^ }5 B9 @ x3 ~
2 p& l4 \" F" N+ {: s7 M2 n; Z bplist! t$ s* r) [' A$ ^2 T
列出所有断点 C* Q* `1 o' _' X( t
6 N0 R* n3 W: N6 O2 e, {, T0 V
bpclear 3
! U- U5 Z1 d2 E1 |9 f* \ 删除编号3的断点
G5 |9 \: K: M% t% v [. L2 `
m- M2 f* m, n9 j bpclear
& l# l, J( c5 A 删除所有断点3 P% s9 K# p( z% E2 U
! U( i" a; X0 _3 g" d/ Y- c6 j& H
' D7 X3 j5 v$ U8 C" ?( U$ y1 k! m
4 Z2 M# Q1 Q- c跟蹤紀錄指令: trace& d/ j' @6 i+ I" K6 P
例子:5 }6 b& Q& M9 ?8 ]: C! a
trace 01.txt
8 W+ F; Q: N' e 跟踪当前CPU运行的所有代码, 输出至文件01.txt" T+ L3 n( d; d3 E2 q% J
$ O* i. y; |- y) x trace off: r" }" D9 h: B) v
停止跟踪, 并且关闭文件
7 u2 i0 b% @' M6 ^. d# u
! R' t# _& r2 f trace 01.txt,0! ~7 {$ f) s4 e% U
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt. A. h: I) ~& @, i, `
, K6 d- c3 n( t) c, K. D
trace off,0
" J8 u9 I$ u( c6 [+ J0 \0 F 停止跟踪编号为0的CPU, 并且关闭文件
& D5 x( k% y+ }5 v) m- w% w
: O1 S. b: T: h# G1 s3 |1 O trace 01.txt,0,{tracelog "A=%02X ",a}
7 A& P; v, C3 W N) ]1 G 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
- ~4 b* [0 v+ o& b: W 并且在每一行的前面, 写上"A=a ") Y$ }% N f! {7 F7 t
"A=%02X ",a为一个C语言printf函数常用的输出格式
$ n! ]" ~9 l4 U: ` 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
4 h$ M( u, P: p$ S# A1 W X表示为大写十六进制数
8 g' j9 I0 O0 V* d# m' I8 q2 j O+ O3 l0 j8 M) O* s& `
3 N5 { Y* V& d J. A) a
4 I. ^! G* I# H& j+ k, q内存直接写入指令: maincpu6 X5 a1 J1 x" T" o4 T
格式为 maincpu.[][]@地址=数据! }9 y7 v: Q) e
第一个[]:
& A- z! Y- Q7 p/ X o 表示ROM地址5 [8 ?! u( c' ~+ _/ O8 G* V
p 表示RAM地址8 z |+ ~* P$ ~) ^4 Q
# r; w6 k: H0 s- I3 b" ]* |
第二个[]:
; b M! V. C) Z" k d 表示4字节
2 U% |8 z* \6 ]1 {6 [5 h/ T) l w 表示2字节- Y' K4 L+ u6 ?4 Q! }, I4 f
b 表示1字节( D8 D" z/ A+ P: c1 v6 m
" W2 G. |7 I" C& _) z2 `7 a 例子:$ C5 h3 N$ ^6 ?6 U) t* `2 f
maincpu.ob@1234=FF
& C9 K* N1 W6 _! O# N$ g 在ROM地址1234处, 写入FF一个字节" r+ x d% J" M8 @- S% G
2 ]+ f9 o. W; N6 {* u) G- w5 X
maincpu.ow@1234=4E712 I+ D- n& d' H0 @, f* F" s
在ROM地址1234处, 写入4E 71两个字节
) ~" L( m" z* Q& P& X7 _% j( k+ {+ G2 D) Z3 g
maincpu.od@1234=600A4E71) ]2 z. c0 B3 x# w) s5 ^- L
在ROM地址1234处, 写入60 0A 4E 71四个字节
' E7 U L! f* k4 ~$ |2 \: E9 K+ P( F9 M" m4 t& s6 O, N7 p( }% X
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
7 }8 S! d# I6 i9 d2 \9 B
! R6 j5 m% o. U" D/ Q+ u( F0 I, O
其他:" R& L. ^9 v6 h2 X+ e
dasm 输出档案名,地址,长度
. i& ?3 m& R! y: d) L! r 输出程序的反汇编代码( C" h) t+ k6 m3 n. h8 C
例子:3 C$ \/ l$ p! [* {5 Z9 S" o
dasm 01.txt,0,100000' A1 P2 a1 c' p4 A8 P( o5 J; X, v) z
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt; Q% h0 ^$ F! q3 S
7 f0 p+ P3 H- ]& v+ ]6 b. p softreset5 O9 p# t' h- Q0 Z
游戏重启, 但不重新载入ROM
# U/ \+ H& V# Z. `! _6 ~; i U3 p5 M K! V3 I r! @
hardreset
; m9 M# R. L$ r8 ~ 游戏重启, 且重新载入ROM3 M8 Z; {$ D9 P/ z; O5 m0 i) H/ W8 M
6 p k- x, `# s- W2 h0 ?8 | snap xxx.png& W% B& a2 x j. l) @7 e, o
截图为xxx.png
8 S, u. W% {% Z' g5 x$ w, N) h3 z$ g/ b* q% q) B
' |3 q3 ?, b( n+ ~4 c
$ O6 @0 T5 B8 i' }, ~) c* m
0 Y- d5 f) v4 a4 Y热键:
; o1 x7 H( l. W, | ~ 中断游戏
g4 F/ G2 O5 E$ d: u# W" ` F5 运行游戏
, I: K: m& a3 ?- A* o F12 运行游戏且隐藏调试窗口
' P7 z, a$ Q: I3 } F11 步入, 单步执行, 会进入子程序$ b3 K, t. \5 c$ I
F10 步过, 单步执行, 不会进入子程序: w# Y2 s5 [" _9 F4 X
Shift+F11 执行到子程序返回
7 `0 t/ _5 g" `9 W& \4 f Ctrl+M 内存浏览窗口
/ E, | t |' f4 C* e8 a0 L3 A F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU- U# d8 w6 P, k# Z w! e, F
% `' H( a' H0 Z1 q! H
{:4_94:}
1 D3 y2 {6 ~- Y7 |, v
) }1 Z2 Z |" `9 f6 |+ M |
评分
-
1
查看全部评分
-
|