|
|
欢迎注册EMU618社区论坛
您需要 登录 才可以下载或查看,没有账号?立即注册
×
2 O( q- R+ k; U2 q3 ]
很快速的整理我自己常用的指令& V' ?7 u* K# b, K, l' ]7 x6 e( K
! X& P& K/ ?$ G! @9 [0 y, K y
{:4_112:} + }2 ^$ C, Z1 g7 y/ ]/ x
8 r! A9 F; N% Z) ]+ n# d% |8 c
MAME DEBUG常用指令
6 v6 _- g& U0 k5 o2 v. L8 Z
' y1 S @8 I$ W8 i5 n内存搜寻: ci, cn, cl
3 y/ ]# B7 O4 V' T+ U- o3 Z- \9 n4 Z8 H, v
ci* G5 i( ~- Z1 s. u/ f
搜寻任务初始化, 每次搜寻一开始一定要输入这指令
: Z$ F. t/ G9 x" I3 {
( w; B. c- E, A1 s8 x cn
3 U6 g o. t. I; I e; V 搜寻指令
+ |8 ?8 G6 ?: C5 P$ y- e8 e3 e 例子:
% M# P! G; N/ a8 h8 k" M& _ cn eq,60, f+ M* `$ \$ o4 y
搜寻目标等于60 (十六进制)7 g( n# ]; M4 K! O
$ D$ ~8 r/ z3 c$ D cn eq,#961 C) X( D1 d- I" t9 r1 Y4 q, n
搜寻目标等于96 (十进制)
- H5 w6 l& R( P0 ~& Y6 o/ M9 c1 J. k: `/ f
cn eq, { ~9 K+ Z2 Z, a
搜寻目标的数值没有变化
2 T( | ^6 s- j8 q# n7 |8 }4 _; {9 M, W4 B" A" C5 O
cn ne
; S/ o* s6 A; g7 N% [ 搜寻目标的数值有变化
+ P% K* b! E; W# D
3 a5 L( f/ z1 h" I d, |4 G+ n cn +
9 ^% g, W4 D5 `+ W* { 搜寻目标的数值增加
1 n; U, @, c0 c' g' ~: q5 \3 I
* m$ f& Y |# q2 c cn -
- C( S2 U% }: l. _9 R/ _( a1 e7 t" q 搜寻目标的数值减少. W% w8 j; j5 e8 v/ Q$ W- n) a
8 Z7 j* G& S! g0 _! R% ]. R+ p cn +,3
1 @. I9 _9 n" O( J 搜寻目标的数值增加3 (十六进制)
; J8 L I, P8 e7 n$ J$ r( Q0 D: |0 \, m# [: ^
cl1 V& D$ e% U! R% d: d
列出所有搜寻结果" J: o+ B( D/ ~
) C& i# Y. B/ Z6 p' X: i cl xxx.txt
7 W$ L1 T" ]% {- M 输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式" I, h! y; \* g1 Z% T
3 E* C/ A% {/ I4 N6 q: b- O5 D
6 i" k3 }# e% u, R6 m% ?内存监视点指令: wp, wplist, wpclear0 n e2 [* G! N! c9 R
例子:( t7 k5 q* o! o5 }; |
wp 1234,1,r! F* z+ [" n" @& V8 G1 b. W5 y
在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1! p1 ^* f5 D+ B8 H
2 W. x5 R0 j; }# Z5 E0 A7 u" U wp 1234,2,w. i% F3 B5 `: n. `) }" F
在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
% b0 y" S+ m: I
5 {& Y. ]1 n! ]# j* K/ B* ] wp 1234,6,rw
8 Y( v8 V: x$ u8 i- s, ~ 在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
/ N$ ]+ R/ @( }. J: f+ l' s, H
' y8 t. n) x' \( A& { wp 23456,a,w,wpdata == 1- Q- j7 `$ K, U J
在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
9 b' i; x4 a- x
$ |, a" \, m; Z. Q' S wplist( W7 d, }( E# r/ W
列出所有监视点, b, j# t. H; _5 I# R3 b* ^; h0 k. b$ u
: ^8 W6 F+ g0 B @$ V# o! w
wpclear 3
0 T/ e* r2 h1 e% L7 K- p; e( {0 c 删除编号3的监视点
" k/ Y' V3 }% y. L J. M* P
+ R( P+ c6 X' C wpclear; p! |; Z8 r' s% Q9 `
删除所有监视点
' z# z- ^- b' }$ ?3 t- L5 Q ^( w8 H1 h5 a" C6 }
. b" t" g3 y. T9 s6 U$ v; @$ K6 n$ F/ I9 ~7 o
程序断点指令: bp, bplist, bpclear& j/ Q) k) h: c" }% W' ^
例子:2 F% y: o9 H7 W
bp 12349 L( p) U/ i: u4 x
在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
2 V( W. @# B& w1 H
0 O: J3 l: N- s bp 23456,a0 == 0 && a1 == 06 \1 e* D# F: J3 i5 g/ T& M
在地址23456下断, 且中断条件为a0等于0以及a1等于0
; N8 M1 ~. G9 X. Y3 z/ {& J6 m1 Z
5 k! v8 ~% [0 \( [' L$ p, L bplist
. n2 D) g/ {9 p5 l/ m 列出所有断点
. t" M ]# w' ~) y9 L! r
; m" P. k( \4 _( g: L1 e( [ bpclear 3
; K* X; m. Z, e; }2 s 删除编号3的断点) U6 H' @* {6 K; s. A+ E; v
5 }* O. J+ }2 J% s4 w6 l) H
bpclear0 Q. L+ Z( V" g/ M* {% P8 `2 ]
删除所有断点
* ^! z P& N% M+ V$ U i( m* e8 [: q* d9 N( l& t) n' M
$ g: D7 [8 z! ~5 j+ |! z
+ ~- P4 a7 @$ ]% K& p6 S
跟蹤紀錄指令: trace
) |0 A, ~7 Q% e9 R) K0 h2 m/ \ 例子:
; j9 y$ Q T3 D" r! Y: ^% I% R trace 01.txt7 m1 ]' C: g4 O) m3 m2 F* K7 G
跟踪当前CPU运行的所有代码, 输出至文件01.txt
1 R5 z% R. g8 {7 h
" M }6 L2 p1 F% U trace off1 o7 r7 y: a! |+ F# N1 h k: {
停止跟踪, 并且关闭文件9 }% d5 k$ \+ s: T: K
2 L. B! f. z' q7 m( B2 I7 j trace 01.txt,0! E$ Z: ?/ X, G
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
& O# k2 i( A2 A) P4 c+ |# F/ _' _4 g) B6 x
trace off,0
! @- G" p2 K- X5 i6 D 停止跟踪编号为0的CPU, 并且关闭文件
- m; ~( ^- ^) j* N# Z# r. `: \4 F: H( U3 G. k2 u- Y0 `
trace 01.txt,0,{tracelog "A=%02X ",a}4 ~& E! m" V. I+ B( `
跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
7 M9 b" E' q9 r7 Z+ T) {# ]9 M3 E 并且在每一行的前面, 写上"A=a "# P, E9 _9 q+ D2 a
"A=%02X ",a为一个C语言printf函数常用的输出格式
G1 X6 Z1 W8 M) M; T: j: N: v 意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入- D" z- a/ S, A# W; N
X表示为大写十六进制数
5 b: x A5 P* T- g( ~, r( r9 [' I" i$ O) y
& `! {0 Q, n. {( X: a! ]( d4 `+ @# q6 P' l
内存直接写入指令: maincpu, \% S$ g/ N: s3 G4 V2 Q, e% N
格式为 maincpu.[][]@地址=数据
5 M2 O7 S2 g7 U. e9 w 第一个[]:
0 E* S6 l, Y' z o 表示ROM地址
. a3 P! b. H$ x; h' }, w, j. T# k7 E p 表示RAM地址
. k8 T2 H% H# `& d% }
/ ]7 r* t& \; A- b# ` 第二个[]:0 ]0 Z( b6 ?- v. I- \
d 表示4字节
# ^% s' `- D" d& ~ w 表示2字节9 c+ L* {2 d; L0 H/ x( B% {# T
b 表示1字节: ~+ `! H7 \0 T
, C- k6 z% `7 M$ k
例子:1 e) N8 k) F: ]9 U
maincpu.ob@1234=FF
+ c; ]4 V9 U# Z, g' s1 { 在ROM地址1234处, 写入FF一个字节
- R' \$ ?: R: {7 d2 ]+ N
8 t# Y: g6 h" _7 L maincpu.ow@1234=4E71
. h- @% H/ M# c2 |; Q 在ROM地址1234处, 写入4E 71两个字节& o* d8 s+ c5 t" g' X
3 l5 f1 E4 H. |2 B maincpu.od@1234=600A4E71! Y+ _5 G6 u4 R1 s4 ~
在ROM地址1234处, 写入60 0A 4E 71四个字节" P8 a0 r, N- u& w( u3 x
; n. v! p6 M" @6 g6 _( O 注: 如果是RAM地址, 可以在内存浏览窗口中直接改写+ `8 W0 q7 T+ I( f
. y j9 f6 R0 {+ y
9 I1 r2 p# E% c7 p
其他:
; d( n3 z4 Q, `, A8 `8 D* Y' Y7 g dasm 输出档案名,地址,长度1 q( y+ h5 l; H+ n. v
输出程序的反汇编代码, [/ l3 y4 J1 F+ |
例子:
% g5 e& H. z1 H& Q0 x dasm 01.txt,0,100000% F$ U9 T' l, ^; Y
将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
- U( V, b5 {7 i- n6 \2 l, v8 }- w( u r% s4 n6 {
softreset8 r1 C, \: g. P3 f$ A7 b; o
游戏重启, 但不重新载入ROM
. D& u+ ~( }" ^1 P: k* s# ]; a" @, H2 m6 w2 j8 B' y
hardreset, d F4 f9 K& g8 T1 @; V+ \$ E
游戏重启, 且重新载入ROM/ V5 D; `. n9 G" i
: F- |6 y, {/ u* t8 Q' o
snap xxx.png, g" U) H* `. \2 Y% \2 V& U
截图为xxx.png% V' ^6 k) v6 K) h/ |
4 g8 w" {: C2 a! F- L! O
8 ?$ x3 q$ N8 ~; p+ |; x5 w
! I1 s% Y- K7 C$ a& w9 t3 d 3 l- M1 E0 c& \0 x* c3 s+ ~2 u# t
热键:
z6 \$ `" x+ H" `. E ~ 中断游戏$ O; `& }/ d2 k" V1 c
F5 运行游戏% w3 N, n) c v7 E' r, T
F12 运行游戏且隐藏调试窗口: N* A* @& m: g: P2 I% Z
F11 步入, 单步执行, 会进入子程序; g- M( t# v6 V9 e8 ]# I1 B) q9 Z
F10 步过, 单步执行, 不会进入子程序
3 i, q# M7 V, y# Z: W Shift+F11 执行到子程序返回
' p" J& h* y, ?: E' e! [ Ctrl+M 内存浏览窗口6 \6 Y% n9 O q7 x2 {
F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU) h- J* f6 o% v+ ~# e- |1 d, d
6 f7 O% X3 E$ Q. N{:4_94:} ( B+ ^( @/ ]7 T1 A
6 a- t! P g+ |2 X5 r7 _$ a |
评分
-
1
查看全部评分
-
|