|
|
* u( d( E) I; A1 o+ a6 ^很快速的整理我自己常用的指令
+ y3 S) k$ u) W* r" e
6 S; x8 v( y- s7 M2 N{:4_112:}
! \) C7 A6 l8 w1 Z% s, v; P2 c) o \0 S% D
MAME DEBUG常用指令/ y: [* ^7 D- x% V! }
3 v3 z% |; |4 C4 Y0 v
内存搜寻: ci, cn, cl8 \' @/ m1 z! i4 K, {& B
# M+ Q* d3 t, C/ Z7 d ci9 E! K- R# R) ]6 {8 M% B z
搜寻任务初始化, 每次搜寻一开始一定要输入这指令* {% Q) N) j& m. ?
8 [! f. F7 v6 S# b* v cn* x0 Z# g/ o1 I. u }7 N
搜寻指令
! J2 ]9 s0 j; z9 Q 例子:+ J& {" K! H' T7 ?
cn eq,60
6 Q( D! V9 L) P# f: p1 V 搜寻目标等于60 (十六进制)3 h4 Z# L) i# j8 Q, Z- C
* f0 l2 R$ W2 A5 [6 F5 e0 S8 t3 ~
cn eq,#960 K% x$ T$ C" \% K! X- j: c
搜寻目标等于96 (十进制)
5 |1 k8 P' B! ?# n A( ?3 j& m$ N/ r1 I' t
cn eq
5 N4 M3 G6 X# ^6 y1 ] 搜寻目标的数值没有变化
4 K) G. Z5 t7 c
2 Q7 Z! V0 }# b, j cn ne T; M( [" h/ L$ O. h8 M3 J
搜寻目标的数值有变化3 m9 J$ r* S5 u1 z8 U# w
4 m- [& i; [! b" k- s cn +
1 k6 S3 B% P( C: t1 Z 搜寻目标的数值增加
2 M0 A ] Z: D5 e/ H2 b6 c) X# h
+ O2 z0 P9 ?# ~' j4 k! f cn -) y& G! X3 p+ v7 \; P# A3 q
搜寻目标的数值减少1 {; y+ V0 X2 f
2 l- G6 R2 {: x9 G4 e
cn +,3
. [9 M: J2 w P2 [9 N, `: v 搜寻目标的数值增加3 (十六进制)
$ C _. N0 l ]% W: v7 o* `, U5 p$ U' E7 c# ~! A2 z- h
cl
2 t, Z; t; g5 Y8 N 列出所有搜寻结果
, Q+ v, M, x4 `4 U
2 c2 e8 H; f" ~. L* O) K8 J: i3 i. j cl xxx.txt# ?; c+ {# H8 _. X' B
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式% `. l9 j3 h( o5 M% W
6 }6 y* P: N4 `& B% \0 T! }
' R9 V0 w; M" R$ ^ B' N: ?内存监视点指令: wp, wplist, wpclear( v9 B' Y' z& J9 w* e% j! B$ Y
例子:% V: W& {! j, M" T L; K* k ^2 G
wp 1234,1,r/ W) E9 S4 L+ _
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1- \: ], D* Z* @' z7 D9 T* L. Y
9 A! o8 r# j% v# T+ r) [/ W
wp 1234,2,w( q5 H% |- K5 T6 [' S; B! u2 ]% F
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
; R" f3 E2 `9 a1 C8 M# S7 p& _ 3 S! n( h. t8 q0 _2 E6 |7 o
wp 1234,6,rw
/ u9 K( j# \6 t/ r7 ? 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
/ e( R7 |1 q: i: X1 g; O! y' V0 K
wp 23456,a,w,wpdata == 1$ y6 U$ j: e, z. L6 C& x0 J
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
" l6 O- ^# c1 D% m
/ K! Q& L& m4 a, g4 l. G4 w wplist& ?: k6 Z5 V B! h5 t
列出所有监视点- `8 i9 y( R8 C) Z6 H6 H- j
* w3 E, ]6 T1 W8 O& @# B
wpclear 3
7 W% @( K( d' h) n, E- m4 z 删除编号3的监视点* k; D9 i- T0 U# T5 f" ^5 {' E
/ s4 B. m( a$ p: l
wpclear4 H$ a+ c/ B! M+ u9 z& e! o' ] ~
删除所有监视点/ \( f* }6 c- V. ^" ^- a$ P
! j5 A6 G; n0 l: }
0 \& A! }/ s0 S6 l; V3 J* ~9 s+ v( R3 m* Z- n/ s' c) h
程序断点指令: bp, bplist, bpclear' |( i2 [3 F ?; R+ W1 s9 {, M
例子:5 F& e& Y; U. Z% \, o
bp 1234
g e% I- T% K2 m. a 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断2 b8 a' x& K! L0 Y
) [. V7 {! ^- _) Z) {5 y
bp 23456,a0 == 0 && a1 == 0
8 S! Z! D5 Z. T. b- q% C$ M 在地址23456下断, 且中断条件为a0等于0以及a1等于06 y0 C. b' H% j- ]
2 W4 M2 p, o# z. A& h3 Y
bplist8 E! L5 q, H0 k9 d
列出所有断点) j: L( [( Q' D( a" k
- C4 t" m% G) L8 P2 _* ` bpclear 3* d; Z$ S4 Y S" C1 E p
删除编号3的断点: @" h+ A5 p" U6 r! S
* m" c4 J) U9 [. {( } bpclear4 E4 u" M+ ^8 T n( ?0 t# ~7 ? Y
删除所有断点
- ~0 Z" t9 h# z5 n6 p3 ?4 z# `( o1 F( D7 Z
* {; z" E2 }( R/ V6 Q ~
4 `( h9 V' r- W! V" |( V8 g跟蹤紀錄指令: trace& J! J1 g' o; u# E
例子:9 L" t( v+ V6 t$ Q" K
trace 01.txt
. H5 l8 L9 r6 X3 }6 t1 @( k 跟踪当前CPU运行的所有代码, 输出至文件01.txt" W9 h+ u. u% y! N$ y
6 D3 F" b4 J* F3 j! L6 a trace off u* ^6 l5 x3 e7 l1 e
停止跟踪, 并且关闭文件! _2 j, E! l. k4 X T
/ G0 v% D) l0 s: D; `1 I
trace 01.txt,0
' v% c1 v, ^! t6 n3 n+ B 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
- l* @) X T6 s: x8 Q7 j
: c* q" H+ U. f6 Z9 x trace off,0
$ u1 S+ f0 a8 O( k9 U 停止跟踪编号为0的CPU, 并且关闭文件
4 E6 E# t, [' r. M$ Z9 k. r7 d* U x, K* A3 a2 ]* ^! M! M
trace 01.txt,0,{tracelog "A=%02X ",a}
+ M7 Z' q8 S5 }1 C3 W% r j4 l0 N 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
9 P7 J+ ^9 I: w/ B1 F/ b& B 并且在每一行的前面, 写上"A=a "
8 L2 o; r2 l" C "A=%02X ",a为一个C语言printf函数常用的输出格式. |+ x8 I2 j _: N7 O( c6 o) G
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
' m! H) T9 q9 l X表示为大写十六进制数
) R3 z+ O: q8 k6 z
, V9 \2 S7 l! C9 A2 B: T2 k2 M- L0 t" Y: Q& c; F$ Z
9 }3 R$ D! K- n3 e: n7 Q: G
内存直接写入指令: maincpu" R1 H0 A4 S3 @- e) Y* |
格式为 maincpu.[][]@地址=数据
1 F# H9 U" o& ~0 u# S d& n! t 第一个[]:
& C C* L! m$ L; N- t! d/ k9 a o 表示ROM地址
9 i0 l- y) T2 D% J% N* d- b p 表示RAM地址! `& m9 A0 W; R, |) W
6 _, i0 w9 S6 j8 L( O7 ~0 T$ Y 第二个[]:# C- e/ X5 p6 H8 J8 b
d 表示4字节
4 k) M Z: i+ S3 B w 表示2字节3 _( e$ V& ]4 h0 I' V" v
b 表示1字节
- v6 L& L* _. z' |$ r& A; [2 a' R; m2 K8 b' s2 P! D
例子:
c! s0 a+ [: ]; E maincpu.ob@1234=FF
q1 N, e2 m8 v/ K. s$ y+ N: T 在ROM地址1234处, 写入FF一个字节
' [5 C9 `/ p/ D1 W. w9 c5 n1 y, i& H, z( E' ]
maincpu.ow@1234=4E71% I/ ]. T6 K% y
在ROM地址1234处, 写入4E 71两个字节
. a' h3 E7 f6 i' p0 {" }6 \* W% S8 P! v) Y7 w. j7 {! p
maincpu.od@1234=600A4E71
- d* ?# b) K) `. U2 M0 q. z0 y 在ROM地址1234处, 写入60 0A 4E 71四个字节* d' f, Y9 c4 h2 ~! Y$ q
! L5 D3 k' A2 D4 i/ n/ t. |/ g) y 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写% q# T# |- N; ~% G& U' I
2 B! J$ [! i, q3 {" o
4 }. c) M& {1 k
其他:+ G' [. [3 I* N0 m: ]* g
dasm 输出档案名,地址,长度: u3 _: h8 @$ w- Y4 h; K
输出程序的反汇编代码, `% P7 U( X# z- i; A+ O. S5 `+ V
例子:
) `. j1 y" e" s' o% ` dasm 01.txt,0,1000007 `" @5 v1 h0 I5 i
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
; [- }8 [3 I m& F' @( a( Y9 Y0 |7 p
softreset3 }# d& N. u- ^
游戏重启, 但不重新载入ROM
, O0 F+ X, D5 j7 w* T* n% R. v) G( p; j
hardreset |5 K; }6 F- p8 R
游戏重启, 且重新载入ROM. C% N0 Y, f+ _3 d- F' g
: L" Q! E2 q* m7 W s6 w snap xxx.png& U% G4 D! ~0 g& D( o( Z
截图为xxx.png: C t, d2 T' o, C% c6 R- G, X
( [3 d6 Y' p' o
4 F# F3 O2 p( |, m# t; T
- m. \9 q: u. z/ t' x" h5 G
+ @0 I4 Z; `( ~3 g* R
热键:
0 `4 O/ D) [( D4 ^0 A8 B ~ 中断游戏5 k$ S( H$ o4 Y" @. ^# @2 w1 i
F5 运行游戏
1 L" n* T9 f# E1 L$ L F12 运行游戏且隐藏调试窗口
2 u- y# J: }4 g: R3 ` F11 步入, 单步执行, 会进入子程序* Y k& R5 G- }
F10 步过, 单步执行, 不会进入子程序9 `, i! A9 J' `' h
Shift+F11 执行到子程序返回
w0 W L% R8 z( ]. a, l Ctrl+M 内存浏览窗口: R! F. a: A5 {" Z; s1 |* M
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
, f+ ^$ j; P' X8 W5 s
3 \- G w5 {- }& p8 o/ N{:4_94:}
+ \/ v( t# U% m6 ~. Q) u+ z' z" \/ C c1 M
|
评分
-
1
查看全部评分
-
|