|
|
2 G Y3 q+ G9 N) V6 ]& A很快速的整理我自己常用的指令9 x" E( {5 K1 v- S# N3 z
. g& o* i5 {* n/ ~& H2 \& o{:4_112:}
4 ~" K! t9 E/ s8 {
8 B: C+ O/ ]; F5 S3 eMAME DEBUG常用指令
1 `9 `* N8 {7 b/ f" b! P* a: Z5 a
4 \& V) V) W* Y3 n+ _3 V, k" r内存搜寻: ci, cn, cl4 M8 q/ p7 b/ k* w9 ]0 m1 q
, d& Z/ [6 v* U! Z' w3 o, N! x ci& g0 @$ E# x0 a9 r, a8 D
搜寻任务初始化, 每次搜寻一开始一定要输入这指令7 ], D: l* M7 z' T
5 V+ j, S+ z9 g8 s% p( w- ^
cn W. T( Z" c5 o" t
搜寻指令5 I A9 w* H ~4 |8 u
例子:2 r5 n& ?4 ^( Y0 S/ g- x9 T. @' o
cn eq,60
7 u$ I2 ?+ o6 @ 搜寻目标等于60 (十六进制)
1 F0 {- d' h6 E9 ]: Q T! n
5 Y# b: j) i# j cn eq,#96
6 D2 k; `% H F$ y4 R4 O8 Z7 {! k6 z 搜寻目标等于96 (十进制)
4 E; ]. D! Y# o+ u) j" g. z" ?
: m( ^% ~5 k! y* m cn eq. b8 g; T% A& x0 f9 E
搜寻目标的数值没有变化
! |. B, l# N5 t) P" |
3 C7 M* @( `; B! a3 o% ?& O" m cn ne
! ^1 W! h; V4 Q+ g3 T4 p 搜寻目标的数值有变化
7 H' b0 J' T: x0 \; F+ K
# i; u' b3 {1 h) X2 D cn +
) J6 `( u, x: j k+ x 搜寻目标的数值增加
" U6 d6 v; w6 ~: b5 g ! r3 L% B5 x4 K. _- F
cn -
* U( E5 ^" O* C" v" n7 f. E 搜寻目标的数值减少
Y. w) o s; q; A$ w4 @
. B+ S/ r9 c5 K3 j' I* g1 r1 Z1 W* ^ cn +,3+ }8 Q4 M3 |! S# m% x
搜寻目标的数值增加3 (十六进制)' n0 p: o( { q& @: n! _
2 z+ T/ ~( l* Y( }6 w! k
cl
2 O j: k- I. j, f% D- o5 l$ V 列出所有搜寻结果
( u4 _/ R7 i3 P
7 q% D; M" E" D; W cl xxx.txt
$ D5 W9 n t$ U$ A 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
5 D) A" L2 O! W! w5 r% ]; N1 m6 r/ `- Z
, g, k2 U* [# b2 q+ j内存监视点指令: wp, wplist, wpclear
c( ?+ @- Z6 T. M" L 例子:
1 m; p8 N& ^* b' V9 u+ Y wp 1234,1,r
/ n% c% d6 B+ r 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
) G2 U8 r. c C% \, N+ X7 x; _6 |3 a! A' b1 | |* @0 P4 S# V& I/ s
wp 1234,2,w
% Z) Z% H' m6 f: a% B+ e" a 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
( n, G( b" q% i& U & h+ a( Z9 |2 B
wp 1234,6,rw( X5 q q8 @; {( h% H5 p. L
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6- b( \$ u2 E7 b
9 P8 m2 c. k' V1 A( Y# M2 [
wp 23456,a,w,wpdata == 1
( l2 M2 D. K# C9 H/ r1 e0 N 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1& X" t" d) M8 W
+ n/ {9 P2 G* X q4 a! j8 ^
wplist
- S- z) H6 k0 S" G' A! U 列出所有监视点/ G/ q- S7 [; W: F
; j4 K, {. f, D; Y; D# V wpclear 3
' [1 k/ _; G3 m4 e. z& t/ B) ?, Z 删除编号3的监视点
' C X$ T- [, n3 c
) d# s% f! N2 O1 q# Y7 _% r wpclear% \, j1 _1 C9 B
删除所有监视点
/ k! S; n, y9 b' H2 J$ B) [3 c$ y! f; x
% k$ t# K0 x! v/ }& Q3 ^
/ Q/ t; s. |1 l2 w# h6 ^# p- @5 L- z程序断点指令: bp, bplist, bpclear8 s- \' X; i# E; Q5 V, P2 Q) a. Y
例子:
- v0 j' j# ^7 g3 w2 t7 {4 U! @; s. H* T bp 12342 O. C5 @9 g4 u' O
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
* o0 O$ c! b ~# T7 Q( l& q/ _: j0 @+ E+ x5 D0 m1 k
bp 23456,a0 == 0 && a1 == 0
0 U5 U0 n+ F% q2 X6 R6 _ 在地址23456下断, 且中断条件为a0等于0以及a1等于07 d9 m% B. [' f: S
+ r$ E% V" N2 p8 l' U2 Z! Z) @
bplist
8 V6 z% |+ R* ~- x7 G4 ` 列出所有断点+ ^; f9 e5 k$ f/ x Z
! v0 ?4 K2 j8 j
bpclear 3
! h7 e9 V+ j1 ~ a/ R! P 删除编号3的断点! {4 A5 n' |+ a4 _
# y( g7 A7 L; V: U% W+ l: a) }
bpclear4 [8 B' p& n3 a
删除所有断点$ K0 ~4 d9 c+ Z% ^0 A2 S, @2 M& [
2 g( |7 Z/ p2 K Q" B) J) R ; \2 T' ]" w5 o
7 e$ e6 E4 R: v" U1 N/ R
跟蹤紀錄指令: trace
- k6 o/ m! S1 M& @4 \ 例子:$ b, H/ B" \1 T: D! {, l
trace 01.txt- d q0 @: S; d: {8 q0 U# R3 S
跟踪当前CPU运行的所有代码, 输出至文件01.txt2 j6 Z2 i8 e/ B! E
: G* E7 ]" l6 e3 w7 c9 L2 [ trace off
$ I! G8 \9 w! h 停止跟踪, 并且关闭文件. S+ [' |/ \9 Z4 \! `1 ^! r4 a9 D) E
5 L$ A. T- O# s8 ~2 \ trace 01.txt,0( X6 g1 S a4 j. [4 d+ E; {- \: L
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt, [! h/ U n. k2 V+ o) C
5 {; L3 t1 ?2 r& \# c- B trace off,0
7 o5 B# }$ I# q) ]% n, b% G 停止跟踪编号为0的CPU, 并且关闭文件
. {) Q% y, Y% r# _ t! x) D& z: o6 W) C5 b( P/ Y0 A
trace 01.txt,0,{tracelog "A=%02X ",a}# r+ J& ?4 b5 F$ ?
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
1 \& H/ q# [2 S: N( z 并且在每一行的前面, 写上"A=a "/ @, z( {0 }5 H
"A=%02X ",a为一个C语言printf函数常用的输出格式. @1 R7 a0 }: v/ n/ Z$ k8 `( v
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
' D8 V( o5 o9 I: K& V- _ } X表示为大写十六进制数
, |" y4 B+ K& G
5 g* F5 t& T& a1 b' j
I& k( z; b- _# P( D& G
7 [: l2 O( O* A f内存直接写入指令: maincpu
# n9 i& h% ]+ O8 {# v$ H% B; P$ w& \ 格式为 maincpu.[][]@地址=数据
. a7 r$ J. S" R' j$ `1 \8 y! @ 第一个[]:
- @& z0 g# j& {% ~5 U2 Z0 j o 表示ROM地址
0 n* |$ C( [% T6 W p 表示RAM地址
, v8 E( Z1 n- d/ g
; j K% m2 ]% _. b, a 第二个[]:6 ]: A( @* h9 G. u1 x
d 表示4字节6 f. \1 ]2 T" m% p# Z
w 表示2字节
3 a5 |: Y7 x& y$ L+ _ b 表示1字节, X& U" l! i f1 n8 B. T
W+ q( c2 m/ f& t0 \ 例子:
& y. N/ p3 z! |" R2 K# | maincpu.ob@1234=FF
8 k# G2 q# M: K 在ROM地址1234处, 写入FF一个字节- K9 A3 L% Z+ X. k. Q/ [
5 ]% }: g! N4 ^ O
maincpu.ow@1234=4E71
4 B5 Y& U5 N+ Q. ^8 P u+ o 在ROM地址1234处, 写入4E 71两个字节
' X, \0 |2 ~+ s; u' V( |; G$ ]3 P0 q" K; z* p- I% ~) S1 h
maincpu.od@1234=600A4E71
9 E. G* A) p" ^! A& ` 在ROM地址1234处, 写入60 0A 4E 71四个字节- Q9 q, z* g" C% F: v
2 A4 c A, S( V+ j: F$ F
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
) N% N5 J! H2 a9 [. O! s: A " n8 S9 o$ y& A$ K" t
7 y9 Z7 r% G0 B/ e S- H3 h& |- v
其他:
9 l# g- C/ W3 P0 [8 c% K2 _; U dasm 输出档案名,地址,长度
5 x3 I- a; K& Y 输出程序的反汇编代码
* t1 i( C6 E: V! ^9 T 例子:& S; _* h% \2 F) ^
dasm 01.txt,0,100000+ V) q8 D! n% ]7 m
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt0 n; }0 `4 b5 @4 u- t
[( B( R. y6 ` softreset1 z4 K8 ]' T! R
游戏重启, 但不重新载入ROM9 B$ {4 {& ]4 H4 G+ p) n L L
+ ^; _2 j/ ]1 C& L7 f hardreset
# v+ W, O3 R9 b; ?7 ?, d 游戏重启, 且重新载入ROM: U1 l3 e1 C8 C. R6 c- I
. Z6 c1 g0 z* p2 i
snap xxx.png
- h2 w7 `$ p4 T) J/ h3 T; L! ?4 a1 u 截图为xxx.png9 O' Q* ]2 @* X# i) N% I# b
+ t: o0 y# [0 K
; i/ X4 m) r9 p0 A( J7 I
/ |3 N- G. L5 L, U
8 p' ?- u3 M g/ i热键:2 |+ [# b, I& Z4 ^. T/ F
~ 中断游戏- `4 H, {- F1 q# O: M4 F: {' Z
F5 运行游戏
3 n, J1 t6 a" f F12 运行游戏且隐藏调试窗口
- O6 I) F1 o; z) q/ n( @4 R1 L F11 步入, 单步执行, 会进入子程序
& D# ~, c7 q2 E: R# v F10 步过, 单步执行, 不会进入子程序
5 N7 z* ~. l( @/ b+ b Shift+F11 执行到子程序返回; \" x6 T# O4 y- e9 w
Ctrl+M 内存浏览窗口
1 q" s2 `- A# G h% `3 f F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU( A4 C2 K* T( g
4 B, X4 u8 A+ m
{:4_94:}
6 I3 B: N/ ?. h9 j5 k d% {0 }
3 T% c4 Q* b( s! Z: J p3 T |
评分
-
1
查看全部评分
-
|