|
|
# B! D. O- @9 X/ o9 ~2 i: D3 Q
很快速的整理我自己常用的指令: g- u8 i5 W# k2 X& P- w# W" q
" ~; ?5 K- l! s" u$ i1 x" E$ E$ W0 t
{:4_112:}
+ ^1 g8 F8 S9 n
# A0 E* o" {4 N0 K3 l! MMAME DEBUG常用指令
3 S. w6 ] G( t- B
. W4 Z' a$ i6 P, M; i# A# O+ J内存搜寻: ci, cn, cl+ C/ I9 m5 Y; Z3 n. q1 l
% W2 x: J0 I2 n ci
& b: Q3 e3 D, b, u+ Q* A& L 搜寻任务初始化, 每次搜寻一开始一定要输入这指令 p) ~* @/ K# J
7 ~ A) v. R4 ]6 j: }& j
cn
" ?: R B* y1 Q 搜寻指令
" A* i& |6 [! z' f6 ? 例子:
( q! `6 ?3 g$ v) N+ v" T cn eq,603 y8 z; ~4 c5 j& P h
搜寻目标等于60 (十六进制)/ `6 |+ p* e6 I
2 X2 [8 Y7 ] ?5 ^! L
cn eq,#96
' J% w! m L, J* c/ \% X) R' a 搜寻目标等于96 (十进制)
4 Q F# r$ E8 e! I; c6 L: E
9 i) G' e( j# V" U/ T cn eq
. F: M" |; l4 e/ e 搜寻目标的数值没有变化
7 p6 c4 D% k5 Y7 A0 ], g+ Z3 H. X3 h( P9 N' q4 {! V% z& D
cn ne* u/ s3 ~4 W) S; |. m: |9 p6 y
搜寻目标的数值有变化/ M" I* V1 y4 Q$ d7 K) y
6 x0 v1 I3 ^+ u cn + y1 V$ A: b* g# }8 S3 k ~
搜寻目标的数值增加
; y' Q1 P/ v _$ W+ X% T % i0 s6 p. S0 [# S6 _# c, [
cn -
: g; `& n0 Z5 j7 W$ h/ z2 u( \ 搜寻目标的数值减少* W+ t' h1 N+ Y- { v3 ]
9 B, t$ J- t1 W" N }3 I cn +,3
0 w$ S) f5 i+ n, V. H( h1 k 搜寻目标的数值增加3 (十六进制)7 n% w1 {. ^) Y7 _
4 A3 ^2 H. G6 p# m; [9 F3 [ cl4 a( h, u4 V, ~' i) q
列出所有搜寻结果$ ?7 ]* T. w: }2 U0 z5 t% j
; B% z$ g: s8 k/ B* N5 Y6 H) Y
cl xxx.txt" P+ A( ?3 ^( \3 R
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
' B6 U0 j9 B( V- f' E) y1 [1 x4 h. p6 \- I
, a, s% w8 i- w$ N w% N& V内存监视点指令: wp, wplist, wpclear7 i' o0 x" U# h3 x: s, {1 n! F% }
例子:
& q% ? Z" V. ` \ wp 1234,1,r9 t7 I% N- G7 Q- d8 V
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
9 d: N+ ^+ l1 E4 o
7 A& B) G) ]5 O8 Y, h% Q) w wp 1234,2,w- [1 r; T/ N: f: k# K( g! d9 `
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2, |2 S* A; o0 ~; k1 P3 L
/ N6 F X$ ?- j0 T7 P wp 1234,6,rw
% m$ e, a4 i& U' b. b 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6; p) E/ E" f$ w# ^ B
+ l( M) ^7 }+ }) f$ I8 _ H) Z7 q
wp 23456,a,w,wpdata == 1
# Z, P$ _) W: {4 G# U/ |/ T 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1% r4 F/ @; Y9 i2 h( a
* ]! l, ], b5 U* {) d7 S! H) Q0 S wplist
) k; T) @# n8 P j 列出所有监视点. n! h* q1 x. O" i" I
' o. @7 o* c. Q/ W1 r; n* F wpclear 3# @3 o! v' P. l7 f1 e
删除编号3的监视点# p z1 }, [+ d5 k4 V. A/ f
+ W. ]8 G! Y' ?. p2 w
wpclear
) t9 s/ U# B, N0 d) N" v 删除所有监视点
4 @: m: B& |$ P* e. E2 N
! K9 q/ B L; \0 T' _
! o; {9 j: P7 v# L1 A# l8 r& b+ q
. B: ^$ C4 U2 ?! ~程序断点指令: bp, bplist, bpclear
7 o; A- o) j6 ~' X 例子:
1 q* q% v& K# w: s1 h" I0 C bp 1234% M$ V% m5 D+ O H# a2 {
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
7 W8 P; x q) d1 L. F& L( V6 f6 h
9 k1 D, I. F" X7 N bp 23456,a0 == 0 && a1 == 0/ C& j( x: g) t J$ W9 \$ g# O
在地址23456下断, 且中断条件为a0等于0以及a1等于0- z# n1 n I2 H9 r! v2 k
. V3 ~# E: o5 |7 X# Q
bplist
" J# r) `% |6 A2 K 列出所有断点9 `0 P: z0 X* j9 I) W7 O
# b6 T% K( O6 {2 w$ d
bpclear 3
) C# a' ] P8 }) @: z 删除编号3的断点
+ N; Y8 K- k& k9 e/ j. [5 Y. b; d* A `7 H8 e9 v* G; w! B& Z
bpclear! ~" U8 K7 }% h3 y1 ]3 v [
删除所有断点
- W( A+ d8 u4 N/ e6 p- l: L% h+ l, s) i! |& w' G+ N# Q8 y
' n& v0 T4 M( H3 f0 f0 x7 j/ s; d
6 k6 f3 O- d0 |1 X9 ` Z
跟蹤紀錄指令: trace
( k' l& O/ _! k/ N6 b! y 例子:
% g6 N& ?) N$ u! i8 J! y7 w trace 01.txt
- m# t: e$ \9 b9 f% D 跟踪当前CPU运行的所有代码, 输出至文件01.txt
5 n! F2 C# g' M4 {; l& b3 E1 G6 u# R, e
trace off- V1 m4 {2 T O7 N- ?
停止跟踪, 并且关闭文件1 ]# L+ q6 d6 }2 r+ |. G+ Y
5 w& \5 v7 o3 W6 b3 ? trace 01.txt,0, ]6 d8 L* K Z* B1 W
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
, I" I9 @* Z# D& y; _2 U2 w) i& J$ L7 _! O
trace off,0
; {$ [' |, b! R- A! [ 停止跟踪编号为0的CPU, 并且关闭文件7 x0 L5 H+ s$ K# r* m
- B; F$ x4 ]1 I7 f3 f' E
trace 01.txt,0,{tracelog "A=%02X ",a}
/ y. n' l7 }7 G; T4 _! n2 S3 {2 t; p7 H- R 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
6 C' J/ } N5 ?9 K 并且在每一行的前面, 写上"A=a "( V% {0 n9 C A8 i8 \2 @ ]
"A=%02X ",a为一个C语言printf函数常用的输出格式
. }! L6 |1 |6 l% E0 W 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
- l! v* x- E! c- J X表示为大写十六进制数
& s/ t9 o2 t- g, w; T% O; U, t4 D' ~1 w+ ~+ N8 s% J3 R6 t$ i
! J+ Q/ b( p! h8 K/ c9 {
( I" V( Y" s! ?- k- C+ ^" w* J; j
内存直接写入指令: maincpu
" N, [9 K# u' }) e9 n 格式为 maincpu.[][]@地址=数据
- Q, |2 x- T& @8 F 第一个[]:- V: W5 J0 N- Q$ B1 w
o 表示ROM地址 W0 S. W+ e1 n' b# `2 r
p 表示RAM地址
5 @" H: i: J( Z; v5 T) S# m- V' s( J! c l, c4 L
第二个[]:
$ ]9 ?; n- O# R) f d 表示4字节
9 o* }9 n) V, n8 S5 t- X w 表示2字节3 U) S3 y% w) B8 B
b 表示1字节
+ Q) ?: V" B/ C, p8 i: \% Q6 z) D1 P, d7 H* D, b3 X1 `
例子:7 _( o! p; A# O
maincpu.ob@1234=FF5 N2 ]$ c6 x* x1 j
在ROM地址1234处, 写入FF一个字节
: _/ L" f/ }! Y; ], X
, s/ |' i9 }' Q* K maincpu.ow@1234=4E71
! k% h1 L6 {+ \ v 在ROM地址1234处, 写入4E 71两个字节! h6 c) l. _- J+ G* A
7 B% J1 v3 j% g/ Z* [
maincpu.od@1234=600A4E71
$ H& D0 n) i& [. q: T8 W& z' b% R 在ROM地址1234处, 写入60 0A 4E 71四个字节
! Z6 y, d: |! ^# P+ ^, o0 I8 s6 {+ W* n9 J [) E5 E( l3 p
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写 g% F' h4 [. n0 x7 h: T* n
3 F5 D) u8 h# @1 v
/ I9 f- S' p) g+ d& K' g V5 f9 O
其他:
7 J* o! d/ Y B8 H3 `. T2 d* F: c dasm 输出档案名,地址,长度& J; s. p& R( [
输出程序的反汇编代码
6 _# \; ]. M5 _( Z0 o& t q 例子:+ ]: e3 J- i' U# C1 n
dasm 01.txt,0,100000! t; j, ]9 s7 \- E- B7 U
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt& [" D# T8 v; E% } e
; U; _; }# \1 ~9 {4 a softreset$ x' A% |0 w8 Z* V- I2 w! D
游戏重启, 但不重新载入ROM
% |4 C$ H. O. \3 O2 G8 U3 d/ I; R) d* G: f# P7 C9 d }
hardreset4 P& q, D) [1 Y
游戏重启, 且重新载入ROM
$ k% K9 \( m& E# P8 h/ w) e0 z
; V- }5 { V0 x1 I5 u snap xxx.png! V, q) e$ I3 l
截图为xxx.png6 P5 b6 N8 g4 |9 `/ Q3 ?* M
( j- b7 o$ j& e: t7 I7 p) G " O$ U, J, k$ v9 J2 Y% m' T" [" h
; R% D5 f0 c! M+ z) _7 J
6 c% o& G* e+ f$ Z2 Z热键:
/ |2 p5 W6 ~1 k* R5 x ~ 中断游戏. L0 [) T6 `7 s% M" \& E. i6 M
F5 运行游戏7 P N6 [) h7 R
F12 运行游戏且隐藏调试窗口
# o; |% d, s0 Y8 T* {. b F11 步入, 单步执行, 会进入子程序 T/ u* e P$ i% k3 h9 B6 f
F10 步过, 单步执行, 不会进入子程序
, V T/ q1 Y1 J' s" q6 ? Shift+F11 执行到子程序返回, f7 a8 s2 R/ D; |/ D7 [3 m" c, Z
Ctrl+M 内存浏览窗口0 c& X5 e' S9 A* K0 Z' P' V' I
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
+ }2 v; \: T. `4 B2 l3 C0 Q; u
7 Q3 }; P9 m0 q{:4_94:} 6 t' i5 y5 j) U! G; o+ v
6 I/ E9 Y3 y1 m% g
|
评分
-
1
查看全部评分
-
|