|
|
9 [( r, ]. P4 e3 i3 O: [! q$ f8 q5 U
很快速的整理我自己常用的指令
" `! W( d( {. p4 H: a' F
- Y' Q* m" F6 }! l+ T{:4_112:} 8 ^0 h5 S9 H) C( s& r1 h% @
- G- B- G! I) f8 S8 `
MAME DEBUG常用指令: q9 t7 L, n8 j8 h. h) A
! B6 v& O/ \: B, b9 y) k
内存搜寻: ci, cn, cl
# U: q# o; @( x& }9 x) i$ g8 i4 b! A9 Z: M3 C ^9 U; I
ci
! L) f' {/ \; J# }- m 搜寻任务初始化, 每次搜寻一开始一定要输入这指令3 Y8 {- ~6 p, X7 u! `; N
% ?6 V3 S6 y7 Y1 C4 w8 \: o; a cn
. @8 ?) z/ Z& t/ R9 ^- H 搜寻指令
3 s2 h. a$ y6 H4 F+ \ 例子:6 ]& r- A9 O! l. |% {% G9 W; \
cn eq,60
5 [5 L9 L; C# v% v7 N$ _ 搜寻目标等于60 (十六进制)9 m c# I6 c c: R) S1 b M2 V2 M
. X* f& J3 g) ~5 _5 k4 R2 w- h- J cn eq,#96
& I. X$ T! _. v) [% y( Z! R1 U 搜寻目标等于96 (十进制)! V7 {" V3 u3 w0 w3 y
, v! i6 a# k- Z p cn eq
0 ` a- O s R5 L; t2 R 搜寻目标的数值没有变化2 M& I9 M! q+ i1 r: _# c1 X5 {
2 j7 h/ s" Z) K& ^0 a. z; d
cn ne8 B1 |5 x7 [1 `, i$ A+ G# Q
搜寻目标的数值有变化6 u5 g4 J0 z d7 D; E
6 [7 S# ?! L0 h' W cn +
. F% p# M9 Q' M& X% K4 R/ ?& N 搜寻目标的数值增加
. j$ b9 L! X) f0 ~
' i7 H) ?0 v: D |$ m$ T* b& i cn -
3 h- O8 K& G; D5 F6 u- M9 D$ o% P 搜寻目标的数值减少" ]6 W9 t8 A# O9 S
1 D5 T* n0 G9 I0 r
cn +,31 {5 T( ?" L2 H# J/ W9 m# v/ d- u0 E
搜寻目标的数值增加3 (十六进制): F* ^$ A; g O2 w! Y6 P- S
3 }- z; Z' E! j# @ cl
5 y1 f3 U c4 ]3 V* L" d 列出所有搜寻结果
# ]3 E1 i0 \& \* P9 J; _$ D# Y& q- A3 G
cl xxx.txt
2 Y: n p# q. k2 y0 Y# l" G 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
* [: a, v* {5 `3 T
+ [* v) H( S3 M( { 7 {- S$ M: d; z6 O; w
内存监视点指令: wp, wplist, wpclear0 q; y' m5 H1 S4 P
例子:
2 p# B5 ^, q, d5 U. l U wp 1234,1,r7 J7 f1 n" ?7 Z
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1! z9 G$ Z$ R8 V, n2 r$ s
9 ?) c2 f) E6 W' @
wp 1234,2,w
5 [, g0 u7 d7 X8 O- _' q* p- v& F, ~9 w 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
+ x" V+ _* @; H$ l& d& k 3 F0 Y& w1 k7 M( {3 @/ Y
wp 1234,6,rw; |( @3 |- o E9 W
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6) A) {7 [& s# j6 ~7 E2 v5 a0 Z
0 j3 g, j) j. @* {9 s0 ?
wp 23456,a,w,wpdata == 16 I/ S% k$ S7 S* Y8 z
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
# g' Z8 g K* c! p$ Q% n: u% v
+ ?5 Q! e$ I/ M$ I7 \- Q. G wplist
/ e9 q. m# }0 }$ x; s9 g 列出所有监视点2 | E N. H3 v! p7 c
) Q; L! P' B" V) m wpclear 3
b( ], S# ~' \, w 删除编号3的监视点1 C S7 s( y6 L
3 j) U& P, L3 H
wpclear' T) M) E% D* N, o8 ?6 t* V
删除所有监视点
/ U) H1 C* |( l, p6 }
' x$ ]9 ~+ H! A4 t. L0 k9 t - X) {6 c0 _2 K* `5 j; g. v: N- m! {
' i2 v3 S' n& _7 x) s& m( e$ G
程序断点指令: bp, bplist, bpclear, r7 R7 i: p, e
例子:
, w3 a7 J% I2 F) M bp 1234! B4 I+ K2 D3 {) s5 S8 D. i
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断- X% b% f# p& \8 \9 |# j, E8 K
, e/ B, S5 K. _% ]
bp 23456,a0 == 0 && a1 == 0
- v' M9 K- E1 V8 F$ Z" C, d0 J+ ? 在地址23456下断, 且中断条件为a0等于0以及a1等于0
; E2 ~4 b. ?9 K
: ?" h2 o# H- s) `9 c bplist* |) V! a- T( k, F% ]$ i
列出所有断点# t2 [" u$ ]& q1 k$ P" {
( r& i" d$ X* h+ a3 D; t$ F3 I
bpclear 37 Z% G$ C* }/ F& C
删除编号3的断点* v& T; e6 w5 w t
, M$ @5 q: C3 a6 I bpclear7 @1 ~, R3 t* N: P1 X
删除所有断点
8 X0 P! s$ a! t5 I9 e- J8 o0 b! J+ \+ _0 F
( ^6 Q* |7 e7 x. b
! k; F1 \, [5 x1 S9 f# N( o跟蹤紀錄指令: trace
9 J; ~! A$ p8 ~( s# B 例子:- Y- ?$ `- Z0 M* s, l( s
trace 01.txt
9 r! p O; `+ ?8 ]4 j 跟踪当前CPU运行的所有代码, 输出至文件01.txt6 z# a! i! A4 Z5 n8 ~ |
3 n I4 E9 i# a9 k# k" r; w trace off3 }# [5 k$ o- |, [' c5 a
停止跟踪, 并且关闭文件
6 i! J) u: |( O; a! k- F$ @
9 z$ ?/ L' m$ \* Z) H( W trace 01.txt,0
2 V: a: a: P2 U2 @" G7 G6 E1 w 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt. a: E' o% g1 o* C0 j+ }# \
, c, |3 J6 f$ v- I* r7 w: ^ trace off,0
. e0 F# V2 _) _/ c" x 停止跟踪编号为0的CPU, 并且关闭文件: Z; L6 T {+ v r9 a
- r) a U* S* I4 p, V" a trace 01.txt,0,{tracelog "A=%02X ",a}# U# }$ T9 v7 u; L
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt : e Y* ?0 ?8 @" \
并且在每一行的前面, 写上"A=a "
; a" d3 x. B/ C" o. ]8 i "A=%02X ",a为一个C语言printf函数常用的输出格式3 q; K4 G3 L# x! T
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
" E7 F }6 ~/ X+ J* g/ U X表示为大写十六进制数
' V8 y. G& k0 ?' d0 E+ _
; P, O! V, u8 c" I A( H* F8 ^
; @; u3 I, G" R$ K: r8 h
) Z# t/ o8 v; i% ]; H7 q' l内存直接写入指令: maincpu
# }! m% d( r4 O$ N 格式为 maincpu.[][]@地址=数据
! D! U2 Z/ M- |5 ]: @ 第一个[]:
; V4 ]% e: Y; J o 表示ROM地址
' O- T& Z" B" M p 表示RAM地址
5 S' X O, `- o+ g/ R; i6 r; M
- [% b0 `7 e! {9 J9 v 第二个[]:
# m! m$ l& ~# q* z' L( X- z$ a d 表示4字节
# F6 E5 h9 m. F5 Y; x& {* l& `% N8 r w 表示2字节
6 f/ [/ S% _5 `$ Z' Q# S+ Z3 d b 表示1字节
( q+ a3 q$ s+ _5 }5 ~( U1 ?. f1 o7 J! o Z
例子:; ]( R! K ?3 ]( m9 N: E
maincpu.ob@1234=FF9 h+ T. q, H6 D) Q; t) q8 k
在ROM地址1234处, 写入FF一个字节2 X1 I1 D& ?7 i( i, c6 E
& w9 f+ g! b; M2 t& w& _; {
maincpu.ow@1234=4E71
$ H% h+ t, O+ s 在ROM地址1234处, 写入4E 71两个字节
0 _* G$ K! O4 N" y% f: q( V% o+ l- ?+ x/ V+ E
maincpu.od@1234=600A4E71: X( ]4 O4 s# B
在ROM地址1234处, 写入60 0A 4E 71四个字节
) W3 C7 Z/ }, s2 v* f [0 c8 R2 {) b+ z
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写, w" ]0 T) g, P* v8 K `
9 d* Q+ L3 z/ Y; h! H
3 `3 g8 n( {. }7 h1 k" \3 s% p* F1 c7 _其他:# v y! N( \5 O# m: f& x$ e
dasm 输出档案名,地址,长度
* m w2 i6 I$ i( V6 q; i 输出程序的反汇编代码
3 J- q$ q, J. H/ O+ l+ w3 v- u 例子:
/ [$ I9 {- n' z }1 P1 j: t dasm 01.txt,0,100000# v% D, f6 K9 }* Y2 M8 w
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
U; \$ |5 j: N$ l2 z! g- g$ j; d/ V
softreset0 x m, M+ u1 x8 Y
游戏重启, 但不重新载入ROM
) O/ i- Z. @+ w+ X7 E
+ v: ]8 X+ B* ?2 ?9 O: ^; `/ v hardreset
) g: \- H# {9 `- b 游戏重启, 且重新载入ROM( \, }0 y. w" p% @- U) @ ^& n5 R0 R
% y' C( o2 v& G( ]+ c" S0 a snap xxx.png7 a0 ~/ v ^) Y* C \; H% l) J/ P
截图为xxx.png
+ | k+ g+ y( K" a) a) H" [7 Z3 P) P6 z: l; f T: _! [2 g" s
. o7 z7 ^ y7 g( t, ?
7 A: K6 M% j1 H" J5 s$ X1 S* K
6 I& M( w- c6 ?' h8 n3 b热键:
+ `7 ]/ f1 T4 Y9 T ~ 中断游戏) Z0 ?+ L0 j+ [7 b& j
F5 运行游戏( G: @$ {; W1 M) P5 q8 H+ |1 x' {
F12 运行游戏且隐藏调试窗口
; \) y. Z' z6 Q/ q7 R F11 步入, 单步执行, 会进入子程序* j' i4 F: m" h
F10 步过, 单步执行, 不会进入子程序
% o) _1 E5 k6 f/ o Shift+F11 执行到子程序返回; p5 ]$ _ m. ]3 J/ u
Ctrl+M 内存浏览窗口
5 G2 K) [$ `5 M5 ^+ I7 Y F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU' _3 @% \9 y+ d G. u& O
; D5 Q6 C/ p- Y1 `{:4_94:} 2 R8 _2 _2 b$ a: \7 T2 N7 I8 l
2 N* V/ [; n; D3 A |
评分
-
1
查看全部评分
-
|