|
|
, Z( n' G; j |- {8 c/ {: N. E+ k
很快速的整理我自己常用的指令
: t3 q g( R) G/ F+ x: w& x4 n+ t% C4 {% [$ K. o# H: h8 D1 m2 W
{:4_112:}
4 f, k8 n7 m! Z' J$ Q
. J9 I% J% X) {0 v) a* l/ U3 ~MAME DEBUG常用指令: Z4 ~! X$ q; U) ~3 d' [* i
, D% Z% l. @+ i- u& t# k& m内存搜寻: ci, cn, cl" l9 f% W |" n% [* l
$ O/ P6 [0 G! f5 _# k0 x& |2 _
ci4 V; o& ?0 H | r
搜寻任务初始化, 每次搜寻一开始一定要输入这指令* M5 }/ K" b4 T6 }8 ^$ K6 [
6 t& m: ^9 y3 [4 e cn
# n3 z- M3 d& B y# q* f# R9 J/ F 搜寻指令
/ B ^4 h% P/ ], T& V, |1 D! A 例子: J6 V- G- f. q( m7 O
cn eq,60& Y$ L4 [) @. S5 T' F4 q
搜寻目标等于60 (十六进制)
, o. X1 I( k) j( C4 M
4 [" \" g$ B9 k6 r6 |9 r cn eq,#96
2 N. a3 w7 y! ^8 u* h 搜寻目标等于96 (十进制)
1 d0 S) D! [ c3 P1 K2 o7 B4 R! J4 E
cn eq
) F& \* G, h6 v2 t$ a2 b 搜寻目标的数值没有变化
) ~! B( p9 l/ m, V
* P; ]! P+ X" d/ E- O% m$ s cn ne$ ?& R1 f3 ^$ Y7 a
搜寻目标的数值有变化
' C1 H- w3 B( _0 F, \' R, d* {
3 _" E6 ]5 D( \% `+ D" h! }' D cn +- n5 f" h" _8 N8 y! K; }6 R
搜寻目标的数值增加
3 F3 [: R9 X9 t! G0 R: B9 h' Z
5 b0 F& t2 J+ q cn -
) ]$ B6 [4 H& d7 o6 X! R( q 搜寻目标的数值减少- O, I, j9 t6 R/ O9 D
. U+ G5 n" s$ P/ L- H# I8 U0 M
cn +,3
# {' ~. i; X0 k; _& F* x 搜寻目标的数值增加3 (十六进制)
; }) {* v& [" e8 L) H: x1 s
1 L. f8 u8 @+ c5 ?/ \$ V; n cl
6 I$ R. @" g% {. `; w- H$ J 列出所有搜寻结果
8 }* ?" J! {( s) i
8 F5 x/ k$ R( M4 W2 \ cl xxx.txt" n1 C9 N, p7 d: h
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式5 U9 W" c8 } ]$ w5 s# W
9 _% A; A0 D& L# W. ^ G8 V5 U & D; q# e9 o8 S/ m
内存监视点指令: wp, wplist, wpclear: d; A: f) _" Z# [, F: L$ ^- z ]
例子:. y. r4 S/ {" k4 A" G% _
wp 1234,1,r
6 ]4 W4 j/ A& U8 a$ f: o( m$ l. i 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
2 Y3 v3 Q& c7 R9 u. Y& Y2 _8 J3 F# _5 k* w2 c9 Y) l0 G
wp 1234,2,w
! a2 `0 e, t7 N7 C9 I4 c" w8 N) c 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
% ~% M" C; \. ~' _7 k8 i + D1 q5 `8 j- ^, q' W) K6 F# \( t
wp 1234,6,rw: ?# m3 t" q6 N: g" L. U; d- r" o
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
: g2 m8 h$ N, h& H* N; d5 P
) A- n d' n7 N( ] wp 23456,a,w,wpdata == 1
0 k5 e) O* c5 B 在地址1234下写入监视点, 数据长度a, 且写入的数据等于15 ~4 s% R' ], E+ n, j
# G4 ^/ |. @- |$ d7 v6 O2 T: z/ _
wplist
* H( S% Y# ^# d4 D M. w+ V+ D; m 列出所有监视点
) Q0 i& }" I/ N) D3 |3 n1 Y& A" _' p" m4 @. B \, e
wpclear 3
9 C$ x2 e; Y l) p; q5 v 删除编号3的监视点
# r) U( x- X; u4 o# E& j1 \3 p3 _
; h8 r# g: @ { wpclear1 F' P/ N2 J( ?9 |
删除所有监视点
; ~. A5 b u$ e7 G% s2 g# [
7 Z" {# Y; i! {/ k. R( j' a
8 J+ T% S9 C: ~1 F) K4 ^. U i# j/ r1 s) f# f- k
程序断点指令: bp, bplist, bpclear6 B8 u& ^7 ^" @6 o( K2 ^
例子:' x9 g; z7 F! G" u6 T
bp 1234
2 v8 b6 i! \/ F; y 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
" }9 _ l2 L2 ]1 J7 T
& b/ Y/ E* x0 U2 K$ Q2 ^9 p bp 23456,a0 == 0 && a1 == 0+ o7 f- k% n9 H3 Z2 [7 W, s
在地址23456下断, 且中断条件为a0等于0以及a1等于0
# h* s8 e: P _9 |2 K% X" R" b) Z" f8 |- _
bplist; ^& G. D/ U, h& c! N2 u3 ?0 [/ _/ s
列出所有断点
5 s7 J' Q. L3 i2 q5 h" ^4 @& z' {, D# D( {: w2 Y: c
bpclear 3- s) q0 c; ]+ |1 j' z( X
删除编号3的断点" E4 C3 B% @' v7 i
. `4 ?$ ]" Z8 f7 V9 n- [6 ] bpclear
7 K2 Z: R% L+ S+ W( n 删除所有断点, C, q9 Q4 y9 _0 }6 x( c* k
" n9 R, A$ u2 U% C! ?; j
[/ Z: A7 g/ H
4 V: U, t4 n& P9 A" ]! V8 ^
跟蹤紀錄指令: trace
- t0 l% ~8 l1 M4 g 例子:
8 c* D2 b4 e( ~+ `* P' ]% t& _- j trace 01.txt
) T8 s$ [) R8 b/ m" [" F" j2 ? 跟踪当前CPU运行的所有代码, 输出至文件01.txt
4 `* u/ A/ V, H/ C9 A
- V/ `/ h, i( }5 G/ E1 m* G5 y trace off
+ B, \7 U% C0 A" L 停止跟踪, 并且关闭文件- n* i8 p* Q5 x6 ?+ w- o2 T2 s
0 p) s9 y$ c1 B# h$ a
trace 01.txt,0
" H2 u( V" R* O3 z- P 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
( c6 W1 o* }7 I, ^& h$ M0 b( ?- M( ]
trace off,08 `0 U/ x7 |# d% G- w
停止跟踪编号为0的CPU, 并且关闭文件
/ \" i6 @* H+ u! _
( k$ I1 a6 z/ f) z# R; q0 u trace 01.txt,0,{tracelog "A=%02X ",a}
5 |7 @1 ~3 `! N/ L 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
0 g2 d1 o- D% c 并且在每一行的前面, 写上"A=a "
; C0 {6 `; ~) V2 p% E "A=%02X ",a为一个C语言printf函数常用的输出格式
/ h! L' d7 F- q- w4 i X 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
! C, i: b9 a! g. T X表示为大写十六进制数
! h( I( _! V. P; A/ {8 ?, q; S7 S) L2 {
" ^; [% r1 k1 h# V
# u. Z+ c8 `2 k4 E9 b0 {
内存直接写入指令: maincpu. m( z: Y* _: Z' R2 [
格式为 maincpu.[][]@地址=数据- r; b. j5 _; |& Z1 r+ R: w2 J
第一个[]:# t5 N. F% y$ ?: C8 m+ V% l* K
o 表示ROM地址4 @7 y }0 r7 o7 x' c! ^$ i
p 表示RAM地址
) r5 k: n, ~7 ?
) j& m) W- j9 n' K: u3 @- m 第二个[]:
e9 d- g) i2 W2 m$ ?; v7 Z d 表示4字节% J7 z) n9 W( O
w 表示2字节
/ J* r% d6 \! z. u( M* ?5 c b 表示1字节1 d$ L) F, M5 ?9 \( Z0 p( Y: ^
( H6 k' u1 J M- Z- l' Z4 T 例子:
' p9 j' m1 t4 R4 F, K; u7 x maincpu.ob@1234=FF8 Y7 T) [, s1 h) m1 N
在ROM地址1234处, 写入FF一个字节3 ^# M$ c: W5 X% e
* M9 i- s$ \/ `( V! ~; B maincpu.ow@1234=4E71 I3 w$ r" T* I2 z, ` @1 y7 G# Z
在ROM地址1234处, 写入4E 71两个字节
4 p' `/ m' A4 D! S! j6 e! N" n/ m) U1 w8 V9 m
maincpu.od@1234=600A4E713 I3 p- f" Z2 X4 m9 a9 T( d/ ~
在ROM地址1234处, 写入60 0A 4E 71四个字节
, t$ Z; Z, V3 C5 C( ]
l% j4 ?- P4 N 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
$ r D9 Y/ N" [- _
$ c: S9 ~* Y' ]1 Y# G/ X' S: \9 X
其他:# ~, a/ g, e( v8 ~: [1 z& s( I# G
dasm 输出档案名,地址,长度
W" K% ^* d* J; r1 f# q/ o- q W. w. s 输出程序的反汇编代码
; U1 l3 f4 m5 U$ { 例子:
7 e; d9 o5 C# r Z* f% n3 M dasm 01.txt,0,100000
+ ^6 R& a$ O X1 H7 M2 Q/ M9 h6 _, H 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
! F8 O l0 @* \& w9 N% A& u, E( R7 a7 r# G( R: g
softreset
0 Q+ i" `% g- Z 游戏重启, 但不重新载入ROM/ f/ {1 v' W. \& E: C( \' [
$ g# J+ e G# z
hardreset4 k" J2 h5 |8 N# h& T
游戏重启, 且重新载入ROM. z4 |) L) y! x( R) S! _: E
( }" T! a( v0 O
snap xxx.png
" h7 M9 @) g; k" t 截图为xxx.png/ V2 I5 Y. P b7 m9 l! a
. z" `$ B: ^' c5 i) p' Z; d( i
# `4 C) u9 P; t( z8 f" q+ O5 S % _ g7 S' o# i4 O3 B Q& f+ y$ z
- d; F6 U6 F2 D2 s热键:
3 I6 |9 Z, ^1 G# E ~ 中断游戏
$ P9 n2 H% s/ { F5 运行游戏" [' d1 s& N% ^- U' L
F12 运行游戏且隐藏调试窗口2 V$ u6 Z- U; T9 D6 `
F11 步入, 单步执行, 会进入子程序
. V: G( w, V3 `0 n: Z# ^7 ~0 O5 j4 N F10 步过, 单步执行, 不会进入子程序
+ o# u1 }" E) z0 z& L4 l Shift+F11 执行到子程序返回
# N- {$ t, W5 P7 d5 s Ctrl+M 内存浏览窗口$ I& ~2 c) v: @+ r7 M7 ?
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
" D) i; H4 |8 F e% W, k/ Q$ `1 c3 c- E: j
{:4_94:}
' v* P; V# M3 m4 f
5 `& x/ R+ ]+ r |
评分
-
1
查看全部评分
-
|