|
|
8 C# }" Z4 U s/ V3 r5 \9 ?
很快速的整理我自己常用的指令
8 j# Q5 W. ]1 u D0 L' L- f* C/ x1 B6 A
{:4_112:} h5 w+ w+ d7 o1 a8 k- Y
, V) y( l D1 ?MAME DEBUG常用指令
% `5 G" R' J- a; V1 Z- v
$ Y/ F6 h" Z, t内存搜寻: ci, cn, cl6 O3 c" q$ ^ F! Z! z7 c
4 P0 [$ K. l% |0 ~) B/ p8 y- [
ci9 ~& E* x+ x& ?6 U' C* \
搜寻任务初始化, 每次搜寻一开始一定要输入这指令3 Y! D. M4 x! s5 g* p' G) G/ U
* |4 N8 r- M6 l: S/ _! k
cn5 Z7 i! y: D# @( j- O# T
搜寻指令( f& k, b ?8 @% y; v+ q
例子:
) W0 U. Y. a+ H i( f) n cn eq,60) M9 O9 J4 N/ M- B/ i& J- d
搜寻目标等于60 (十六进制)
/ S- A/ M0 S( g3 y# } 2 N: ?9 M+ c" A# e( e3 O. d+ T
cn eq,#96; X. f$ u# H( Z! m1 G
搜寻目标等于96 (十进制)5 h) n% {$ T2 u& a" E Z5 `
6 h3 c y' Y9 Z& a
cn eq
' C$ t9 Q N$ F& X! r& ` 搜寻目标的数值没有变化
( S1 g1 D% i9 b, U! U1 v5 \- W% |( e) c/ U6 `1 |
cn ne
! v. B0 B3 q& Y! b5 n 搜寻目标的数值有变化
/ P( ~" c: Z+ T2 m8 X( V ' O9 `- ]/ {, f% m+ Q
cn +5 o2 @0 \# u! ^% G
搜寻目标的数值增加, Q6 u9 J5 X! b* N& o9 g
U! a' n Q1 W9 [
cn -! P! t! j: o9 A! F
搜寻目标的数值减少/ A1 H, a _3 G3 O1 T( J C
' w8 p w/ c* y3 ?# q+ u cn +,3
- `+ V4 S$ i* [4 P 搜寻目标的数值增加3 (十六进制); ?* R c4 ^* x3 f% R; m3 V
- _/ ^5 n# r8 l( Y" `/ e cl
: k) @% P" j2 b: m6 D8 O1 t4 h8 Z* \4 r 列出所有搜寻结果2 B u8 [1 ?. Q3 o. R6 R
" t, l- e0 V) ?$ W4 r, E cl xxx.txt
, m7 ?. J9 n- e- C5 O6 B) T7 ` 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式/ |' @+ B& z* o" x4 V! Q% m
% A- T! o' D6 Q z( q' B' A
" I Z. C* B7 o+ v& @. H内存监视点指令: wp, wplist, wpclear
0 V2 _ {3 }0 l2 s$ ~ 例子:
1 [- h9 `. \0 M- ]% i& { wp 1234,1,r+ U+ D& ? _% q9 L( S
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
+ I9 J# |4 R1 j) w+ u7 M) O+ E- ^6 G l; L0 e
wp 1234,2,w. i3 I8 x$ D; f/ j1 c( a8 I
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
& @$ M% M3 C! F' k: r2 g 4 r( c3 Z. g7 Z8 q1 ]' V# ?" M+ s
wp 1234,6,rw
0 ~" n- V& ?3 v& G' G* d5 X 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
9 ?- Z+ e) t) Y/ k
% P( P; J$ I, K8 e7 B: J; h wp 23456,a,w,wpdata == 15 F/ q3 ?7 ^0 Y& e4 N3 x4 _
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1+ _0 {; x; P3 F" a
& H: A1 B' L; t4 p8 w: | wplist R; E3 M- y6 E
列出所有监视点
3 }4 D. R0 Z4 |* U9 W6 z1 c4 e4 T8 t6 W* [3 F* I J+ _
wpclear 3- Q) l& B6 x+ ^) @7 J
删除编号3的监视点
4 X4 S. a/ j" f6 u" \( k2 e5 u4 ?7 s& t+ G. \3 F T* x/ b
wpclear
, x7 }$ L" h/ U; d) ^% U 删除所有监视点/ ^* [6 _3 h1 S
6 V: ^4 [2 y# p4 L. A
# C+ r( U% L+ e# {; v
. t" b# m1 ]5 S
程序断点指令: bp, bplist, bpclear
3 ?& p5 l/ R; Q; h( H3 T3 f* [ 例子:! M9 x( C9 o$ \' S0 o. G
bp 1234% b( D7 x3 V ?8 @
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
, }- V2 q, }# o( b4 I- Y; C4 J. [4 U% b( _0 C g
bp 23456,a0 == 0 && a1 == 0* [+ c& A! T% D; w
在地址23456下断, 且中断条件为a0等于0以及a1等于0
; G% G) L2 b! s1 r, j- B% ^# W" q- ]3 U6 f6 {
bplist
1 R0 J1 N, W8 L! T. P5 g 列出所有断点
, @4 c" d# b/ Z7 y
+ B9 l% A. b3 M( v* E1 ~1 o0 B bpclear 3
1 @7 z6 _2 |2 u6 l+ E. j 删除编号3的断点" m( d/ a0 |1 F* k
: U% ?6 c m! k! v0 w
bpclear
+ ^4 D- Y- @0 e- T 删除所有断点
( H5 s9 o+ g3 f1 D" v+ L9 l% ^, b4 `; ?0 f
3 x- {1 m& Q4 L4 u! I: Q
2 T: r7 F, {7 P
跟蹤紀錄指令: trace( w4 D0 i2 M- f8 u% E- \
例子:
- s5 y2 B1 r( E* }0 @' ^; R: U. Y trace 01.txt, p* q3 t5 T/ E) P
跟踪当前CPU运行的所有代码, 输出至文件01.txt2 g0 @3 ]" \5 m# M- M1 }& B
: i0 R1 l9 g r5 X" H
trace off( Z+ e- }$ ~& L4 b
停止跟踪, 并且关闭文件3 ~. o& I& X5 a$ D' t1 T, O. t9 A8 h
) k, ?' B' |+ S. @( Q trace 01.txt,0: r. `% T2 v: x' X- |. E- f/ }
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt, y7 e1 r% J3 j1 i2 D
. A" r! v$ t# u trace off,0
9 K6 Y$ k( D' ~( f. [ 停止跟踪编号为0的CPU, 并且关闭文件4 Q0 C |' ?7 r& p3 K" E& v. p
. I) z/ @; s( N4 } trace 01.txt,0,{tracelog "A=%02X ",a}# v/ l: x5 h; V6 h# a
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
5 C% i& @5 _( k! S+ u6 p% y 并且在每一行的前面, 写上"A=a "
0 p4 c; x& U7 v t- d+ Y6 E0 m "A=%02X ",a为一个C语言printf函数常用的输出格式
. Q% Z5 F: w0 q6 b9 `/ l4 } 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
2 |; a- |5 J O0 p X表示为大写十六进制数& E& M N9 T$ S7 f! S/ M+ g
4 T' R* x. ~# P$ u3 F2 \
% b* o+ R* ]5 I6 m" R) e
9 C4 |( ?: f- K o1 Z内存直接写入指令: maincpu5 c8 Y7 z( ^. {, | T
格式为 maincpu.[][]@地址=数据
j0 V6 s0 G7 |% g; r 第一个[]:0 z: H* v% B, y6 G
o 表示ROM地址/ F j! @. G! t# K: x
p 表示RAM地址0 A3 |) D& X& {/ s- r# v0 q
$ o# f( E) l2 v2 F% d 第二个[]:- q5 a: I- U# M* I X& D1 \* D' q
d 表示4字节
; h* x9 W& _! M9 I$ ]9 w w 表示2字节" E9 [+ X% o: e7 K/ w
b 表示1字节7 x# h s% z1 n6 ^+ ^/ d8 [! E
7 Z8 v; C5 v0 [5 A6 K9 e
例子:
) k* Z7 H+ o/ l5 J6 c0 z maincpu.ob@1234=FF4 Y1 M5 B+ K) ^/ c8 [& v7 t# o
在ROM地址1234处, 写入FF一个字节6 i* G/ o! e( U2 _9 Y. q/ P7 A
. _' A) s$ B" O3 c P maincpu.ow@1234=4E71
E, O6 q3 H/ L 在ROM地址1234处, 写入4E 71两个字节" }" L6 B7 {- [- a
3 a+ @4 i0 ]& @" ^5 c% _& r" _
maincpu.od@1234=600A4E71
! g2 @/ s1 T* ]* s 在ROM地址1234处, 写入60 0A 4E 71四个字节
% E, L1 ?% M0 S
0 g" S f( ^' o9 k6 M 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写5 o4 h# `! c& g3 }
* M8 M* E/ C7 Y7 B1 @' m
) F+ F! c. n( H* F1 _. Q, `* o/ f1 i其他:
3 b1 t8 N1 w/ y0 U dasm 输出档案名,地址,长度
( ~; u0 O# u P. y f( Q 输出程序的反汇编代码1 x. W& l2 t9 h/ |; F7 \
例子:) t* }6 ~1 Q h
dasm 01.txt,0,100000
1 G) Q3 b2 C( E, Q4 W 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt' _; A, T6 @! ^4 [ B
% _- \" v* j; k! V% z softreset! z" q- H" ~' m
游戏重启, 但不重新载入ROM
; M$ a+ W3 f+ c# D& y& @6 C& i" M
4 ~( C! M$ l3 v+ A; Y hardreset7 Q" a, |) h! V0 I% v. l4 X
游戏重启, 且重新载入ROM- V, H9 G6 U3 `) h# e7 `
# d! N! e' U/ Q9 S5 Q snap xxx.png
9 b8 A9 r/ v: \ 截图为xxx.png
: I/ D2 l. b+ l' p* j* t) o
% P' ]+ ~& [" d0 k3 Q+ B
3 l, d3 O( I+ ^8 p ) i) n% a8 }( E8 i
3 ^' B/ q8 W1 U7 Y5 i- Y: R热键:
) Y; H- |7 z5 t9 u ~ 中断游戏
1 k+ _) n7 o. e3 l' C2 S" O0 v F5 运行游戏
! }+ x" [9 X% w. ]+ q' G L F12 运行游戏且隐藏调试窗口7 a) H2 M+ c) B3 I, w2 \) f
F11 步入, 单步执行, 会进入子程序
: A; o/ \$ p7 q l2 X F10 步过, 单步执行, 不会进入子程序) s$ |) K, h, [* |* i f
Shift+F11 执行到子程序返回8 q f7 q4 P1 {3 c
Ctrl+M 内存浏览窗口
6 R! }# b8 j9 ~9 {! C% { F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU( H7 K$ e% P* h" s+ G- e
5 M9 P0 K) q' r1 z{:4_94:}
8 h% c5 U4 J: u0 f2 K% t8 X$ N u) p7 }, w" G" g
|
评分
-
1
查看全部评分
-
|