|
|
. a; D+ A- Q* j. A! K( k6 Y) z
很快速的整理我自己常用的指令
% l8 g- F% M- U9 B* c0 B8 c0 z0 O3 H; }/ O. U
{:4_112:}
6 C; p$ _+ E- q7 G, V% C; S6 X( c" g7 u" ^6 x& o$ ?* r: ^
MAME DEBUG常用指令/ m8 ?8 a8 ^- B$ c& ?
5 _- }5 L/ E. c) p. `. B& ^: M0 n
内存搜寻: ci, cn, cl
7 [, V7 n+ e. J7 U& V5 ~- B; i+ m$ x: z9 n1 V
ci9 r0 l2 x* j, r7 }1 I
搜寻任务初始化, 每次搜寻一开始一定要输入这指令2 H# j( F% S- l' S1 l, g' x
/ R: `# q3 t R% } g; P) S0 z
cn/ R' P- `# l Y; y; ^
搜寻指令5 t& W# J% r, f# @) p
例子:* Z3 w. N/ K6 z5 Q; ?: ]
cn eq,60* ~0 q. j# D, {; S! R1 {5 ]1 v+ w9 o
搜寻目标等于60 (十六进制)
+ w3 @" {" B0 i% w b: r; b1 q- Q( F+ [* C# @& s
cn eq,#96
# A# J' L2 F4 E5 j; A- _$ Y 搜寻目标等于96 (十进制)
4 g/ p" f9 p: o! F
' L# L* j& w' V5 M: ` O cn eq
; R P. N& h q 搜寻目标的数值没有变化5 _0 x/ p3 M5 U. h
) R6 J. g: e: k; N1 a% ?1 j cn ne4 P0 v8 t I( N& J' ~+ V5 F
搜寻目标的数值有变化
1 g/ S" _, @: N ) A6 I& T+ y5 U
cn +
; a k1 Z6 w1 q3 r% p i 搜寻目标的数值增加) _+ V0 I0 d" C+ K* R- V$ l6 Z( t% _2 x
& x4 B6 `6 k+ n- @; w, n1 d
cn -
- X% Q/ O5 C" r+ W 搜寻目标的数值减少
' X. `, w, i( n" X
3 D |) N$ M& S) }- G cn +,35 r' B+ w& |7 N. G) j/ K& v- z
搜寻目标的数值增加3 (十六进制), X" z3 Q% e: U' h' r8 w/ x4 f
5 c" u, O0 e, N3 p, L
cl
e. }: H. G0 O \ 列出所有搜寻结果, B* Q R( t8 g1 U6 ]2 O
0 q1 m, Z9 }+ D- W' |
cl xxx.txt
8 E" K" O$ j8 R8 x* u+ U 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
; J3 O. S$ N! ?% G" b& t
3 r Y" ^" @7 `7 d
$ Y) f# W h b" Q5 ^5 I内存监视点指令: wp, wplist, wpclear
" X& P5 c# @* w7 L2 V 例子:
2 @/ U) p+ v6 h9 k( E; Z wp 1234,1,r
0 M3 U# K1 ?+ \# d; \% c4 W3 h* L 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1& i. o5 d( n; o) m9 | i; Z# a: l
) A4 m" G7 d# F- v" ]& s
wp 1234,2,w
" {7 D5 _: A4 x5 E, T( p) E& g 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2* P/ w7 P; g- s8 J; e, i4 D4 ~
. [7 O Y% g' a0 c& x6 K! b
wp 1234,6,rw
5 c6 a# O1 b/ A* n0 @ 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6$ i4 T9 q& o8 T" ~( {' U6 S N
, O' o. Y) G3 T7 g$ B* ^4 p
wp 23456,a,w,wpdata == 1# }3 P+ L9 H5 |& p8 p1 ^7 B5 B
在地址1234下写入监视点, 数据长度a, 且写入的数据等于14 D4 t2 F3 X6 Y! F
+ V% M. `3 W4 r& T, R3 j- \. q2 J
wplist
. ~' v4 n: _/ Q2 h( t+ O/ K' W6 x 列出所有监视点2 F, R& y4 K3 T. u6 {0 L8 _
% j& O: Y$ N# W" o3 s7 G' \1 w
wpclear 3
9 ~; t% r4 a- \3 ^; b 删除编号3的监视点2 i6 c; \; [# @
: A% }7 v& i( E! [) p0 Q' ] wpclear, B) T+ n; m6 B. C) Z0 R
删除所有监视点- d% [3 O2 `# x9 a/ z
: Y) N: F. `. } w/ S
7 m4 Z. D. [ m& Z/ n: I1 r) d' l
程序断点指令: bp, bplist, bpclear
' |4 F6 e3 @7 W/ s6 x+ n! k& P' Q 例子:
4 n; g( d% X2 i# c, c bp 1234% M" v9 a) I" A. T% _) ^" N8 O8 Z
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
0 l G6 [3 c1 b* C) v( D% d2 v5 K/ I
bp 23456,a0 == 0 && a1 == 08 F4 [& q7 i. ?
在地址23456下断, 且中断条件为a0等于0以及a1等于0
" j4 P6 \- k* d( D1 K- U& p( u8 E/ S% T9 F5 f
bplist
0 y, D9 u6 A1 a2 R' \% C( n! ` 列出所有断点
4 C$ w2 |( D9 v3 f3 [, g- j! U* G/ B
bpclear 3
/ R1 F- r7 F* p; ^0 i; g* u 删除编号3的断点
& G: X# \% e8 W4 \5 i6 r- b7 x, k) J5 F
bpclear
' |+ H/ [; u3 Q, Z 删除所有断点
6 ]& I2 b9 [" U' _9 [' Z+ { l' c8 b4 r) t& K A, ^
d# m }5 Y0 Z5 z8 F; A% Z
. r6 ^& |1 n7 w跟蹤紀錄指令: trace' s8 a g/ b( v7 T) p/ e4 w- g
例子:+ f' F- e- H! a3 T+ m( s6 E
trace 01.txt
& F" j5 y* d7 U: k/ X8 _( t3 | 跟踪当前CPU运行的所有代码, 输出至文件01.txt* ]* d; z5 D: _8 f3 n' N9 E
! a, p& Z& K+ c3 w trace off
" h, P0 N: D1 X5 Y) k, g 停止跟踪, 并且关闭文件
5 E. z% S" O. q# C( g9 B D- u: W0 F5 ?
trace 01.txt,0
6 S0 o3 s. A: f 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt" ~9 M0 C; |& h- {
" X0 ?( U, _ |; Y
trace off,0
1 G8 j: c v" K" Z# R 停止跟踪编号为0的CPU, 并且关闭文件; r$ u# V* d/ M1 ?. p6 o
7 U, q0 y+ A$ C% O2 {3 v trace 01.txt,0,{tracelog "A=%02X ",a}% i. A# ~+ S5 T- o2 S% I, q
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 8 p. {2 p- T5 u5 W7 w
并且在每一行的前面, 写上"A=a "% J0 R6 _# d) C# ?: u
"A=%02X ",a为一个C语言printf函数常用的输出格式
* J$ K" q6 N2 V" {; J 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入- D) ^9 V- K [
X表示为大写十六进制数
0 d' e* h- h( H" u: p& i2 [9 n, b# t9 E1 }
( P9 H0 c8 r# T+ F6 D0 L1 k1 C" ]2 L
0 \5 I& [8 n9 D) G6 z
内存直接写入指令: maincpu/ B7 N9 }3 B: s7 s6 J: v8 G0 E( w; k
格式为 maincpu.[][]@地址=数据
7 w( A; F8 g2 x 第一个[]:
' K: Q$ U& V4 _ o 表示ROM地址
8 |9 g+ L7 U. h9 m" B p 表示RAM地址" }3 C7 _. K( v7 L( ^
1 \" T k! v4 t j& ^ 第二个[]:6 M! r: H6 F0 _2 m( M
d 表示4字节2 C" Z1 I, l3 k+ g7 u' D, B' g% J: A
w 表示2字节
8 ^' ?+ y- g9 W) a b 表示1字节
7 Y7 e) z2 ^5 S# M' ?. x! F; X' v7 G$ W# A9 }
例子:1 s* @! u; P O
maincpu.ob@1234=FF
0 q& W. g, S) V/ V' s3 a `; O, Q 在ROM地址1234处, 写入FF一个字节
8 H9 V- X) A/ g3 a# [( i8 N- Y1 v" e; s; v+ d9 O- y( X+ p0 F
maincpu.ow@1234=4E71
* l& }8 l3 i; y2 d3 k 在ROM地址1234处, 写入4E 71两个字节; [9 n7 p) q+ S* u. {" w
4 Y: n; ~$ a: h1 T! m Y
maincpu.od@1234=600A4E718 ^7 R6 [, [; T, ^% ~ L4 L; m- D% A, j
在ROM地址1234处, 写入60 0A 4E 71四个字节, J8 B8 I0 L5 K6 \: U- U: o
% ^# G+ X- d; X9 y 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写# ~8 n, L0 v+ \( B; `# c
~* z" | t/ y& C' m# }' Z
5 ?! I5 i7 t9 Y+ j& p. U其他:
$ t x7 C' U: u6 s+ M dasm 输出档案名,地址,长度
1 Z4 v/ w* I& ~" U- _3 T- f+ M 输出程序的反汇编代码! E, c! B) J6 Z' h7 g% C6 p8 V
例子:3 ]) u) o$ h" B, A
dasm 01.txt,0,100000' c5 ~8 @3 z3 x/ d$ \8 p) i
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
5 T8 ?/ p" b; t8 v% t3 _( G7 S" b
softreset
5 c, {7 D. k( P2 s X 游戏重启, 但不重新载入ROM6 S3 r: C3 q% y A
3 U% v8 e8 U& k( x& Q0 {- t: D0 p6 L G |3 p hardreset& ~; r; K, F. E; C# z' i k
游戏重启, 且重新载入ROM9 U9 S9 C/ ?# N( @
" B* d2 X9 s' \ snap xxx.png
8 `7 [/ ?- S% P6 | 截图为xxx.png# R( m/ D+ s: i: Z
* E5 y7 F! H, B+ ^" Z# K
6 P# d9 B0 G5 z
: C+ O2 L" b+ q6 T 8 L/ Y: F9 g3 |! B; F6 N
热键:
" Y/ z+ Y u# y ~ 中断游戏; A# {/ W1 X6 I. K! I
F5 运行游戏
8 w6 h. G: V: P @: N F12 运行游戏且隐藏调试窗口( a' }4 }2 b) X0 j4 J. _# E, Z; u
F11 步入, 单步执行, 会进入子程序
8 h+ R) q4 a: m, I3 d F10 步过, 单步执行, 不会进入子程序, }/ H, s! t2 M
Shift+F11 执行到子程序返回% [' }5 N+ I$ i& H; ]& }+ N
Ctrl+M 内存浏览窗口) g- z5 ~) A% C' V- d
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU% y, V7 n$ `( @0 L& J
( j, `, k7 v1 T2 v! T{:4_94:}
/ d. O. E4 G+ y; ?9 K. s
6 B) U; J# n. ^2 C0 y- W3 } |
评分
-
1
查看全部评分
-
|