|
|
/ e1 W8 t% K3 Y% I$ [5 }
很快速的整理我自己常用的指令; c/ _0 F9 l% c, N' y$ V* T. N8 ]
! H0 ?1 F6 r2 E2 p) \
{:4_112:}
9 {% V7 L7 ~; w) ?$ _% |( a
! Q1 D b& F5 c# X2 k# JMAME DEBUG常用指令
3 y* U) f& S0 ?& m; y$ r3 @% I( |$ Y4 Y3 p3 e7 D
内存搜寻: ci, cn, cl
% e0 ]0 I- O: l0 ]* E# `7 O& w2 m' E' e
ci
) A" W) a* |* j( W& X; O$ g4 r& Y 搜寻任务初始化, 每次搜寻一开始一定要输入这指令" i5 P9 @, \; u" `* p
9 B* a; q2 q# e" o, @* P cn& I8 }, l/ Z( ]3 i- |
搜寻指令
6 Z3 D$ }9 x8 Q 例子:) {+ C3 G9 K5 h t# D/ }- e- A& H
cn eq,60
7 |% G( k9 V2 |3 [; j9 e% A 搜寻目标等于60 (十六进制)
# H0 {# ^: y0 J7 ^2 M9 h0 o; B
; J1 d7 `& L# ~- O$ m3 }5 K cn eq,#967 A4 r8 ~. ^( g9 _" w% a- l4 C
搜寻目标等于96 (十进制)6 g' O! @. L8 Z0 l4 u, ~
' Y# `' d+ ~: q9 E( Y cn eq" W8 m* Y \8 [* s, X ?
搜寻目标的数值没有变化2 I, F- Q, h6 H; X, C" {" x) S+ p
; _5 o0 @6 ] J3 G' H, ^ cn ne' A. M" I- D# E6 n1 `6 Z
搜寻目标的数值有变化# Q$ A7 l% Y9 ^5 N
! y( `: U# o) Z) e$ ]
cn +
3 n& l2 e9 K D 搜寻目标的数值增加
# w7 C- E' U; K2 u! o% n2 {* e$ [; r, n 0 C. Z0 Z6 u* k0 {/ h, K- B4 j
cn -" u3 m. C# G2 y3 a
搜寻目标的数值减少! }4 C9 ?; `- {" b2 j
' ^2 j# u8 v- R cn +,37 j! f( X: M- `, O" Q
搜寻目标的数值增加3 (十六进制)! s* Q4 [% m4 A. n. r
# l: F3 R$ G) [7 F' @ cl
7 K. K) a% a8 S$ O( f8 X 列出所有搜寻结果
% H2 J9 u' R: d: r4 g
" l% \0 ~! b9 h5 I/ G$ n cl xxx.txt
( ?8 F2 B. y+ y3 i) M 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
! p; D/ k, i6 |
% K& v! n" [" j) o: y; J, c " d! I9 i. A% b& C% R3 E
内存监视点指令: wp, wplist, wpclear, C! e k# B% l9 ~7 Y( Z# Q# u
例子:
) X5 y0 h& g. d/ O A* ^% s wp 1234,1,r! q" \! n# @" J. J6 ]4 q2 C
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1) Q; S) ?8 w; f
* [, h k: e1 T9 E2 n0 @4 K
wp 1234,2,w
2 [& D/ d# ]% s e 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
, _+ V; Y7 `+ ^: `7 R3 o/ p& K/ q' n2 \ ! ~) s9 Y$ _3 |2 a5 W
wp 1234,6,rw
- ]4 A6 g9 t8 J8 x 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6) ^' ?. Z: s2 k+ |. E& `
, e, {& L5 p' j! |+ @. p wp 23456,a,w,wpdata == 1
$ U5 v$ f4 B% T& k/ m 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1- l! }& p* C! I- T* q
( r' b4 Z# V/ j7 q
wplist
1 Y! f( E. E* O5 x S5 I7 _8 O 列出所有监视点
( Q: _1 Q, s5 M$ ^
5 _( F' \: e8 w wpclear 3
3 \) }: l4 p# [# ^" |/ F 删除编号3的监视点& s* S# |! v8 e/ D. }
! [+ \" T- X& [# I# z3 u
wpclear) c# C; M. t* B% s3 L: I8 i( @
删除所有监视点
1 a6 o& c4 R, m8 u+ ]# P1 X9 E6 j1 d# { _2 m: t- v
, O5 g4 U1 ]( {# D2 _- \2 e# t6 d" a/ F
程序断点指令: bp, bplist, bpclear
) h% }4 }+ [% i9 R) l 例子:. h6 `! b0 y" i9 K
bp 1234
a5 D, P$ Y' P ?* o" c2 G$ E" Y6 h 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
: C: d% g% ~. W5 j1 T' ]) s8 J c, h# h* |! s
bp 23456,a0 == 0 && a1 == 0
8 t9 Z3 ~0 w% |7 i3 D/ _4 D 在地址23456下断, 且中断条件为a0等于0以及a1等于0
* }& L' @0 z1 v$ A5 B5 _
) G+ x* g8 n' B/ j6 v9 V bplist
9 M# R) Z# c0 q: r. E 列出所有断点
4 X. K! h2 _+ e7 V P; \/ o1 W9 O- v+ j1 @5 d7 f- ?! s2 r3 s
bpclear 36 v( P2 h( y; z$ e, R' j$ S
删除编号3的断点
` J$ P( G( C2 ^: K; h7 z% g
( l' w0 ^+ l( e1 H bpclear
& H! Y0 m5 \( Z5 V! A9 W6 d' j. | 删除所有断点
5 R& }" e) q/ P' N+ L, O) N& B9 ]7 P* l
0 p% V: U$ ^+ A7 t: B6 H, a; u
( d4 e- x# {7 J: |跟蹤紀錄指令: trace
/ @2 L' v* F/ E1 s0 @; Q# R; V 例子:" p) s, s) y; {" U: l3 ?
trace 01.txt
4 b2 X2 H0 ~8 ~( b& R 跟踪当前CPU运行的所有代码, 输出至文件01.txt. n4 O4 D& y5 s# U6 J9 Q
: W. i# i, S8 G4 {8 B' |. y- \
trace off1 d% ?! t6 [6 |$ P" B V7 Y8 O( D
停止跟踪, 并且关闭文件
( ?+ D5 e8 i7 |$ t3 Y% P! n7 A! ^, ]8 m- R
trace 01.txt,0
7 Y6 A) a ~; ~- P 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt' Y& m$ _4 v2 U
`8 K. G" B" Q( A! [: V( E
trace off,0: y$ ^( L9 e9 q0 o1 b
停止跟踪编号为0的CPU, 并且关闭文件, d: B' R& [* Y7 V5 l
7 P' ~7 U- [4 a& W1 n# s' b; \ z; i
trace 01.txt,0,{tracelog "A=%02X ",a}
/ {" G* c9 O; B1 q 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 0 ~4 B) _6 T, R' Y5 \. k) L1 [
并且在每一行的前面, 写上"A=a "! `1 h7 h7 Q, H7 {
"A=%02X ",a为一个C语言printf函数常用的输出格式, b2 K; d1 W5 u U
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入: J4 j8 u [7 o; I
X表示为大写十六进制数& y# V0 }' N2 s2 S2 E! O
# Y! A) z! u" N* S: W c7 k- W* u: d" N% x G( u3 c2 p
/ }9 O! g: ^- _5 z4 d* g, q
内存直接写入指令: maincpu/ I$ w, Y& V# S0 e5 K6 S
格式为 maincpu.[][]@地址=数据) V# o2 x' l' J2 F9 u+ S2 o& H
第一个[]:
; v3 q0 Y# Y A1 x8 ?0 x o 表示ROM地址6 j+ ~% T" o- y; j. K/ f
p 表示RAM地址
4 u. P/ R7 k0 p( L! m6 B. m E. S9 z, s4 _' x
第二个[]:
" v( g( w `- d/ {6 c d 表示4字节
. F4 ]: |1 |# @$ h5 J# @ w 表示2字节$ p/ Q# G0 E; h# l9 B1 W
b 表示1字节
% M: V$ Q3 L9 V5 P9 A. r' ~) x* b" V: y# S$ w; j, u/ f
例子:
) a! P& k0 M# R! k maincpu.ob@1234=FF
4 y) P. a: i# N( B! m 在ROM地址1234处, 写入FF一个字节
, H7 H5 d! c5 ?
# Z3 e3 |- x) ]- G' ^6 N& J# f1 O maincpu.ow@1234=4E71; P! U4 \0 v) O
在ROM地址1234处, 写入4E 71两个字节1 J& @5 R* H" i1 z4 t
% {" b- v9 T' Z1 i8 ]
maincpu.od@1234=600A4E71
1 Y* O5 c3 N' F 在ROM地址1234处, 写入60 0A 4E 71四个字节
4 E, r3 U. w& u: f2 ]& ]. N v" s3 G: O0 A9 d: J. u
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写6 S4 O6 l+ U/ {5 |* `" _4 Y& E
2 w/ I* @. r* c u- ?' g, w6 ~4 u8 ]% }( g
其他:$ b' G8 _6 }( A- W; @
dasm 输出档案名,地址,长度
" }+ a$ @. h; [2 X$ A3 q- n0 Z 输出程序的反汇编代码
! ~( t6 z6 Y# {# E 例子:
6 D3 E |+ C0 Y* f- d) t% |- h dasm 01.txt,0,100000- m0 E4 F$ J* F7 d& a$ Y. O
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
. v: z7 e" N9 E: _) v& c
; c/ |4 t. W3 p# w: B- o softreset
: {1 E& p& K2 s6 m2 Z( m R4 p 游戏重启, 但不重新载入ROM/ A& f4 I# x1 l* H9 G% _
2 K6 w* i* U( n, E+ E) S- ^
hardreset
6 L+ G/ y! E! | 游戏重启, 且重新载入ROM$ [/ @+ l. G) W% S, c
+ G$ Q+ z; l, L/ C
snap xxx.png
8 }: i; ]1 G2 X- F, e+ x 截图为xxx.png8 C) n U7 h4 Y* n. b, \
9 s" _7 g# d! X) [8 ~1 x$ `3 f & o; n& Y- h: \( v" Z8 _
- n! Z# H3 M- H % g: Q7 `# u7 E2 g+ u9 A5 ]/ {( n
热键:
: D' r' }* j1 i ~ 中断游戏8 s5 W* M$ V N0 |
F5 运行游戏6 o7 n( v. N+ w1 m( i! R) j# t4 d0 f
F12 运行游戏且隐藏调试窗口) `: v: J, y7 a" Y/ Y" Q+ Z' g+ Q O
F11 步入, 单步执行, 会进入子程序# @! s5 h7 `# J# W
F10 步过, 单步执行, 不会进入子程序! B) V: e: c2 \
Shift+F11 执行到子程序返回
% t% {, h7 |' d7 h1 P Ctrl+M 内存浏览窗口
* v S* r" Y, y. I F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
! m8 s5 j1 L% u4 U9 U' q: w% z$ g% e$ `
{:4_94:}
- b1 y/ g5 E4 v# K; V
8 c% r5 B: U& r |
评分
-
1
查看全部评分
-
|