|
|
& q5 [5 G3 C( v
很快速的整理我自己常用的指令
4 ?. T: |2 _, V+ q2 D; d2 R9 l% f& b6 h* S/ ^7 R) t$ E; N
{:4_112:} 8 y6 B" j$ h% Y* H- m" c
7 w1 |! |7 |; w1 d: Y
MAME DEBUG常用指令2 \. T5 n. Q/ g, s- H. h5 Z9 s
5 g7 s6 a) w: P* N& T% l; P
内存搜寻: ci, cn, cl8 A6 [! b. A" s* N
+ G4 S' t; I5 w' U% D# l( {
ci0 b* Y' k6 F% y' {3 h
搜寻任务初始化, 每次搜寻一开始一定要输入这指令2 r1 e- R: \5 m7 @
1 y# i; m6 B1 A% Z+ c/ Z1 L: Q/ Y
cn
7 {( ?3 n$ F% w7 N 搜寻指令# b* }& _" Y# V- U. m$ T5 T
例子:
$ k& j6 D: x5 d0 M9 q5 q3 B1 r cn eq,60& V, P; S8 R& d
搜寻目标等于60 (十六进制)
; |, O E! ?. b# R" {9 @ + c6 `. w0 y; |3 c$ \: t6 Q/ T
cn eq,#96
+ d- W$ t7 r4 g% m. C0 j6 a 搜寻目标等于96 (十进制); ]6 K) v: E& J
7 x( z& d) E& j) S cn eq, B( g# h. S, |3 s2 E) E {' t$ D) M
搜寻目标的数值没有变化0 N8 [% x- \1 z8 a/ |; f
9 F" |/ @# L0 ^1 g G0 N cn ne
4 J7 M. R+ K' C5 [+ Z: p$ @ 搜寻目标的数值有变化
* {: W; v- ~7 ?0 G; J( c8 v1 Z
2 S8 Y: @/ ~# o g& e cn +# E4 n/ m" V* a
搜寻目标的数值增加, a b5 L' O9 ^' t, F# ~, R
$ C: R! |1 V, r" | cn -
; \, y# z( a9 C# h, K. z: p4 ~ 搜寻目标的数值减少
' d( { }& p' s' \. _ & a3 c: }/ W- }. y. b( E! j
cn +,3
; C& K0 o; \* H# d$ n- m' L 搜寻目标的数值增加3 (十六进制)
8 b q+ b; D5 j; A& w
: C5 ~7 Q! f; A) k7 t cl' n2 _' M7 k; b
列出所有搜寻结果
/ v( C, k$ r0 C$ i. W7 C( A
$ V, e& h# e$ t' K cl xxx.txt, [; ~8 M% D: ~' y! N
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
: f- h* b+ f, g, R& ]3 Z E- _5 C8 c# p* x* `: |$ U
$ ~* M/ F# i5 J
内存监视点指令: wp, wplist, wpclear- K. p x4 H, o# m: D7 J
例子:
2 d, Y) g4 G4 W v$ @+ {2 P wp 1234,1,r
, H7 ^; ]& c( f! ~' P" c 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1. p& S- \: n' S9 V/ P
' m7 ]7 K1 m/ |
wp 1234,2,w- J4 W6 R" A6 l; j, k
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
2 u0 Z2 ~* a/ L9 |% v! A 1 C+ I% W' Z* X( A6 z
wp 1234,6,rw/ Q5 m5 R$ \6 o `; w
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
1 e3 V: a" Z6 O8 S1 k
" ~6 O8 E, O0 Y wp 23456,a,w,wpdata == 1
( h$ v6 {' t& ?, Q 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1$ o3 s. I/ }# Y
' ?$ i% w4 O1 f wplist- I/ g" t. Q: c" p
列出所有监视点$ s1 S; J6 j# d7 c( N5 O0 f
- L: F: ]2 d/ G4 [1 n wpclear 3
& d9 u: L' m. h 删除编号3的监视点
. X, g/ B2 q; W! v- m- d' C. F' [' x( l- m* u# N
wpclear2 H6 Q5 [$ O1 z; @' a9 ^
删除所有监视点9 T3 _2 h$ b) q7 p) |0 P! ?3 Y# u
, L% Y- p& V% A0 \* o* K
l9 c. W& t, T) ~1 |' ?* A$ e. K6 i! T3 z! {; O
程序断点指令: bp, bplist, bpclear
4 C1 B2 l7 E5 a8 q 例子:
2 T+ f9 I# I( F8 Q bp 1234& F! ~& P# ^0 j; m
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断/ {) ?5 @. i4 ~ z* Z1 r( ?6 C2 g- Q5 V
- y3 h( a O. c0 a bp 23456,a0 == 0 && a1 == 0
3 j1 q$ X4 |& C 在地址23456下断, 且中断条件为a0等于0以及a1等于0" Z0 s3 ~3 t" q1 S( x
1 S! B# Z; T) w* S' Y$ t' z
bplist
& q) j0 Y) h# z/ @3 C+ f. a 列出所有断点
# L' S0 n! R+ Q9 \9 o* n. R, i& i
4 b: n% C3 q e# @9 W/ g7 C* S bpclear 3. r9 G& V9 C) E# |$ I
删除编号3的断点
5 k7 y/ T: ~& e/ R9 Y+ d* C- u- v* k- J& |( x4 W' S
bpclear; h F8 a) D. V! B' W3 g1 ^/ U
删除所有断点
0 u8 W4 u/ E% [5 a, x& b* c3 Q; k& i% T) J4 V
V% s. o4 { K* Q( z5 L3 `; R+ o
, H& H5 J5 {/ I2 W, H( `跟蹤紀錄指令: trace7 t0 v/ S9 k4 ]: U: |# [6 D4 l
例子:
# y: ?# P4 N/ }. [) O, D; b! F trace 01.txt, v9 e+ r9 ^0 H3 n+ }5 v2 S- H
跟踪当前CPU运行的所有代码, 输出至文件01.txt
: z, R* q3 z/ {" M9 K/ }$ v$ b: z" b- x! n1 }$ O/ E0 w/ I" c4 y
trace off
& D6 G. u! O8 N 停止跟踪, 并且关闭文件
; Y% ?/ Q) F) u& A4 ~% n U8 n5 f2 T+ U
trace 01.txt,0
6 K, f, \/ ^! t! Z! I 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
! y+ \! v) q$ b& O% J8 i$ ^, `3 k* t ]+ K/ ~0 I# }
trace off,00 X* q* ^; m7 V' n& w
停止跟踪编号为0的CPU, 并且关闭文件0 I Y. G9 Z" V% W/ u U! w8 T1 I
5 y% _3 q( s8 o0 ^8 p trace 01.txt,0,{tracelog "A=%02X ",a}
- n7 j# D* X) p6 X* M/ h0 p 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt . a1 k( @: K* I+ k2 G
并且在每一行的前面, 写上"A=a "; _" c; S& W; i* _
"A=%02X ",a为一个C语言printf函数常用的输出格式
" g% ^: A' x2 r% d3 k; Q) P" Y 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
2 [5 Z$ {* t% w X表示为大写十六进制数
9 q; S# S1 k$ @/ u) n& {( z
2 p! Q: w6 z8 A8 p. @5 e8 _! ~( {, g. l2 K/ s1 X- x+ J
/ {. S3 P# m( z6 o
内存直接写入指令: maincpu* |6 |$ E" [/ e5 z0 |
格式为 maincpu.[][]@地址=数据
0 M2 K& w' _! z4 c4 F" k 第一个[]:
% b- c: G! p) J( s' y; ?; s o 表示ROM地址
n4 n4 K# s6 M. L6 g p 表示RAM地址4 P6 j) o. V% ^
( ]+ Y7 G3 \1 G. q& G6 J 第二个[]:2 q! W/ z4 _6 k/ t- y: m e* X
d 表示4字节
$ L, R+ d: @0 x: d w 表示2字节
: C5 i1 j( L @' L! e b 表示1字节 }" J1 q6 k+ x; L) c# V$ t
/ q0 s8 L5 [, H) C Z: I 例子:# Z% K% K8 a! l5 H- V
maincpu.ob@1234=FF1 ^# ]! C6 z9 q& u( a1 Z
在ROM地址1234处, 写入FF一个字节
$ d- O9 T4 I: g2 r% P
+ m, a9 ^1 ~' @8 d/ @; F/ p6 ^ maincpu.ow@1234=4E71
, ~! q0 X0 }/ Z( Q$ }, B! a5 _ 在ROM地址1234处, 写入4E 71两个字节5 ~! T( m4 n; m6 I% W
$ L2 G: l9 L0 C" Y/ [ maincpu.od@1234=600A4E71. q! x. a6 m1 a7 V
在ROM地址1234处, 写入60 0A 4E 71四个字节( ~6 Q$ f; ~. _9 y
. O7 S9 d& {+ G" { c8 q
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写3 e3 g& b+ t* N
! m: |' ~4 o4 i2 e9 |5 x* F9 S- x& i7 F' s `2 ~6 p; m6 _3 V L
其他:. q1 O2 j, Y% o4 Q
dasm 输出档案名,地址,长度4 F! j; {- b n) J- B5 q& M/ z" y
输出程序的反汇编代码
& d5 I7 e1 u4 h \ 例子:9 W9 l3 z3 e4 v
dasm 01.txt,0,100000
5 ?" ~7 K) y: d. v 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt% H! t* r" O$ q2 q+ T
% p' K* [0 g( J- g7 i( l, g
softreset
- x9 B7 a6 ~& m# N 游戏重启, 但不重新载入ROM
& k! [- I* e4 P0 _, D. s/ s- i; V" `/ s2 @' w. k* U9 A* Q
hardreset5 c* c8 X' F0 K$ e2 Y5 u! `! L
游戏重启, 且重新载入ROM
) f0 ~" I& j x* z8 w5 I! c7 S/ C& Y3 q& d, E1 s0 ~. k9 E
snap xxx.png
' W0 p8 @4 f x% o 截图为xxx.png
# u4 |- v, _, [ A
/ `$ y# n7 y. n6 }) `* s$ m' U
# r! N8 Q( ^* I1 M {, t ( R7 H0 G4 p4 |' ]: m
& }+ J! P A1 [热键:
! n' n0 @, F0 [* X' I) L) ` ~ 中断游戏7 {, F0 m4 T& _1 P$ K6 M
F5 运行游戏
( H) A' a. `" N! o+ ? F12 运行游戏且隐藏调试窗口
9 O7 _; c: r3 ]2 I. \/ p F11 步入, 单步执行, 会进入子程序& S% q+ w, N5 F3 E. `' A
F10 步过, 单步执行, 不会进入子程序
9 @- M8 M% D6 l7 @) L Shift+F11 执行到子程序返回
6 `% k# G/ v6 W% s# I Ctrl+M 内存浏览窗口4 f2 E8 [! I# ^# f5 N
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU( I* Z; n* ]& h; I! l7 ^% ?
( a) w, t. p; ~+ ^0 w/ X1 ?
{:4_94:}
$ R, n. Y; h- b9 H$ l
1 t2 F: k! H3 T4 N% J8 N3 [5 Q |
评分
-
1
查看全部评分
-
|