|
|
1 B1 E- h( D4 M' T3 P很快速的整理我自己常用的指令. m9 Y1 _4 ~6 q: O& `: D4 x: E" w& l
' e, t8 ?; R9 R2 t1 u+ } ^, x% n
{:4_112:} , k6 y& [8 ~! S/ Y" ?
; y8 B5 T4 ]7 c+ \MAME DEBUG常用指令
8 f4 P G5 K$ C# s3 V0 d
. L( `, a/ ?5 R( T内存搜寻: ci, cn, cl
# i9 R6 G4 _# s) }( @4 H5 x" V( D0 E# k$ A/ j
ci
7 p7 A9 L4 V8 ?/ {% g. f# a' ]) c/ M 搜寻任务初始化, 每次搜寻一开始一定要输入这指令. U8 L# ?: x3 A: K/ T$ a L% d
8 \6 C, E' N/ r8 w1 w
cn
2 d' w/ Y& a) S( T* R0 O2 r. j2 i8 j2 a; I 搜寻指令
( W2 Y" ~+ r, F% x 例子:8 M. u0 s: p0 ^' T7 R; e6 L
cn eq,60
. Y5 Q( F: F7 b' a 搜寻目标等于60 (十六进制)1 U0 \/ [4 P; p- @0 z* Y8 W7 r
' I1 {. W6 ^9 w- t2 F; X3 o+ E cn eq,#96" `' [9 G& O6 I- M; y
搜寻目标等于96 (十进制)% [7 w8 m3 _& ?7 y/ h+ ^
, }+ |) e" D- @+ S. c( w8 y cn eq
* A5 p( {/ \& F- j2 x7 a 搜寻目标的数值没有变化
) Q& u) K1 Z& [$ }$ c5 ^8 k6 Y
; G& q, X" c" ~1 j/ q cn ne
+ i3 v0 V, |& U5 z9 [. r0 u 搜寻目标的数值有变化/ f( F0 G; s7 i
; F0 m& Q* B: j( t
cn +, C; M2 ~- `. r4 q; {9 N& d( q7 h
搜寻目标的数值增加+ @0 y: x6 Q4 o* ?# X& u
* m- R# L, D4 O" k4 C9 N$ u
cn -
# c* C( U' }0 s- z7 ` 搜寻目标的数值减少( _( J3 U$ C; x% c* e
# f' R5 e2 i: K0 ?& b/ ` cn +,3
A5 X: E( v* O7 r* P 搜寻目标的数值增加3 (十六进制)
" r( x; @5 n' e8 ?
% ?% o w/ k: f, }' c& e. } cl
5 G; _* s+ ^% p 列出所有搜寻结果5 K3 h8 S' r8 D- ]5 M+ L# v
2 X: Y8 u( l5 G, t' L3 ~/ A' D/ b
cl xxx.txt" ]' I: ^$ C0 g4 |" g$ C$ i1 v
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式8 u% @: V' y0 T7 u& w
. x* f- ~1 {, ]* d
( O& c% b/ `: ~; ? q- M& H# {, b内存监视点指令: wp, wplist, wpclear; P1 \% T; L! N) J* l
例子:) S: ^+ M7 H3 D( ^* V0 d
wp 1234,1,r# ^/ ]+ N0 i2 j- @3 `
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
& m+ X( G2 y- p" s$ E$ h# `5 v2 b% [, Y2 V. {1 x$ e9 @/ i" s) v
wp 1234,2,w9 u! E1 R3 c) I" A( `0 ~$ z) r
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
& S2 _5 d6 f+ F* q* r: U
4 @. }* G6 i" j wp 1234,6,rw9 t/ L4 S. A( d5 w7 B
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
& b: \, j1 w w. x* K
( m0 H3 s4 V" j, o, E wp 23456,a,w,wpdata == 1
; [! ~9 |% d+ Q0 y 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1& e% Z/ X; x8 C9 J5 f. i7 D
8 X# ]( S+ U7 F2 i wplist
8 c; g6 b) p. h% k 列出所有监视点( k7 P; w2 x% M9 u& |! @# n
3 ^1 P. s% L: [6 J1 j wpclear 3$ g& x9 j, |; P8 i5 s% f3 u! S
删除编号3的监视点
0 \" W: E+ ~" c$ w0 X6 Y
* b; ~; n' p3 t4 ^ q wpclear
- _; K# \# m* w( L* m' S8 U 删除所有监视点! r. R0 N. P. A# y% o6 L+ r
. ^) R! X0 K, C' ]
" {: y% {' z" T* @% ]0 w8 A
5 Y: e0 M7 n% U q程序断点指令: bp, bplist, bpclear3 ^, q# G2 ?* N: n' `$ M+ z5 _ D' J
例子:
5 R) k, ~# q" o, [1 e bp 1234; z' h* y$ b( y" M8 |3 k7 X5 c
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
3 R1 F8 }6 p9 t# {% _5 R$ G
) X7 y" b f0 n; k bp 23456,a0 == 0 && a1 == 0
& Q0 P' o: I+ g: a4 m- ~# P 在地址23456下断, 且中断条件为a0等于0以及a1等于0
7 w# l7 G1 e1 i6 s
5 T9 i+ B4 O8 X bplist
! {) J, k; v8 C3 Q 列出所有断点+ l5 O% Y. }" W% Y1 J" e
}- d9 D U. F# h1 v
bpclear 36 i A" Q6 |8 ]" W/ r. E
删除编号3的断点
4 w0 t* @9 k4 h) W) }4 l$ ^, u5 V8 f6 n& J# S; B, L, B
bpclear% j# y9 _. P) \* T) z8 L" e c+ f
删除所有断点
' r; y. ~- a% u. k! m9 |& A& Q2 F# j( A6 C- _# {
# p* |3 B+ i' c6 R( E0 T
2 z8 j- X L @0 B7 M* j
跟蹤紀錄指令: trace% Y& ^8 E" Y$ ~
例子:
: ]) B" b( _- h( v# r0 k trace 01.txt
- {8 e8 l& w3 w$ J: ?& Q' Y 跟踪当前CPU运行的所有代码, 输出至文件01.txt
2 P$ J }9 k$ c& P( L# K, \: R7 `7 F% O( [' J5 }4 g, Y+ Z
trace off* L7 Y6 {% y" v$ g+ I' ^$ J
停止跟踪, 并且关闭文件
, Z9 l: t: j7 s- j
" u7 |8 g9 b/ ]5 X trace 01.txt,0" O. p3 i( d: h- D2 D9 L
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt5 ?# y- V3 T' D
0 \% g& Y" e: k* V trace off,0& ~- x3 R5 n$ C$ H- W# a" J
停止跟踪编号为0的CPU, 并且关闭文件
) I G7 s/ d6 E% s7 ~' m C
& u( R+ E2 f* x7 `7 S+ U# B trace 01.txt,0,{tracelog "A=%02X ",a}
& \) b1 s7 L7 b0 B3 O: Y 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
5 [4 N7 n1 O4 ]! ^ 并且在每一行的前面, 写上"A=a "5 n: { M3 [# s0 ]) Q
"A=%02X ",a为一个C语言printf函数常用的输出格式) t: C$ i0 W+ \' f" W6 e3 w3 ?% u* M
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
# J( K) b+ M2 _! G X表示为大写十六进制数
( \+ A! ^/ I% a* v* k9 j
& y# k1 ^5 R4 `# s( g F7 M" H# ]! e$ _9 t
2 [1 P& _+ z; u9 H3 e内存直接写入指令: maincpu
5 U n3 t [% u( |2 X5 P# y 格式为 maincpu.[][]@地址=数据4 _/ ]: q- q7 |
第一个[]:3 n$ X8 A# W; R4 ^2 ?5 [2 N. h6 r
o 表示ROM地址
9 b% \6 C( q2 \5 Z: R p 表示RAM地址/ J1 X. h8 F7 X/ q2 m; Z! c, f; K7 [
2 [6 }) k9 _9 _% k" f" K 第二个[]:
- m7 s. s( N1 N( ^ d 表示4字节
, H. w5 x5 h P& I8 W' D w 表示2字节
* W- }8 _6 F a3 J: d; B, X) m. U b 表示1字节5 W8 M, H, @/ ^; k. n
# E6 C3 i9 V& S( e9 z) b9 j
例子:+ W/ c) Y: d, ]; R: `
maincpu.ob@1234=FF
4 a O! ?" D- P 在ROM地址1234处, 写入FF一个字节, i! W! h% V/ j8 r9 S, S
( p( X) }1 f6 k! p" F! p0 }7 E
maincpu.ow@1234=4E71% v. g8 o$ h# y7 l
在ROM地址1234处, 写入4E 71两个字节
; K5 W; T( ]' h4 {; M$ r+ a1 g6 V K# n9 C0 p; H
maincpu.od@1234=600A4E71
& `" r# [3 z; D! D& } 在ROM地址1234处, 写入60 0A 4E 71四个字节
; b a2 r: E. L/ ^8 P: u& [( Q
" f9 M, W" c+ q0 ^. x+ B( I: a 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
1 O7 X8 x* x/ F/ c$ n! G6 I $ P% }) _+ \2 t' U/ r; N
2 f3 _' D0 U4 H' C ?) O其他:1 {, Z; b& ?: O/ @' y$ L# g
dasm 输出档案名,地址,长度
$ q6 U, \$ H/ [; o/ T9 h- F7 t 输出程序的反汇编代码
) V# a0 Y! \/ m% m1 ~% j 例子:) y: _ H2 [6 h
dasm 01.txt,0,100000
' v5 n- H; t: ^5 X 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
+ h; X1 P3 k S0 U% N+ w/ I: r2 ~6 ?* D. y, i9 ?
softreset. w* ^1 A1 w5 X" s& H3 l# |2 B
游戏重启, 但不重新载入ROM
- x1 B% t% `% y2 @+ j1 _
: i' E9 Q) i# o6 `$ s# w hardreset; h1 P3 c7 }+ _) D
游戏重启, 且重新载入ROM
( ?& k& H y+ A G- G! @2 X
# W' G" o; X) R; n! S0 q" p snap xxx.png5 R! |" D1 j( Z& x1 x5 ^
截图为xxx.png: [6 _: c! R3 `& Y( T
2 c% J" u) `3 o2 Z- [8 N" N3 ]
( V- h$ p/ e0 i' P4 t& a7 u ( R: K8 ]. N, H8 L- Z2 x2 H' Z4 N- h
% ]2 l1 p6 g- W2 J9 q: y6 f热键:9 A) \) e7 B* E, O! e
~ 中断游戏* {; D; z8 f( V, n, e: M
F5 运行游戏
3 q8 |+ ]: R, I; W% ] F12 运行游戏且隐藏调试窗口
) K' P3 ~% ]3 Z! P, u F11 步入, 单步执行, 会进入子程序
8 c9 y/ N( d ~" R3 X6 n# u F10 步过, 单步执行, 不会进入子程序
* i' L! H. U4 O% L3 R4 J Shift+F11 执行到子程序返回" e& @1 `2 p0 m5 w8 I8 y; g& N
Ctrl+M 内存浏览窗口
4 T6 s& k( i/ `' a2 U F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
6 B& ]! Z1 W8 T+ p( j1 B! m. ]; e8 q, C- P) N8 i
{:4_94:}
! X1 i" {3 m2 N4 f+ C$ l- J
" R! w n' Q! Y6 X0 @ |
评分
-
1
查看全部评分
-
|