|
|
, V' a0 x# [: Y' O, e( |很快速的整理我自己常用的指令& ~: t5 ~: v1 G* ?9 p% S
3 `4 X h! k2 \1 l8 i{:4_112:}
* F( A6 k# Y+ ?3 H5 t" O. u
) R; O1 }# H; N6 Z+ @( aMAME DEBUG常用指令2 s2 `$ i& p; X
5 d/ x B6 s# C9 \/ C, r4 q7 }6 I7 U
内存搜寻: ci, cn, cl4 q" C# [! g4 C" a
& f. [9 s+ X3 i/ X
ci# g' `; e+ C0 G6 [; J# q
搜寻任务初始化, 每次搜寻一开始一定要输入这指令6 ]3 e5 ]: n0 J
8 e- g. T: G5 V! y
cn
' O6 F; E. C' Y J/ ], ? 搜寻指令
. S/ x3 `$ ]- {8 j) Y 例子:
4 v& \/ }- x* l% ], k' k. S- o( `! f! c cn eq,607 c- X- O* v% |4 s) b! N* S! n0 N
搜寻目标等于60 (十六进制)) R# Z# T$ f4 ^% X
0 f( I$ ^/ q f7 ~/ T* I2 F/ |
cn eq,#960 d% M+ T; m5 k4 h: k+ ?9 A
搜寻目标等于96 (十进制)/ Q; d4 o2 @: T; b( G# v; [
2 M" t- D% I2 S- R
cn eq
' a4 w2 R. f9 f$ t& d 搜寻目标的数值没有变化- t" m/ r$ \2 t
" p9 i' h/ Z3 } cn ne
; `/ s$ k# `( c 搜寻目标的数值有变化5 v) A; @0 P. R4 q# t5 x
: ]! V1 E9 ]2 |! K
cn +& D$ B* d2 G3 J) F) u* X6 G
搜寻目标的数值增加
. E% k1 q! m* _ " s5 K; [1 s% \7 d( X6 a
cn -
" ^' _, P' q8 y$ r5 h, c6 p5 o 搜寻目标的数值减少9 _5 v" B# E& Z% z4 M
6 I+ }, b3 A9 P7 E8 W& K$ V cn +,3! z8 Z6 Y( {5 [ e6 ?/ U
搜寻目标的数值增加3 (十六进制)
0 M/ W" V$ B. h8 _* W9 Y
. X" J! Z, _1 \. P cl. _6 |( f' |+ y- T) ~( ~* N
列出所有搜寻结果& W* k6 O( \! o+ }$ l8 b0 o
% N0 R$ W; I9 n3 ?& v
cl xxx.txt) T: C* @% Y3 u4 z' E
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式3 u# T% B4 l6 y
! T3 m {$ T1 I' v
( L9 u" ?# B/ o y* b% B3 @
内存监视点指令: wp, wplist, wpclear$ V# o$ d" d" l" E
例子:
& y, P/ v, Y' e4 ?8 e2 p- D% w wp 1234,1,r
& I, P- C! ?$ y- Y7 t 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
1 p- n6 j! ~! o# v, ~8 h5 z1 B5 m v4 w0 E1 `6 a7 u
wp 1234,2,w
) z* W4 B4 P8 R- [/ e; t 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
5 c+ J! f( x8 |1 c E0 B' G; s# A- M5 K: Z
wp 1234,6,rw
, x# B1 ]$ H# n3 V 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
! x" p& R5 l! e0 g* h
" E8 X+ g: X5 p" q" d+ x ~ wp 23456,a,w,wpdata == 1
# E% U# b" Z- ~3 W: F7 a 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
. L; ]5 W; Q% R8 b7 w. f; j1 T' P' o6 d2 y+ [
wplist
7 N9 D2 ^$ \! v 列出所有监视点+ v1 N' \ o1 a" s
5 y6 c" T" Z2 q. i7 l
wpclear 3
* ~" J$ N5 ~' |3 P3 p 删除编号3的监视点9 I8 k9 u$ E9 x3 p0 b+ {2 `
1 \' |' d8 N/ H! }3 F* R6 h wpclear6 y3 [' [ |4 P, E {: ]1 [+ b
删除所有监视点
* H& h7 j; z9 f) p3 x7 X/ Z2 j) q3 A9 L) B h
) C* |# ^" D+ f4 m' u" Z$ ~& y
, z0 D) d$ G. u0 M5 Z程序断点指令: bp, bplist, bpclear
3 C# D, w; Q; x6 o x7 w% V 例子:
5 o) S% y, t( M; s' U7 j: b bp 1234
$ Z0 c4 o$ c/ z% i3 B! `9 ]& _ 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
, g3 { N Q2 P& t4 `1 @$ F5 s1 q) g9 j U
bp 23456,a0 == 0 && a1 == 0
2 {* U1 f! w3 f5 @8 d: I9 _ 在地址23456下断, 且中断条件为a0等于0以及a1等于0) D( k `& F! `0 ^" z
$ v8 ?+ v& @ H1 V( g7 y4 ? bplist8 Z/ {" `' ~9 Y+ {# b8 H0 D
列出所有断点. k( d' S9 C& H* ^
8 a: A* T O+ B* ~ C2 M
bpclear 3
7 V. P5 e8 v1 O7 H; {3 p 删除编号3的断点
3 Y* H+ w. ^/ a5 M" k2 E2 ]. f7 L2 O$ f
bpclear2 h% D: d$ ]0 E: p L* l L4 t8 A
删除所有断点
# ~. e/ ], L4 z4 _9 m( W4 s
% @$ s4 a1 p2 x I9 g ) ]% U+ N% `7 }( E* }& t
: i4 m) J* `- _" R跟蹤紀錄指令: trace% N d2 `" q6 E/ m
例子:
: c8 t1 ~) T3 ~, | trace 01.txt
" w* ?5 s5 K& s" H; E$ V 跟踪当前CPU运行的所有代码, 输出至文件01.txt
0 T, Z6 g- l; F, B0 Q# }+ m( @2 I7 ~5 j i+ _
trace off
' Z- r( V7 Z* e. Z9 @& G% x 停止跟踪, 并且关闭文件
" v% O# c. `9 s5 v
+ N1 y) a5 V: t* j3 T trace 01.txt,0, U, v! V) F6 S! J r* j, f8 v! M
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
! z! t* S" }. ~) l
+ r8 k0 j0 |" L) G$ n0 t6 z trace off,0& t/ w" F% T4 b! @
停止跟踪编号为0的CPU, 并且关闭文件
0 {/ w6 G1 ?$ m! c0 w4 _9 P* H( a
trace 01.txt,0,{tracelog "A=%02X ",a}
9 l* A$ R u/ d) U: k/ w 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 9 Q9 c; p- f& e+ l6 v O7 P# D2 b
并且在每一行的前面, 写上"A=a "% D" w) ^; Q* [+ h0 P% l
"A=%02X ",a为一个C语言printf函数常用的输出格式
" F6 v5 e% b# S; [( k5 C6 I( N9 D' ? 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
6 U) ]5 `+ ^& I7 G8 B6 x2 }. @ X表示为大写十六进制数
2 y3 J! N3 r% c( [9 u* F0 W" Z; S& V8 q# `' g1 }
( }' b6 }2 U+ N/ ~/ X: z9 z5 b; L4 L6 U/ E
内存直接写入指令: maincpu7 ^9 X, f" ]1 L7 h
格式为 maincpu.[][]@地址=数据
4 Z) w" u" [, a9 q7 J 第一个[]:
& W6 |( [ ]5 P7 p. ^* l1 m0 M o 表示ROM地址. w# O, v2 ?* K/ ?* k1 @
p 表示RAM地址 {5 C/ n1 o* W3 ?6 S& i2 t
* A; w5 P" \* Y- _ 第二个[]:3 Z( t/ S- _( B8 T
d 表示4字节
( v; f8 z X- {* f w 表示2字节
- s; A7 r/ ]; ^' Z b 表示1字节
8 h) U t' [: W4 @9 @" v
* A/ B3 }$ L- w" T; \$ X3 V8 ]8 ?; P& C H 例子:+ U) S! c) S* e, n8 c5 ?* g6 h4 w
maincpu.ob@1234=FF) _. |0 { Z4 G" l" D- x! \% G
在ROM地址1234处, 写入FF一个字节" e p8 B3 b1 c7 ^* F1 ~, @7 t
; d, A. p7 {4 f, C( R0 A' I maincpu.ow@1234=4E719 O) a$ j( h' c7 p
在ROM地址1234处, 写入4E 71两个字节
4 y# l) O. k; I6 ^+ O) e* R: ]0 `! N! o
maincpu.od@1234=600A4E71
) C3 d& M' ~3 i0 z9 V 在ROM地址1234处, 写入60 0A 4E 71四个字节" X" R2 }2 p l, |
/ L6 Z4 B# V/ {4 W, S& l8 ]
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写0 p7 t; c3 n. v" I
4 z, T, r7 O2 k# P. M2 c& c: n- R2 e
其他:
9 G" X% b; m& x dasm 输出档案名,地址,长度
* I e) O" w. F- m9 \) C8 s$ ~$ O 输出程序的反汇编代码
9 J8 D' u# N7 w6 \/ F! j 例子:- N5 t" E4 \5 z( D6 K5 e
dasm 01.txt,0,1000007 v! \7 b, K5 q% h: Y' P
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt# W6 E) W( W7 z1 D* a7 ^0 l/ t' R
8 r' X8 }0 `& f8 G5 G1 X, B# N0 }
softreset
+ O' b3 J: u z' E& G' r# ?3 R& n 游戏重启, 但不重新载入ROM( j) X: ~9 k& \3 z' R' l
. k9 i" a. Z* i' d% |' Q7 j* R* Z
hardreset
+ D7 @$ r8 w6 x+ f$ Z: u 游戏重启, 且重新载入ROM# j' f4 i, U% y! k6 R
0 ^( W: x- Y: s s0 Y. u
snap xxx.png
% X+ e! L7 [" q2 o4 b 截图为xxx.png
4 [5 R, u# O8 }0 S) p2 V0 f2 ?3 v* [3 B* y/ a9 B
/ o8 f. G }8 G. |
: N1 w/ m* \; n- N0 e
) {6 i0 ]0 G/ w) n) A# K+ y0 | K* K0 g热键:
* q+ W8 R/ U) Y% R- {4 Y ~ 中断游戏8 B4 k; E& W% `! {( e( c
F5 运行游戏
, n* \1 N# m" z- T F12 运行游戏且隐藏调试窗口
k! G7 B" a* O3 P F11 步入, 单步执行, 会进入子程序2 v+ u4 y% L& J5 b; a3 w0 S
F10 步过, 单步执行, 不会进入子程序. T/ b) y2 Z' V# A* `
Shift+F11 执行到子程序返回
$ G4 v- w2 q- q7 [+ g Ctrl+M 内存浏览窗口
3 W- a6 G/ d& g5 C3 I& ]# P h F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU" f" `8 B; y2 O
2 t" w Y4 j6 \; J7 L; ~$ @/ y{:4_94:} 1 Y- v- C) @9 ?% Y% f9 k: X
3 N1 o7 u6 d# V5 U4 F |
评分
-
1
查看全部评分
-
|