|
_# w- ~5 s( |; }很快速的整理我自己常用的指令
+ h9 L2 S5 x n7 R
9 O0 f* M+ T3 u6 e: T. W" w* o6 ?{:4_112:} . Q' ?( w9 N7 j9 n r9 N
, h# t1 G# C! x2 `( lMAME DEBUG常用指令
% L5 _4 n }6 ?1 W- }
# U6 z# b% l/ G8 I内存搜寻: ci, cn, cl
" ~# M `, U6 M3 Z* b b) r' i1 ]! k1 d* b7 q9 Y8 A: m
ci
# E2 d7 ]% T/ {* d6 F6 L 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
( H) ~0 l$ N. H& Y! \3 z9 h& |
" N. O5 U+ V9 w3 [* o cn
9 u* s9 {6 B1 g4 B 搜寻指令% r* X5 s; N; \. L
例子:
7 }8 }: p( I/ {/ { cn eq,60# c7 Y* S4 ^3 o+ V, e
搜寻目标等于60 (十六进制)7 n) ?4 E$ {. f7 g& e4 C3 X
- O9 i# b. l/ h6 {
cn eq,#96: I D' A: Y) K9 V
搜寻目标等于96 (十进制)2 s4 X! ^! Z! a' F9 v. ~" g
9 T6 V! C, z( D0 u
cn eq
$ ^6 w4 ^& _, F+ }* p9 D2 [4 j 搜寻目标的数值没有变化% O/ T M0 R+ o/ u, [
/ r. ]1 l* P# q; K9 K& h8 _) g
cn ne
# G% O4 p" u+ b 搜寻目标的数值有变化$ y2 ~8 p) c9 ?# q7 J6 ?, ]9 c! }; R2 _
' B" |6 h0 C U6 G4 }6 C
cn +
0 m2 s: [5 [+ Q* K) e/ ^. M 搜寻目标的数值增加
/ j6 K! j N# l- M9 C# p: ]
# _7 F' `4 ^# } cn -
' _6 u4 N$ ~- ~* t 搜寻目标的数值减少& P- E1 y( L$ m# e6 s0 K
% Y2 u: _7 T5 ^$ {2 |& T
cn +,3
0 O0 X: F' n0 b* L. R& I' ~ 搜寻目标的数值增加3 (十六进制)
: ^9 j! d( A5 U: ?; O
/ \, l N' ?, L9 w) D- ?, i1 s cl
7 h% u# _7 g8 l t9 ~% T' z 列出所有搜寻结果
1 Z$ s& O8 o4 S% j. H* ^& {8 _ ], z! |9 o R( b7 U
cl xxx.txt
6 X/ b& j& N, i( P K 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
# `: b/ i7 N1 A7 L9 |9 ], k% Z9 O; g9 K# w- K- D( v5 M
4 ~1 i1 ]: G' S6 T
内存监视点指令: wp, wplist, wpclear9 b# {5 ^+ P) c' g+ Z2 P
例子:
' ~" \% j% A: B% t' W$ } wp 1234,1,r8 n8 E" f8 N+ ~4 k: i% g
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
! n; t! l) ^3 W' z: t+ P
) f0 M) J8 Y( n9 o. t/ P* }( [ wp 1234,2,w* U# v$ I- x5 Y, B I
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
; y$ k2 s, V$ \3 f: v2 h+ ? % t1 t; k2 d+ b4 l
wp 1234,6,rw+ n2 B- G6 n0 Y4 w. v! |2 y3 S
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6. ]! x' l) k# `+ o/ \- L
, a3 A6 w) C k
wp 23456,a,w,wpdata == 16 N/ Q6 K; c$ C' ?( p
在地址1234下写入监视点, 数据长度a, 且写入的数据等于12 Z* \) Q- W; z' x$ r. G
& _6 l# S( ?; \3 p6 r
wplist
2 p7 F& S8 G) ~ 列出所有监视点
! m2 C5 d5 [$ @7 u; C3 o, q
% u9 y$ _7 |- `% b5 o+ g' \% z& I wpclear 3
$ j. b7 y* h3 a7 b" S 删除编号3的监视点
9 r: ]. z0 f4 E* |2 q) `& O5 x4 h1 z, j' i0 e
wpclear
- G% N1 @7 j; h3 B: M 删除所有监视点1 l* g% H7 |) ^' t( ?2 u) R# v
( V8 c9 @, v: `( _4 R 9 K( V6 q) w2 w3 @
+ V1 n( ~( `0 R! A1 F0 P
程序断点指令: bp, bplist, bpclear
' I; f6 h3 R# p* }% N' H) g 例子:
. Z3 u2 C8 v8 e: S: f; ? bp 1234
9 x. C# i, C9 H 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
+ P- P# }: O6 ~" f) q
9 h8 h- P5 t8 F bp 23456,a0 == 0 && a1 == 05 v# Q$ O9 @. { p. z$ `% W# m7 r
在地址23456下断, 且中断条件为a0等于0以及a1等于0! w \# y1 h5 e5 p
, \1 H. j& @1 b( b% n4 K. ~* T
bplist7 l6 V, j/ ~7 i4 z! D, V, H
列出所有断点
8 N$ i( {8 s9 ` Z" ~; t- e: K% D0 c4 t
bpclear 33 ?& j8 b+ Q. D6 Z
删除编号3的断点6 E W, p. g& p+ q0 `3 g8 V
" _# I1 c+ f2 J4 D! j
bpclear# [, Y" m9 P x" w X/ I6 x! y
删除所有断点9 k6 u* r. X7 Q0 t, w1 ^" A I4 i3 `
- t" g9 k( w0 M' X
# S; ?% Q+ d: t0 \
+ r& n5 L' M1 R跟蹤紀錄指令: trace9 P) X7 _: L( ?4 d; V1 L& r+ {
例子:
/ C* G/ Y( ~% Y# x/ V- E4 H trace 01.txt
: C+ J! }; ^) f2 J2 J u 跟踪当前CPU运行的所有代码, 输出至文件01.txt
* W$ _2 O3 _- N6 {2 Z+ p) X; X/ X8 d v9 c, r
trace off
- U( h6 M6 g- D0 j e! u0 _ 停止跟踪, 并且关闭文件
! A2 Z+ q- G1 l0 B h
- n" R1 J$ q- w& c& V6 b trace 01.txt,0. l: W; W) A' c" n% ^1 e
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt, P4 j& v3 F$ ]9 Y
5 K: q. }- h( d; h7 Z
trace off,0
1 B# Q- }- P! G) n; w 停止跟踪编号为0的CPU, 并且关闭文件
& E5 H# D, S1 \4 f# w/ S6 C; ~( C% M0 _$ F
trace 01.txt,0,{tracelog "A=%02X ",a}( l( f0 t$ j0 x- z2 q2 k2 |
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# R1 x( E* i8 @ 并且在每一行的前面, 写上"A=a ": }4 ~8 `. p- K7 [* v# B
"A=%02X ",a为一个C语言printf函数常用的输出格式
6 u) }- _4 a/ ~& I' C6 E 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
( |$ E6 I9 v" I" { X表示为大写十六进制数
2 |' F% m9 f9 a7 ]! ^3 }6 @# H- ?' V1 G ]2 k7 g* k
8 J6 w' H8 b% E7 h' S, ~/ H5 ?/ f+ h# U6 z* Z
内存直接写入指令: maincpu r8 }& @' i' B- u; ?
格式为 maincpu.[][]@地址=数据
2 O6 I! v, J# C0 r7 ] 第一个[]:3 `$ s4 Y4 @9 {7 X! @( r# S* h
o 表示ROM地址5 M! ?% w2 V) i7 C
p 表示RAM地址
7 D1 _( B3 e) ?* ?* p8 C: T) }3 q7 U3 |& V0 [, \
第二个[]:1 d& }1 U' U0 }5 Z/ _
d 表示4字节
. K/ L+ B' [5 a+ }0 J# d w 表示2字节
# m. N- F2 P9 @, ]9 `. m6 p( R b 表示1字节
5 J& M3 T( y1 B2 f$ k% K! E4 E* L! x- p. u* p1 s
例子:
0 O) B" P3 _3 C" [( c maincpu.ob@1234=FF; L7 r l9 y! X0 y* {
在ROM地址1234处, 写入FF一个字节; H5 ]7 a% [: V4 m/ Q9 i8 T1 b
, n# N x9 Y9 ], l maincpu.ow@1234=4E71
" P6 c9 D( E8 Z" {- p 在ROM地址1234处, 写入4E 71两个字节
8 _! T& K7 |5 D. X
( A, Q' C8 n. V, a( T& k5 E maincpu.od@1234=600A4E71
, j( Y$ s# w t: w8 T! p: Q s 在ROM地址1234处, 写入60 0A 4E 71四个字节( L- L2 T1 V- b( T$ \, i
) [4 q9 Y* t( ~& x 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
" [, O6 X+ B$ R
+ g9 b- C, B% F- y4 d: k4 H
0 B% Y; ^) C( i3 D其他:
, c- I7 f- u* [! e& u0 Q2 } dasm 输出档案名,地址,长度
7 r% l# V d7 x 输出程序的反汇编代码 ~# F" n' T& E! q6 v! M) b
例子:; d' g$ z4 `! ?% r+ z" N/ L
dasm 01.txt,0,100000$ w" B: W+ l1 ~. U& s
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt2 t0 H+ R, f9 g0 c
8 u! O2 H, ?- ^" R6 G" J softreset
1 \& t. \: D0 z 游戏重启, 但不重新载入ROM1 m/ f9 [" e% T7 D! e J, E
) g2 j* N& T1 ], v' ~
hardreset
+ X1 C2 \! D. {# t' b 游戏重启, 且重新载入ROM3 y$ L9 c" r7 x; {
5 y7 n2 l5 T% w, X
snap xxx.png( C/ Q- w0 h, N0 ~0 u' S
截图为xxx.png
; S; m( T8 k( y, I
9 L, I t; L0 q1 u! V7 A; ~
1 `2 ?' \5 c5 y5 Q: a, C % i. U& d1 X1 u( G9 o/ R' z2 ?
/ s; n, g3 r5 g
热键:* ~! E4 o: Z- x7 R9 Y
~ 中断游戏4 V' }! p9 }6 y0 u8 \2 ]
F5 运行游戏 ]5 e0 k- g) D8 B+ B) b W
F12 运行游戏且隐藏调试窗口' Y7 n* K! E5 U) K
F11 步入, 单步执行, 会进入子程序
( _% B( ^1 D7 d9 w. I/ a8 K F10 步过, 单步执行, 不会进入子程序
% d% H% U$ u' H9 S) I Shift+F11 执行到子程序返回8 {* B4 Q/ d* _& d! c
Ctrl+M 内存浏览窗口
5 a% S; i) i% D* ~! D; N9 b3 p F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU) D; q; n" D0 H6 b
2 u/ x( C6 r+ S: l8 Q+ w
{:4_94:}
8 |: P) N% [4 q1 [. V
# ?9 k9 y H! a W; M6 q |
评分
-
1
查看全部评分
-
|