|
|
( w& {! g5 d! Q3 R
很快速的整理我自己常用的指令+ n: m; O. M% T" }
; {% ^( `- W8 G& O
{:4_112:} , b; e8 \: v2 y
( T! L; K5 a6 I+ i: H" _
MAME DEBUG常用指令
6 I. J' [6 }7 E/ x V
( X) R2 F0 x, Q j' w4 Z* s4 I内存搜寻: ci, cn, cl
/ ` O+ d- {9 ~4 l5 J# ^0 N' U ?5 u6 H, E, d
ci
! p8 P; Y6 ~1 p e% h' K b 搜寻任务初始化, 每次搜寻一开始一定要输入这指令8 E( H# A/ R6 |
, D" G4 T0 b( |" C, u4 i" t cn
( ~* D) B1 ^, K7 F, }( l 搜寻指令 ]$ \: s; T9 O4 {7 V7 i0 E
例子:8 A( O' N4 n% P) s; B
cn eq,60. G$ F1 u [5 m8 X& A
搜寻目标等于60 (十六进制)
* z- b& O+ C& B6 H2 F9 u0 P t: P ' l& Y/ Z, J6 T
cn eq,#961 y8 ~2 T8 C% h p
搜寻目标等于96 (十进制). p. K! H# g2 E' a1 F6 h: z
( o/ B, Y- @( J4 j" y' ? cn eq9 P2 Q& u% ? D
搜寻目标的数值没有变化
( V, F+ F- [& @1 [$ W4 f" T0 F/ d9 Z/ H0 x3 ]' v" T: t
cn ne/ k4 s# f/ K" S: T. Y
搜寻目标的数值有变化
2 W3 l! Y: h3 y " |: }- U$ Y( o& h: |3 t
cn +3 }3 _. O Y0 Z9 ]) |9 t" D6 A- v
搜寻目标的数值增加
; w8 u7 Y. C2 _( C
# M3 E2 u" Q. V6 C( h7 j cn -0 i' w8 }; `% a& _' J0 ]- G
搜寻目标的数值减少
, K4 _+ ^* [' ~/ o/ Y ; |8 b& y0 c0 J5 |- p
cn +,3( z7 @2 m1 t! C* b' {/ K
搜寻目标的数值增加3 (十六进制)
/ l6 c. l1 S9 z: E2 H$ m! F& p5 K) c, [" z8 w, T5 u
cl
# E; i6 y+ f2 k 列出所有搜寻结果
1 g* R+ J3 R, e+ e3 r5 [' i0 v$ C" h5 v a
cl xxx.txt7 |7 T2 B% b" w7 I: o
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
; t& C7 i7 S2 v q
8 b( A, j1 e: ~" o
+ g1 Y! O- e3 F& e: n4 |4 x内存监视点指令: wp, wplist, wpclear
+ ` {0 ?' l% w 例子:
; z5 U* t/ N# d wp 1234,1,r
2 z# D" A. a# b. B 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度13 c- J& `% L7 s& w' S
5 j: e* l' \/ N9 S; M wp 1234,2,w: p/ t3 ~- `! o0 W
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度22 a$ u* Y; ]8 I6 |4 V* h
& Z9 W2 |, g6 t4 w% y- N* ^
wp 1234,6,rw
$ x/ \$ P% ?) L 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
, g% k" R$ u1 B% s9 n$ E `! Q* v9 {" W4 `% n: _/ @
wp 23456,a,w,wpdata == 12 k7 N2 \' A! l- T! z2 i
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1' Q' p5 }# z3 @& B& _+ }4 g
7 v3 a0 e7 G, | J l" q wplist! C" K0 J C" f2 q
列出所有监视点
/ ]/ ` i/ \5 x1 w% v" |3 [) I% p% O# q$ P
wpclear 3
- N2 j$ ~3 G# T$ {9 }4 k 删除编号3的监视点; i2 h* W( Y6 v4 C
$ k$ n4 \! J# a% Z6 B/ r w5 v
wpclear. }0 ]' R7 w* d% { r! q) s
删除所有监视点
/ I+ g- j6 R/ n& n% o: L5 I- |
7 \: F3 W) |* v , a# U- i' t4 K6 m& M' d; @
d; w1 M o, v& C8 R# |2 R* Y# w+ B
程序断点指令: bp, bplist, bpclear
9 A( @8 n# G5 \! B+ w) F 例子:
4 q' ^0 L }9 n6 Z3 ?/ z bp 12345 ~. z! E! T2 Q# w
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断! Q8 _$ [' [' }( u( J1 }
4 {; l" Z. D" N
bp 23456,a0 == 0 && a1 == 0
$ \. V' T8 S' t0 M7 h 在地址23456下断, 且中断条件为a0等于0以及a1等于0
+ X/ n& Q- H8 D' x( s1 p$ `, J/ X/ t" Z$ j) G
bplist; v# j6 u" a$ ~6 S% g
列出所有断点
1 x& \3 H+ I& i& ]2 h9 Z: C7 I& y. `' B$ t# I4 g
bpclear 3; o5 R: E5 ~6 X" `! b0 P
删除编号3的断点
: q# n5 l& q# t" j# v
0 h/ I$ F1 [- R* @, q3 c8 ?7 @ bpclear0 v" a' n o* h s4 U% m
删除所有断点
. W: @8 o7 L3 W# G* G& k* b" \1 ?# K6 Z& q. T9 l
4 m! R7 O% R1 v) n2 D9 N$ l* p
9 Q- X; I) B" q L. [& h e跟蹤紀錄指令: trace
( k% c2 K% E1 l1 o& z 例子:6 ^4 o: A9 v1 U$ r, n
trace 01.txt
- ?) J3 ]3 `: s" A% l 跟踪当前CPU运行的所有代码, 输出至文件01.txt
# w! N: W. X( N0 W* @& K
@0 H4 d/ D& K- _+ Y' Z2 u3 r9 j, y trace off
) ^- L2 R% D$ J# y) o& i, M 停止跟踪, 并且关闭文件7 v2 `; n" G5 Z& @; h4 |
0 ]8 H c. u2 d
trace 01.txt,0
4 l0 k+ h* H% W 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
. W. ~: A2 ?1 z# O7 P
( X; [( Q' K+ e7 W* z! }* _- o trace off,0
0 y i5 K. R) Q. ?6 P A6 f4 x/ ?' j 停止跟踪编号为0的CPU, 并且关闭文件
" h) Z; Q6 Y* a
4 W1 ^, a/ c5 X trace 01.txt,0,{tracelog "A=%02X ",a}
$ t8 b; K' W# L 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt + [4 L) O9 U3 E
并且在每一行的前面, 写上"A=a "
* K; f; o; r& h0 R$ X "A=%02X ",a为一个C语言printf函数常用的输出格式' x5 l" {+ q* A% s) `1 m
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
/ F6 b- D1 s: E X表示为大写十六进制数
6 j3 Q1 g( y2 H5 U0 E- S+ Y
4 c: B& m# y! n4 t/ T) ]$ m1 |5 e% D1 j" {5 _
8 J5 F) C) u |$ M- e
内存直接写入指令: maincpu0 c$ X3 d7 P8 ^7 I: _
格式为 maincpu.[][]@地址=数据
8 V+ N7 S1 @! f, d 第一个[]:: c# F1 K; \& ]- K0 X* Q& T1 o# ~- Z h
o 表示ROM地址
3 \8 r. d: Z8 ?1 c p 表示RAM地址
% E. X( K* ` X( j
% g9 M. G2 M. k# N) w, s7 v 第二个[]:
6 E" T! o8 V0 ^( E5 l9 |. I d 表示4字节
2 @( u& K( _% | U" y6 z0 L1 y5 Q w 表示2字节3 w* |' _3 {. Q; ~, @1 B
b 表示1字节
+ s1 F/ I9 W7 f" @- I6 |+ ~; Z$ n0 w# T8 a4 p
例子:
' T' ?/ O9 P, S maincpu.ob@1234=FF
. g$ S! m7 d3 z 在ROM地址1234处, 写入FF一个字节
$ e5 ?! j* M8 _: }! U5 V& [; I8 E' B# v5 ~( G( e
maincpu.ow@1234=4E71
) k) d3 T( q' n" \) ~ @9 ]% B 在ROM地址1234处, 写入4E 71两个字节' `0 X. C, A# l/ @' G: S- b' O3 ^
( m1 d6 I _2 t* P; n; L2 c maincpu.od@1234=600A4E71' Z2 j& e i- K+ L) p; b2 d; D
在ROM地址1234处, 写入60 0A 4E 71四个字节
4 R, T9 d, d; b! l1 |: W- q* Q4 ]# ]! F* `& Q
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写+ L6 X" a* ]3 t3 g; j/ G
~( C1 u8 X% r' _
- X! w% C& {- H; }) q其他:0 H- E! l6 Y' c, O( d( A0 C
dasm 输出档案名,地址,长度
" ?, n k7 E3 h; \7 D, F# K) k 输出程序的反汇编代码
% _* U/ k% }3 c g 例子:
+ D4 L# I* p; P, d+ L: u dasm 01.txt,0,100000+ ]$ i$ @, L, T
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
" W+ q- o+ }2 V- ~2 @8 z6 q0 b6 p$ H" k1 o: p% T
softreset
# L) F( v6 U3 D( F 游戏重启, 但不重新载入ROM1 _6 o+ L' S+ U6 K* Z3 [* `
- v p# a( D+ K% h) H. H$ e hardreset
H% G: [& B1 S2 T) p9 M5 @) m 游戏重启, 且重新载入ROM
2 Y! K* b' c3 F/ R& P; F) p! E/ w0 B# a. [1 @
snap xxx.png
4 L- Z, ?5 A: q# v% z4 J# l8 y 截图为xxx.png6 J. E; p; J! @: E5 H$ `
- R0 x4 ^" ~+ u7 }6 G, V& o* h
6 U4 j; t4 s; V7 J+ u ( y( I8 M1 Q4 k- {3 V4 s, l) Y
6 `- ]2 @. v( a% C S* f- x
热键:! y" n# i; l1 p3 W- i
~ 中断游戏. f: ]. e8 X9 k5 T9 n$ A8 y
F5 运行游戏- ~8 [+ h7 _5 q4 c- T* W' b7 e
F12 运行游戏且隐藏调试窗口 l- S% z+ a: n1 |3 k, o. h
F11 步入, 单步执行, 会进入子程序
0 _8 x2 p% M+ J2 I F10 步过, 单步执行, 不会进入子程序
# j# w5 x. ]& n& p; P6 W& {2 z Shift+F11 执行到子程序返回5 F6 j/ v" R9 i3 ~% @
Ctrl+M 内存浏览窗口
8 V& p; y I& ^2 X% d F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
' P9 t6 e$ G! V) m
, A, X8 K. v3 P3 ]8 h. T{:4_94:} 3 ~1 |+ F$ v5 o* B) F* m) N6 v
% o& R: V2 D! ~" L |
评分
-
1
查看全部评分
-
|