|
|
. I6 y W9 V5 k8 |
很快速的整理我自己常用的指令
0 H; s& P8 A/ W
, Y! ]8 {6 Z% x; v0 g{:4_112:}
/ J1 p; U7 B: I8 I! x/ e. q
1 ]2 [3 g& ^- ]MAME DEBUG常用指令( t! {$ h* w! W- h
! O6 m- Z# @4 x' Q7 {
内存搜寻: ci, cn, cl$ `! A* k5 J1 t- a: V! O' K
; k- C5 i( Y1 \# u. J( n1 o! v ci
/ ]# w, u: I+ M: x 搜寻任务初始化, 每次搜寻一开始一定要输入这指令8 g a+ ?2 x: `2 j4 j0 C
( X0 l ~8 t/ }" a/ n8 h cn# X6 l2 p% v: t! {% n& n
搜寻指令
# T6 a& y/ c9 S" u, q& \9 O2 E( F 例子:" b: w- e! Y5 }1 O# P
cn eq,60% f, j7 L2 ^- Z( C
搜寻目标等于60 (十六进制)
, W. `) {5 N) {; p; o8 t; J. T8 ~ : K3 m1 x- r9 O
cn eq,#96
" J5 X; C2 U% }9 W) u 搜寻目标等于96 (十进制)
; B6 ? L0 A* w! O t1 }' D5 ?5 l6 H" n5 L' H- [
cn eq. [3 P0 M" z1 i" y' [
搜寻目标的数值没有变化$ r6 l9 P; f8 x6 M* h7 l
& {* m7 `# ~# \& |. j6 }+ N7 h cn ne. A, O P! V7 d2 u4 P
搜寻目标的数值有变化6 @4 c: V7 H$ V' u
5 |+ y, Z# V( k cn +
( K( Y# N* D0 M 搜寻目标的数值增加6 N" S& d& e3 R6 [) W4 I, a. L
7 h! k( P+ H2 D& C& r# x O cn -
4 S9 I5 g7 y, c# z& M0 t" L 搜寻目标的数值减少
. m! G: {6 ]- \" L9 b! l 9 {) x! g$ R5 L* s' C# r
cn +,39 A; _5 ?8 c: @
搜寻目标的数值增加3 (十六进制)
) @( r6 b% T* x: T4 u
+ h ^' B# f* C- L cl, A+ w. M) I2 C# c, ?$ D" K
列出所有搜寻结果+ U5 X3 ^: P% D: K* h; S4 k9 ?
2 \/ M( }4 y1 G1 K- S cl xxx.txt
) |* u* Q6 z( c5 Q 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
+ ~! a! t1 U, U! d1 ]5 Q, |5 [! V2 M" X5 y, E1 {8 b
# e& E, B/ n2 [
内存监视点指令: wp, wplist, wpclear% {0 {8 u7 ^+ y' x4 Z7 ]$ c
例子:
3 Z) Y4 Q' K1 ]7 l: P% ~0 W* T+ z/ l wp 1234,1,r
. ^/ O' Q6 H" z7 ?9 g9 O! Z @ 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度18 U9 a8 J0 V4 Z2 w7 C
s9 {9 E6 b' E& k( ^3 Y
wp 1234,2,w# l" l) m# Y( j3 ?2 ?9 ?1 K0 b: X
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2( d6 w& L6 d7 V; l; b& H
; g' u. e! L0 \$ d K
wp 1234,6,rw2 o. a: S+ Z# J7 J+ _
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
2 M6 ]- C1 g8 f7 ^ Q3 h N* x( t4 w _1 E
wp 23456,a,w,wpdata == 1
' R: j7 G% K7 w9 a: ?8 G" y 在地址1234下写入监视点, 数据长度a, 且写入的数据等于14 v7 e5 [! o" m& c# U+ c" I% o7 A5 q
/ \3 p: K/ ?1 L- H' S8 v4 b4 ? wplist% f6 z" J! p% N* M" r
列出所有监视点5 c& O" e6 Z( j) x. z
1 p( ?+ ^2 a$ W' a" j wpclear 3
Q3 W5 I' X: p# v; n 删除编号3的监视点" b- H+ [7 N7 q8 G
2 `: J/ I* c- f3 W! M wpclear
4 }( T5 i, e( `+ A* U$ h 删除所有监视点4 x! ^ B1 s6 [5 P7 R, h" Y
3 i- o& ] ?. E2 h
% K, I. l+ O0 B2 Q- _8 V2 m2 q8 B9 M. F* r- Y) w
程序断点指令: bp, bplist, bpclear
7 ]: J8 @7 m+ z7 P 例子:
* P' N; v6 R8 |# f4 M( Y bp 1234
! V7 F1 p2 q. ?9 A; t 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断* f/ _) M* [# Y! m
9 j; B# B. P, W, M bp 23456,a0 == 0 && a1 == 0
3 c0 O, u( s1 R( o: | 在地址23456下断, 且中断条件为a0等于0以及a1等于0" y- f4 @( U4 r8 u3 d1 N- \' Y
3 K) [2 K9 d3 H' y% e1 a3 g. m' X bplist7 ~$ Y( d; Z4 f5 w0 n% j
列出所有断点; q) r& ~: f i' w/ [# m+ z3 x5 q
N0 l/ h% I- Q( c bpclear 3) H/ e8 `! ]& f$ ]8 b7 y: V( d
删除编号3的断点
( l: N1 ]; w( Q, P ^6 W$ A2 B/ B4 {/ A1 o: V, c4 J
bpclear
3 Z9 J. K7 M$ W, i$ s 删除所有断点
* e, R6 \0 C0 s1 p& [( @' `" Y
5 l& {$ @! x* D n2 X0 k! w
7 r* ]$ A4 X6 `7 l
?+ K1 R0 c) o; {跟蹤紀錄指令: trace
# G7 c7 x, a5 U" d; Z% {1 e 例子:
) s1 {+ e4 ~ O- v. w- z trace 01.txt
$ ]) z6 F! W0 g. [1 W 跟踪当前CPU运行的所有代码, 输出至文件01.txt
) m6 {$ Q1 |# X; Q: K! d' b/ p/ ?0 I d+ a8 w5 [9 A
trace off
% f0 [2 M7 g9 a* }7 s" h( z 停止跟踪, 并且关闭文件; B. Z% S7 w X. e9 ^
* L, @; H9 O0 K7 V
trace 01.txt,0, |& j3 W! O+ `+ @4 X3 I
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
* V. _! X1 e' w' ?& H0 i+ P& K" N: k% \* Y0 |' y7 d. x
trace off,0
/ g: r! H- A5 K0 y# j7 R 停止跟踪编号为0的CPU, 并且关闭文件2 P, M: j7 e) M t5 y7 E3 c7 H; g
0 Q4 J k6 m, @/ @' I4 _$ e
trace 01.txt,0,{tracelog "A=%02X ",a}
2 p4 r1 X) E. c z" @7 r 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt + V. ^, @8 y, U( K8 X" U
并且在每一行的前面, 写上"A=a "6 A5 ]# c! V* x! \2 c' [
"A=%02X ",a为一个C语言printf函数常用的输出格式
3 ^4 D, T" G9 ]% M+ b 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
' t6 j# Z/ [0 Y X表示为大写十六进制数( V- A. O( y1 ?. ]( G+ U& @ T) `
+ z( z" t0 {) x {
; o4 w2 `0 B1 @- H& @% G2 b$ H3 Z3 D0 O2 T; [$ ?9 a3 Y
内存直接写入指令: maincpu, Y- F) ^0 q# Q0 s2 v/ ^
格式为 maincpu.[][]@地址=数据1 m4 ]) w- K/ |" I
第一个[]:) w7 m( a7 i0 O! ^3 v3 i) ^
o 表示ROM地址( E& @; U4 {; }
p 表示RAM地址8 c: X4 l' ~2 Q3 g
9 p1 h- V) A1 j3 z1 P# b R 第二个[]:
$ C8 P$ k1 G. r) _1 j0 R% n d 表示4字节
% m3 o) g, E3 U2 G4 u) a; ?; b w 表示2字节
6 X. L4 r P- m3 ~9 Q. {- z b 表示1字节
% n e; z5 C. T s4 \: G+ i6 O/ M* k1 Z
例子:
, _1 p: L4 Q* d, V: [ maincpu.ob@1234=FF
3 r6 d. ?4 u5 n% a$ D' ^ 在ROM地址1234处, 写入FF一个字节9 g: u$ E( z: t/ m- F7 s
7 C* v; q1 d3 j* j, g1 U6 u
maincpu.ow@1234=4E71
6 T8 {) `" m9 ?6 X7 P8 r% R 在ROM地址1234处, 写入4E 71两个字节
9 J8 m5 S$ Z' M
$ D( Q/ p, D8 V* { maincpu.od@1234=600A4E71
3 p! x' p6 O/ M' y! o: o 在ROM地址1234处, 写入60 0A 4E 71四个字节9 w4 h1 B1 N% z6 r- Y
) q& B9 Z: K4 ^ G
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
( S8 ]) p, W% R2 T: Z 1 O- o& }; G& _
* W, e7 ]: X8 [. V- r其他:7 a: H4 {" }% f
dasm 输出档案名,地址,长度
3 F! H. S9 `3 ? 输出程序的反汇编代码3 H4 K3 C8 L5 B" l& q; v
例子:, y6 }$ ~6 i7 x( Y2 }9 E
dasm 01.txt,0,100000
8 p* d1 }. {* t 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
9 r7 ? C( f! I& v# h
# {7 h U4 N4 u7 U: m& u/ ]5 A softreset
# N! g2 k+ V6 s3 K. f W- q# g 游戏重启, 但不重新载入ROM
! C, A1 b/ B/ [$ a3 u$ l* T
% r; p# G# ?9 L) d hardreset
7 `1 j; U; W t/ Q 游戏重启, 且重新载入ROM6 C" u3 z/ f; J7 t+ a
+ x8 K8 ]/ Q. ]) h# n; I) i
snap xxx.png
5 Y, N! j3 N0 w/ Q" ^" W 截图为xxx.png5 t* D2 o5 w$ F, A
$ q* w; ]; E- W; d
1 Y! p) L3 b6 s6 r. e# n
% R, W- m& e8 }8 x2 S9 Z1 `( }
: F9 T5 H( k3 x' E# _热键:/ R; J" ?% }! o1 m/ B; l* }
~ 中断游戏0 V, X$ [, k f8 v. H# m3 ]
F5 运行游戏
* Z' u. k6 w+ J2 f, Z# a F12 运行游戏且隐藏调试窗口) q9 k/ C4 [" L$ ]' k) t2 N
F11 步入, 单步执行, 会进入子程序
2 g: k/ Y5 Q; u. I F10 步过, 单步执行, 不会进入子程序
6 M' b! a+ `3 f- k$ R; T Shift+F11 执行到子程序返回& l( p, x( P$ a9 O, G! P: m7 l
Ctrl+M 内存浏览窗口4 Y2 U! J1 U4 O$ x0 `
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
+ _9 W; J, b6 P9 ~6 ^0 F5 k; \% N/ @) K- X5 v% [6 l
{:4_94:} " ~8 g/ S% o8 r: _$ i0 X: @( O1 f
* `1 H8 M0 N! C7 F# C4 w |
评分
-
1
查看全部评分
-
|