|
|
1 C0 G% N! z) ?& p2 c
很快速的整理我自己常用的指令 b) H9 w+ O! s j, w
$ O# d' \8 j0 W9 C7 H/ ?2 a+ c
{:4_112:}
& k1 h8 ?) \# |0 s' Y
6 q8 M y9 D$ f+ Z4 G+ ~4 jMAME DEBUG常用指令) M2 ]0 f/ r. U3 S3 q1 T
( p3 C; ?& Y# q2 B
内存搜寻: ci, cn, cl# n( F9 A# C5 b' x M6 j# D+ g! B
% @+ M% a- R8 @! ?; ]" _) Z
ci4 }. I$ V' r. H U& `
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
{1 ^/ U. o% F+ y5 j' R
4 C" U1 O" M1 j% K* b, r2 r$ c cn
/ t, j+ U; p; `5 `. x 搜寻指令
, }! x* A2 k: B G; o& P) l 例子:5 f7 [! D7 D5 O o1 T
cn eq,602 a; r9 _4 Y0 D* C
搜寻目标等于60 (十六进制)
4 q, Y: _* J* p6 F
7 L$ @5 L. |8 g/ S cn eq,#96
0 U: \' o" q4 p: Z3 |% |; j+ } 搜寻目标等于96 (十进制)
( U( s1 d! Z# b$ d( }4 t, X' _/ M! S
cn eq+ m. h. ]4 F9 i; }# N
搜寻目标的数值没有变化, F' [, s/ m4 X# K
9 c( a4 u/ _6 s% i' T0 E; r$ K0 e cn ne) p7 W$ ^9 z# n9 @8 ~* b4 k p
搜寻目标的数值有变化- ?1 r0 q0 t! ~4 x$ Y/ L# M
: V5 I2 v2 t3 P; x/ f. F6 f5 X cn +
% W4 K. `0 }- ?1 b7 C( S8 x 搜寻目标的数值增加3 p0 u/ \4 l7 y- t$ b: K
) `( }- g% A0 }, T! e, k7 q
cn -
0 w% d: L$ N8 w6 d' d 搜寻目标的数值减少
Z" ?8 s+ V7 \& U; o) S+ e: m ! q) B+ U1 l: j' k2 U, H' C; y
cn +,3
" q& ]; q# T9 n0 _$ N 搜寻目标的数值增加3 (十六进制) W9 P; ~1 ^! x
h9 M" b2 m& e( ~
cl: B. Z4 f) {8 }" h# ]
列出所有搜寻结果9 v5 |* K t4 x6 ?3 C1 Q& C
/ R1 E, y3 T2 r4 {! T cl xxx.txt
1 h: X2 U8 m1 O0 t+ D# _+ m 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式6 u# e+ @9 j4 p5 T( Q" M2 {% K
$ `, d: B' i ~, a. \
3 a+ [4 X- E" u0 q
内存监视点指令: wp, wplist, wpclear
4 r( ^- s" B& \/ q( `5 E* Y1 B 例子:* i& n, _) }! M# t" C+ ^& m6 ?
wp 1234,1,r
9 N& I4 H* B6 a: v8 Z3 s 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
4 ]/ ]5 x9 Z, y! k$ C, b( f& F5 D b7 w- y
wp 1234,2,w( ~* H. `: @6 y* k/ R
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2$ J; |* ^: \9 G P5 n* k7 q' P0 i! K
0 F- ]0 d) h' m8 ~/ S
wp 1234,6,rw
- C. ^8 a1 W7 k8 m' Y# Y# Q& B. |1 C2 o 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6 P1 T# P2 p9 u8 J- v
% \! e# y' F( x) k; l
wp 23456,a,w,wpdata == 1* `0 _* t0 k" I; M$ o
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1- Z+ P( j: X/ z" ]8 |1 C! I; R8 o
- w. M) p8 C: }
wplist
4 L: z/ I) @. e3 A9 _2 X 列出所有监视点
4 w& U R) ~5 U' m0 H8 D; q }6 F$ F, Q7 C7 j
wpclear 3
/ O9 W4 f5 M2 }$ F$ a8 k 删除编号3的监视点
) x% Y( Z4 t4 _
( y v, ^0 Y1 |8 F0 A- m/ ]$ v7 Y wpclear6 \' T( }: ^3 v
删除所有监视点
0 |- X6 f) W! w, R0 N( M( P
1 D a1 e9 g! ?; l
' G7 }6 i4 J) i
- T! _$ e9 R7 D I0 h( G6 D程序断点指令: bp, bplist, bpclear/ a8 B+ r2 v! Y! M+ F
例子:; X4 ~% P1 i C$ v+ S7 o
bp 1234* ^8 {9 m. R& L8 q3 ?
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
3 N+ }. ^- \ y2 w6 o& q
4 N6 L9 x- q) h4 e E" U$ \ bp 23456,a0 == 0 && a1 == 0
, {5 p' T7 X# r0 p S 在地址23456下断, 且中断条件为a0等于0以及a1等于0
. {( Q, @- w4 b, [3 V0 g" K* s1 J3 ^4 a
bplist
1 E0 p# a% l7 J 列出所有断点
6 Y$ m/ V, B" P1 W$ d6 Q! A- X! d5 a; W- n
bpclear 3
( ?$ u) g7 M0 [* m5 I 删除编号3的断点
0 w3 K" ]6 B* v, s& [2 L' l! n" z! M) r1 l0 g: {+ O
bpclear8 l7 I: p; h+ T3 j0 C
删除所有断点
`3 l/ o4 s: L
' I( q0 F4 O6 y' W3 D
$ a& H) G* Y6 r) U) Y4 A ; Y# G- q, o' |9 [. j9 D3 ?; X$ j) l0 g
跟蹤紀錄指令: trace! a6 l4 z$ s# s; a
例子:$ s' S/ c6 _( a" l) P
trace 01.txt
9 H; b2 H; e7 k0 t# U" Y 跟踪当前CPU运行的所有代码, 输出至文件01.txt0 v$ O- M& y2 K. ^6 a
, t" r5 A4 d; d+ z* f trace off ]; N3 U" L% t3 a
停止跟踪, 并且关闭文件
g$ c4 }8 B4 {9 A! I: h9 V- y) @
trace 01.txt,09 `, l* q m$ P ]
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt |$ ^& K( @& I$ J3 |
# I; e3 ?; E$ V+ h& @0 A6 } trace off,09 c" [" P3 ~7 ~/ {3 [' {, J- m
停止跟踪编号为0的CPU, 并且关闭文件# h4 i8 ?2 Y9 _( P% @: i
, ]* b3 ]* E; B trace 01.txt,0,{tracelog "A=%02X ",a}3 ~' z; F$ l3 j* f2 C
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt " g1 R7 `4 z0 R1 w j |4 d
并且在每一行的前面, 写上"A=a "7 b7 g# n: m0 s* R
"A=%02X ",a为一个C语言printf函数常用的输出格式7 h2 z* n# D/ U5 n5 r- T
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
' J- h2 E p- ~) M5 ~ X表示为大写十六进制数
7 o% t% d9 p- v* s4 Z: s7 ?2 Z _! c' g$ N: N
! U( j8 e1 z; d' U
# S6 u# c3 {" r1 g+ a7 Z/ t内存直接写入指令: maincpu
2 c ^! Q" K f; y: x3 A* c) f* f 格式为 maincpu.[][]@地址=数据
, m, c2 x2 ~; S* f 第一个[]:5 a+ l# E& W1 Y1 G$ J6 G% c7 h" H& @
o 表示ROM地址" E. k. c1 h( C# L% ]1 _
p 表示RAM地址
. n5 j% x7 |4 H2 j* g6 \& j' K$ Z$ w, U/ P$ V
第二个[]:2 v& @8 C3 L& z4 u1 z! A
d 表示4字节
/ d: B4 @* u8 Y! M. A0 ] w 表示2字节
4 \! z( b7 S8 a% z4 `3 m b 表示1字节
- P4 S) t2 {2 r( z+ o+ n7 h1 n1 l1 }! a$ Y, e6 D5 u- L
例子:
% A4 r& [/ F5 w maincpu.ob@1234=FF
$ Y6 `5 Y) A" o( ?0 ?+ w 在ROM地址1234处, 写入FF一个字节
. r9 {3 Z) C: |) z4 T& o' {
, i) M0 z2 n% b |' s7 `8 A maincpu.ow@1234=4E71( M ]1 w! F8 S" X) D
在ROM地址1234处, 写入4E 71两个字节
/ d z6 Z& V4 C, O! E$ b7 L+ B. l. U7 z7 A% q9 n; N3 x# w H8 o. l
maincpu.od@1234=600A4E71
# w0 U4 U% ]( t5 m# { 在ROM地址1234处, 写入60 0A 4E 71四个字节% g- V# L$ Y0 L: k, v5 N* v* ?
" S0 U! @* ~. ]7 e7 |4 R
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
) h8 ]; N4 M1 M. S' U7 ^2 _ D7 p5 d3 T+ ]! m3 C
# J$ O/ l. I' l- ~6 J其他:
( Y8 V0 g& x1 n0 J, \! z dasm 输出档案名,地址,长度( [7 x& B4 q7 H
输出程序的反汇编代码9 G% E/ N. ^* t, [* I) _6 k ]
例子:
- ~( | J y ~ U% w, Q. o2 K dasm 01.txt,0,100000
1 S& U' K- k, Y 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
5 O0 ?7 `) T- q
' q# n {( I m; Q% h& A softreset
$ x6 d4 B! H: c5 u& C2 B 游戏重启, 但不重新载入ROM5 [# J% Q h& y' C& j
- j' _0 f' ^$ K0 _% h
hardreset
& ]/ H$ T( v; ^4 m. S% U 游戏重启, 且重新载入ROM7 p3 B( b* E7 v% k1 U
; A2 _7 s/ ~0 z1 Z
snap xxx.png4 _+ u% H4 w/ ~# I- @" O4 f4 t" j A
截图为xxx.png
: N7 `5 ?: A% F6 Y5 l% {. {$ g: a H( \7 B
. \8 o% f3 H7 p' E! z6 ]
/ u. X' a4 K) @, p: O# Q( f
' ~& n: @: d; `, u
热键:
' F/ Z5 x& Y+ f' m$ {" w+ o ~ 中断游戏% J0 V& }& F) ?7 W- [" M
F5 运行游戏
2 [. [5 k7 U7 [5 Q& f; ]! `6 k F12 运行游戏且隐藏调试窗口
9 f. _# ~2 p- O1 N! j; x% i( R F11 步入, 单步执行, 会进入子程序3 d6 j1 K* D$ u7 ~+ h' |
F10 步过, 单步执行, 不会进入子程序
- L0 p6 n" W( d) o' X& C$ W Shift+F11 执行到子程序返回0 Y( V! H: H) e; j) z; Z
Ctrl+M 内存浏览窗口
4 N8 F, e# I# A: |) [8 v F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
1 J$ ^# [6 t {1 z! z
% ~3 f" A0 W" Z& K{:4_94:} , d4 k l5 {- k# E; g1 q, V6 ]
/ J# [% w7 T& U5 S/ e |
评分
-
1
查看全部评分
-
|