|
|
( |2 a8 n# y% A f6 o" p3 Z+ ]很快速的整理我自己常用的指令
, h. ]8 s" h3 o
+ h) Z0 n/ R% L/ t7 Y* o- ]{:4_112:} 8 Y! V/ g% T1 L1 k0 f
! {4 T- T5 t4 |/ t+ x
MAME DEBUG常用指令
2 X$ e6 B. h q$ ]& I* u0 b' G! n/ q& m R; ^
内存搜寻: ci, cn, cl
* R. ]* N6 m( ?" [4 k
) J+ V4 J# l* G2 n& P3 m- [* ^ ci
1 h R, z& ?2 r 搜寻任务初始化, 每次搜寻一开始一定要输入这指令+ C' c9 ^7 N& p: {/ Y! S3 W1 Z
6 N# v* c. u7 u+ ^5 R
cn
- O- T. h9 x" v* d! X 搜寻指令
, x: S% z" L' O1 o3 T; v7 t1 _3 i 例子:
6 W: r6 Q5 x/ C8 e2 H, Q cn eq,60
# G+ z9 X3 J" S, t 搜寻目标等于60 (十六进制)
0 V* M6 `3 x9 t! h* K 7 M+ ?) A: U- J2 a) N% h; @& ?2 g/ `! G! j
cn eq,#96. x( [5 o* P% D6 U
搜寻目标等于96 (十进制)
: R: [8 D% P6 M
% x; \+ i1 `7 L+ @ cn eq
m0 u( Q/ c- j* h$ _* A 搜寻目标的数值没有变化8 L8 q8 J4 b8 ^! {6 d
) e8 j a7 d( d* ?3 `" k( {2 e
cn ne
* u* V' O0 e! {% Z0 f% }$ t# `7 ? 搜寻目标的数值有变化
( e, I: X' g9 ?! g+ B# \" m ' ]+ ?, A9 E& t' M% n( g! Q
cn +" U+ ?; a. O; k8 g
搜寻目标的数值增加
J* ]7 ~6 `" c 7 z5 Z8 _ {7 N5 G4 K
cn -
: L7 p/ s5 p8 X' m* @ 搜寻目标的数值减少
1 T5 I% G& V9 q0 S5 J
3 X' i7 {$ _& F$ m* k cn +,3* w/ i8 ]! S; f4 }6 T2 B
搜寻目标的数值增加3 (十六进制)5 n9 J* Q) R0 R; k2 I
+ C- ]; ~% @* m) {; b cl; [. `4 [. V! F9 P, P) C( Y
列出所有搜寻结果, J3 Y7 B p: P' J( u- z9 f0 q2 v+ g: A
+ e* I" ^" R" v) D' V9 q cl xxx.txt7 G) J- p& m) \- L5 P
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
! U4 ^6 N: K8 o* i \" t
9 O* P' M# b7 [: o
# y8 k* q7 I0 g: X& d9 q内存监视点指令: wp, wplist, wpclear
! B4 |( s2 y6 I+ W8 N 例子:& b! @. {/ v% L4 k
wp 1234,1,r! g8 w9 n; L1 \ P! A: @
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
: X) {' H3 n2 b& y- {/ E0 u) {4 y7 s$ ?7 }
wp 1234,2,w$ ?" F2 Q0 K7 Z' h! R& s: s& m6 W
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
( v. w+ v" H( y6 a; v7 X & h5 E0 k( a( m4 W4 B3 a" j% c1 w
wp 1234,6,rw9 \5 Q& p. g8 n* g
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6: Q6 ^3 ]" ?' B2 a: d
" }1 e: x) r% t8 |, C
wp 23456,a,w,wpdata == 1
! `9 ?$ V% o' _3 u 在地址1234下写入监视点, 数据长度a, 且写入的数据等于17 i Y8 i3 T8 t" Q- c+ R: v
; q. e# Z8 Q$ i. b( S wplist9 I7 A* Z" R+ ]" Z; v
列出所有监视点+ } ]( V7 E' a2 U) b( ^
" M$ h) w* A9 d9 I5 \- p' A
wpclear 3
3 c8 h5 y: U% s! [4 K2 {, | 删除编号3的监视点. r) N7 `- a% A i6 x, k# U% V9 \" d
; v3 m2 w4 c6 L' \6 z7 k* m wpclear
, _- r2 `; n, j$ M' h2 z; q$ M8 n 删除所有监视点
/ y. H! T: L$ d" s9 u* c2 o: ?+ }' e- Y$ D: D
' M6 t& B3 D" Q5 X
% l% z, [& m% `" {# ^; {程序断点指令: bp, bplist, bpclear
0 G0 }0 j: Z# S, S 例子:! s1 |% F" G* P& L8 Y5 [* Z- X( P
bp 12344 [7 t% V/ x, `: b1 ^* q/ D
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断' S: ^; U) x" T/ h; n
) D3 o; g0 l' z) [5 @% I- A( T) n bp 23456,a0 == 0 && a1 == 0
6 p- x5 J) ?/ A6 E: N 在地址23456下断, 且中断条件为a0等于0以及a1等于0
2 h0 e. v+ N3 H4 {) I' m7 t. T+ Q1 r( t3 Z. E* v! s" R! B# ~& U
bplist" q) e* C! p8 g
列出所有断点) d7 L! k0 Y8 J. w4 q
6 h4 f$ {- u9 T6 W! n bpclear 3
, ]" {1 w* G( ` 删除编号3的断点1 f, w2 P$ N* E# K' a( f
& m$ r# t4 T" x/ a1 j( `' B2 p- D
bpclear1 X# [( W9 \ ~. ] T
删除所有断点
/ J" T, K# O5 y. M9 ~
! \0 f; n2 z# ]1 v. w 5 t8 I& U' D Z
) Z* _+ {8 |1 d \
跟蹤紀錄指令: trace
6 H) n8 h/ h* f1 R$ ^+ R, J 例子:- \6 O H; r1 R; m
trace 01.txt
0 c9 h( s- u5 `8 Z) R6 l 跟踪当前CPU运行的所有代码, 输出至文件01.txt9 x: I; p5 W) O# A+ f: l# [, k
9 V, I! V1 R( g" T% U trace off
i/ N( Q# [* T; B8 Q2 W* C 停止跟踪, 并且关闭文件4 D3 r, W) m7 ~! U
/ [+ y% C* s# @6 v( s9 h
trace 01.txt,0
* T! Z' n9 M* i" m- ~: W: s+ @ 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
! I. ?' J; d0 L+ [( O. b! [4 @4 n; e1 I" f0 }3 B4 ]8 X
trace off,0
: }7 u& n5 f7 }# K: c) n 停止跟踪编号为0的CPU, 并且关闭文件
/ i9 S- g! Y7 K; Q+ c4 W3 g9 E. e5 S G5 P* c' @( Y8 c
trace 01.txt,0,{tracelog "A=%02X ",a}% |6 H; {, i/ f! e) e/ O
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt , G8 y9 b1 {6 e: N8 c3 d" k
并且在每一行的前面, 写上"A=a " U$ b9 T5 i: b$ E
"A=%02X ",a为一个C语言printf函数常用的输出格式" k" Q. _: J0 W( z8 m& {' q
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
+ \, i% m: b2 h4 }+ L" y X表示为大写十六进制数2 m2 W, L) r0 W" t
# R+ f" Z# q% H, \* o8 ]! \2 P4 d y* \& P- B9 Q
9 y1 I$ l Q g2 i6 g
内存直接写入指令: maincpu
* p) K% k% F. S' J! O+ i 格式为 maincpu.[][]@地址=数据
3 f% L7 ?' t+ y 第一个[]:) T3 t" R- [4 k' J
o 表示ROM地址5 ?$ F% a, o+ w) h) M4 F: I* Z
p 表示RAM地址+ L$ k$ j+ P, I
1 @6 A! w- `+ r4 | 第二个[]:
4 {+ S# ~* o+ b2 Z, L3 \+ q d 表示4字节7 M- M+ K9 V4 i, l
w 表示2字节* L u/ s0 y4 j- u9 y, P7 R. _4 Z
b 表示1字节0 A' p6 S' ~7 w/ D
& J/ y M" [, U# D4 z" A
例子:' d, Y) n+ {4 r
maincpu.ob@1234=FF2 u9 [) @ W" f
在ROM地址1234处, 写入FF一个字节" Q; z" s9 T7 a) ^0 ^
- I1 n4 T* \" u2 Z- M maincpu.ow@1234=4E716 t& f& f6 r5 H
在ROM地址1234处, 写入4E 71两个字节
- E6 g7 @6 j1 @1 ^+ U$ ]
' Y, o& I; |/ ~ maincpu.od@1234=600A4E71- `; w: M6 C. g7 t# p
在ROM地址1234处, 写入60 0A 4E 71四个字节2 i. }/ r" c6 K+ ?) s% C
/ y0 m! P( R, p! N, K# V
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
/ q. W, g8 G$ ?$ _ 4 P! D1 C. }4 T. D
8 k- o% X. w' _0 X- i
其他:0 g2 |) C6 }% A6 L' o( i
dasm 输出档案名,地址,长度: G2 X9 c7 f- \4 {. [8 V/ \
输出程序的反汇编代码3 G n5 e6 R6 u/ ^9 [7 {, k
例子:
' F7 M1 |. H! f' U0 d dasm 01.txt,0,100000: w8 a9 ~# i, o) X, K4 p
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
! Z+ }& C9 U6 R/ d M: O
, [5 K8 x* S t6 F# s softreset
, b# j5 i @& {) i b5 _+ u( q 游戏重启, 但不重新载入ROM
- |# }* C+ k- I3 \5 F9 F- ^$ F4 }0 p. l: ?& M0 b
hardreset
+ G$ `8 X3 |; ~& b; W% M7 w( y 游戏重启, 且重新载入ROM
7 M) m( Q3 v) g4 F5 l9 g" c* T/ U6 n, s* w. Q( L" X5 Y& Q
snap xxx.png/ Y" g- [' E9 C2 _
截图为xxx.png9 u' I% d0 M& y& f
2 T, ?/ Z) d! @1 R9 f
) Q0 c' l, | K4 D8 o, E1 y2 c9 x
7 C; B \: i1 E, V# J+ I! n
1 P* x8 I9 P; M1 r热键:3 k0 z; F: t0 |( q0 W$ J
~ 中断游戏! J4 n" a. Z0 J3 [/ S7 V
F5 运行游戏% p1 b/ ~# G* l# H, `8 O2 V7 y3 O
F12 运行游戏且隐藏调试窗口) d4 p3 `) R6 a& j* m3 `" b
F11 步入, 单步执行, 会进入子程序" {/ N/ E" X2 X- M- @- K
F10 步过, 单步执行, 不会进入子程序
: k) t" h# O% _) C Shift+F11 执行到子程序返回+ }2 f6 n: {9 t- Z- G. F1 h
Ctrl+M 内存浏览窗口7 f) N4 l* c( N b+ A8 H0 J
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU7 i. u3 S6 l$ ?5 f5 E) U `
8 u, I# ?8 n8 I* q }! R
{:4_94:} 1 i/ O8 e& V" b. D; ?
8 L: n' x- N d, l" }
|
评分
-
1
查看全部评分
-
|