|
|
, ~2 m* J/ _9 V8 T! N& S g/ \& x
很快速的整理我自己常用的指令
9 m A+ S: m1 x% T* T# x- @. t6 J: ~1 g/ A a( i
{:4_112:}
3 g) @9 |; S. O' P
, y0 p3 H* [, c3 {' q RMAME DEBUG常用指令
. u( Y5 D" X' `+ X% x
+ g& W$ L! s* b2 G. z/ G. R6 F内存搜寻: ci, cn, cl
2 @6 M# r. Q m) h% y& w
2 D' O! n5 U6 r3 O+ o0 q! s ci. v/ _" A2 Y) X( p
搜寻任务初始化, 每次搜寻一开始一定要输入这指令; h5 B3 S3 D+ W* i
2 b. n! ^/ Q3 Z cn
; x3 O- [! @4 {0 j& Z! b$ Z 搜寻指令
/ z$ [; D+ l. N* u/ W 例子:
2 z$ Q, G# W R2 ^ cn eq,60
% r( C2 x# C( a7 b- a 搜寻目标等于60 (十六进制)
* ?2 M2 C: s% R4 i& B 9 N" F& c$ g% G! v/ O5 l
cn eq,#96! ~( U# F6 h5 q( O6 _' L: _
搜寻目标等于96 (十进制): Z% c9 X$ _% K2 q* s# a
$ j, y F. D4 {2 o* Z cn eq# i# R4 Z9 V3 K* o$ p" K
搜寻目标的数值没有变化& E7 i# c* k) P; j A6 E
" v$ B9 l( j0 ~' T cn ne& ^% I( p( D0 h, T: e2 h
搜寻目标的数值有变化& j1 \7 r. S8 b5 J5 K
1 y8 k+ ]+ [0 k( H; d
cn +
# ~; o, G N$ D; E; y1 H- ^ 搜寻目标的数值增加
3 J$ l* K1 A4 Q% G! {# l7 B
- {5 [2 S+ p3 \9 N cn - r& t* C* @; {- r
搜寻目标的数值减少' {/ R R, `9 T! k9 k, q
5 t& v, c& }- y1 y cn +,36 u1 b$ |/ z: p
搜寻目标的数值增加3 (十六进制)
# Y, e! Y0 ?& z4 H& b! n I9 T& [: \ ~7 G1 E
cl
* a, w- j8 i( ~/ l+ w 列出所有搜寻结果
7 y. i# E" E! ^! D2 k
1 h. A9 u5 ~0 P5 a0 r ^7 b! B! @ cl xxx.txt
7 E2 b" E: n' M& i 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
0 ^0 I- C1 g8 o" a( |' S1 }) P# k0 }* ~& m. d b
4 I0 }" i' W; L( d% X& B1 h4 s
内存监视点指令: wp, wplist, wpclear: u5 ^- o% N% Z# x1 r) S% s6 i9 Y' M
例子:
" f, }1 r# t7 \7 C( @ wp 1234,1,r
/ M" W- r- {, e( v: n1 G 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
; i1 o) Q" {8 J8 r7 O" X" S5 C
% l3 Z/ C- v. \% z! i2 ` wp 1234,2,w
' _* [6 t9 s5 M 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2; u1 G1 D- D8 G g* E9 ~: C
8 k) F1 c2 `( d) e; Y wp 1234,6,rw
: c9 B7 ?, a. F 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6& f( U% @) }; b* D
$ E2 n7 _" q- m( P
wp 23456,a,w,wpdata == 18 `. m' N) Y, P1 T% B4 z
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
% R0 }/ s4 E8 C& v) c F
& r% h/ p8 f/ ?1 l5 R3 _' N2 ] wplist
" F7 z d% [" h x# j2 s# L8 U0 _ 列出所有监视点
/ l2 t# W) s6 F) _4 [: r/ T8 u( i' D* {7 o5 ~9 J6 z. K w, d, E
wpclear 33 p! H5 {% n5 \! a
删除编号3的监视点
" ^9 D2 a% m9 d
6 _) x" z6 ?$ g! m wpclear* A- h4 H' t+ P3 X& O l) e
删除所有监视点& c: p: L5 Z+ s
7 b# F" z! Y$ }: L7 g# g) L
2 U: Q4 j0 M7 B' t/ l
7 P) N" V: @8 F8 x/ ~( \4 s程序断点指令: bp, bplist, bpclear4 [& |) a1 R7 e% r, U
例子:
/ B: i" s4 @' Z0 U; I0 v bp 1234
) X! x& S! \/ T( f. C 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断6 Y# ^$ l+ ^, `, G
" j' u" r; w5 z' y/ @& A9 s
bp 23456,a0 == 0 && a1 == 02 z" W( N/ j0 n( x/ W2 H9 t! d
在地址23456下断, 且中断条件为a0等于0以及a1等于0
' {, _2 C" b. |/ l! j. L/ Y: Z& z3 @
8 O( v# W" [$ I k" [# X, ` bplist
; U- v1 Y& o2 [ 列出所有断点: S U! K) t( S5 V; G
- w. E0 \6 E4 J: N8 b bpclear 3
- V A8 S% D$ U 删除编号3的断点: {1 P( t% d t: K% H; {- f
$ v7 c W, E0 \, @. \; W5 I: V3 c
bpclear- w+ T0 @. V. ` a2 N \' [
删除所有断点& B3 L* `9 l9 A+ e
, E* g& f( e0 j3 {: ]
' h( k/ B4 g$ i- L6 ?6 U
: e6 P9 W1 w0 k8 X1 E跟蹤紀錄指令: trace0 f7 v. \2 {* z/ w. f( c* n
例子:
) Z# T, z. ?, m& x trace 01.txt
! }5 x1 @4 M0 ` W3 Q 跟踪当前CPU运行的所有代码, 输出至文件01.txt5 f& @3 l. b* _& }" r
1 T" |& }+ N$ _* a% f4 O& \* s trace off
, Z: {& s: O! ~* L+ W8 M: {, p 停止跟踪, 并且关闭文件7 }7 ?$ |( D$ S, ~ ^/ U O4 |
, G6 c4 w. I( | trace 01.txt,0
/ C- z. B8 h- ^3 R 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt* y! I x2 B( ]6 x' {- F } _. U
3 ]/ v7 k& q7 N. m: Z+ _
trace off,0
! p0 `1 M3 B t 停止跟踪编号为0的CPU, 并且关闭文件
# l9 f6 S5 ?! r' @$ I/ m3 C3 Y8 N6 d& V
trace 01.txt,0,{tracelog "A=%02X ",a}
4 H4 f4 r9 s( q( ?# c1 b9 M 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 9 u4 }2 z% u; d3 c I/ I, }
并且在每一行的前面, 写上"A=a "+ ^7 s+ N( `: \2 ^ n- u/ b+ l9 u
"A=%02X ",a为一个C语言printf函数常用的输出格式4 S2 C% F- X* Z
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
" _- Y2 a: }' d3 k, _# I X表示为大写十六进制数$ F% v7 o6 i* W& J
4 n( K6 v! B; X
1 b3 U( v! o' d- ] {* i. _7 r5 e/ ?& T/ W- x# t6 I: K
内存直接写入指令: maincpu) \5 K) J b+ I! H* t/ E
格式为 maincpu.[][]@地址=数据* o2 V8 c) \3 ]; t0 w0 h
第一个[]:
6 r- v9 K$ T" T+ j: F6 P o 表示ROM地址. V+ `3 p7 d j6 q
p 表示RAM地址
\0 i4 T0 P2 `/ ~7 K, a2 G( T% @& U( @7 d: v
第二个[]:
* } k7 o+ Z2 V6 t# h d 表示4字节
6 a I6 Q/ j+ ?: @. m w 表示2字节/ C4 c) r4 n% ~0 z
b 表示1字节% Z. D! A; n9 @) S: P0 n
( w/ G1 L4 l5 G
例子:! _5 Z4 |( k! T( E7 M/ Q5 a, f' W
maincpu.ob@1234=FF; l& b. ?6 E2 U2 [; Q1 q
在ROM地址1234处, 写入FF一个字节
) d$ Z4 T5 U3 x' {3 t+ t* |$ M2 y! q) W3 c
maincpu.ow@1234=4E71( x8 U* n3 g( X0 P; H, \
在ROM地址1234处, 写入4E 71两个字节
) m2 d& J( |' ]0 E
, |3 l g0 ^. Y4 I& H# F6 b maincpu.od@1234=600A4E71
6 X: q' W; o0 M5 y/ r: t. G 在ROM地址1234处, 写入60 0A 4E 71四个字节
5 M) R! n+ J8 T# X1 Y0 Q% o% t1 I; c7 _' g
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
! F4 O( K: L2 N/ ~( l7 T4 e
' E& s; X7 o' f8 A! M5 r$ m
* y7 v/ {* Y. S其他:
6 l) i' }- \0 C8 ? dasm 输出档案名,地址,长度
) D# \3 d+ {' `3 O( ~7 V9 Z 输出程序的反汇编代码
0 ~* o2 ~/ ?1 ]. G 例子:
0 q! V5 Y: H9 @5 V* b* X2 F1 @ dasm 01.txt,0,100000: t o- B& p: g; Q
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
2 r! v5 D u5 r" U
' S# E! p8 ^3 i1 v$ S$ ]* s, Y softreset* X9 q4 E, ^0 p
游戏重启, 但不重新载入ROM
3 S$ R+ Q2 M- _
) h5 L4 s8 w/ u1 h' ?1 _8 D/ Q hardreset
; l& i6 Z2 V# K1 l 游戏重启, 且重新载入ROM+ A) q7 f8 l, D0 A4 \0 i' a1 F% h
9 s2 w- f$ X h6 F5 ]
snap xxx.png
! n. {5 `/ E8 D1 N 截图为xxx.png; i7 a ?: X" D! ^0 j/ Q
% M" V9 f+ b- U( [& N* V# f' [
' h" N: B9 ^' ] 7 T3 ^0 ^% e! `
' ~; a; v8 f1 ~! {2 ]+ H热键:
- R$ F0 c% P0 ^ ~ 中断游戏; F' T: \7 U, U" @% t/ _* G$ o
F5 运行游戏
3 Z7 V0 m( H( X F12 运行游戏且隐藏调试窗口
& h; E+ c! b* n. l F11 步入, 单步执行, 会进入子程序
% ~' y; P5 c i F10 步过, 单步执行, 不会进入子程序
' W+ o- R A2 o7 X( Y0 O5 g Shift+F11 执行到子程序返回
: h2 }6 r; |! N: i0 Q Ctrl+M 内存浏览窗口
+ C5 G& c" `& |* I8 e" e) E+ g3 V F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
6 v7 q* z. p6 [& D8 X; e& h) a5 \7 t, H8 d0 J+ G) @
{:4_94:}
C1 Y! c) L5 r5 K) |8 C/ M# J
4 t- k$ }; Z5 ^7 G0 I& ]6 F" x |
评分
-
1
查看全部评分
-
|