|
|
0 d1 Q, C" W7 W& V4 r9 k& h# Y很快速的整理我自己常用的指令; V1 E( F2 c! T7 Q
+ o2 l. l h! s" K{:4_112:}
! V) y% }% M0 b) u" B7 C& g
9 Q( ?* d7 P8 mMAME DEBUG常用指令
2 Z2 ^/ o3 n4 C/ x6 j0 a
) o6 {0 `' K. o6 j6 e6 |内存搜寻: ci, cn, cl
9 O( Y6 k' N9 S0 g* j- h; X- J0 V9 k8 `8 n
ci
4 m9 E3 o1 G9 ~5 u$ I 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
. E/ Y( ^9 v( Z! z/ z! J# n i! b( Z8 J% x
cn8 a: E/ l+ Q1 k$ v7 I
搜寻指令
A( R% L( L- J9 Z 例子:8 ^- V" A5 c7 `& n3 Y- S- J
cn eq,60
/ |7 H. Z* {& m+ g" \ n 搜寻目标等于60 (十六进制)2 F( G& v) K+ v" X$ p& k9 i. u
1 H8 }: O7 Y- B
cn eq,#96
1 N: O$ H! L: P$ t1 s9 `$ S 搜寻目标等于96 (十进制)" N: }0 A& R3 e, t. W% v
1 l8 b2 e# ~# t6 ?% T7 Z# ]7 ]
cn eq3 h) u- U+ a& h. k0 |
搜寻目标的数值没有变化2 w% M5 X# V4 S1 y* t6 s: I
4 d* \, @* B% P
cn ne
3 m* ^' L, i- Y+ m% c |' @ 搜寻目标的数值有变化! F! ?* F# r5 V2 p
0 w# V2 L. P% v+ i
cn +
0 T- E% d$ C+ D2 B 搜寻目标的数值增加
( O2 e3 z7 }7 |' G6 |0 f6 V
' ?# `. i% N& D6 @' l& C& g5 Q cn -; |8 `" R( n2 h* g7 O
搜寻目标的数值减少
8 y" l0 @' \! c; O
! f; l1 m' i/ K. o cn +,3* w6 v" B9 v; q' ~* G
搜寻目标的数值增加3 (十六进制)
s0 }( n( V( m, A
; _5 c# \9 ^" O9 ^# m% ~8 ^. J/ B! c cl
3 i: \; v4 m- s2 X" d/ ?8 Y& V 列出所有搜寻结果) M, }" C# r0 }, S. z
2 T1 i b& q' ~! C
cl xxx.txt
' \; t$ `5 j/ R8 @0 ]/ b" N 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式5 g2 ]* h! c" W4 K
8 f3 P7 V0 \6 C4 H6 X$ ]: F9 m/ V
& g4 _* c8 p" a- U5 |内存监视点指令: wp, wplist, wpclear
6 u. E, q- k: M7 h3 g7 p. W 例子:
6 ]% m. z' ]4 f7 j; j p! { wp 1234,1,r o4 g6 `7 X0 `4 O/ b9 p, j
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1. k* l# j' L- [+ o: P4 ^
, b. H: D; J7 t/ m; }$ C, c8 F# w
wp 1234,2,w
, G9 u/ k1 X ^# K1 j 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
; i* A5 S8 s9 B i ' {( D4 ?/ R9 |& ^9 f& Q
wp 1234,6,rw: J; j4 R) K0 J1 W
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
) W' ^ i6 ]4 f1 R" o* h( k+ Y S1 f+ m
wp 23456,a,w,wpdata == 10 v8 o) X$ [7 E6 f/ M
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
4 F6 B; m5 e+ _7 z) p
" M' ~9 E4 e' L2 u1 R' w wplist# l: _# @2 _! L
列出所有监视点8 j* l2 P" V1 J. P# y% d
3 u+ V4 G7 s8 u, c& M! a- } wpclear 39 w/ Z' z5 c, E% v& N7 a7 m0 D. f
删除编号3的监视点
- g% ~7 ?0 J+ R2 C7 p
! \, ?$ ~, E2 o/ v8 k wpclear6 v: W9 b! I2 p7 y
删除所有监视点' p4 |" C# l& C3 n, F- i" z
5 D# m. k6 S3 e2 V # s/ c( P& R+ m7 G$ f% f
9 l- q& d$ U5 F4 z! {程序断点指令: bp, bplist, bpclear0 V) U8 E; J+ U+ K V
例子:& {( g/ ~& u7 W. O# Q4 x* {' v3 c
bp 1234
7 o+ J/ S% d2 s3 ~ 在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
& B3 z1 i/ l0 \# u+ ]6 O' m0 w4 J( A8 e+ j0 N! D
bp 23456,a0 == 0 && a1 == 0/ _- B: T; ^( d
在地址23456下断, 且中断条件为a0等于0以及a1等于0- p! \& _5 C2 t
! t/ }( @5 a4 H6 v( C0 B
bplist/ A' t& \1 T$ f- ^: I
列出所有断点% U9 L% q0 G- Z4 p0 r. u
+ W' a$ H7 u- M bpclear 3
$ U( N" Q& ]9 H5 O 删除编号3的断点
4 p; W# I. t a. l( \- \- M- r: ]% [, a
bpclear. ^7 O2 i- k4 [) b$ E
删除所有断点- \* k a/ ]1 m2 q( K6 p
% G( v- H3 Z- R9 q( J 0 C0 u8 U# n) H
1 e0 ?1 g$ c; p9 I% o: K/ E跟蹤紀錄指令: trace4 w5 D: u+ w2 ~4 g
例子:
# X9 B; E, G9 h( m trace 01.txt- ]9 ] ~6 p0 J, x p
跟踪当前CPU运行的所有代码, 输出至文件01.txt$ ^) l% |2 h5 R$ e3 c; y8 x. C( x
9 g' s; B2 X- Y) R v
trace off
7 y y8 D% i- M6 E0 H 停止跟踪, 并且关闭文件4 g0 p, ]0 h: T/ ~
2 A* t' b0 I7 y3 Q trace 01.txt,02 w$ v6 Z6 j2 T# k$ e' d
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
& ]( A% h t1 a' ]. v
5 b$ ^( A! k* t9 }; g6 ~2 l trace off,0
9 `- d- ?$ l+ ~0 C 停止跟踪编号为0的CPU, 并且关闭文件
4 p$ \0 w: h6 r, `7 X0 _* p( K6 C2 s+ R" O6 O2 V' h& W
trace 01.txt,0,{tracelog "A=%02X ",a}
" d- I+ ~# [9 J 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
" \2 R: T# B r: g9 A ]! T 并且在每一行的前面, 写上"A=a ". M8 ~& r% F0 W$ W
"A=%02X ",a为一个C语言printf函数常用的输出格式
/ \- l, r2 p9 |! C& [ 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
# y+ ]+ E; n9 m6 M# H1 w- d1 D X表示为大写十六进制数$ E1 d+ `2 k" m& t
' `7 B' I: L6 C1 w/ ^- X, q8 _& C6 \' V
B7 L( v0 O; {2 v$ a
内存直接写入指令: maincpu
6 p; D. Z& B1 P7 L. I7 M$ N 格式为 maincpu.[][]@地址=数据
) g: H) q2 w" r, k: h8 _* V8 K 第一个[]:
6 ?; g( p& |$ H3 y+ D o 表示ROM地址. P4 `& v3 @0 F4 E& e
p 表示RAM地址1 k5 g& s# | }' v( I% M# S
4 n& j. a& h; G* p# t, L# |
第二个[]:1 J* P! `/ ~% Z% j" P
d 表示4字节
0 G! s3 h+ a- h w 表示2字节
$ T0 A! ]# i6 w b 表示1字节9 Y( u- V$ P! P4 E
" r' |* v" Y; Q( {" e9 x F2 ^4 @2 l 例子:
! R9 O# z) w% ~7 ~# v: L/ P. l maincpu.ob@1234=FF
# P' H2 ~( g. c. _, L. s4 o$ `9 y+ x 在ROM地址1234处, 写入FF一个字节
( L9 K# O/ w9 ? F2 ?3 U, f' S
- e. S Z7 q$ x maincpu.ow@1234=4E71
6 o, p4 B" Z' d) ^; H2 F( d: x 在ROM地址1234处, 写入4E 71两个字节$ L. z [8 B1 o9 k9 g6 H7 v1 @( B
# d1 Y7 t9 R# B% q9 R+ i( ?: x% Z maincpu.od@1234=600A4E71; \8 [# E7 g2 A: Y7 G2 F2 T# H/ D
在ROM地址1234处, 写入60 0A 4E 71四个字节- C6 K9 e% t. L; m5 D
6 ? [$ m! F2 I; r3 L 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
. X7 E! W: \. u5 {) C- \ 8 R9 u0 r6 b9 H3 h3 x! Z3 t
5 }& ?4 S% G4 S/ H7 F8 J其他:' ?. |, C2 k% O! n9 `7 ?
dasm 输出档案名,地址,长度
. e; N$ @/ v& q3 j3 p! e 输出程序的反汇编代码' R$ l0 | i( U/ {6 B- ]6 e2 p- I
例子:
1 y- t3 C, }; C dasm 01.txt,0,100000
, l1 s5 |4 T' y2 s& W, D 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
. B2 Y/ j& p5 c$ @& q. D! l
+ H, y3 F4 x$ G3 e* X! G3 W! \, _ softreset
; E2 a1 T; @5 ^) I 游戏重启, 但不重新载入ROM
" }7 S+ O' d3 e: m p; b, J# E5 X8 w
hardreset
& g9 v& W+ U$ T w) A* H 游戏重启, 且重新载入ROM
+ X3 D, J) ?* G2 G5 q1 v1 W4 y: P
! r& b4 g+ f. T' w! e/ `' Y5 T snap xxx.png
& K8 P4 [9 Z+ v) e( o4 [5 ^ 截图为xxx.png
$ _! P @, \& W4 t1 ?; b( h- D9 |! K% w2 M* D* R# {9 C' ? ?
! m t2 I/ a# r& S; Q " c/ x# v' y7 ~$ y9 p
1 z# \4 e6 `4 A# K. K t" Q* Y热键:
( ~9 y; ?% x G- L4 y ~ 中断游戏0 v( _+ C& }/ s# u* J' c8 @/ G
F5 运行游戏
) k% L7 ?) h6 U& [; u6 c) F! V F12 运行游戏且隐藏调试窗口
0 f* N4 s* ^3 r F11 步入, 单步执行, 会进入子程序
8 B- ?- G- v; e! k" o, N, v F10 步过, 单步执行, 不会进入子程序' P5 ?! ]3 }3 T. f* n5 i' Q
Shift+F11 执行到子程序返回$ o* u) z1 w3 Y( q: S' ^* e* d* K8 f
Ctrl+M 内存浏览窗口
" g8 k& C+ m( R' ^: f% Z% a6 K F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
$ a: O1 T" `/ f: G7 g4 ?6 d2 y$ @" q. T! g7 R- ]
{:4_94:}
. p; q% _1 Z* f! ]% m$ G5 ^+ K6 [9 ?- B
|
评分
-
1
查看全部评分
-
|