|
|
7 { ?0 b- m3 D) [' _$ g, e很快速的整理我自己常用的指令. ^+ L4 I( F& V* x. z+ D- z
5 m% F) [! D/ o$ D' z/ t" R) V{:4_112:} * Q( m- V0 l, z4 W! o7 q5 y9 j
: E$ a% R% K P* j1 g8 r9 j' }MAME DEBUG常用指令) U7 K5 d ^7 `6 {, b( A
2 k5 g5 l7 g, g. u- q& `
内存搜寻: ci, cn, cl) w6 r6 Q. m. b) O9 X
: \+ l1 P" u/ P5 f7 A" p' h
ci1 d% t. u" k: o
搜寻任务初始化, 每次搜寻一开始一定要输入这指令8 l k: z. ]# F4 |' q
: `) F0 M v# Z5 X! k cn
8 ^. v. ?/ {- N8 Y: `1 c' d. ] 搜寻指令
) H; M0 B* l+ J" ^0 \3 l6 A 例子:
$ P; J. ^- ?" l& { cn eq,60
+ l+ b3 {- {! m+ x 搜寻目标等于60 (十六进制)1 A9 K% O) M. M( v$ c
( ] r3 L+ S( c: T1 G) l8 Q cn eq,#96# T+ |/ D `% e7 b
搜寻目标等于96 (十进制)
E; H0 N( P6 M+ J' I% o2 l: i+ C+ O+ n) I. [
cn eq
% U' M1 e' _" ]- N9 S 搜寻目标的数值没有变化" W9 x, u( N& z2 Z; u% e& B
4 y8 r' G. d1 {+ Y
cn ne
# b4 p b0 I) Q& U 搜寻目标的数值有变化
3 @* ]( @% B% h. ?1 p3 h7 g
1 X J7 C: i) h' x) V7 ^ cn +
W! W! f8 k7 { 搜寻目标的数值增加
r8 c @, ]% ]2 P* y
9 N# X7 S( O1 @7 G- G cn -: s9 Z# j7 l# Q3 o; g5 `
搜寻目标的数值减少; {: U8 p( P/ \1 f b8 P' o! l" O
& y9 u+ ]! B: ? j4 M) A" I+ O7 p: @) i( {" S
cn +,3
8 @3 u$ Y, s. B1 ^ 搜寻目标的数值增加3 (十六进制)( x8 C0 Z8 R0 }/ l6 @7 Q9 g
! U: S- u6 Z& ^0 w4 v
cl
' F$ P" J1 v) c) v 列出所有搜寻结果, ~9 L1 L- \' P; v3 w) n
" p4 B) q" h# \! V cl xxx.txt0 y/ N6 x7 i1 n6 J% k2 _
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式+ \ `! O7 x; v9 |! N
, x& }: X# u/ N 7 H+ [' m6 u! O9 y
内存监视点指令: wp, wplist, wpclear
- m+ F* j9 S" o 例子:: ]3 `8 N' G X k
wp 1234,1,r
# K5 b/ I X7 J# m/ d 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度11 E( W+ ?# K8 N' r
. F$ v7 i) M$ ]& j7 j) a0 V1 J1 m wp 1234,2,w3 a7 t& U5 ]6 `! Q, K. z- q0 m7 f8 ], M
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度25 x* n* D" P2 V3 |7 a% h. }9 V
! k, \# z7 n. g% d, q wp 1234,6,rw
$ _) Q' K1 t- B$ Z4 N; F3 C 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
3 v& j0 E a; g/ W; ~/ _5 F2 l. l* k
wp 23456,a,w,wpdata == 1
" F1 L& Q4 @# C3 h9 n2 i$ l' M& N 在地址1234下写入监视点, 数据长度a, 且写入的数据等于15 s' x: I4 u P" X' b3 |. W
, Z% m/ ?: |- M3 V9 W& D- q wplist
9 ?$ O8 i) J# Q$ [* f" h, f 列出所有监视点1 \( w2 Q+ [. \ c) m& {
3 `6 L5 b' Z. p$ P: \7 t
wpclear 3
7 P) f/ n; K* c) G/ n! o# }4 z 删除编号3的监视点
0 A" I, `, y" f9 E' s
& }- C; g' Q1 n5 S: ] wpclear t! \6 d, Y" h9 l) `
删除所有监视点
& i' x/ _ P# O1 a
+ k, h# w! t/ R3 M, X/ X/ h
$ h1 P! R3 H0 ]1 G/ l2 d3 ^% H+ S
4 N+ y# W. i8 t* B$ {. Q程序断点指令: bp, bplist, bpclear% N1 X1 E/ h6 O" }+ ^
例子:4 V# Y, W0 u% w5 j& \1 U
bp 1234# [6 ^- ^0 H/ Q3 f, i2 m3 G
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断9 m2 @* p0 c% G; e7 @: N
1 O& @- H* Y% y bp 23456,a0 == 0 && a1 == 01 L9 I) P0 ~+ _- \3 R1 a" c
在地址23456下断, 且中断条件为a0等于0以及a1等于0
* a9 B2 V l+ H2 s0 e9 {. t6 E
9 J9 c# w. C0 j2 X J bplist
4 {- q8 l) ]2 _; k2 V) d9 o 列出所有断点
& n. j4 v! i9 `5 {
: K+ @( T1 ? D& v- s: g/ N bpclear 3# a+ I7 S" }' t. {. ^: D
删除编号3的断点) D" z8 U1 h, Z
: j F0 S. b+ J1 Z- A
bpclear
: z0 F0 X) d2 F, q1 b; u4 { 删除所有断点/ y4 _& C- j. ?: f: S0 c2 N. Y
" Q. Y3 Q$ l; ?1 @
, n/ v5 A4 H! o4 @6 U- g { ( j7 |. I e$ a$ }% D
跟蹤紀錄指令: trace0 _1 K( r1 b+ {7 ]4 ^% u" A) u( q
例子:- [: x# F" M, l$ |; K
trace 01.txt' l) w# k- p! Q6 h) V% p( n. g2 U
跟踪当前CPU运行的所有代码, 输出至文件01.txt2 ^9 U3 B1 |( `/ H |
/ A+ I/ x; S3 c& f4 l' G' d% { trace off
9 _4 D3 L' l# a, ? 停止跟踪, 并且关闭文件
& G' K5 ~, D8 { q: z( ~( C2 Z3 A4 X. Y% P
trace 01.txt,04 d# H# P! ~* g6 h) W
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt% l4 u. i# a# k, _' e$ c( E
9 \/ j; F0 s' i1 ^% S9 V, y trace off,07 K" v9 e, Z8 C9 }; e1 {2 i$ k
停止跟踪编号为0的CPU, 并且关闭文件* ?% Z3 B& y4 q' J* P' S% g
2 @$ d* \( x$ z0 @
trace 01.txt,0,{tracelog "A=%02X ",a}1 p) f% P( k1 k! ?0 ]2 p& v
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt , k k; S6 R- O5 |7 |! Q
并且在每一行的前面, 写上"A=a "0 @ e+ x7 j/ V: x9 d5 Q1 _6 _
"A=%02X ",a为一个C语言printf函数常用的输出格式# A- I$ |0 o& U; s" Q; U& O
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
+ m. Q' _4 w% X/ S% _/ } X表示为大写十六进制数! Z: `; j/ W5 r4 h: e
1 h% B( f: d b
M" }! F; M1 c- R: A- _
5 g$ O1 @( G) p8 ?7 y% D内存直接写入指令: maincpu
q/ W( J o/ y+ e' R: W# V 格式为 maincpu.[][]@地址=数据
7 U( a, g9 H/ w0 ? 第一个[]:
# W9 }9 i: d7 [* x o 表示ROM地址
. v. y/ T5 M7 L. a p 表示RAM地址) T7 c9 u! J k* d7 B
* X# H6 g1 |" H& [
第二个[]:
, ]& c6 H7 {8 N; Y% W$ S d 表示4字节' }+ `$ A& X. g0 e8 y2 ]
w 表示2字节/ A& J' f0 B' [, s8 e+ v3 G9 n
b 表示1字节
* N4 e* ?. C+ I1 ?& h$ q
) O5 e# @; @0 o! I! p, O8 j. \ 例子:' W1 B$ N: H. P; I
maincpu.ob@1234=FF6 t# S, g/ D, R9 H5 n. s
在ROM地址1234处, 写入FF一个字节7 t7 B0 R8 E* R6 m* X
y/ }/ Q3 A7 d5 M3 {# e3 g
maincpu.ow@1234=4E71
! X4 t! V/ h6 ]0 I. H \# h 在ROM地址1234处, 写入4E 71两个字节
0 {9 B- B& U5 K
6 I. T' B9 F0 M/ @ maincpu.od@1234=600A4E71$ k4 e8 `0 s2 S: |3 g2 w- L5 S
在ROM地址1234处, 写入60 0A 4E 71四个字节/ v$ }$ }7 h# D" f+ B" p- f$ g
X6 |: t' M: P7 _5 ^* q
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
9 |' }' n' l& X3 K( Z 9 I% x5 M1 W8 J+ v& t* C
8 h8 l! p$ i1 D# o3 C
其他:
/ y1 N! b7 G; L( ~6 m dasm 输出档案名,地址,长度& w* X" n4 c# R# K
输出程序的反汇编代码
1 ?( O5 \4 d _) A( s O8 Y6 G 例子:
5 A: r* ^6 o' B& U" l2 F dasm 01.txt,0,100000' C L1 c; t# J Q& [& D
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt5 C, s# m! ^: i) B) L- [
9 ]) S! f% O M. } softreset
( s1 P0 V$ k7 q# W 游戏重启, 但不重新载入ROM
6 c$ s" q# b) c8 I# L0 |+ n) }8 a0 E9 y
hardreset' a, q5 R7 ~+ I4 d( K [
游戏重启, 且重新载入ROM7 g, z! G- E3 d* P
4 Y! J$ o8 o8 p
snap xxx.png& w. g* G- {/ m! ]
截图为xxx.png
1 T$ {# |8 D$ P: W$ [
! }0 E9 ^8 g' s% _ ( }* d# W- R4 n. a0 S/ f' U
& `) ], x4 [1 G, r: d5 _- B9 b6 v + N- q$ K+ M" v' c8 s
热键:5 L' D1 j: p+ y- Y
~ 中断游戏
7 I) Y0 ]/ S+ P1 D: M F5 运行游戏0 \& y% B7 T. e" z
F12 运行游戏且隐藏调试窗口8 q" Z; ~1 d# {! W4 Y8 C4 P6 m' D
F11 步入, 单步执行, 会进入子程序
/ f( ^: \4 ]4 L& Q# u, F6 _1 d* {7 s F10 步过, 单步执行, 不会进入子程序0 A3 b) q7 f" z2 \; {
Shift+F11 执行到子程序返回9 z, U( Z4 U) u$ b6 N4 d
Ctrl+M 内存浏览窗口
9 {0 x( F4 n5 d! r7 Z, Z: I: @ F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU# `# g' p/ Y4 |
$ ?6 {4 E' ]2 v" O6 a1 s
{:4_94:}
) Q& e2 }2 i0 _; [ L' q" ?& Q1 q7 V; g% r) s
|
评分
-
1
查看全部评分
-
|