|
|
+ n" f9 ^1 x! w' L% y& s8 v6 S( E! E% k
很快速的整理我自己常用的指令
: N y: Q5 L+ O3 S" x1 o7 B" T" w! k# V/ s$ C! V& ~
{:4_112:} % e$ _3 s+ |' A3 G" @
6 m" p1 a& P( {1 `" bMAME DEBUG常用指令
) }4 K* `" f; n0 Z' L) s" J- F$ V% i1 X$ i6 L, D6 ~" t4 ~- E
内存搜寻: ci, cn, cl
# O; V' r9 t7 i3 M0 W6 b! N$ |4 ?- {/ \0 I* X( j/ r( R
ci
% q8 K n1 ]9 _; H 搜寻任务初始化, 每次搜寻一开始一定要输入这指令) a" \; j7 L8 C3 _0 F. X
' v3 ?/ _" g* B) g; t, I cn
3 v4 X3 S% S% A! d( S$ ] 搜寻指令
( C/ [. X7 d0 K 例子:3 P. f# R& U& v
cn eq,60
3 D9 m- O% S' o; n 搜寻目标等于60 (十六进制)
0 e0 O# ]! F3 ~8 f' r, g+ l
- T2 K+ c; n; Y cn eq,#96
% R x* u) V4 B* J 搜寻目标等于96 (十进制)
( r( V7 o. }! q" {# e4 E+ t1 K
" W/ y+ v8 C3 k2 q! O cn eq1 s, d, {$ c* m) Y5 b( r d
搜寻目标的数值没有变化
% X0 Z) g' g# b
0 V) N5 D* ^( |- N cn ne, Q! P7 |5 J4 M, x& y/ I# q
搜寻目标的数值有变化9 }% @) t% u( e1 x% K
/ Y9 \, F3 H3 u6 t
cn +' |1 j) S/ i" V8 g
搜寻目标的数值增加
5 {& u# R2 S7 L7 |( \- }
P, \1 _7 H. y, w cn -; r" w7 t, b1 d) C
搜寻目标的数值减少/ q+ ]) t! a* h- |
+ n9 Z" k9 `" v0 `1 t cn +,3
( n$ @. e$ {0 c2 r' c1 d 搜寻目标的数值增加3 (十六进制)
6 a* w- F+ B6 `: h( }) ?- Z$ e2 y' S5 _/ o; v, W
cl
# u. S( C, O' _( c a) [: r c 列出所有搜寻结果. i ], L2 D7 B' U
5 ^5 i3 ^8 ~2 r: e" r$ g3 q9 Z) D
cl xxx.txt2 U% R5 O8 P* U
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式0 n7 `2 F* p* T+ z# n1 L& a
v& D- N' X9 V3 n6 t+ u
. f) u+ J' K R$ v内存监视点指令: wp, wplist, wpclear! G- A3 h5 u! N) o) j
例子:# i5 d8 ?) O3 D; N* Z) |& a
wp 1234,1,r0 t8 M5 ^% ? ~
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
% m/ E( R+ p/ W9 G( c7 o) b
5 m" \* y, e' U Y. ^ wp 1234,2,w
7 h5 Q" O5 b* |5 s) J$ u 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
0 X! J6 M; l7 s. {# z N; ` 5 F ?/ X0 v5 K8 i
wp 1234,6,rw! |) l( `- ^& y* {# ?" Y
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6: b. q0 j4 R* H# y! X/ K% G
# s' e3 Q5 g1 ?" h5 e' V1 A9 K6 x wp 23456,a,w,wpdata == 1
. l7 Y3 D0 T& Y! L* s0 \8 V 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
Q3 @8 d v& V( j9 S( j, l: R; A+ g0 ]2 i$ D
wplist
1 O. t0 V( d1 K 列出所有监视点
& _" D# O8 ^8 h- g" A: t7 J( p4 G/ O
$ ~$ M% y; ^8 z! w0 X* P wpclear 30 M2 c! q- r, _* ?
删除编号3的监视点2 R( k; U6 v0 T3 T; R
- u L$ k0 X# s |9 W' _. |5 Y wpclear
0 e4 h$ E \8 w 删除所有监视点7 J+ h1 q' P( ^3 }7 H; |
) C) e6 w5 j# v o
- `8 t% \+ k* ]5 S4 [
: e0 y) I* L1 ^程序断点指令: bp, bplist, bpclear
7 P& U% S$ S* F8 } 例子:; u3 d9 X7 h! T: a
bp 1234
3 Z. r# l! d: f/ U 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
6 z+ A4 p/ o+ [$ n! Y# E1 }- p5 e& N! N" U" Y1 Z. r D
bp 23456,a0 == 0 && a1 == 0
; W% @# O5 h9 A5 s4 S% O4 Y 在地址23456下断, 且中断条件为a0等于0以及a1等于0
1 v, z; E5 U, G4 J6 B
9 ^7 F- E7 `" m! J/ X bplist* ^* L( o& g4 Z( i
列出所有断点' X3 L) y* i0 z, d2 T* z2 D P: x
5 a; s7 x5 s, h" N4 o bpclear 3
7 B& I* D1 n2 D( A 删除编号3的断点1 C' L0 C. \. y* J j3 g
" E& O, {5 t w; ]- M7 {+ }: H3 x
bpclear. ~+ x. Y* ?# {7 N/ w
删除所有断点6 c4 | K4 c' T" U
- F5 }+ C& L% p3 k, M, @7 f0 ^3 K3 k
R1 ?2 i1 d7 S8 V5 q# y) b0 ?+ [
( r0 U. e* T, a0 a: d
跟蹤紀錄指令: trace
( v% ^8 S! T6 X1 V: z3 A4 r3 E 例子:
6 L" U5 S1 R' Q7 P4 Q trace 01.txt, w4 V0 |0 X" u$ ]
跟踪当前CPU运行的所有代码, 输出至文件01.txt
! k4 K; `; y! ^7 C# q0 a4 v" E. w) W7 [- c3 M& h
trace off
! o+ C" u! b$ F( Y( g 停止跟踪, 并且关闭文件
$ h% E! H, H8 o; w6 q
8 G9 ?4 b j3 Y: b) R1 B/ ? trace 01.txt,0
* V9 `3 x4 b5 e1 U. r 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt5 }# G1 K' B6 x& A( w6 U
; }) L! b& u4 q( f" m! S- Y- s) G
trace off,0
" j; V: B* L" V7 A! f 停止跟踪编号为0的CPU, 并且关闭文件
! q6 R7 }, D' S/ k7 j5 q+ g/ C/ j8 P' p. O! x* g
trace 01.txt,0,{tracelog "A=%02X ",a}" Q8 N O+ Q' o$ f- |
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 7 H4 E( m. I2 G6 N6 m% F
并且在每一行的前面, 写上"A=a "# j3 X6 F. F" B g; l
"A=%02X ",a为一个C语言printf函数常用的输出格式( ]0 V! [+ s5 Y/ A" I
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
0 B7 J5 K1 Q$ ?/ o X表示为大写十六进制数
" L" o4 a3 f1 R/ w, _, u
$ E0 B% [/ `$ b
1 z3 K& ^9 _1 M9 E" {) ~
7 h& P7 g( r: n& f" E; E3 l) p内存直接写入指令: maincpu
2 _' I, ?8 h+ j5 N2 n& o 格式为 maincpu.[][]@地址=数据: y2 {. r: g% S
第一个[]:
# h6 ?9 W+ J9 Q! M# f& e- ~ o 表示ROM地址/ |4 }8 y- k' X$ o, Z0 M
p 表示RAM地址
) T$ t. T8 D7 R8 p5 U# Y: `
* C/ T9 R4 M( u4 K8 j 第二个[]:6 N4 g; U; X1 {+ {+ o
d 表示4字节
) T: H0 v7 g2 T7 s# ~% ~3 k w 表示2字节
2 L7 s: d" Y3 ] b 表示1字节
( m( f3 i$ y0 ?$ H6 s, `( O% M n
例子:
3 B1 N6 ~& {% ]. r maincpu.ob@1234=FF
; p. P5 d2 K3 K2 d! S6 l0 l9 y 在ROM地址1234处, 写入FF一个字节" ?' @- T, d8 Q9 N) d
0 _# U; e m2 S* c& x# B maincpu.ow@1234=4E71
. ^# O& E: p5 ?0 d V0 w ]& @# @9 n 在ROM地址1234处, 写入4E 71两个字节3 J( D6 K7 e l& r5 ]6 m
1 J5 }. N8 C6 Y9 f+ a maincpu.od@1234=600A4E715 W- i' J4 f, G
在ROM地址1234处, 写入60 0A 4E 71四个字节, ^' p9 J o& {0 P# j
) y1 x: p. V3 P1 p2 } 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
# E9 L# Q! r; `6 O - b' k- B# c& q( d( O0 o$ P$ c) \
' C% S- ~2 w% M: _. t" J n+ G
其他:% n3 [9 y$ Y. s4 i
dasm 输出档案名,地址,长度
" c/ f1 [9 |7 ^ M' C 输出程序的反汇编代码
) F+ v/ A/ D5 w ]* `+ R 例子:9 |1 }) }2 X" o
dasm 01.txt,0,100000; {- Z5 R' H! f
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt# `4 i+ z, K B H) M5 {; h' S4 o
/ D9 K$ K; J- L( a3 j
softreset% _5 ~# j8 A% R3 S
游戏重启, 但不重新载入ROM
- b' S/ g& U& _$ f$ h: g
9 {9 r8 H# i: A hardreset" L8 z, G0 p7 P2 w) ^
游戏重启, 且重新载入ROM* x; a4 z. L A, Q+ Q
@1 h- a6 p+ q& O
snap xxx.png# u7 J, O( x- e: J5 A# t# M
截图为xxx.png+ D/ c2 q4 d. V0 j4 q
' F( U/ a4 S$ R& w! Z& {* U ! E% u# t: J0 r3 m7 W: V) f
0 C0 m2 Y: F$ d0 h; j
. Z& h4 F- g* f# v热键:, ]( V; g$ K: C& l$ u
~ 中断游戏1 K0 i3 W+ [. z$ u5 i: q) M/ L
F5 运行游戏6 c$ E* A5 E$ x) {. j
F12 运行游戏且隐藏调试窗口' ]9 q: s8 }& E8 i
F11 步入, 单步执行, 会进入子程序
2 f8 h! H, u& y/ R0 | F10 步过, 单步执行, 不会进入子程序( O1 G( R( z! Z! R; q
Shift+F11 执行到子程序返回
( Z Z2 Z/ a; Y v6 u Ctrl+M 内存浏览窗口
i& L% t; f5 H) L F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
6 ?; u2 j. O) ?9 S" X
# m* K* ~( Y$ o+ J{:4_94:}
5 m* p0 \2 T% V! [; z( O0 Q- k) i- O% y
|
评分
-
1
查看全部评分
-
|