|
|
$ ` o) |) G; ^, y/ M7 W9 y很快速的整理我自己常用的指令0 J$ B3 l0 O$ u* U3 n; Y, @
* t5 k$ A: p# D6 L+ a0 b, z, P{:4_112:}
: M* Z# {& _, h
! ?8 p5 [9 j% d: r; Q! dMAME DEBUG常用指令
: s: u8 Q" X+ m6 ?% v. o8 ]/ I8 e6 ^1 G6 b2 R- v1 l; `
内存搜寻: ci, cn, cl
1 y8 ~' U* Q+ N9 G" V Y4 M- F$ E9 J
ci. ~( \( p9 Q/ S" I; g- _* [$ ]/ G
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
, G2 c. \* o& ^9 e' K. E. D6 p9 O3 {5 R6 N' E+ K6 o
cn X3 z9 O( o5 F7 {
搜寻指令
6 K+ @1 H- C9 ]: L 例子:' l1 b. {2 L ~5 I# G2 l! w. e- s
cn eq,60( ^7 [# {/ r# ~ K7 U" G
搜寻目标等于60 (十六进制)
6 s! z% {5 J5 s7 _ ) c1 N) K9 d# W. ^4 n
cn eq,#968 j: ^% x* y# ~* j( M6 S
搜寻目标等于96 (十进制)% K$ x: ]+ L- {
# g* K8 h' R6 y8 q
cn eq
* k. y4 L, W! q: p) b2 t 搜寻目标的数值没有变化
* z) N: o- W& L" g% ~: l8 t+ x x/ P8 K; _- G% ]# N
cn ne. P# M! d7 o$ W; J( L F/ J8 p
搜寻目标的数值有变化& d$ w! a( j3 B
: B9 w: ]8 v* ?. [ cn +
8 _/ n, x* J- Y% \ 搜寻目标的数值增加
% r4 K. t7 B) S# [2 L4 K
# w6 ~' C( \+ ~7 n+ K cn -
3 G0 _0 }3 V3 _' p) U* |: X$ ^$ B+ | 搜寻目标的数值减少' y- T7 m1 F, y4 Y
+ A3 g4 I' x1 u# g6 I2 @ cn +,3
" U- c) e: u. c6 g 搜寻目标的数值增加3 (十六进制)' d7 T. l7 Q6 c9 f% @, M
0 S3 a: S7 v/ M5 d$ D
cl5 X* t' v- K8 _( ]# _( i
列出所有搜寻结果8 i$ t8 E! n) \+ s$ o
0 m3 Q5 |4 c* L" k cl xxx.txt: b" [9 @- ^0 z! K' ?/ ~: F
输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
5 w* Z) J+ w3 F
" g0 w! d9 A1 E7 ^3 L2 a4 q
+ w- J$ ~1 w2 G; R内存监视点指令: wp, wplist, wpclear
/ D# e8 a. k7 a8 R# h 例子:
0 u* @/ k# { B9 n/ ~ wp 1234,1,r
; s/ o/ w( u9 v( _' D/ @; n- y 在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
0 g1 j K$ ?; Z8 V) S7 z2 Z; \! ?2 P( G7 B$ e
wp 1234,2,w
& v( _+ @/ M2 Z! H5 i 在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
6 g# F2 N1 D3 @# z% Y- U ! a0 x- e# d& u( F: Z3 Q
wp 1234,6,rw9 q. n' h v& S' u- ?- k- u" H
在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6) C a5 B `4 C4 e3 l# V8 V
3 r5 k# W! }* a6 T1 z; I wp 23456,a,w,wpdata == 1/ F2 i' u* C5 Q
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1/ @7 Q. E& l6 `' N% L
7 @' m% z& E3 o8 [: j$ l wplist
( B; Q3 E% c! y# i6 S+ F; G" l6 F 列出所有监视点
% i# p2 C1 d6 s
/ S- Y* }; a# g- R. Z3 U6 k" U wpclear 3
, x+ a' {9 P* e) u# k 删除编号3的监视点
- y5 C4 B G0 S6 w9 G7 r z% {- n! A/ X& H0 r& Y% b: |
wpclear9 B' J$ ]: u7 W! h
删除所有监视点
% j: D( [* y# E- Q `
' Z. O0 n/ z8 ^6 j& X, J2 U* {
. H' e* ] |/ V& g! ^! c2 J R9 h+ A/ x
程序断点指令: bp, bplist, bpclear9 ~5 c! V+ l& m H3 H# N
例子:' B1 ^9 T) R9 }7 S3 Z, t! m
bp 1234: {& I) i8 h* z" w: z
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断7 O c& I+ _' ~, x7 w9 z- I
4 |( T8 e3 P8 C) R- V2 k } bp 23456,a0 == 0 && a1 == 0
2 _7 k6 g4 ^! ] r 在地址23456下断, 且中断条件为a0等于0以及a1等于0
- i# F9 h# t3 w1 q
! k# E% M- v0 L: ?5 }* u bplist
1 u- q1 ?' I- ]' \4 i 列出所有断点7 L( j' F3 d' A I# f
1 m$ C% }. o m5 B! o% K: h+ \ bpclear 30 ?, f1 `5 z6 N+ g; ~5 w% w
删除编号3的断点6 {1 \, c; W: h
2 W, @% C. G/ R1 j) n0 _
bpclear
. [4 p* o% z5 Q9 s% h. @2 D8 [& t 删除所有断点( {; P* ^+ q! d& n, U/ u; b5 h
( h7 d1 [. e) @ i 1 y7 _5 v( W( o" A! n+ g$ Y
( [3 ]; U+ ` F$ ?跟蹤紀錄指令: trace
/ R$ u/ ^9 v: a K9 t5 v 例子:
( }* s6 W x% S trace 01.txt% n8 r- @: o( t$ S& A
跟踪当前CPU运行的所有代码, 输出至文件01.txt
+ O. G3 ?' G( t$ O( M% ~ h/ s. @1 D0 }6 p& w; `2 P0 k( |
trace off6 U: k8 Q5 k# W A
停止跟踪, 并且关闭文件" N! m' n! C9 v+ b$ A# _" C
' G1 Y- _* l2 R8 Y
trace 01.txt,0
% w; M- ^& d' R4 H6 R. ~ 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
6 q* e9 i3 Q M' y) Y/ y
/ y( T$ J6 g ~ z, i) |! G trace off,0# Z# {" y- }2 s r
停止跟踪编号为0的CPU, 并且关闭文件2 }8 f# x6 A0 t& e8 p' _3 T, X
4 z; L) L. S: u8 T' C# G4 ~% o
trace 01.txt,0,{tracelog "A=%02X ",a}
8 m$ e3 S r; {4 {$ {2 M 跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ( ~# a2 {9 e7 T
并且在每一行的前面, 写上"A=a "" @- y' y% f6 |0 d1 a3 m
"A=%02X ",a为一个C语言printf函数常用的输出格式% H5 y. N" T5 \6 q
意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
2 C! i% n0 `* H2 P. R: O X表示为大写十六进制数
0 u* b5 c% z1 y' `; [$ b4 k v; S( Q! _# }0 k6 b6 }3 h
, Q: ~1 N7 `1 s
, X, \ W! J+ D0 [: {- y) e5 m内存直接写入指令: maincpu
* B; c$ h* D+ u5 `( e 格式为 maincpu.[][]@地址=数据
0 e1 C! v- \, ~ ]+ i! g7 b 第一个[]:
r( W5 p2 D" I4 U8 S o 表示ROM地址# |# U; ]! ?8 j1 Y' B, O5 f/ Q* Z+ X- [
p 表示RAM地址3 t! ~! }: X# v8 b8 I
I: E: e, W" [* e6 [# E" l
第二个[]:
0 W' h _# O) m9 j0 h7 {5 v7 C5 H d 表示4字节
1 o) e0 E1 M% s3 a2 v w 表示2字节
2 h& I7 J" {% {; _$ g2 K b 表示1字节
) D( ?$ Z) u8 D1 L& t' w/ [; p: U: b' m" ~1 V/ I) e: ~! B
例子:
) ]4 |, p) p( O. R maincpu.ob@1234=FF' s4 H6 Z z/ F; h, I/ G
在ROM地址1234处, 写入FF一个字节
- S$ |3 o( Y2 z. L! T# e8 _4 a& w# k4 W9 b+ q
maincpu.ow@1234=4E71# _% n" \- s4 i( X3 A4 C
在ROM地址1234处, 写入4E 71两个字节; u H; X% r0 e5 D6 \! |: q
# a/ N4 v4 i+ u# ~ maincpu.od@1234=600A4E71: x6 f; H) Y, J, y) [
在ROM地址1234处, 写入60 0A 4E 71四个字节, g7 k2 P& C& [5 f7 B
$ o( z! r, Z7 A) }
注: 如果是RAM地址, 可以在内存浏览窗口中直接改写* A0 I3 ~! d- [$ r" K2 A
0 n8 E2 P3 ?, X" b7 l
* Q+ c5 v2 M/ p4 P1 X3 Z其他:
+ _7 z9 o$ a. y$ r; K/ N% n* s% b dasm 输出档案名,地址,长度: n$ ?+ C5 a( g! z; C
输出程序的反汇编代码
/ I0 L/ |) ~9 S: m' C) s 例子:
! _9 v7 l4 q+ A0 R5 H8 n% q+ i dasm 01.txt,0,100000) I" h) X' Y' x: \
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
2 r: w. Q8 L8 T( R0 u6 K# C3 Y7 g- h2 i. ?4 ?' K( q
softreset/ K# `+ z7 H7 { c2 H
游戏重启, 但不重新载入ROM
7 I/ m4 b) }/ e
; E Y/ d3 X; h hardreset
- q4 T" ~' B: @& o7 }, v 游戏重启, 且重新载入ROM! x8 i% _" ^- ?0 h
( t! ?- R% M3 O; }
snap xxx.png
2 q7 B( P8 d4 Y' b* K9 \) D 截图为xxx.png' S/ E$ m4 |! h; C
' d8 T# W% A" x2 e6 z
; [. B( i- i8 D
, T: y4 w0 G- J7 d$ ^7 x # `3 t, ^/ ^/ O( I
热键:
, t+ s9 {0 i3 q1 n' k ~ 中断游戏
2 j4 `1 I. L( C9 Y( U6 ^( g F5 运行游戏* g- Z( M- j, e! T! L4 a+ z2 D' i. @
F12 运行游戏且隐藏调试窗口
* S8 }; c- w. H) ^ F11 步入, 单步执行, 会进入子程序2 B: _( N$ Q3 e( u
F10 步过, 单步执行, 不会进入子程序1 i2 W+ [" i! f# t* d
Shift+F11 执行到子程序返回' V2 j# b! [0 M+ a1 s$ S- K
Ctrl+M 内存浏览窗口
2 O. V( h. c: `# t R F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
5 [" a4 C( M! H& ~
( ?0 F) j5 W1 V; j{:4_94:} / `) Z6 m+ z$ e1 p* p' \, x
6 h! G V. ]% ?3 S9 a( w
|
评分
-
1
查看全部评分
-
|