|
|
, b' e. ^' K( L2 }很快速的整理我自己常用的指令
- x$ C8 U3 t7 x5 K0 z- E2 _
# E- T. D4 ^8 W- g/ X. w! `{:4_112:} ( p0 Y/ D* `; U4 g
4 V! `, V. \, PMAME DEBUG常用指令7 W7 K) b, n X6 z, n+ e9 a
, }; \9 }3 ^3 a内存搜寻: ci, cn, cl1 I, T9 S* N1 H) Z
4 }! ]& _0 b9 s$ c0 X1 x: Q0 } ci/ a# p/ O# ^( N3 ~% p0 @ J: U
搜寻任务初始化, 每次搜寻一开始一定要输入这指令; z( G& E: q9 z, t
6 K6 P1 m: L$ N# p8 q. Z
cn' d2 m. |8 W L4 l) \# x
搜寻指令& C* t) W3 U. H! @. i# T' G
例子:8 x- C' Y5 D7 ^
cn eq,60( E5 } V+ h! M- I
搜寻目标等于60 (十六进制)
" I q) {) i) ]/ y, ~
# P5 m9 v" W7 ~! {" z8 E6 ]+ U cn eq,#96
( ]9 I6 _5 e5 \1 Z8 G4 k 搜寻目标等于96 (十进制)) j& _8 Q) p# }* }/ s6 M- {
0 Q: i& [) U c$ {4 I) @4 B/ f0 w cn eq+ ?; v2 ]; V' ?# P) T! x
搜寻目标的数值没有变化
- a4 g7 F5 T2 n
6 i- c- x! A: Y7 y+ l cn ne
4 o0 \7 i- Y! G3 g1 {; s 搜寻目标的数值有变化6 B6 e* a" b; \ m6 T
) Q3 w# I5 x* r/ G; R* Z cn +% q$ }% s+ ?1 x8 q/ p( O
搜寻目标的数值增加5 I4 ]/ X7 j9 o3 C
* W) Z% ~' s% u' |4 Z cn -
% ^, V7 x- V6 |; ~& k0 X$ u 搜寻目标的数值减少+ D. `% c/ u$ I: Q
1 U h7 ?' C) f- x+ O! C cn +,3
3 B7 \ J- G) _9 z) W 搜寻目标的数值增加3 (十六进制)
, z: k; W% e& Z. v, ^0 w: T; n' V( z! I7 u' g- I
cl% Z' \* |1 S4 |6 K" L- i8 s7 q
列出所有搜寻结果$ L! J- Z0 l! t, |5 v% z, i
/ }2 o8 x* N0 c9 W cl xxx.txt
: _! R3 Q; c, @6 Z4 w* q/ l- @* c( ~ 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式2 d J2 E6 l- p8 f8 V) t d+ T1 l
: k3 R8 c1 L$ [4 O7 d' N' T
( ~ J- r, T& H2 Q- C内存监视点指令: wp, wplist, wpclear
+ L! C& t V: t/ K- M& G1 |+ W 例子:3 ~ e3 q, q9 H! Q$ N; `: ^
wp 1234,1,r
: ~( a+ h* A% f" ?1 F# ?$ M 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
! k% [* M# q, m' u9 t2 e7 Y
3 D2 ~1 a# @) K+ _3 R6 c% t wp 1234,2,w
3 J, U1 m1 b1 Q 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
4 j$ Z) \$ w) @% N $ q, A" G, k% ?/ M
wp 1234,6,rw
3 O" C$ w9 c S: A! s$ I 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度64 S+ p" K* X2 R8 t- f1 l; L
& e7 F u9 _+ F( W+ s wp 23456,a,w,wpdata == 1
0 W* j% k9 x) c9 k. d: K% D 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
8 A2 H8 F3 L6 @( J# |! ?
$ v2 ?# }$ F, W" P$ r H3 T! P+ X wplist
4 R6 k/ |* h' `7 a- ^7 o* {( Q 列出所有监视点 B" O6 |4 D& U: k
5 _: N+ D- G2 P( F) H
wpclear 38 M: ]# k: j1 Q0 e" S
删除编号3的监视点
# v) {% C# F8 q' L) H0 e* x0 b9 q
wpclear
! C$ e0 V1 w* {! X 删除所有监视点9 a/ U3 A, I* b5 M
8 c3 ?8 t% k8 F5 X2 B5 x
9 k2 q' g. y, Y
$ D1 v" u/ {$ f* d7 m. k% y程序断点指令: bp, bplist, bpclear0 n/ c8 }& N7 Q/ x& T' k5 c
例子:. a9 t0 B6 `! M" E/ w* E3 A
bp 12345 v6 _9 S: j! Z3 e+ y
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
0 ~7 x+ o( p1 v: f3 ~, M6 }; f, m1 q% h; y
bp 23456,a0 == 0 && a1 == 0' I) d8 z! n, i3 R
在地址23456下断, 且中断条件为a0等于0以及a1等于0! v- |, |: L3 w+ |0 a9 H9 Y9 ? `
2 R2 k7 J4 v- G! A0 G: A$ x
bplist
4 L+ {# ~) E7 y( o: N8 A; S 列出所有断点
; K+ c. O7 L4 V2 u+ g
4 ]: I* A" o9 Q- S# ?! v bpclear 3- `* @/ q( u% w/ Y
删除编号3的断点3 ]* g; B' `, }; f
7 J3 U- P9 D* j0 L% m: o7 W A bpclear# z5 L% t* j1 d8 H, b
删除所有断点! W' l' q; [( c
5 \" }3 P ?/ j( n: t) a! r
' |5 X* ]* ]+ }2 Q |8 `
+ c, F/ n1 F3 L1 ?, X6 d4 M. {
跟蹤紀錄指令: trace0 b5 H7 @+ }9 w% N& F( P2 P7 y
例子:
) e/ L, v( g1 c% ?8 u) u5 l trace 01.txt
/ V0 W# S- k4 l# ^3 T/ n! @ 跟踪当前CPU运行的所有代码, 输出至文件01.txt+ Y% j8 Q$ u4 T0 l! L3 M
* p$ o6 \) \2 g, _$ f
trace off
( |: q9 K: Y w/ a/ J$ b# U- e 停止跟踪, 并且关闭文件: s2 g' N+ C4 `6 @
# I; D* k2 }* y trace 01.txt,0
: m$ G& f. E! t* m 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
8 j' R# ?3 v! e% b( Y' P8 r Q+ e$ u( X* H" d- h% ~. z
trace off,0
/ _$ m n ?( D* r- f* Q 停止跟踪编号为0的CPU, 并且关闭文件* l$ e) i' H1 }
4 N* K) ^$ t+ I0 S; k! W trace 01.txt,0,{tracelog "A=%02X ",a}
7 d- t; p& j1 v! m4 B 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
8 V+ g& i% I. v6 }! O4 i& r 并且在每一行的前面, 写上"A=a "0 J# Y, f* A) ^; I7 M4 y
"A=%02X ",a为一个C语言printf函数常用的输出格式
! M ]+ G: g& r2 j 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
0 @8 X1 ~" z! } X表示为大写十六进制数$ S/ \/ O3 V* q% L# o
% W* q# O6 ~' j0 v1 P' h1 T) ]+ C
+ {4 T* f7 `" J. R( m- e3 ^% `6 G9 L9 I+ b/ j
内存直接写入指令: maincpu
; w8 w' A: j+ v/ K* v 格式为 maincpu.[][]@地址=数据5 W( o# i8 t, o; c- I# E7 s* C
第一个[]:" M0 U+ Q7 n# }7 N
o 表示ROM地址
6 m" N$ a! [: _1 a' n p 表示RAM地址( i6 ~8 r8 Q2 x6 Q4 w" w
. G$ @2 w5 n4 n8 k& H. r 第二个[]:
: r! J* H' I9 R+ Q! |4 F d 表示4字节
+ E7 K# i3 [1 U& m w 表示2字节+ r8 t* \& ^1 Q; ]7 E, w1 @' V' i
b 表示1字节
2 b9 m% x3 I4 D- P$ t1 y4 T! \9 n* V7 Z& i& c
例子:
6 _- ?! |, p; Z+ t$ I maincpu.ob@1234=FF1 B& ]. p* o! }3 L
在ROM地址1234处, 写入FF一个字节
& G5 k/ }5 Q7 q8 n+ ~% V4 r$ o5 s1 x: [$ L1 @' M* G
maincpu.ow@1234=4E71
5 h, C' V2 ^( R* w* H$ Q* c7 T 在ROM地址1234处, 写入4E 71两个字节
8 @% ]8 {' e7 b$ j4 c/ t0 R# q% _+ O( T
maincpu.od@1234=600A4E71
' D% ~+ O: W+ H5 X- C4 t- d 在ROM地址1234处, 写入60 0A 4E 71四个字节
{# b/ T0 p1 J- o7 z& Q
( I+ R( R$ z# W4 z9 F( @( h& p 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写1 q0 j- B, z1 @, ~: N4 ]: B
) X% \; G9 y) H* A; [
' t6 k' c& P. W9 { m. y' z9 s/ J) c2 h
其他:
0 x K% c, X" ~% A, L1 O dasm 输出档案名,地址,长度
9 e1 J) _$ u7 I; | i: U 输出程序的反汇编代码
" b/ L* u" P0 H6 z# ]9 a 例子:
* Y, H* D% V8 |5 Z; z dasm 01.txt,0,100000. m8 s+ {3 S5 L* V1 w2 s) a, [
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
$ s6 }" i, v! {9 e3 Q2 z o# U5 u d: c; N1 y& P3 i2 R
softreset" S' s. t' h4 m1 M
游戏重启, 但不重新载入ROM
, N. r2 n2 J2 w: [" J/ N, K, p9 I
6 b; Z; Z5 d2 L0 O, j hardreset
2 N( `3 p5 U6 A7 l$ K 游戏重启, 且重新载入ROM2 y1 m/ ~: r' N
. {* }$ k( V4 N* s; L snap xxx.png$ y, D# T% q4 _( t3 J
截图为xxx.png
D5 X3 ?! X0 x R; _* Q
+ [9 U* [4 d& z! R 4 z2 `* R9 @* a/ f' {, m
! o1 f6 |( N0 \9 s$ { I4 X
# D" y7 V' l! {热键: E0 l9 m! P& e" r, O; v3 m
~ 中断游戏
1 D! o! D& }. P. D8 z: U F5 运行游戏" |6 C' g1 M& X9 ?" c# d+ N6 b
F12 运行游戏且隐藏调试窗口6 h3 }9 i# a/ [1 L
F11 步入, 单步执行, 会进入子程序; P! V Q8 S/ g) g# q
F10 步过, 单步执行, 不会进入子程序# A3 D. ?. q9 ^1 T
Shift+F11 执行到子程序返回3 y/ u& w7 F f: M& I& M
Ctrl+M 内存浏览窗口
& p. N: H9 E2 Q/ N# g2 w8 C F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU; m% A: ?0 ^* J- x
0 C2 P- g7 j5 x) L{:4_94:} 9 J3 P% r" L! J/ E$ V: h
& N M% d& I. u& `% [ |
评分
-
1
查看全部评分
-
|