|
|
! t; ?2 m- f; Y+ K6 S
很快速的整理我自己常用的指令+ v. v$ L4 S6 U
- p' i/ z/ n$ t9 V{:4_112:}
# \8 `0 D; F. J, d9 A. J/ `, ~3 w: Y' E8 Y4 t
MAME DEBUG常用指令
3 q4 F0 ^0 ] @' P: I6 [) M' C4 C' S# I
内存搜寻: ci, cn, cl
1 K, a4 w. b. ^ U. y5 M( r6 w
; G. p& ?* q* Y7 D ci
( ^. H3 R) Z7 w( J 搜寻任务初始化, 每次搜寻一开始一定要输入这指令6 F* c+ j3 W& J
$ ]+ I6 }; b; j- J cn9 p2 D" V( X3 s4 K v4 U
搜寻指令& \( C8 r5 X8 P5 l" J, ~
例子:
0 V% ~$ E( k; E cn eq,60
9 _/ u8 a3 j' r, F 搜寻目标等于60 (十六进制), E# K5 @1 D. G, g; Y- ~
; H% v# q$ @) f cn eq,#96
& z3 ]- A. {7 W9 w" S% K( q; G 搜寻目标等于96 (十进制)
4 i: y( F/ }1 \/ Q" C. m4 x! }5 Q
cn eq- k$ ?" P$ i8 C. C2 O/ V
搜寻目标的数值没有变化
3 {) e' u+ ]% T; p
0 _$ j$ E+ @5 f) h- ~8 f. c0 r cn ne
7 G; }0 ]0 S7 m, Z( x0 @( N 搜寻目标的数值有变化
_# Z. u1 k1 {% _4 R; L' Q
3 g/ D" W& u7 ?( b1 Y* }9 M cn +
4 N5 P8 s% B0 B4 k6 B 搜寻目标的数值增加
+ {4 H- N/ y; d8 Y m 7 s, V& y/ D B( c
cn -/ M- \3 u" L1 Z* v, W
搜寻目标的数值减少
! | q/ `8 U5 I1 e; q
5 n: D4 ?" q2 x0 r5 L cn +,3$ a1 A7 s% {- y
搜寻目标的数值增加3 (十六进制)
; Q. `% n# |) ^$ M3 `4 \( w1 r5 K
# O- D# p+ `6 S( n& Z+ J& i cl: D3 a, S8 L8 I' @1 Z
列出所有搜寻结果
( S b% U0 r. m+ i9 l7 T
5 {7 S$ I9 v: ?. C( T0 y4 [ cl xxx.txt5 f5 j- K# K, q
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
% ?) f3 _7 V' R5 f4 b Q5 W* v6 Z! s) x) \
+ A' \/ G( ~0 C* _ P: O
内存监视点指令: wp, wplist, wpclear
) c; _! z7 l# x+ ]3 B5 s$ @4 } 例子:
# l1 C' Y* Z7 o wp 1234,1,r
9 }9 R' ]5 D! i0 y, {% Z 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
. V# |0 d: l& W; w$ }/ R) a
5 d5 x/ l8 Q# X( Y wp 1234,2,w% L1 r1 K& F7 G) W% ?+ \6 ]- ~
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
/ i! Y7 @! s3 x: D
/ P8 _; e8 ?+ ^ G; ] l/ q7 _ wp 1234,6,rw/ H; p7 R2 r% p4 B7 |4 T' I
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
9 L& J0 G! |( t; v4 u+ F8 i* L1 J, T8 r1 l1 b; Q
wp 23456,a,w,wpdata == 1 L. F- S+ ^( Q9 h9 X) H) c
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
2 @) H N6 a* d8 N y r& V8 H/ v. F0 i
wplist8 v- }+ g; x: P
列出所有监视点, f2 ]. S! Q) x
" `( G: }6 c5 \9 Y
wpclear 3
2 w6 C9 a% L+ J 删除编号3的监视点
0 S2 G2 H+ x: L( E) P1 N; o8 L$ K: e7 e, j' o$ x
wpclear/ Z+ q: z5 w3 M h- R/ A
删除所有监视点1 e" A7 f* B L4 \( }: `# J
$ ~1 r$ L& ]/ n5 r" u2 b
. q8 E$ u: J% ]% P, e5 I/ o4 M6 K# |& s
程序断点指令: bp, bplist, bpclear
# c& H* e& E- ?* g+ | 例子:
; _& G5 k. ?9 c- n' {$ q+ z$ d( R m bp 1234
& G, s8 ?/ O+ }2 m# ? 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断. l* Y. H# n" S& C
$ q2 I, d/ r8 U* \( g8 N7 ~1 K
bp 23456,a0 == 0 && a1 == 0" |8 Z( c0 S0 U* U
在地址23456下断, 且中断条件为a0等于0以及a1等于0
% r; q) t# W W5 Q9 g& t/ M
& r# }1 z. Q) c$ e5 p; n" V, W! ~& ~( Z bplist
& i* k4 Z- o6 e% g3 Y- ]6 j8 ]9 _ 列出所有断点
; ?: E- i7 y) w( z& b" U/ z1 f+ s. x' Q7 d
bpclear 3( H* _$ Q- M# E
删除编号3的断点# h7 V4 V- T% R* p e0 Y5 r
0 p5 ~& n7 u6 Y- }- W. h bpclear4 @ T# c+ }* f1 b3 t( \8 s% Y
删除所有断点
( }6 q* ?; r$ [! h {( {% `
; b$ {; M: Y& u* r" O) g7 w" G
" `5 k2 j4 I5 Z/ Z0 t" Z n7 O* t
! h- v+ }: S. I. e, y3 A跟蹤紀錄指令: trace9 l' }) [( y* x
例子:/ A9 w% J& x# P9 p8 z* [2 V" Y
trace 01.txt. M& O0 z' r, L
跟踪当前CPU运行的所有代码, 输出至文件01.txt
# B- I* L. Y- k& l+ q2 K R1 I
, g4 k {2 ]/ |! [. k2 ^7 L trace off
& w, O2 F& k+ W7 g$ Z 停止跟踪, 并且关闭文件: h5 Y0 u E" A2 U4 ?; e
: x* q1 F5 x" N' ^ trace 01.txt,0
- G( f, e5 P/ y+ F- T# f7 g( K1 D! t 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
9 I5 ]2 ^4 ]/ ] p
8 g4 Z" |: W+ g8 o6 [2 ` trace off,0& Z ]( G# t- g
停止跟踪编号为0的CPU, 并且关闭文件0 B: z( H' w& |
# Y) W5 f) E4 _/ A; H( c. S6 k$ b
trace 01.txt,0,{tracelog "A=%02X ",a}! c& b& Q. Y, m" R7 z: N
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 0 }7 \, D$ p3 l$ r7 U
并且在每一行的前面, 写上"A=a "
5 j' S$ U2 b' o' U- m0 R+ i "A=%02X ",a为一个C语言printf函数常用的输出格式
! w1 j7 J Z/ D+ F 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
L" q: o* r* K1 b( t/ j7 z9 a X表示为大写十六进制数
2 c+ I5 u) Q! S( E$ I8 G) m3 Y4 D' {* o8 E4 Y! P
2 R- ?/ G$ z, c7 S& k
: d. k% K- }# {! G内存直接写入指令: maincpu2 S0 c$ u9 X5 K+ `" H
格式为 maincpu.[][]@地址=数据
: Y) A0 P2 g' V2 K X 第一个[]:
% i1 d7 r9 z# g8 B- }; B o 表示ROM地址3 i* J& I ?% L9 M9 o0 _' u
p 表示RAM地址
! [; Z; T, x; X$ M- F. C5 U
6 @5 v8 t. h' G$ U+ i$ p 第二个[]:
( g9 P4 b5 [0 q' F5 b4 I; _ d 表示4字节2 W, m: X& D. M, c3 k, f
w 表示2字节
* h, R; e3 k& c b 表示1字节
e- P$ Y! j {8 G: F! p0 A: _4 C2 L& l
例子:
( F; o: A$ V( y( e s maincpu.ob@1234=FF
- r1 q, M% Z) T ~3 N 在ROM地址1234处, 写入FF一个字节$ w: Y9 Y! C. ]; x) s; W6 {# Z
, \2 c, d5 _2 e9 N1 u$ V7 T maincpu.ow@1234=4E71" o. y$ C T6 |- }6 w/ |5 J
在ROM地址1234处, 写入4E 71两个字节
7 o7 D5 a8 x# H6 C
! a& u8 _1 s! D2 I7 O7 `: @% o q maincpu.od@1234=600A4E71$ K8 @+ _- [4 d* A! J& d' l' y6 B% G
在ROM地址1234处, 写入60 0A 4E 71四个字节
S' M2 J5 p8 ~0 f! N
! q/ [/ v! ~7 T4 P2 L 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写! H* r( Y" D* Q( N
, n9 h* r1 K* M9 z; S
+ n- h. u% ~: Q" Y4 O* p
其他:
( N9 B& U' S- |, j; T. K dasm 输出档案名,地址,长度5 f6 M5 R% c; R; n) @) [+ J7 j
输出程序的反汇编代码5 L K7 G' K5 t3 {/ l. f* n
例子:$ `! A; d0 h/ X6 X @5 n. h8 r
dasm 01.txt,0,100000
' A6 i! F6 c: n 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt( Y5 N9 X I1 H% f
& {' o7 e" s# Q: a% X% G6 l softreset% I7 U/ y1 k, u' {
游戏重启, 但不重新载入ROM7 z6 n! N2 c$ O z# t
; i3 j& g5 R; ?6 X: N hardreset
3 Y& O1 b2 j7 I 游戏重启, 且重新载入ROM1 \: Z( v4 ]2 r. |
2 q6 |; p- N7 G snap xxx.png
9 \2 f$ ]/ J. w/ q" F 截图为xxx.png- T$ g# m* h: l2 ]" D* v! Y
% ?9 ^8 I/ T, K; j8 U) W
- a `1 S# g8 B9 ?
* p: ]# n5 f7 I( Q/ Z 8 N7 O5 V1 N- w7 Y5 O# @/ q- x) ]7 Q: U
热键:
. v" @: l3 z5 b ~ 中断游戏' t5 A: N$ W- @5 e* E5 d4 p
F5 运行游戏$ G1 v" a* N1 Y2 D. r
F12 运行游戏且隐藏调试窗口9 C( y" b E7 `9 M6 D) x9 e3 s
F11 步入, 单步执行, 会进入子程序
Q( F) N! P* } F10 步过, 单步执行, 不会进入子程序
) T) w4 T# ]4 C4 T- H! D8 z1 n Shift+F11 执行到子程序返回* E3 g1 G8 F! x4 [" i% P, N9 w* Z
Ctrl+M 内存浏览窗口) @6 a( W( \( l+ `" @. {
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU/ B3 \' T: }( ?/ F# k+ R: b4 E
3 U3 N& B7 }+ H* S- Y
{:4_94:} ( S: {$ N j( i
' M6 a" R8 @$ B! L& n |
评分
-
1
查看全部评分
-
|