|
|
5 r# T# e. y" k. Y
很快速的整理我自己常用的指令- q+ z. t4 [, K. H, g
8 D! f9 z! s4 q- F$ v& o7 P{:4_112:} . k: x8 b+ F* Y# h6 W6 I% |9 x- V
* ?- i/ z6 ~4 i" \# o4 XMAME DEBUG常用指令" h/ \ s& n9 Q7 y- p- p: r
& G3 A9 }& |8 x5 C( T4 q* {0 E内存搜寻: ci, cn, cl
- E: w& W9 | Y9 M) V# S
3 J2 R/ x7 n. L& V- v4 {- t ci
* N% Q$ s/ a$ K, t) N: p a 搜寻任务初始化, 每次搜寻一开始一定要输入这指令
, S4 F" N* o" k( E. e3 O5 G# M P" i$ X7 O) w
cn
" m/ r& B5 I+ c K: M, m 搜寻指令
/ J, t, T1 [* r& R 例子:
6 ?/ k# i7 w7 O7 k5 l cn eq,60' Q' \6 E1 d1 B q5 _1 L5 P% x
搜寻目标等于60 (十六进制)
m! W( h# I9 Z$ x$ ?. l8 j2 q
9 G; Y6 R _( F: J# Z1 C cn eq,#96, ^) ^8 j5 C9 ?' B6 i
搜寻目标等于96 (十进制)
4 H$ T+ L9 m* B5 f+ d! ^& x1 I/ `: k5 G+ j/ W5 a& _7 N
cn eq- y$ c- b' R1 X' W$ d# r7 l
搜寻目标的数值没有变化
9 L9 E* f5 k- c0 k( z9 W5 D* A, U, |
cn ne
+ a+ F1 k l5 ^3 Y1 _ 搜寻目标的数值有变化- m7 b( M) h( f6 ?
3 r* `; N; M6 i/ K: c+ k cn +
; @. w. r+ [8 c1 z) {2 [4 i 搜寻目标的数值增加
3 K: s# m$ ]! `! I, r) }9 e8 m: Q ! q, D, n$ @: O2 {" ]" w
cn -
" m1 O& U7 ^$ `; {1 Y 搜寻目标的数值减少1 Z( `% t- ^ `
, c+ S. U1 q5 r& C% o+ f
cn +,3
4 E# F7 `. Z2 A: f7 X) y8 I6 b# v5 m$ Q 搜寻目标的数值增加3 (十六进制); i& F ?5 k6 k* s1 T# `
+ [6 _8 _* c& `8 Y8 f4 e cl
0 T" A7 Q$ U# ~% F# Z 列出所有搜寻结果
N: N5 N/ c" [: B( S h3 ~0 _. f: E, w$ ]
cl xxx.txt
3 d1 ^3 g+ l2 C 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式* p6 {4 e7 ]8 a1 d/ T2 [7 l) H9 D6 Y
! ^4 F& H' G% h5 T$ K
0 F' \) |* k$ i& a! G* w+ z! F8 O内存监视点指令: wp, wplist, wpclear
$ U) \- |3 d; U3 L2 a) v 例子:( _) K/ u7 k$ w
wp 1234,1,r; j$ @# u8 I! ~, h7 v
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1# q5 X% q3 _, |9 j
$ j6 L5 W! U) k5 a' n% o3 e3 r wp 1234,2,w
$ [) g8 G& b* W 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
5 _& g& \% g. j4 h2 i 9 I2 F" I6 R V; i0 |
wp 1234,6,rw
" m2 G7 e) P: _4 ^ 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
7 z7 @! r0 o5 c1 Q; P- L7 I) a% f% b9 U {2 M: t
wp 23456,a,w,wpdata == 12 B0 W# H; O0 \) E0 F
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
; i+ E& Z$ | v! c v! v$ S* s* @3 c
wplist0 B E1 b+ p/ Y: R
列出所有监视点
; ]! G9 V7 I5 h7 B4 t9 ~9 e/ @2 a, R; r, ~/ w& y1 O, {$ K S
wpclear 3
, S' r: } j z, i* O* H% f 删除编号3的监视点0 L* m& S* J/ k
/ W3 ~# T' U" ?- W
wpclear
' D; P$ F! ?: k7 O 删除所有监视点% I! n" G" e' P3 e) |* ]
4 ~7 v" G( ?1 H, z3 I
: j9 ]# W# }1 Z* |
* T" v" F* r2 U4 ~程序断点指令: bp, bplist, bpclear
/ ^3 k; J% `# Y( j( n 例子:
, z. b, o* T9 T% V$ B8 g3 @" c bp 12349 v. {4 V: Q" [) x% O( L
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
. Y5 p( ^/ u3 I. `5 {/ k( v4 E: J# c) _' }6 D" J
bp 23456,a0 == 0 && a1 == 0
+ P* o2 |1 x& Q- d 在地址23456下断, 且中断条件为a0等于0以及a1等于0
/ {/ d, b& J: R
. C8 j0 d0 P5 r+ f3 S bplist
" W6 o# ]: ^4 N* o; T/ N 列出所有断点! e2 a% C: K8 E4 [
# @6 | F9 U) M, @' F7 w( v6 [
bpclear 32 k3 K8 g, g$ ]1 W7 ~
删除编号3的断点& }4 o2 b: G2 I u
" j4 l2 D3 X6 `0 x1 x
bpclear7 x+ S s! W& ?1 r T
删除所有断点1 g/ J) X+ F3 K+ [# F
8 i+ Z4 o* y: a/ V4 o$ F
+ L/ _. v! s+ S& M/ M: M
7 a+ `; d5 t4 |9 E; U) J" `9 N跟蹤紀錄指令: trace' r* J; I7 B0 L- c$ E3 _
例子:
2 ]! F) W; z5 K' P trace 01.txt0 N& J* N0 w; m& q
跟踪当前CPU运行的所有代码, 输出至文件01.txt7 B0 i3 b7 A- B6 T S: c
L- ]8 R* Z. D( A7 T8 R
trace off
7 z, g* I" ^" |* t0 l. k N( G 停止跟踪, 并且关闭文件# I0 ], M1 j: |) U" u' R8 l/ a I
' A; b! X, \- C$ u' i trace 01.txt,0; [& k, l6 `- p0 a
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
- T+ S+ J# y) ~0 [6 E! L* n$ J2 Q$ `- X! J/ b, W6 ?4 u, ^8 F0 n2 [" O
trace off,0% A0 [, f4 I& F* |
停止跟踪编号为0的CPU, 并且关闭文件
8 l, M, `* N( `
( _# Z( A# `# W, h4 Z trace 01.txt,0,{tracelog "A=%02X ",a}
% s' D2 u4 a1 p 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
9 z3 y5 d% Q3 v 并且在每一行的前面, 写上"A=a "
/ B3 |5 A$ U" x- D; B$ g "A=%02X ",a为一个C语言printf函数常用的输出格式7 E+ m( h$ ^( K9 K+ P& S
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入3 z" B/ S8 y1 o! |6 b
X表示为大写十六进制数, e/ Z$ |; ^$ @/ \1 R1 E
& q: m# H: m# ]. ~! g# j) q
: X' l6 v% {, u% O# V
3 A) ~( |# O' Q内存直接写入指令: maincpu2 z7 A; ^& `% B% G$ |7 B2 [5 i t- Z
格式为 maincpu.[][]@地址=数据
% Q5 a) Y7 z5 x+ i) H 第一个[]:
3 z3 b. @* Z( R& G; e& k o 表示ROM地址3 u" h( p# i0 k/ N# ~# X
p 表示RAM地址
# e4 c0 N; ^9 ]7 _3 `: B* [! Y! R; V }1 V
第二个[]:
: E6 a) T7 {+ `/ ^6 {9 a d 表示4字节
+ q/ Y/ _6 I; N8 r' _0 ^ C) X w 表示2字节
- ?# f4 |6 q6 X' ?9 r, Q" O b 表示1字节& \. e7 }0 P' @0 R& k' o' G" \9 G2 z
6 C: {! q( w5 o' M, Q5 r7 m
例子:
; K8 Q1 R, M& N" @; E maincpu.ob@1234=FF; ?5 q3 y( I6 A. l7 G6 R
在ROM地址1234处, 写入FF一个字节
# [! x5 p4 R& `: U2 C# \! a! N% b6 L. I9 v) n" f
maincpu.ow@1234=4E71
" `0 m2 t6 T+ H0 H 在ROM地址1234处, 写入4E 71两个字节( v+ w6 D5 Y3 H3 U# X
4 b5 i% r' ^, p: g
maincpu.od@1234=600A4E71- O Q& ?' r& }* v% |
在ROM地址1234处, 写入60 0A 4E 71四个字节" _* z U. n. ]6 H# _
6 L! Q h. g1 q l* [ 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写' ?) |% G1 L4 F; u
! m: D* O0 z1 d: h$ F5 E& m. b0 B# _; k) U6 k; |' ^; `$ V' R1 Z
其他:8 O3 g/ o8 _; f2 f3 |+ q7 [, y
dasm 输出档案名,地址,长度% v- w7 k y9 J" N# G" D8 d5 x0 L9 s
输出程序的反汇编代码
/ P, c: _; x. [! i2 O 例子:
; l6 v& Y6 D* N8 R* F% Q, U dasm 01.txt,0,100000
+ L2 h, h6 Z1 V5 m 将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt7 t1 L" }% h7 B9 `4 _1 y5 M
6 `1 X7 `* ?. H) v: J: ^ softreset
; X/ |+ E! Q, j 游戏重启, 但不重新载入ROM
9 j. c/ @: d" B3 y/ R% q) `, R- J0 @0 E
hardreset
t( g% j1 }: E0 E+ N" y/ y& n! k 游戏重启, 且重新载入ROM
) y6 j8 p) a; e
+ x! U$ z5 y( m7 q* {3 S4 p# D) O snap xxx.png$ j5 Y9 T; ?5 G) e! V
截图为xxx.png: }7 t) Q* E! B3 C4 |& g
4 {, m' X) L! t! B" u2 c' J; }& r
* \! d! W0 y* v/ J) `" B/ v$ a
L F9 @4 O6 \; S
* N% |0 v; r- B' _; d# W
热键:
3 Z- k/ H7 @; A" L- v' y ~ 中断游戏- b: D# y4 e/ U
F5 运行游戏
! S, t1 I: p9 R& A' U F12 运行游戏且隐藏调试窗口8 w3 y9 c! C. {6 K% f6 [
F11 步入, 单步执行, 会进入子程序
% z) I, w- @; t- S; O2 j$ u3 W F10 步过, 单步执行, 不会进入子程序
* {4 u; _: `+ f0 |3 q Shift+F11 执行到子程序返回& z' {, R, n3 M) C4 c
Ctrl+M 内存浏览窗口
" I" ~2 L/ x3 b/ }( B* \ F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU% h6 u! q2 l! a6 ?9 R, _
/ M$ s7 ~4 h2 E3 P% |+ `{:4_94:}
8 n2 I* S- e% H5 A5 t$ ?( E O. b, b, g" `1 r$ k6 b
|
评分
-
1
查看全部评分
-
|