|
|
% [2 J, \, [# r; A; f
很快速的整理我自己常用的指令
E" I" K2 G2 v+ M; H5 y; }9 L- l
{:4_112:} # f# V- ?3 m- j1 ~# e
5 a, `' ?$ i% ?' K+ g; j& k" k" }
MAME DEBUG常用指令' ~# o9 h- f! J Q; ]- |0 {
7 w6 }) V! @. J$ a, V0 @: r
内存搜寻: ci, cn, cl
9 h% F9 e* X/ t+ G8 Z* t) t: z. S
ci
7 W0 B; e f9 @3 J: o/ m 搜寻任务初始化, 每次搜寻一开始一定要输入这指令' ^+ I8 p; [% S0 G
& F# o" {* Y2 g2 [. y cn8 r& G" B n# J+ M* y" _' I' x
搜寻指令4 T2 k) P( L; K" H1 ?
例子:
. \9 t' Z X1 D' ?' G cn eq,60
3 D, J+ R4 h& ]: A9 P1 u9 y' V 搜寻目标等于60 (十六进制)
4 I% g0 R5 y% S7 o4 ^0 S # o: }0 @! \( \, ^6 F
cn eq,#96
( K' A' Q b; H. B: ?9 `1 |$ b- {6 x: k 搜寻目标等于96 (十进制)6 u( P8 M) G {4 c9 G/ r" L
* |& z% @0 k- c6 i cn eq8 [ T% ^6 k( o9 n2 F/ [/ I
搜寻目标的数值没有变化4 O! J9 K5 S0 z' M* ~; G
* ]6 b$ W( l6 z8 T& C4 [! W cn ne: \' c# v3 Z2 i
搜寻目标的数值有变化, ^8 ?: b) l8 M0 F1 G
. @. t# n- D: B8 ^ cn +! q/ J7 r8 C4 V/ i
搜寻目标的数值增加" @ a8 f6 T. E0 C: A+ V1 W% r
4 {2 H% x4 [ ~! o( g cn -
. s0 y/ l8 W* Z- d6 x) N 搜寻目标的数值减少3 \& [4 v9 B6 B1 v$ V
$ W, u( b4 @6 Y( Z8 o cn +,3
$ C( U; f& ?+ t* T* _% ?* x9 @, m 搜寻目标的数值增加3 (十六进制)
, x; Q$ ~4 T* k+ z- Q. {$ i- b
1 W' Y0 ?% h# f: s7 S' A1 a! f cl2 `: n+ U& o$ x0 _
列出所有搜寻结果
& N4 E0 v4 \+ P1 ]7 A/ S* o0 H, p3 W* U" l% ~& d2 r3 u( C H
cl xxx.txt$ h' {" r/ l9 [1 n$ W a
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式$ q9 Z" N- l/ [1 a5 q" F% C
: w4 _0 s$ v0 |( a3 H
) f# d7 Y- Y; W) G( c9 i# j! W内存监视点指令: wp, wplist, wpclear3 F* F3 S; d- U/ ?, v
例子:+ i. _! r% X: x9 M2 P2 Z
wp 1234,1,r3 v, t+ y5 I6 s, q0 m
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1: { j4 h+ v- ~9 D \1 E3 t: [8 {2 A
! S# _0 S% \* u ~& e
wp 1234,2,w/ g0 b3 Q Y, O' s: q
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
0 X- F" M( S: ]) D
# m: w2 U' {9 h' b wp 1234,6,rw# s- L' g# b1 X; _0 Y4 u
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
$ a4 K; }5 a4 ~% d" m3 o! G: Q6 q! x8 d w9 N& j
wp 23456,a,w,wpdata == 1
( ^! i Y- r; x- K 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1, ^" R6 {: [" O5 P. q4 \
: B1 R( W- \" b' A3 y+ ^ wplist- Z+ s3 |$ [2 x
列出所有监视点
t% w/ l; A+ e& p% ]7 L# K% e+ z6 B* V4 {: _* D9 ^- c6 L
wpclear 36 e {( b6 y6 k5 O, u# p! f& G. E2 Q
删除编号3的监视点
. H, S. {2 B2 X' a% [3 U+ r8 m5 P$ E% e* e- }7 s
wpclear
4 Y( I- g" t3 o, Z 删除所有监视点# d% \* g$ d, E) J/ h) v
8 N: B. K% r/ N8 C: e; ^ . T. L5 W- k* L% n+ }* Z4 F; ?
& e1 | I4 Z; T6 y: l# z3 {程序断点指令: bp, bplist, bpclear
. |; F: r+ C( F. V$ Z7 | 例子:% m* F9 J e% s0 m+ r6 m a% N+ y/ D$ e
bp 1234, X4 S( F3 \* ~8 O w- z# r( G
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断/ B+ a8 X% E$ H+ c* O8 y
' N% x Q* a A D1 w" T9 T% H
bp 23456,a0 == 0 && a1 == 0
3 }6 m- k+ @2 V9 L5 p6 ?8 u& z 在地址23456下断, 且中断条件为a0等于0以及a1等于0
# M+ L1 p% Q# S' _, H! y8 r. o
6 x! ^2 O( ^0 F& v bplist( Q2 d6 L) P `( |
列出所有断点' {. r2 f! z7 x; o
{% P9 [. n% @5 o7 A bpclear 39 v4 `1 J' k; L' S7 P
删除编号3的断点
0 d. }- J! G/ A0 D1 [
( v. k6 }, s* g% O. w bpclear
% W" Y" c% L- o& c \* b; t 删除所有断点
* \, `3 k- P" n$ ?3 n- u" K e! A6 X \. T8 s
2 [5 S: B: \5 y" h- ]# [
+ j. C: H2 y4 U5 O1 i跟蹤紀錄指令: trace2 F% R, O) S6 D1 D9 b
例子:
D4 L* R2 L8 m trace 01.txt2 C! }) d( A% j4 l$ b
跟踪当前CPU运行的所有代码, 输出至文件01.txt0 X; M4 U6 Q) R w
% S& B3 T( v F2 S trace off
: W$ c, W" S. _* c; w. J 停止跟踪, 并且关闭文件$ y |: O& ]4 G/ Q% {
+ @ L( |( D* F" B trace 01.txt,0
! P, a" _# e: @& s4 ? 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# ], V2 O: m& C% z4 V- l
9 i( l/ S- J+ B# h0 e- m1 R1 ?! I( P) O trace off,0! g! i% H8 `/ r2 l# Z8 t, l
停止跟踪编号为0的CPU, 并且关闭文件) T/ p% J' ^. O& C8 g! J+ ]' Y0 V
* a6 @2 |) Y$ k' w6 Q6 W8 D+ c& W
trace 01.txt,0,{tracelog "A=%02X ",a}4 Q( ?* i5 H9 D: E8 I2 s/ l
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt q8 C1 K; ~5 h6 u, E
并且在每一行的前面, 写上"A=a "2 V: }: x" i: r( Y K9 f! n1 y8 c
"A=%02X ",a为一个C语言printf函数常用的输出格式
. t$ ^; O. b5 {4 ? 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
4 x/ t; \# ^( Q X表示为大写十六进制数
: ]* P U5 c" O+ x, N
, @3 L8 ]- Q. n( O$ ]
, E& r+ R% d- T6 p
0 J9 Q7 ]+ A2 U" V/ B内存直接写入指令: maincpu
, n: w, x% F4 v5 D& h; T 格式为 maincpu.[][]@地址=数据
# Y8 w+ Q( [6 M) {! Z1 U 第一个[]:' s( d7 ?" B: G
o 表示ROM地址
& e8 q& V+ Q+ l" A1 ] p 表示RAM地址 n4 B# D5 y# u. [
; a7 Q+ H7 ?$ H5 i8 w, T
第二个[]:
3 M4 V0 `3 \8 ~0 ]; A4 t d 表示4字节6 `: v, C# P! o
w 表示2字节
$ w, j& u* C" z' Z+ U9 N. I b 表示1字节7 J! |7 K, ?, P! L- b% i( T
! A+ v W9 V+ g4 e' h) H2 }) e
例子:
& N1 l' k, _) p+ q; n1 i maincpu.ob@1234=FF
8 N9 m- `- F a- e, ]' p: k 在ROM地址1234处, 写入FF一个字节$ b3 c1 H: b( R7 K
* Z6 l) i2 w$ {: b3 p- K5 S maincpu.ow@1234=4E71
# A! k T. } @- ?2 d 在ROM地址1234处, 写入4E 71两个字节5 p, ~- Z5 N( C
$ W/ i! }5 x7 H
maincpu.od@1234=600A4E71
\9 S/ Z, a/ ^1 ?% d 在ROM地址1234处, 写入60 0A 4E 71四个字节; R/ Y" V( W4 h* l" U; f
2 O/ R1 o! A; y* l! O9 I
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
% g6 R1 e# U+ Y- s & t# g+ X7 u9 ~4 C
B+ j( |; E4 x其他:
# Z& T/ B: I* U- a1 A) l' C* W4 l, ` dasm 输出档案名,地址,长度
6 B6 H7 f- x- `# a! V- S7 V8 Q 输出程序的反汇编代码1 P: z! b) H7 d
例子:
: z3 c1 j g1 G% c( a+ e- m dasm 01.txt,0,1000003 v& F4 w* g1 J( A% L
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
. ^ b7 d, r! H, m8 d9 N: V. F% ~; t$ r# {4 [6 a6 C
softreset" } t! w# W0 p' ~6 q/ C
游戏重启, 但不重新载入ROM
* `* [! q( c. O4 K* d f2 |; R0 S. z7 c9 O! E# @6 i9 o
hardreset
& m; a& P5 Q$ | 游戏重启, 且重新载入ROM
3 Z- I& O9 w1 Y% ]
5 @" W3 H; M1 c snap xxx.png
; k* m* @9 A, L, C 截图为xxx.png
% j/ [, ~" L" I; L8 W3 Y8 R# E! S% y, z0 i& [$ C2 y' _
8 L+ ?& g! C1 D% r9 n
" I1 F, @+ X5 q/ {
, g1 u3 v" J# j0 A$ R6 S# I
热键:8 q* R3 Q. n6 ~# ?' ?
~ 中断游戏; J/ V1 U9 L3 m) S0 z5 D
F5 运行游戏
$ G! p3 o9 d" \! q; x2 c6 c F12 运行游戏且隐藏调试窗口
: I( n$ p+ ^8 _/ Y F11 步入, 单步执行, 会进入子程序* J' c* t4 O3 |* F5 E2 P+ P8 ~' e% D
F10 步过, 单步执行, 不会进入子程序. {) b( J$ M2 W2 o
Shift+F11 执行到子程序返回% l. V1 e' a0 i4 o. e
Ctrl+M 内存浏览窗口: a6 v, d+ d& _% N: A& v
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
5 o$ g: I1 H+ V* S5 K4 \
4 v/ P, b6 }/ _5 [# J1 G$ W{:4_94:} & l9 t6 j) s9 Z: W# [( U" @
& u! ?: o) N5 J, ]6 k
|
评分
-
1
查看全部评分
-
|