|
|
) J# \' ^) r* U! s很快速的整理我自己常用的指令
" F2 K+ i# q3 t* m, [! e$ }3 J' j. e( X9 I! _1 i+ a; ?# p7 f
{:4_112:}
9 q; D0 @" b8 ^) ?8 H( h
, R4 [; H' [: N/ x3 R: r/ pMAME DEBUG常用指令1 p. r9 T. _7 Z" L1 e# g# S
# H. n8 }$ x) C" F) `
内存搜寻: ci, cn, cl$ p v: Y! T' |" N5 V, w* W i
. r( _# f0 S7 C! D2 s0 X! X ci
/ B8 M2 c8 F: r# S! I 搜寻任务初始化, 每次搜寻一开始一定要输入这指令" |3 }, U0 ^4 P
$ b& L* X& r# e3 S$ D* z cn& p' l! E9 v1 R4 q/ x' ?3 L' a+ H l# W
搜寻指令
( m+ B6 u9 I5 W; p* M 例子:
5 H/ t8 W: v% v2 e9 t, Z cn eq,60% h- G* Z8 r( A2 _" g: g! r
搜寻目标等于60 (十六进制)
" _/ h6 ]% x- B- c 3 g$ ~1 [- v$ {
cn eq,#96/ z: Z* D [- C( w0 s
搜寻目标等于96 (十进制), H. S# p8 o6 N4 l
; V. p: b8 Z$ I" x cn eq7 V8 y' x2 A) n) m3 ?
搜寻目标的数值没有变化( I$ A8 A, g: t# e
6 c* ?- v0 k- V9 ]! }3 s e& A cn ne
* L1 A) p" T/ `* C 搜寻目标的数值有变化
) ~+ t2 |% G h4 S
8 }9 ]0 U4 [# s+ a cn +
2 Y! V. [' v) A8 J5 p! U9 i 搜寻目标的数值增加
- P* k+ Z0 ^) N" |# u0 _ + v; N, A# \: _/ N4 y6 M
cn -
- }( [3 J) h% R7 r) [2 ? 搜寻目标的数值减少 R0 z; Y( l5 V1 [
# Z! F) x1 f. X cn +,3( {" r; B/ \4 R' w; k
搜寻目标的数值增加3 (十六进制)
' H! s( e# A: R9 o; O7 L9 \, }
% I7 Z; q' e9 m% L7 | cl
3 ~1 _+ [+ z0 N' K% h 列出所有搜寻结果
, }3 V7 }) J. C
8 {0 u# p: c( D cl xxx.txt
# H( {$ x j& c: x* S 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式& R: i" \6 F/ ], J" I V
/ a7 a' J1 C, k. [; p3 Y/ X5 O
" s* c6 s/ Z: ` N, H; Y
内存监视点指令: wp, wplist, wpclear# S# }$ z5 g4 v1 c+ E
例子:
. c; g# i& i. R' I wp 1234,1,r) d; h4 x; B/ P7 M; x6 f% E
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1. }1 N1 ]; B5 b j# V$ ]) P7 q
a& H7 S: d$ X3 z' A* g" Y wp 1234,2,w* P! [/ A4 }4 Z. j
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
+ q- z; z8 J% F
$ ?, c9 ^. n/ L* L6 C. m" p3 P1 E wp 1234,6,rw( ?/ R- o; H' j" _" \: W# t+ b$ k
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
6 Q" _' h7 d- z+ }* R6 ~8 Z7 m" a {5 ?( `: V5 ?$ ~3 S5 t( u
wp 23456,a,w,wpdata == 1# o! p1 g- _' ?
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1; t* O3 C4 E" D8 } |
( @/ {' z" b; u. O0 T4 p0 b
wplist# I# c9 P3 S U' ~. i" J& u1 r4 Z
列出所有监视点
- z5 g/ P# e4 B% a; C$ `9 {6 F8 M3 D% `1 D8 J: @
wpclear 3% T7 c, L/ M5 w( V: P3 J6 W' k% K
删除编号3的监视点$ {7 y4 ~, j) O! f4 Q7 T
7 F- X/ g- q- X5 R/ S
wpclear
% y$ y) K( R- { `. J7 E; G 删除所有监视点4 T: @, L7 W, G# @
# k3 p; o% Z x7 r1 P
/ i, n$ i3 q) A/ I6 m' P9 E
! p c9 k9 h% X3 E- Y$ g S程序断点指令: bp, bplist, bpclear
" c& H- V4 P- L. X. J 例子:
; c* K+ O2 ^) ~! e bp 1234
5 S7 q u4 U! T/ ] 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断7 G( Z! {6 U: A" _- e
" M! T; T0 O. W" e- Q3 K3 A s
bp 23456,a0 == 0 && a1 == 0
/ Y" @6 g. _" K6 O 在地址23456下断, 且中断条件为a0等于0以及a1等于0. n! O# I! P; h! s7 }) a
3 p& R% ?1 s! a0 S( \ bplist: r+ N+ T& j3 I1 n ?
列出所有断点- d. N& j! V7 U8 k2 e
4 w+ m; b8 r+ C9 X n5 k bpclear 34 N0 F/ m4 s' j0 ~; x3 g. G
删除编号3的断点 i- X+ [% s& k7 C8 Z
. W5 t7 Q- t' J7 d1 p bpclear
7 Q2 W9 H4 s6 ~" }5 T 删除所有断点
, Y2 k e! D# C1 r
; K6 e8 [8 n, E* t- `# Q! B. {
* s" [0 Y$ c; g6 _$ y
) ^7 Q" I2 \5 R. T: ]3 f' \* b跟蹤紀錄指令: trace4 r3 G/ e" m7 f9 u
例子:8 u6 y3 U' @- |6 _
trace 01.txt5 M! ` _ H; m4 D/ ~- P; F
跟踪当前CPU运行的所有代码, 输出至文件01.txt% w% `6 X2 j! e Q
" ?" k5 {6 }7 i+ Q$ ]5 ]# }* Y trace off
* I" d! z6 N! ?# p" `! Q 停止跟踪, 并且关闭文件
/ _ S l9 n1 c# x7 b* P7 D' O$ B/ u: s
trace 01.txt,0# j [5 |5 J. }! Y! e) t$ y% X
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt) T& g: Q, l) H+ u
% l/ i& Y: l* k: {8 B' W& n
trace off,0
2 N+ g3 ~3 Q8 y( p 停止跟踪编号为0的CPU, 并且关闭文件
7 f: Q* ~% `* h, z4 T" o! N. c/ I! r4 o p6 i* X
trace 01.txt,0,{tracelog "A=%02X ",a}* \# G( u1 F3 Z- W& D0 |
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
) B2 Z0 n$ D$ {# \. i- l& ^ e 并且在每一行的前面, 写上"A=a "
( W! m8 n- o% L. M+ h "A=%02X ",a为一个C语言printf函数常用的输出格式
- c6 {) _, t! ^ 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入6 A% p9 g" S* X: Z' ]4 m# N9 d6 R
X表示为大写十六进制数; r0 g$ j/ G2 J2 Q8 v/ t% ~
5 |0 ~0 A0 x( e$ r, h+ h) M8 }3 Y
. c3 D+ h. ^9 v2 s% f- g8 N5 |- M% F7 p V5 ]
内存直接写入指令: maincpu: [3 M( S/ `: }4 P6 V
格式为 maincpu.[][]@地址=数据" m! P' \6 p" q3 \; J Y
第一个[]:
+ M1 \0 s, F( L o 表示ROM地址( D1 g' ^, s( v" Y5 N
p 表示RAM地址
% q" t2 i9 k$ t( C' K/ w4 d
9 C5 z9 \3 x4 L 第二个[]:7 O/ f" K$ o3 _1 r8 R' x
d 表示4字节
: a( [ C% h2 `: J2 T0 d8 J w 表示2字节
3 i9 h5 N- o8 }, x2 c; c F% }- o b 表示1字节4 o7 a9 q, v5 e4 c& |
S: W9 A8 \- l: B% ^" W 例子:
- ?0 \- e1 q. A4 X+ Y0 x5 d4 R2 U+ m maincpu.ob@1234=FF) I5 n; ^8 ]- ^3 I& t, F( W" L
在ROM地址1234处, 写入FF一个字节
, B2 G# J4 X; l2 f" X" N: E6 {- X- t) V! P1 f' G% b
maincpu.ow@1234=4E710 Z# s5 z" o! ~+ S2 P5 B/ ~
在ROM地址1234处, 写入4E 71两个字节0 c% ~- g% ?7 x. s: B
! o% v- a3 y! n0 B- X, ^
maincpu.od@1234=600A4E71
: J2 G* ?4 s# G; V7 y 在ROM地址1234处, 写入60 0A 4E 71四个字节
( x6 j0 Q' W6 Y5 Y, n, ~9 P
9 d' l! }9 n+ ]- s! p8 g1 C 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写7 Z0 b( h0 J1 S9 V
: I5 @3 U- r$ k. X2 ^% {1 |) S1 Z2 J. g
其他:
+ ~9 Q& M1 @9 m! H" ^' j( ?: t; U dasm 输出档案名,地址,长度
7 U7 P& v3 U4 |, h. E, r$ [ 输出程序的反汇编代码9 s) m" e: B9 M3 S, |2 x$ C+ e; [, ~
例子:: x! R- s; h7 p% e6 M( s# ^* ~+ [ J
dasm 01.txt,0,100000% d$ @% m, n3 E5 s( F) h+ k# d
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt1 V1 {' P- w' W3 |& n
' O' C1 r5 M5 m$ d I/ T0 I9 _, N
softreset
6 |2 l; r) h3 V- F4 Q 游戏重启, 但不重新载入ROM* r+ m! ~4 U7 s% ~
, M! U2 j- a) c9 v9 |. `
hardreset
& A! M' m6 A, E. p6 X 游戏重启, 且重新载入ROM
# u6 n+ i- v- c" f1 _) `8 z
% x6 @ e. M( n snap xxx.png2 s) }; L4 w8 y+ d! ~( F' f) H2 I
截图为xxx.png. ]5 b0 k# b2 e5 u
: A! i9 Q7 m- q- {4 g
5 Q8 i2 m) ^7 T( ^) W" x$ Y
, x/ D2 i a3 g2 c: C + U7 E2 _- Z% `! M. m( q* H
热键:
' Z; G- [8 @: f1 m ~ 中断游戏4 m: u0 e7 U$ O- _ H( h
F5 运行游戏( h- h4 s/ a1 B. p2 h$ Y1 x1 J
F12 运行游戏且隐藏调试窗口# z' H* F+ \0 X L) Y
F11 步入, 单步执行, 会进入子程序! ~7 r* {' `: I8 x1 i
F10 步过, 单步执行, 不会进入子程序$ j0 U" V( z# R) Q9 ^
Shift+F11 执行到子程序返回. u& v1 W% |/ L* }
Ctrl+M 内存浏览窗口 x; a* z8 q$ Y2 {* [. w
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU- U+ ]9 f; H2 e8 q4 h$ V4 V8 P
7 o4 ]7 | Z" Y% }0 s. Y{:4_94:} + g1 e c5 S; u& K) F' z" s- X" {
- U4 y; p0 |/ E4 Z) x |
评分
-
1
查看全部评分
-
|