|
|
; f' ^ a3 q7 u7 }( y; B4 p3 e
很快速的整理我自己常用的指令
8 E) [9 G+ S6 y
& q2 e! d8 A6 X/ E{:4_112:} 4 U5 M" }, j! A
2 ?$ L7 n0 Q2 g+ [MAME DEBUG常用指令' a1 E8 S% x" x- \5 A
- ]; N/ P0 Z, E
内存搜寻: ci, cn, cl
8 b; m- s/ \. k2 v
2 ?2 ~1 t7 `( H. p ci
- ?+ w3 G/ M: O 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
2 ~* s4 f* W, v, M( g
0 v* A6 Y( d5 u- H cn
9 R% `) c( ]. O& V# { x+ H9 { 搜寻指令
! L6 c& {0 a# r& I" L9 @ 例子:0 ]; v9 J5 A+ d" M# U3 \
cn eq,60
( j/ U$ [: r) B 搜寻目标等于60 (十六进制)
) d* ?. P4 p: D4 {+ d: v" n " B6 O: P/ ~# _* L+ N3 Y
cn eq,#967 ?' a: j2 _+ Q8 w- m
搜寻目标等于96 (十进制)
3 [; ~/ j# \; j2 A
% Y8 M7 b# l( k4 @) B, ] cn eq) `6 N+ G$ b/ @ [& S! f
搜寻目标的数值没有变化
# W& r5 U- l4 b/ F" r6 s. k. Z: d O8 P1 O4 n, r0 {: h7 \
cn ne
& T5 l6 _* m/ N8 h 搜寻目标的数值有变化$ S0 E9 d8 m, v4 d: ^8 s& h
* m# I* l! Z5 b4 Y. W& x
cn +
1 F+ I1 Q* R( s' ~/ B/ w7 [ 搜寻目标的数值增加0 j7 X% Z$ l3 g J( ^
. B2 O2 h1 E& W; p" p4 t& s4 n cn -/ r. g0 C0 Y' V' w/ s% E4 u
搜寻目标的数值减少
- U/ }, l& m" `5 U
8 f0 v- ?5 g* J6 Y" n, ` i& b cn +,3 x) A& f' d" J4 F* a, X5 b: A6 T
搜寻目标的数值增加3 (十六进制)" L8 X( c. g* I. J' I, L% t
+ q. ]+ Z$ j1 H6 |: S$ E cl6 T. F+ L2 k) F) v
列出所有搜寻结果: x: a7 ^# V& f
! S% D' {0 b$ [/ {- I/ b! n cl xxx.txt: p5 E- d+ n6 D& \& k5 F
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
6 u) j% b7 e- k( ^7 j8 S
9 h( J" N2 M: h% I. T1 D ; Z3 w5 C; ?' w7 p
内存监视点指令: wp, wplist, wpclear6 v! q0 J0 r- h. f
例子:* Z; @# l) o0 e5 z0 `8 z
wp 1234,1,r
6 I: ]! E8 @5 v3 Y! e. [" o 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1. N3 B- W) y6 V- T. }8 u+ p3 L
$ [& S4 N0 Z/ ` wp 1234,2,w7 _ n/ @5 A; O0 H: b2 }
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
' ]1 M; M* a8 o9 V" b! d 6 x( Q: U( n& N' Z, @/ ~/ B
wp 1234,6,rw
$ F! D2 v2 s8 g 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6( {+ H* i; P5 z; E# m
% {9 B1 U- G, d& e
wp 23456,a,w,wpdata == 1
3 ]6 n( l+ p [% p0 p- F( r8 l) k 在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
- a3 Z+ R8 k0 V R! N ^9 W0 T7 _: F) ?# @9 a
wplist% m/ c) F7 Y- F0 k" P0 E1 {
列出所有监视点
) C! J F' t1 n
2 ~4 T* i, g* T6 r wpclear 3
3 `" |* ]- V0 Q; I! K 删除编号3的监视点
$ r1 I( o8 m5 K# ]" u
5 ?' m/ O( B' `$ I6 V r wpclear7 x1 g# n2 V0 U3 o$ f& v
删除所有监视点7 N/ Q! i c* l. N1 p
0 E# b# S! X* e, H% e: b' _
# q5 u/ T+ [* ~2 a2 Z+ A$ d
0 M# Y1 R# D' ]4 o9 ]! @+ Y程序断点指令: bp, bplist, bpclear
) K7 l" b% A0 X- D" K+ U: J+ } 例子:* o/ S& X0 c& x7 A2 S2 P2 ^
bp 1234! _' V( W8 ?1 o7 |2 ~$ J
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
8 p# o9 g' U T$ }6 w
c6 N# ?4 }) s$ d8 P bp 23456,a0 == 0 && a1 == 09 r1 d. y/ h7 X/ ]
在地址23456下断, 且中断条件为a0等于0以及a1等于0 z2 K1 j) ]8 Z
_- ]8 B! x' ~ bplist1 G1 h" ~0 W) o' }: O# X
列出所有断点7 H* M4 [4 p: i. l, ~
8 a0 _ O. e+ A h ]
bpclear 3
8 s. \+ u' q) C/ ]6 r9 u 删除编号3的断点
1 F/ G: T A, a: |* ?6 b
0 Y" ^5 }- m7 S# k! P2 i3 D; G, j( G bpclear
% h+ B+ W' z8 X: J9 D# ^7 m! _ 删除所有断点/ ~ G; {1 ?9 n! ?( I
% ]( A$ {* }7 D. o- y+ C , z2 i4 f" h! n0 w- K* z
1 |, K8 M# K0 E( E- s0 w
跟蹤紀錄指令: trace
9 p( K4 }% x% H 例子:9 f2 X2 j" x/ @8 r) A! h. ~2 |
trace 01.txt
: d2 k6 F2 r' T) V7 Z) Q 跟踪当前CPU运行的所有代码, 输出至文件01.txt' j5 p7 i* f( K( `2 X
0 n( u4 D8 C# E
trace off& P1 [( K- v: s* o( q+ J+ F d7 [% b! b4 F
停止跟踪, 并且关闭文件( d# F! G+ f0 ]" m* c; w0 l$ k
+ u& X3 F. a0 N* F# M; i$ F8 B
trace 01.txt,04 N) V4 A u5 t8 P9 t2 B! R3 U
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt+ l" e+ y- g, X/ s) |& o+ H$ f
- v, O8 [0 \" h' X8 V) c& M7 \ trace off,0
* o& L4 H$ ~2 ?/ O9 [+ V( e# \2 u 停止跟踪编号为0的CPU, 并且关闭文件
7 r6 W2 g; Z2 u* n7 Q8 ?, `, P$ c' q V1 x) l/ @2 t1 _: z I& r$ B
trace 01.txt,0,{tracelog "A=%02X ",a}
4 Y% m9 L! L4 r 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
9 }" V( O, C* _" F3 g) l 并且在每一行的前面, 写上"A=a "
" m z3 [- G) J O, D "A=%02X ",a为一个C语言printf函数常用的输出格式
; r4 f9 R, F0 k4 t3 r0 h 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入1 M# w% v8 C) z. p1 L: U
X表示为大写十六进制数4 q( L& h' E _# l- H6 i X1 O
2 {+ S" C) l3 _/ w: }9 f2 ]
" G4 }$ F" Y b
; u2 ~: T+ k" P内存直接写入指令: maincpu1 u* D4 S7 ^5 W# j& j. u E
格式为 maincpu.[][]@地址=数据
c5 m/ w x1 C4 U% t: o5 T' w 第一个[]:
7 G3 R# ]( Y9 q" _: ? o 表示ROM地址
+ W2 J$ p, X" q9 I. U* n) X/ f p 表示RAM地址" P. t t1 [. m8 _7 r' h& A) b
3 H5 t% e$ ^- N- W
第二个[]:
. _4 P% u5 s8 j: S7 y; { d 表示4字节
6 i0 f; e a6 l0 |& [/ ^( g, b" G$ @ w 表示2字节
. K) b7 l" K/ e6 P6 R b 表示1字节# n7 A; E9 h+ ]3 {' k7 M" s1 w
1 P+ ~" p D# T 例子:
% R$ j: i; D1 q- s$ E+ c maincpu.ob@1234=FF2 a; l3 y& _% f8 J) X# O, j
在ROM地址1234处, 写入FF一个字节
% L- v) @( e, I
3 B$ A0 e( @! x2 U/ G% ^ maincpu.ow@1234=4E719 n8 L! a' h1 T9 C" J* j
在ROM地址1234处, 写入4E 71两个字节
' i G P0 s# V) V5 S: {4 N
& f9 O% F; P( V4 I8 w( E maincpu.od@1234=600A4E719 w- s( Z$ u+ z1 w
在ROM地址1234处, 写入60 0A 4E 71四个字节6 G8 U( r: W& w9 T
1 M# c: O( d( r0 s, W g g 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
) a; l: E& L2 Q( A2 M8 A& y
3 T) y" d, A; m# X
( g B1 p! F s' `3 z5 I其他:! Q. U$ o1 G; m: c. W
dasm 输出档案名,地址,长度% l+ q4 _# s/ [3 d3 e$ [
输出程序的反汇编代码
( d# i+ ~8 H0 |& J; b& l2 v 例子:+ n t$ b k0 c1 N' n) q
dasm 01.txt,0,100000
9 C3 c9 ~# h- W8 S 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
9 q+ h! G" U2 l3 O
: i* [3 Q$ {: } j l3 i softreset
. X( M6 c' m+ L2 H& V/ Z. e7 ^7 S 游戏重启, 但不重新载入ROM
5 \5 c# w+ h, B% ?5 o6 @ i
& I2 d6 l/ M( s, O8 @% n hardreset
9 Q( h4 e7 l; G; _+ a 游戏重启, 且重新载入ROM
, O5 X( M9 ?+ P* s2 u9 C5 S; R
4 K }3 [( i8 N+ O snap xxx.png: U/ K8 ?& Z; d* Q' A
截图为xxx.png# _3 S/ r$ H0 y5 `+ Q3 a: K
, X& T6 a, e( X , s& K5 g) [9 Q3 V9 M! Q# r
+ u7 j( L8 {, D0 P. T: a6 _
5 [7 @% _: }# _& x热键:$ G' a. a' C7 h* K3 N
~ 中断游戏
2 M+ h c7 ]1 |; s+ c, x3 q) P F5 运行游戏
2 W) p* t {5 r) N F12 运行游戏且隐藏调试窗口
7 ~) J' R' @: F# ]- j$ ] F11 步入, 单步执行, 会进入子程序8 ]# K; Z( K q& M6 K9 g
F10 步过, 单步执行, 不会进入子程序4 T. Z( S# f# x& ~5 _- S
Shift+F11 执行到子程序返回
0 w3 B2 u4 l$ B7 H, h: l Ctrl+M 内存浏览窗口
- `7 j' X* U( U3 e+ |7 B% A7 T& G F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU |) m& {. V; c; V* k" x7 }$ Y
+ m+ @: E1 e) J+ q5 W/ j
{:4_94:} ! c& _0 f4 g9 |) Y- A( S" ]
1 T D2 k0 Q, P$ P/ L8 p" v- L
|
评分
-
1
查看全部评分
-
|