|
|
; V$ t/ X, T6 w" N7 [8 V很快速的整理我自己常用的指令
% L: ?5 v2 T% i3 ~: U" b$ N, z
3 z; B% P. C! v{:4_112:} 5 Y, }9 S1 f( h; A
1 }: v U) S3 i: W" MMAME DEBUG常用指令4 N5 y% z* y; ^% S
6 r0 {% o4 r m3 x: s( |% H内存搜寻: ci, cn, cl
* M7 r# {7 i! _4 N9 h& F5 N
' j- n1 u' A! X! B ci
, B( W( m. D5 s 搜寻任务初始化, 每次搜寻一开始一定要输入这指令0 S; }$ G8 _; C7 W+ w8 N. b
) x1 [4 I O ^& T2 f3 ]7 f cn
+ |0 n$ Y* F3 p" \& |' m0 V 搜寻指令4 @4 M6 }7 l2 m+ t( \8 U! i
例子:" y+ x1 t5 H% D8 O9 _
cn eq,60& g! j! X3 m1 J" u% z
搜寻目标等于60 (十六进制)
# d; l' t+ W% C. p. [
$ l2 ~# T& h. A2 z2 B cn eq,#96. \! Y7 N3 I! W
搜寻目标等于96 (十进制)( K V/ J5 {' X2 f0 P
$ g. U! t% ^; Z* H4 K' l- ^# ]. ] cn eq
: v' d5 R1 a' I0 r( q3 U* j 搜寻目标的数值没有变化( a' O& w) P7 C( u1 N, R& Z
: V6 M3 a& r2 N cn ne( L/ z# m6 a: t3 F1 v2 J5 l) x
搜寻目标的数值有变化+ G- @' G9 Q9 m9 D( U9 W8 i
1 U5 @" Y$ {7 V3 j5 V% M6 X. ~# t, } cn +4 F U6 M; N- K; A) ?8 s4 F
搜寻目标的数值增加
, h: k$ a- f: L) r! E' B
, `) n; S: S4 u9 Y0 m, `+ M cn -
$ Q% [* h( z7 n9 M' { 搜寻目标的数值减少
6 d# X" @ m5 K" d E+ |. m3 Q0 k
8 g- q% y* U# p/ A. q8 g cn +,3" I; C5 d0 G' o0 f" _' f
搜寻目标的数值增加3 (十六进制)
! B+ {/ h& M" p* r( ~- Y7 B* I% q
$ Z4 L/ E5 H% d3 e- f cl
. _4 k- U4 i- h! P, P( C' i 列出所有搜寻结果7 A9 a1 d1 J/ K% `
+ @- `3 ~: m5 h+ N6 O
cl xxx.txt
: \! Y3 l5 h: B8 u3 G, l1 A 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式1 m, B* L: f h
& X8 X4 Y! ^2 O: R7 }* {2 q
9 u0 c) D: t( }* \+ d" A内存监视点指令: wp, wplist, wpclear3 v3 M# _( Y3 x8 w$ A9 q; o1 P
例子:
3 {+ y- H/ W" W. H- [$ q wp 1234,1,r
! e: {" }/ i3 q+ F 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度10 u3 r+ v' [3 s' f, W" `
% n; f9 N# b8 t. F: N. ?
wp 1234,2,w( x9 d4 H7 I7 V# s9 s
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
: t3 G: O- i; t9 a0 E: a2 ^ . l( E; A1 ^( v* L( a. J! o
wp 1234,6,rw! V6 p: W: g1 B
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6( h0 m* r' O8 ]& R4 e4 z
. m5 H* G: j2 w- z# V. H wp 23456,a,w,wpdata == 19 B5 q1 p% e x4 f
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1! l9 z1 m- m7 C
( w- D" r6 z6 N/ R8 b# E$ s wplist+ e3 Z& e J R( P
列出所有监视点
5 }; p. j6 w6 h4 W% D, ?) Q# H% [! u0 }3 ?8 K
wpclear 3
) g) u4 d6 }/ W6 C! w! _ 删除编号3的监视点% \/ H4 B5 B) g/ U
& T) N) i+ x* @
wpclear4 ~0 n5 |! o+ R/ S4 z/ J
删除所有监视点: L" w; I( ~5 y. H9 v! h9 i
% {+ O9 d" r7 ~; B1 Y* u0 P' U
7 `4 u+ v% Y J3 _9 I- a1 e
# O l& }; ]' T* Q1 p8 j2 `& `程序断点指令: bp, bplist, bpclear/ J6 r4 m4 f, a
例子:
5 Q* F+ O& A9 H8 V5 W bp 1234# b' z& i" n# F9 L
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断2 M9 r6 E$ A( F; E+ ?4 K
: ]( S! ] U2 A3 z" `/ n% g bp 23456,a0 == 0 && a1 == 00 V) }0 t h" b( A
在地址23456下断, 且中断条件为a0等于0以及a1等于0
; O' [, X3 }5 X( D. m- J
* V5 g; Z* ^( x' o% W bplist' e7 B8 R7 J" C; x) b
列出所有断点% g2 R' }: h5 {% T( k
/ [" I) q3 j0 C4 x9 X bpclear 3( W/ F, c. e% X% t
删除编号3的断点
9 ?4 A W8 x% s5 v+ C0 ?+ e
8 T: b3 b& u3 R bpclear/ s+ \: _; J9 A& _
删除所有断点
) _# { G# i m* b( X2 d
( |* j1 R8 l# \* O6 a# r+ l! H" U
8 r: ~5 Q% J& A" O q : `! x: `- ^6 Q; X$ {7 }+ u" B
跟蹤紀錄指令: trace
, o- S+ ^) @ b" t 例子:
# l3 P. }9 L# s- L2 Y3 t4 W trace 01.txt
# [) s O N7 R O( A/ V 跟踪当前CPU运行的所有代码, 输出至文件01.txt. P+ c8 Z3 d5 ~- h5 x
: M! e% r/ f% V5 E) f* k
trace off4 B* y& C! u: n0 a5 L6 V4 B
停止跟踪, 并且关闭文件
8 L( f; u1 p* {) |4 ?, _! G9 N2 {
trace 01.txt,0/ S! a( N$ P6 a8 k( g% H
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# s$ g* B, h9 a7 @8 o3 a
, [# w1 y0 e9 _ trace off,0
1 {4 f: q8 Q( U- V4 q 停止跟踪编号为0的CPU, 并且关闭文件
8 O5 z S# v- ^
/ o% G" F' s- t. j: b trace 01.txt,0,{tracelog "A=%02X ",a}) z5 a) H* R3 e. P* y
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
, b% M: s" @& @$ b0 q ]9 x ~4 t3 x 并且在每一行的前面, 写上"A=a "
9 [* S$ X: z1 v* r6 S5 L) S "A=%02X ",a为一个C语言printf函数常用的输出格式! Y e$ [# [2 h$ |. z0 Y
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
0 D8 S o) J7 i) `0 Z1 s0 f X表示为大写十六进制数
+ S( ^) B( `# q3 s5 ]0 |+ Z3 E. O3 ~8 i! L& }2 z- w
/ s# k/ k8 q' |: `
9 r' x, y0 D; l1 u7 h
内存直接写入指令: maincpu# g+ N+ [* v9 t5 A1 ~" s( @
格式为 maincpu.[][]@地址=数据 E- g) {4 \5 U, m. ]
第一个[]:
+ E! s8 {# t% i, i Z o 表示ROM地址
B6 Y+ ^# P# F/ s, ^/ g2 s$ g p 表示RAM地址6 r+ h* R4 Q8 s- W2 k2 L
* s% P/ g. Q6 W! L0 f) _+ ~- C
第二个[]:
) n* K* w- K& Q d 表示4字节- q; d1 y* S: k8 v' e! j( p
w 表示2字节! \, ]8 V/ x+ _$ |* R
b 表示1字节! X( W# N! j9 h- e8 ~0 u+ q
( V% s4 {3 J/ s 例子:1 v) L, ^' M/ y$ _1 B( m8 v5 X
maincpu.ob@1234=FF
6 P3 @' n+ ^& N4 } 在ROM地址1234处, 写入FF一个字节1 g4 j9 ?) x' W+ H
8 |/ y; T: _0 P3 k4 I1 \
maincpu.ow@1234=4E71
8 ~" U6 @! v x. A$ K 在ROM地址1234处, 写入4E 71两个字节
6 n5 P/ J' R. e1 Z4 d1 G
4 O+ U( A( o: `( E6 l# ]! ?- j+ k maincpu.od@1234=600A4E71
2 ^6 }: i/ l4 c! u F 在ROM地址1234处, 写入60 0A 4E 71四个字节
* F7 S! R4 M c( i W: Z! {- F; d) i/ p
# G( `/ u6 f3 i& H$ P- S) E 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
' A ?1 Z( ]6 B* F* s" ]# J - b* g# l/ {4 X- }4 K% |
1 r D8 J- V# ~& E, L5 M其他:
C; R: s* T2 ^. q$ \9 i dasm 输出档案名,地址,长度* e7 Z. |, `0 Q3 S7 T7 o; [
输出程序的反汇编代码0 t0 ]' D* f! K, _6 p/ Z* T
例子:2 Q4 g. C# W+ X9 D- b; [
dasm 01.txt,0,100000% `' T+ t' t3 P; o' w- L/ B/ o
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
0 i) ], q) E3 z; m1 s5 u8 c, G) j) u! b; a! E
softreset
7 Z% w* K5 x% u' o 游戏重启, 但不重新载入ROM2 q* F( i* I5 e7 }
% ^# u" t7 \# E9 y& {$ T% k; J hardreset
! K9 B% E+ T) x9 d0 A, x# [ 游戏重启, 且重新载入ROM
5 r' {0 }8 s$ Z% Z2 o- E8 a; M; y+ Z! r8 E; }
snap xxx.png
3 H+ g" \7 v; d0 g0 R6 D @ 截图为xxx.png
/ x( Y' ]5 }9 n- `) F% C* m1 q+ ?2 t+ Y" X
3 Z( ]! ^" F, S) o, d+ z
Q. `( }0 |- V1 G5 Y: O) f5 l " P: ~8 @5 f/ \8 E# G+ q$ |" X. {
热键:5 N0 Y4 j. V! R" Y8 [
~ 中断游戏
7 W* U% h6 t1 o F5 运行游戏
4 d% }2 j3 R% @, X F12 运行游戏且隐藏调试窗口2 _# O$ ]; V7 ?
F11 步入, 单步执行, 会进入子程序
9 S4 w/ |, b* ]* @3 K$ V6 l1 ] F10 步过, 单步执行, 不会进入子程序! A" G: I2 }; R% D7 X4 @ q
Shift+F11 执行到子程序返回
# G# b' x8 z7 T T& G( k Ctrl+M 内存浏览窗口
4 K0 k2 n* z& }) ~5 |6 ` F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
$ b. ~) e) z! J, s" F, X1 R7 e ~7 e4 @ {- f
{:4_94:} g1 i- E0 g! M8 J" Z, B9 c; f d( x
. q4 q% h7 r8 O7 T |
评分
-
1
查看全部评分
-
|