|
|
' v, R' ~. t @: z, |很快速的整理我自己常用的指令' v0 ]% V' E7 I
- Z& K( B: `8 ]8 ^
{:4_112:}
, w6 l3 U6 ^* x* ~4 o4 w; {* _; I& y5 y
MAME DEBUG常用指令% q. F% ]$ d% A& I9 s$ s
& a( s- o: M$ S3 V. N* [内存搜寻: ci, cn, cl' ~! y* N" L1 H" M3 K" ^
. F7 x( Z1 y2 U: ~ ci: |1 w( [ @, L3 }
搜寻任务初始化, 每次搜寻一开始一定要输入这指令- k6 Z) F% g3 K C1 ]
, d' Q- H2 r7 w/ W" s6 W" b cn
; Q5 a* G+ M4 n$ g- Y& g$ |, }. O& D 搜寻指令4 z/ L" p/ `0 @& J, V6 K% \
例子:/ T# r$ A$ s* h/ G/ K
cn eq,60; K2 L( v7 F: ?! t$ }. l
搜寻目标等于60 (十六进制)
+ y& m N# B) {7 Y: w
" W4 J: v7 x: w5 {3 L, l: I6 [3 M cn eq,#96# T- @0 \8 E2 s/ U9 r9 \" `; q
搜寻目标等于96 (十进制)
* d9 V# p, x# `& b9 @; S4 f. a7 T' y; h1 S( U
cn eq
! ]3 v% N/ b6 p5 [6 C 搜寻目标的数值没有变化4 Y* e$ M! J2 e
1 o( ^3 ]9 {# R. `( U2 y, f cn ne6 L0 O1 F2 q n! Z4 k0 I8 E# w% ~
搜寻目标的数值有变化: p! \) O) x; Y9 I2 Z' H
' o8 d; u) I4 W( }- D cn +
! `* u' M" N4 h# g/ q0 q 搜寻目标的数值增加
$ z; A) V" |& b2 D 4 W. R6 D$ c" j
cn -
3 e* N/ W. c L- o3 [* h 搜寻目标的数值减少6 Y5 }9 w. }" [: f6 D c
p! h3 l, h* c1 b) K6 N* H cn +,3
* T; e$ n( u P( z. r2 w0 v 搜寻目标的数值增加3 (十六进制)
" r; H. Z- M& N) e W. w
9 Q2 l: D7 H4 O( m cl$ ?+ j' o; Q, d/ P
列出所有搜寻结果
% S) J/ M4 c V7 F
. x$ q) U/ `, }' F- F cl xxx.txt0 t: x1 Y+ d, Y& a6 S
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
/ _- V0 c P2 j# ?9 t5 |
- r+ G# S7 e5 B! k
4 T. t) Q, L: f. ~' }3 t9 [8 J内存监视点指令: wp, wplist, wpclear/ t! y7 O1 w4 M$ K
例子:3 g; B. p1 q- D
wp 1234,1,r) o) x9 h8 k" s9 L
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
- u4 I9 R! S; Z: A9 P( E/ e- E/ N, \/ t. R6 A3 N' R8 T- B
wp 1234,2,w3 w1 s( o) S( ?
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2$ ], Y! j. l1 B ]& L( ?
/ S7 k$ x' D. S5 V u
wp 1234,6,rw2 {* c# `( ]4 G! j0 e& r
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6" Z/ w7 q, i: V6 F% L
' Y! J8 A6 X/ C1 q wp 23456,a,w,wpdata == 1+ [; }, |6 q! p+ s
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1: f ]7 h5 X8 F% _7 G6 ~& ]% x
2 p$ b# [% w% ~7 i. P7 F3 a
wplist
3 ], E: \7 w; I 列出所有监视点
6 ?+ X+ V" I% S7 S7 Y$ y4 }, Y2 w- F1 u2 O# M
wpclear 38 R* f' P, P. k
删除编号3的监视点
3 h+ r9 ~/ {. ], ]
/ n Y- D+ m" v4 r, R wpclear2 e& B' R6 H- J9 ]% K: f8 k) o
删除所有监视点# y- S/ O) D. M, ?. \
* q+ H1 ~2 E/ n q6 w' q# Q
+ B9 t3 i7 ]& s, f8 g* J. B
5 ?$ b9 D* t" J% ?/ }9 m程序断点指令: bp, bplist, bpclear6 C- \2 h9 U. w9 |! A5 r
例子:# b/ r* c. [) H& ?3 Y) R* A- r
bp 1234
1 f% g! N" Q, u% w, ~3 ` 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断+ p" K% V" b9 E( d$ F2 A
% }0 A, x5 \$ g" G) k5 H bp 23456,a0 == 0 && a1 == 0- C5 k" b5 ` S, Q
在地址23456下断, 且中断条件为a0等于0以及a1等于0
) F2 A+ g4 {( K% k5 d/ O3 N9 e. p- B3 h. X: k' E- y8 K
bplist; p; h- {- u" h
列出所有断点
! g: @$ f6 N( j9 ]' s1 o' Q" P) s% U3 C
bpclear 32 w6 P2 E# O( t& I
删除编号3的断点( D% x! Y% z3 T/ i- a8 |
7 v% I* X" p% L# E9 s bpclear
) u8 r" q$ |% F) p- l9 H/ z 删除所有断点7 J4 W" P1 B- z
( j/ g3 d0 M& [" g+ G
4 `! X6 A8 M) `* z* I/ O
. s$ q* ]) S$ d跟蹤紀錄指令: trace
' q; e `8 V+ B8 L. E 例子:
8 a. j/ V4 q1 F% ?( A. B trace 01.txt) z+ m$ X6 v) [; X
跟踪当前CPU运行的所有代码, 输出至文件01.txt l/ ?* k ]3 e' j, X3 a
% R# F( O9 K9 x) [) b" r a trace off
6 u. \2 q; M- x9 G' W: g, i. ^& H 停止跟踪, 并且关闭文件* B! L9 ^/ s% }/ ?+ r
* E# i8 S6 q* s; q) `( `4 @
trace 01.txt,0; y- F+ S3 p* |0 C# J9 a
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
" O5 ~# t# Q q& }6 ]
* h$ C5 i+ A& y trace off,0
7 J1 |1 P8 F1 S2 Y8 u3 H: q8 U 停止跟踪编号为0的CPU, 并且关闭文件5 b1 Y8 W2 m+ t, g5 r
, A5 X* t) h" i trace 01.txt,0,{tracelog "A=%02X ",a}8 D: @( `$ [* A) i& \
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
( H; g( J0 O+ L" y5 v9 ^, x$ y( c 并且在每一行的前面, 写上"A=a "2 [8 b5 a# Z. l4 P0 {8 n( G6 f0 v4 \' K
"A=%02X ",a为一个C语言printf函数常用的输出格式
5 {1 U9 _% _, P" u' A 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
% b; i6 {+ w( y$ T, y6 ^ F X表示为大写十六进制数
! F- r* c& s4 U: j& g
1 S# P. i4 Y+ k v9 P
8 v# U+ g( G9 d$ Q# x" U2 c2 p* l% e/ x3 g
内存直接写入指令: maincpu
4 g: Y5 H) Y8 O 格式为 maincpu.[][]@地址=数据" d$ N0 C* @4 L P7 C9 g
第一个[]:
5 K: N9 L# B5 [$ j5 C8 L o 表示ROM地址
# @5 l Y0 ]! B, \" n) u0 I p 表示RAM地址' u) B. s$ H2 s% S( S" E8 h
h+ Z. m, z9 [5 O 第二个[]:
' K3 z7 m+ K7 a d 表示4字节
# f, _4 D0 f6 U/ j2 O( S w 表示2字节
4 I/ n$ ]1 s& e3 K9 e b 表示1字节3 @; V7 N$ q0 p& V* L8 T
8 u+ B5 `9 m: X$ U 例子:$ S3 u6 t" I. Z- _( P0 e" C7 J/ b. r0 [
maincpu.ob@1234=FF
9 N; i% d! e( M, s# |$ v1 J8 R 在ROM地址1234处, 写入FF一个字节
9 I& h! e& O8 [# Y9 O
( ~! X& z( `0 b6 z6 e maincpu.ow@1234=4E71; D4 l1 O. o: y% t9 i3 I( d# a# u- k
在ROM地址1234处, 写入4E 71两个字节
- O8 w% x3 z) ]8 ?+ _) g `3 A+ _1 B/ D: m$ k
maincpu.od@1234=600A4E71
+ m# n" V" U2 J9 s( \* y8 s 在ROM地址1234处, 写入60 0A 4E 71四个字节; q0 F# h0 |4 _0 x8 a
! b$ h: ~: i% x3 L$ V
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写1 [2 u# W z: m* f' u
' q1 S7 J( _2 b5 p3 ?
& C! i- L8 C( `: K其他:9 W- d# {( a. W+ x, B5 @" f
dasm 输出档案名,地址,长度
e, K0 X$ {) c. I% ]" r9 [ 输出程序的反汇编代码
" _- |& W4 \5 u5 E% y 例子:
1 n G- n7 m( t4 i( n dasm 01.txt,0,100000
! \' l0 o9 q; O6 n: V! u 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt z' V3 B0 T/ M4 r5 M% U4 p, L' w
4 O# n5 [6 y6 c- e) E
softreset
' f! O0 L4 e6 V 游戏重启, 但不重新载入ROM
% _- d' J3 B# q' D4 n, m/ U- J- n# o" M% ]6 G4 C" u" w3 f
hardreset/ O5 |9 Y: n- B3 I+ f
游戏重启, 且重新载入ROM
, q2 W+ A% b! P4 Q2 g5 f
% q8 \7 m ~4 f5 N: ? snap xxx.png
: ^ P/ H4 g9 J' I9 p8 d 截图为xxx.png
9 W2 w/ S% Z1 @/ ^9 U3 C( n% J0 `2 V
4 k: F0 d P% N1 G7 E9 u6 D; O / O4 {9 q+ k" Q6 ^1 ?1 Z
m! _- n' _: L6 ~5 z
热键:
: j5 x0 V. \4 \6 T6 t) d ~ 中断游戏
+ J# @& Y( X8 G. s F5 运行游戏, Y6 U. f0 `1 I7 F. r+ n
F12 运行游戏且隐藏调试窗口
+ ^0 R( z& o0 X4 g V- b9 q6 X. A F11 步入, 单步执行, 会进入子程序; H: V" W+ Q. p
F10 步过, 单步执行, 不会进入子程序
5 f3 C3 S7 z- q( Q Shift+F11 执行到子程序返回
6 S# I; J2 s3 a, J, L Ctrl+M 内存浏览窗口
8 i+ u3 f2 F$ [ F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU/ W7 S' e5 `. H; z* i
9 \/ `( s! X7 Z2 y) ~+ M
{:4_94:} + C9 _# C T" Q: S
J$ l+ g4 T# K |
评分
-
1
查看全部评分
-
|