|
|
6 j9 `3 D- v% g
很快速的整理我自己常用的指令
7 u9 I" {3 \- {2 _% a! B& d3 w! K
2 {4 Q$ {0 V N9 G{:4_112:} % h% o, `: Y. s& U [' Q
; ]( O( z9 C4 k, m/ lMAME DEBUG常用指令0 m0 r J. Y2 `% ?. I- X
9 e( F0 D6 q) v) A, g) z; f
内存搜寻: ci, cn, cl) D6 S) @6 C4 v% w9 z9 U3 \" K
* E! L) s+ F: A0 ~% o+ b6 H$ C ci! Q$ ]7 o7 B+ t# Y7 U; s. U& t; \
搜寻任务初始化, 每次搜寻一开始一定要输入这指令* ^* X; G) m( q5 q0 e% b
& X8 s, l( H. f; B2 C' U. ` m
cn
& j3 ?4 [1 b) T- C 搜寻指令" q" d0 w- _; i! {6 N" U
例子:. ]# a, ~1 O2 z0 M3 Q ^
cn eq,60( b, l( R- c+ x' v' Q
搜寻目标等于60 (十六进制)
1 l+ N2 |: D3 t& z : ] W v/ \9 f6 r7 U6 l' l* D
cn eq,#96, e# H9 ?. d3 _. I! s4 f
搜寻目标等于96 (十进制)
h7 b9 @% M* L' q% [( f' f7 B
& m/ \( ~( c3 e3 d/ b6 z cn eq
U- I6 }; b. v; M1 h 搜寻目标的数值没有变化
0 t6 D; @3 B; B: d& Q% a3 P @3 `7 Z
cn ne
; \/ ] F* X \ 搜寻目标的数值有变化
" @6 s" x: y( {2 X. S' L ( s1 ^5 E( L2 {$ `! i
cn +
8 ^ M" }; @' K% J1 R! ~# ?5 D 搜寻目标的数值增加
' q5 h% Q6 @5 A _
2 X% p: ] m$ m# E( C4 U cn -2 Z( r! t8 t; f" r+ d5 T# \
搜寻目标的数值减少' O$ {8 u2 L4 }8 q
$ h0 r( V" l; ^2 e& D, ~4 a: e2 d
cn +,3) q+ Z8 ~& c3 x2 n' {8 c1 U* h2 r
搜寻目标的数值增加3 (十六进制)( o; c* z7 l5 s4 B& o5 ^2 E P; T2 o
7 U6 i, ^& d E7 `6 Q
cl* H. G5 ?4 W+ D. w4 S
列出所有搜寻结果
& B# ` `$ m1 o2 i5 S8 {4 ]
: c. q# Z& o3 p6 I% ~ cl xxx.txt8 c6 e3 {0 ?( B, _' ]
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
- t; p+ l. ^5 ^1 z" X* r; t2 b- T
! U2 O, ?* O( M
" F6 c8 E' ~" T, Y内存监视点指令: wp, wplist, wpclear, z5 R9 Q6 u8 D& M! u
例子:1 [/ m. ~) a6 T
wp 1234,1,r. |( |2 |7 b7 l( U# ]
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1# K4 V! X0 k8 J% Q& o/ i
& t: ?1 y( I- L: x4 J
wp 1234,2,w
9 h( d. W# S2 X- [* @ 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2$ v# W/ b2 O' o
; N6 w) x$ h; j wp 1234,6,rw* e6 P: g0 w6 a( N; s
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
3 d+ D3 Z4 M4 p, ?* }
- b: m0 K: B( {9 O wp 23456,a,w,wpdata == 1/ }, a! z( w& d0 ]" m+ J) B. J2 E
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
0 {2 H' \5 B% Z% T$ H7 Y& [$ F* t
wplist( v' n5 U9 F+ q B0 h
列出所有监视点7 ?9 n% J5 v$ C# V. @: K" q
. S( A# o$ w2 n- c" i wpclear 3
4 q5 \% ^7 T% i2 r: [1 N$ {& J$ l8 v" A 删除编号3的监视点
- }1 F9 O. ~4 r" ]9 P; c4 {6 c3 ?0 L6 x7 ~7 E6 l; d$ v' ? A
wpclear
$ v) R5 g( _( o, m# Y 删除所有监视点7 s9 k- q/ l( M! P# g, e
! v7 |( s1 ^# c/ z( Z
" O9 ] C2 v0 F, L9 p
$ F/ \/ K$ L2 `+ E: h" b1 O程序断点指令: bp, bplist, bpclear
% c0 N6 H# h7 s% {0 n6 `# [ 例子:/ \3 L- T( S! g) L( g) x* z
bp 1234# l* `$ T( h& E& ?& q
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断) x3 w+ e K' {/ [* ?! F, E
, a- P* _: n' G: ^# X& k
bp 23456,a0 == 0 && a1 == 0& K: O5 {0 } h
在地址23456下断, 且中断条件为a0等于0以及a1等于0
. _- w. M# ]2 R. M m) V7 L
- o3 X( S' X7 [# R bplist( [! ^- _. b- o: m
列出所有断点
" P% u( g9 m; G( g) |; Z& h/ D% _: \( C1 X) C* Y
bpclear 3
6 z3 A( G0 y3 g- C1 x 删除编号3的断点( G2 D% c* f7 D
; k" l$ F) S9 a; x1 a2 O% M. U bpclear4 {2 D8 ~1 ]' G8 [& t
删除所有断点
; y: x% z& W# n
* \9 q3 R: @0 X4 N: Q9 A / y* O& A2 f5 P
8 g/ u2 N3 I2 X+ w
跟蹤紀錄指令: trace) ?+ U) a7 m ]: c+ K4 c
例子:5 V! p. _( s: {. c0 T$ `% _3 Q
trace 01.txt _ F+ }9 K& q6 H
跟踪当前CPU运行的所有代码, 输出至文件01.txt5 P5 x& J; l" C0 {% V6 N+ H
: t9 O% o- M. b) \ trace off
& \" h) x2 T- @( Q 停止跟踪, 并且关闭文件' O7 q5 M' u+ F5 r a
6 _7 _& z2 z" h2 D* o
trace 01.txt,0) a" k {) ~# z, J2 a( Y
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt* x8 n* F/ m8 s( \: H
2 }) }1 o! w7 S- L) Z trace off,0
" K5 ?9 z' m' G/ y/ P" I7 w! P 停止跟踪编号为0的CPU, 并且关闭文件
, W# ^* n) W% E- l; @: S9 \2 v* m9 K9 ~% m. X# k+ o
trace 01.txt,0,{tracelog "A=%02X ",a}
& V. \& _7 _" e t 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt & Q+ a* p0 X' u
并且在每一行的前面, 写上"A=a "
; ^4 U% `4 J! L* p! H5 F' n2 | "A=%02X ",a为一个C语言printf函数常用的输出格式- \3 L7 e5 {0 l+ m
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
1 |1 E* [5 r9 X0 R! Y1 } X表示为大写十六进制数
( I, B6 K0 L$ W, Y Y6 s, U2 i. R, ~0 y0 w5 X
h3 x, C! }/ e' h
; S% ]2 |0 Q. ]; s7 k3 Y# N' L内存直接写入指令: maincpu$ Q4 H9 V: d5 J( C9 Y$ f( B8 d
格式为 maincpu.[][]@地址=数据
. ~8 F; l4 Y. P3 m& o$ m# T* b 第一个[]:
3 L4 S: {' L/ ^ o 表示ROM地址) v" y, I7 a* m2 G7 q
p 表示RAM地址
B" E# b }- i& M/ M0 _5 A& i" Z% w# S) \. o9 o4 ?
第二个[]:
" |- X$ ~% W% J9 ^ d 表示4字节
$ s0 `. B0 c0 e; N: [! N- T w 表示2字节
- J& D* Q2 @% s b 表示1字节
% u- o7 d9 e, f, t. k* b- h
3 T3 ^) O3 C; P2 @) C* w/ J7 J, [ 例子:
$ ~- u" J" K+ e2 K( @ maincpu.ob@1234=FF
" j) d; U$ V- b3 }: J2 v 在ROM地址1234处, 写入FF一个字节+ X! S% r8 q% \- c
/ Y6 J/ e6 |( i, Z: H, d& d9 I maincpu.ow@1234=4E711 n* e, y2 b3 S. k
在ROM地址1234处, 写入4E 71两个字节
@7 T4 |, C5 K# n4 f, F1 _% S, [4 C3 i0 G& s2 a% z
maincpu.od@1234=600A4E71$ c# J- l. k# a' B+ C" G
在ROM地址1234处, 写入60 0A 4E 71四个字节
, r6 |- W' ], W- x! l8 U9 J6 N B( k; h1 F& ~
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写. K' g( ^) b% R
6 v" q( {" B7 @. R$ K. X% ?% ?) r: j& ~, f5 i
其他:% x: y6 I' ?: x
dasm 输出档案名,地址,长度
6 R, [9 R$ ]9 b! A" J 输出程序的反汇编代码
6 x' A# e0 f8 Y; ] 例子:' G/ }/ C H# V( \' v7 D
dasm 01.txt,0,100000
/ l) v) l9 B$ |2 H4 n' r 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt; L+ d" {. Y' y9 h2 A
: }) t# Z% R! r Y" U) f
softreset
0 e$ a- v2 e: x& H 游戏重启, 但不重新载入ROM
5 A/ Y8 c' }6 l3 m7 ^0 }5 }2 r* M, H* x6 d: M- w
hardreset% N; a; |2 |- F& l' R9 _6 U
游戏重启, 且重新载入ROM( p% I! `8 E* M `" {
; r Y$ g1 u9 n! Z1 Z6 D0 G
snap xxx.png
/ h4 W$ q7 O& y; W# `+ S! D 截图为xxx.png
5 }6 a" s9 L B% S* O% y3 e5 c& [' I2 T$ U9 I
1 ~% }6 T9 [- f! h
- D: B' D' m+ y+ a5 ?+ U
$ p) o9 b6 z O. Q- q: U热键:4 p9 v( t( x; u: C
~ 中断游戏
3 \% `) A/ f! A+ t; w* r F5 运行游戏
; S6 M% F3 A/ l5 B) I' X( ] F12 运行游戏且隐藏调试窗口) @, }, B& r# e
F11 步入, 单步执行, 会进入子程序
; i9 J# k7 l" s' W1 K/ K0 O F10 步过, 单步执行, 不会进入子程序: F, F( U$ R, C# k" S; F# {0 _
Shift+F11 执行到子程序返回$ Z- h/ U: M; A- q, c
Ctrl+M 内存浏览窗口
9 ~/ b5 V& ]7 x- T0 n( M/ Q F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU; q# w6 i% ?: p, y P' M: H
8 b' c+ b a+ p6 Q1 L- n5 P3 H{:4_94:} . Z8 X2 Y* z* r! m: [8 H+ ]
/ @; a' K$ ~1 {! W& D x& l |
评分
-
1
查看全部评分
-
|