|
|
6 A K: C0 `: g$ x9 O: W
很快速的整理我自己常用的指令
( j1 n. } G2 C" o `' Z U' f- n
6 v( v. u/ \* |{:4_112:}
1 E, M( C& x9 f$ @# j6 p
$ D. g/ l; P# E% m) d: o; } cMAME DEBUG常用指令" e# m2 g1 f d0 l( M
1 A( [& a5 b7 [: T% [( o6 N内存搜寻: ci, cn, cl# B4 f4 f9 l _1 U @; C
% ^2 o9 ~ c, f& c) k ci
) Z2 l: i7 m& v 搜寻任务初始化, 每次搜寻一开始一定要输入这指令7 R' k- l9 P5 C0 N6 D. h9 ?- w
( A- A( B& ?4 r9 Q* s) a( {- [
cn
% l L9 h7 |1 ], a' T1 C+ l 搜寻指令
- z( ^. n- O3 f) F C 例子:) _0 H; J2 C5 h' H1 s
cn eq,60+ L# r1 |1 i$ u1 X5 K) o
搜寻目标等于60 (十六进制); a! g/ o. `' H; L
% q, I0 a/ p# K3 h cn eq,#96( N% \. g- M3 Y0 n; N! w
搜寻目标等于96 (十进制)! d e7 y# f% T# ?. @9 B6 B: A- o
M2 K2 f# j ]8 Z$ ` g cn eq
5 V0 v I6 e. z6 n; o* z7 C 搜寻目标的数值没有变化- Q" K5 P; ~" z
' G( ~; y w6 D
cn ne
% E* B2 g2 m3 I0 J 搜寻目标的数值有变化) p7 q$ L9 ~ v' l
1 y. H- J+ ]' k M
cn ++ T/ O: r' I% z/ ~% u1 c
搜寻目标的数值增加; {$ s( {2 }2 o0 t4 _
' `" S# z+ G" R4 `' E" m+ j cn -
/ ^* Z2 o& c: { 搜寻目标的数值减少
* k8 z- q( x3 [8 g* f G/ _. b' | % q* W9 C1 t0 \9 X' k6 I
cn +,3$ F2 J4 Z2 ~- v; f/ e
搜寻目标的数值增加3 (十六进制)0 I% ~, O4 A9 G9 E
3 F7 a1 {3 }) w
cl$ t6 W4 W% N) v
列出所有搜寻结果( I1 Q* {- \$ l6 v6 @
# O: U7 ~6 }7 b0 j cl xxx.txt
- B7 w4 A; s& J( {5 o: ` 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
/ m: Q P! E0 k7 V e- q- Z% P3 X% P& M! V9 U5 j8 E4 L {: _
9 S0 [0 k2 I5 y. m! E7 j+ t内存监视点指令: wp, wplist, wpclear x6 y5 k: W, s3 P1 y6 Y. P6 ^ D
例子:& S4 F7 e( |2 I6 @0 A: X
wp 1234,1,r9 g+ w( ^3 W/ ~9 [
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1! U2 o: o; {9 F' n) ^7 e9 p
% [/ h; t' T# I/ F
wp 1234,2,w# P% O$ o- S+ h2 u
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度21 T. ?. \" R# ~
9 x4 Q. I' N3 [( G: J
wp 1234,6,rw
- c$ z& W3 b+ C7 | 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
+ t7 C$ f9 A7 s& F `: n. N! W9 z8 b z# P8 [
wp 23456,a,w,wpdata == 1( Y; ~ f4 \ Q$ B
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1. q7 I5 C% c4 w) W! J; ^7 \1 G
& B0 G7 O o; u) u1 i wplist8 u: B5 z3 T. b
列出所有监视点
9 h- X; \/ [! T2 W5 E. v! J. J4 f. |4 ^. ^# l+ B, a0 g: R+ u
wpclear 3& u% Y+ l4 `+ J+ |5 _/ Y; p( r
删除编号3的监视点
4 Z+ I! @, @5 \3 ~& t J7 D4 R6 _; z% }; S l( r
wpclear) D* {6 P a4 O2 v- E( [* W
删除所有监视点6 c* J" D4 O2 P- I% E& ~6 t1 d# D
$ H: d: X; W7 b: A8 L* S2 m . \- A p0 J) U: ?% B
# \, A+ a0 c5 w' p; Z$ |
程序断点指令: bp, bplist, bpclear
' i/ I2 T O; T 例子:
6 s& n' ~3 a) B# ` bp 1234) U1 o+ |/ }; o7 V
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断" S+ [7 q9 G7 Z$ s5 @9 |
# c: r4 E; S4 X3 }2 G. G bp 23456,a0 == 0 && a1 == 00 e4 F( y$ J+ i
在地址23456下断, 且中断条件为a0等于0以及a1等于0
8 {8 c* G2 C) c9 q$ x, U
& G7 l0 ]0 y& x9 f; C2 U! \ bplist
+ g$ H- o/ X7 C/ | 列出所有断点
- c6 S: P- ]3 R. z# B- u( R/ q. y/ G0 ]; [* Z8 `
bpclear 35 y( c/ S/ ~$ D; X/ V
删除编号3的断点
( l! I: d* c$ p, T8 F! v/ L7 z. J& O% U5 ~# k! }# L# i
bpclear
% ]3 J3 n1 u) t 删除所有断点
' k. K9 }. e4 c1 ]4 u8 x+ u" J
+ C! [8 ?' S& @; W! y1 i6 _ & i5 Q- i3 H; E: u( M) L
" c+ L- L2 e/ d" s- K \) w
跟蹤紀錄指令: trace+ D, Q6 o( E6 t
例子:
9 w. J4 Y% ?' t& _ trace 01.txt
9 s8 n- O8 N; s) D8 Z' P7 b 跟踪当前CPU运行的所有代码, 输出至文件01.txt) p& Z9 J" U6 a# j, Y
$ J* P5 Z; v& _( ^$ d9 e trace off
# n& m, }4 \' V$ E0 t' s 停止跟踪, 并且关闭文件! L. M5 q, _+ A7 s1 F
5 Z; @) m/ C$ {; H- J( I) W trace 01.txt,0
/ g7 E, G ^/ X9 h" v* J 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt% h" {+ d' e! T5 h9 v8 c
* B; G. M' V/ ^/ J8 |
trace off,0
w1 K9 ~( L( P7 P 停止跟踪编号为0的CPU, 并且关闭文件 {& A( u$ L5 H' y1 W7 f6 p6 p
$ K; Q/ J! D% G1 R1 Q) X
trace 01.txt,0,{tracelog "A=%02X ",a}
# [3 l8 T; K8 n; W6 r 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt # ~& }& o1 l+ K) D( L( T
并且在每一行的前面, 写上"A=a "
+ h3 i# D0 t U2 q: Q$ ?* I: h "A=%02X ",a为一个C语言printf函数常用的输出格式3 K' y4 t: N* F, w6 x( f0 G
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入% m% L) v2 L! P3 v
X表示为大写十六进制数% `* ?) F6 |. M$ Q: r
4 V+ @1 A# [+ n4 a% l& B; M
1 {8 d K/ ?4 q+ D- a
3 U* v9 o. K3 D7 y( |; K6 R
内存直接写入指令: maincpu+ Z" g8 v- R- r; d/ S
格式为 maincpu.[][]@地址=数据# [; W" O" X" Q$ b: `7 ? k
第一个[]:* o2 Q$ Y+ n. a$ ?0 \& l
o 表示ROM地址% ^. E0 P9 L: i/ T0 D
p 表示RAM地址
; i# s) N5 O' H4 R* [7 X4 {6 Q4 g( m7 a, b# n* N' l2 _2 E/ @; y
第二个[]: h1 ]9 D- s( ?! L, t' ]+ o
d 表示4字节1 ]8 a% R& C) ~* R2 I
w 表示2字节
! @0 ?8 c- y8 j4 l b 表示1字节+ E# N+ _; c. F& p2 J" Z$ D7 d
1 H- ?. _7 T- A' K
例子:0 f% F' l6 ~" E: D3 q0 u5 |
maincpu.ob@1234=FF, a" K: {6 G8 L3 W- |% \
在ROM地址1234处, 写入FF一个字节7 Y$ c6 y4 W) M5 e' J0 x0 P
+ L+ S" M4 M+ ^! \ maincpu.ow@1234=4E719 c* k7 A! l! ?) I# w
在ROM地址1234处, 写入4E 71两个字节
- N# V O a2 l1 @& N& [+ _
8 S( m7 w' J8 q$ @- i U& M3 i/ {6 l& z maincpu.od@1234=600A4E71
* |; S) c4 t! O( c+ A 在ROM地址1234处, 写入60 0A 4E 71四个字节
3 d/ k& \# V% Z( H7 X( d. e. e$ `0 c' z* }6 l, X
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
0 y: W B, Y3 N3 q / ^& b9 t" f* w7 k9 l
* {0 t4 A/ }3 z
其他:
" |" H# I, d/ c3 z dasm 输出档案名,地址,长度% W3 P7 ~ ]1 j+ e
输出程序的反汇编代码
5 R9 ?/ |- ^1 B$ ^2 F+ T 例子: {4 m/ }- E8 B1 c. Y0 t' s3 ^+ X1 p
dasm 01.txt,0,100000
( i4 e1 ~0 [$ [$ y( A' d0 b' ` 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt' l% D5 |! d' I" H1 H
- s+ ?+ d: j2 m. w. M* I softreset
( @% Q/ I0 q$ ^% ] D9 L* V 游戏重启, 但不重新载入ROM4 l) C1 S# [) k
% |3 E% E& X$ c& }0 x8 D
hardreset1 a: X6 f% }# O0 w
游戏重启, 且重新载入ROM
" Q* c, ^6 \. G
" L1 e) q0 d @6 q, u5 [, M snap xxx.png, b; X/ _! Z' f0 R+ p
截图为xxx.png5 i0 D1 Y$ W) \1 ]0 n; I- t% m
% }, g+ X( y* o
# J% v* `4 d0 A( z; G. Q
0 @ q5 h+ @# c; u P, R: h 2 y, D( J' G& r* B$ F- S# S! X1 g
热键:" E" v# Z* R! L
~ 中断游戏, Y" L8 \; _. c" t5 v; {
F5 运行游戏/ O0 _7 H, V- v* d' W3 _
F12 运行游戏且隐藏调试窗口8 i% E% z7 s' F2 D) ^
F11 步入, 单步执行, 会进入子程序1 n* m c$ t9 ]* I' R1 n7 H
F10 步过, 单步执行, 不会进入子程序
7 {1 b" t3 _( ^! g5 c3 i _ Shift+F11 执行到子程序返回
. @, J: _% r _$ S; E- U) {* d Ctrl+M 内存浏览窗口
7 ?3 Q9 o7 ]& L! U4 T+ Z2 d) x F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU- c* j, m; y- B
, n: w4 {( ^2 G9 K0 p+ N, d j+ u
{:4_94:}
) K! J5 G! `1 o$ E) W8 z; J% D. L* t3 |+ N0 b" B) h- J
|
评分
-
1
查看全部评分
-
|