EMU618社区

 找回密码
 立即注册
搜索
查看: 1358|回复: 7

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式

- R/ ~5 Q& d% z. A; h; X; j很快速的整理我自己常用的指令
1 @3 L9 c6 |( X! H! @9 d
2 }7 {/ G' N" v9 U+ P7 B8 X2 ?{:4_112:} % _- d7 Y$ t7 {( Y% Y7 ~

1 L* ~& Z7 Z9 Q4 N  ?% HMAME DEBUG常用指令
9 W# }) R0 _$ A5 i' l% I6 @- |- r6 D8 N2 n8 G2 F4 q9 Q" ?
内存搜寻: ci, cn, cl7 ~9 ^" h2 h" G$ x4 [; z& [2 G

8 C  h% ^, G( v: {% j: |' b    ci4 i8 a* U3 t  W& `: \
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令' K6 ~3 `1 L( f9 R! f
$ V5 r0 H! ~" H2 i0 H& x2 W
    cn
# r6 s+ i, r; ^/ q( E    搜寻指令# d7 `, U3 q1 a( ]: ?' h, L9 Z1 e
    例子:
7 n0 j7 d: z$ x$ T* y    cn eq,60" s: Z6 W; O2 Y( l+ s6 [& i
    搜寻目标等于60 (十六进制)( a4 [: `- O! ?2 b- E; Z
        
! v+ G" S" j& _" Y! R- U8 B    cn eq,#96! e7 ~" l) {. q  h# I
    搜寻目标等于96 (十进制)
3 A7 @/ ^2 W9 g' s* M
2 [0 J# ~/ J! f, P: K% s+ [  W    cn eq
2 o* U  [$ a- W! t    搜寻目标的数值没有变化
( \* ~' a5 {/ k/ b+ I8 w/ m' U; }3 \
    cn ne1 E1 ~: `+ X+ u3 ^2 ~4 x- x
    搜寻目标的数值有变化
6 x* c! J1 j0 A- y" D& J& U        
" {, ^, C1 D, V2 a6 B9 R* u3 g, w    cn +" a1 {+ S3 t0 r" R4 j, N
    搜寻目标的数值增加
- V6 o: R5 ^; \2 i% F3 I3 [    $ p$ @- `6 U: b9 S
    cn -) c" r8 v/ j; }! W* a* ]
    搜寻目标的数值减少. W+ y& k3 S/ a6 e
        
- m+ x; F8 @% a% P    cn +,3# h( o; K$ a3 \5 I" m: ^' e
    搜寻目标的数值增加3 (十六进制)
( ~: b4 I' q8 }  s. [8 y  O
2 U0 j1 V* C0 @( y' f    cl. `6 m: u( w, L1 M2 s4 E& f
    列出所有搜寻结果1 N: V8 x, v+ q+ }, w, x9 G
6 u" B- d9 _6 h5 N# G
    cl xxx.txt
6 M- T+ P5 L% X* h, y    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
) \" V- h% g; P
& F; V$ z$ B% y4 u9 _" Y0 n    . ~/ S7 U$ y; D
内存监视点指令: wp, wplist, wpclear. q/ H; ]: N0 z+ b- H
    例子:: u4 K  n7 U, E  h" X- R3 `
    wp 1234,1,r
  }3 V; `3 u% f4 G1 S! P; I      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1* b# {: t( Z7 b  B# b: ^4 j# M- [! T
5 n; o: o& p5 W4 o+ R# _! }9 _
    wp 1234,2,w# x$ {9 W/ ~& @0 @6 X0 h, C
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2! w! ?2 j  b# n9 }2 X5 d% z3 {, X
     " t( o6 R9 L, `& M
    wp 1234,6,rw
0 m* _( M5 W& I# }# f( j$ A/ i      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度60 y" l4 g- U% S8 V

, a, X, o& K8 Q    wp 23456,a,w,wpdata == 16 [7 y. y$ B+ A9 D4 X9 H# E( \
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1& A  Q* n* y" [- }& U8 `1 k

1 [# T& }& \* G6 ~2 u    wplist
% Y3 o+ K9 T0 {* }4 Z& ?( g      列出所有监视点
$ J1 A+ M+ [; v' x$ N; u5 M3 [
5 h* Z( j/ X4 E8 ~0 A    wpclear 3
* Z& B! Q; s( _: q4 s" _      删除编号3的监视点7 Z5 a( l& M: d% p1 ], T7 [

2 V; N( h) m# a. k& i    wpclear
! W, S; z) q1 |) _      删除所有监视点
, [' H: h' J: @; }4 J) p' e; x: r; b$ S, a% Y- r7 x
      5 w. j0 E- |! R6 \% t

9 G: Y# u) J1 A3 \$ m* i程序断点指令: bp, bplist, bpclear
7 r& j8 q% D: B. H; [) Y    例子:4 [1 g* j# q/ ]1 B
    bp 12348 |7 M$ r+ E: n  P/ L
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
+ e* q; i. v6 ~" m/ A2 S; f" u% M8 G- F7 `
    bp 23456,a0 == 0 && a1 == 0
1 P1 W8 ~4 d* y' M7 l! ~      在地址23456下断, 且中断条件为a0等于0以及a1等于0
1 C3 ~+ s/ n- A# o
" ?3 @, `" a6 ~( M+ O# w) s( a    bplist  [8 l' u- O) ?4 T6 _4 Y
      列出所有断点
* E" V: Q& @0 @  m9 x5 W" _8 {8 K& X9 H7 U/ Q! D- C& L
    bpclear 3
  [4 H" f: |% Q* }  N& B. p$ k  K      删除编号3的断点! \. D1 K1 }, h) [1 o8 M; \+ c
# D# B" d: s) f& Q) y' K3 J7 b
    bpclear
3 C- ^/ r. i- b; J  B0 Q      删除所有断点
% t, p& C* u& z5 K
/ P) o1 a, T% \& s, a* F: J- k) i! _      
7 r! g: f9 d  I& l      - }" U3 K4 C" X% x4 L7 N2 A& h
跟蹤紀錄指令: trace
) \7 B, D7 ~6 g" A0 [    例子:
% m$ P, ^; E3 w7 T8 I7 q0 ?    trace 01.txt0 F, [- ^: ^! S6 E( W* L1 w; r
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
/ H$ w: ~9 M. t& T" U) X
: D4 v. S6 M/ i# F2 D+ F" I( Q    trace off' w2 q" F/ C5 ^' j
    停止跟踪, 并且关闭文件/ Y! {: D; H. N! k) J

  s0 s: F' Z$ r' G    trace 01.txt,0
! }0 l7 F, \  O4 r* M! H    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
) E$ L8 T% s) |& l  M7 J# S4 k5 r3 D6 F
    trace off,07 l- `' H0 l1 {' K
    停止跟踪编号为0的CPU, 并且关闭文件9 v+ K- @, H! Q* @0 E0 p/ z

/ v9 Y; ]0 S; ?* o    trace 01.txt,0,{tracelog "A=%02X ",a}
# R+ h9 R( I! a/ l: k! `3 U1 L2 ^    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
% }, m8 s' j2 f    并且在每一行的前面, 写上"A=a "
7 v$ o; I0 i: c  a1 S! a    "A=%02X ",a为一个C语言printf函数常用的输出格式; P; u4 V3 g* W( Z6 w" N( q
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入6 @6 r5 Q: A; \! d5 C8 y
    X表示为大写十六进制数8 Z% m' b1 a% Z" O! `

5 ^" y- ]. S9 H3 S1 w7 W$ n" i0 H0 r$ q' m% E- R% p
% v+ ~" {9 t- Z8 n2 W% w4 ~: x
内存直接写入指令: maincpu
* M3 d! x1 ]' C  J% Z' p    格式为 maincpu.[][]@地址=数据
" f% \( X+ s' [* b) q4 i    第一个[]:- _! g4 ?# P: u7 x
    o 表示ROM地址
: V- f6 c) B0 @6 W9 v    p 表示RAM地址$ F4 L7 J: M' V6 j" o3 m
5 q& l$ i( ]" |8 G4 g$ k
    第二个[]:5 G2 X! G* r* y9 t
    d 表示4字节% R. S# y& s- G
    w 表示2字节' }4 \! o3 E2 @
    b 表示1字节
* b2 M; x. b2 Q, E' `- a6 E9 j6 _# g$ X
    例子:  H# [9 v6 v* z2 u2 M  v" m5 n. {
    maincpu.ob@1234=FF' p, q, r7 K4 Q! F4 y
    在ROM地址1234处, 写入FF一个字节
% I: P7 T( }# B3 D, k0 c* B! o) C8 N
    maincpu.ow@1234=4E71
5 W+ ?; K/ z( N/ w! `! @$ t2 m    在ROM地址1234处, 写入4E 71两个字节0 A; ]: F' H0 l) C- r4 H6 b
$ H) T; |3 a- C% r1 T, i7 \0 H
    maincpu.od@1234=600A4E71
/ q! e9 o$ w' F' C    在ROM地址1234处, 写入60 0A 4E 71四个字节, \- }1 B) }# \1 _; X! I
3 h8 @! D& j/ A3 H5 Y3 E) Z7 j
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
$ B- d- V/ m0 T1 w" X0 t3 s; @" D$ p    , ^+ K- g) `- S& U- [
9 B( m7 j: N, q: r
其他:. \' M5 G# w2 D' a: f% U7 ]( ]
    dasm 输出档案名,地址,长度
% @7 V4 O8 L3 T* E2 J) h+ W    输出程序的反汇编代码
8 m0 |4 T, \0 f7 W' A5 O- C$ [) U: ?    例子:4 z3 [& k, A& r4 Y( d
    dasm 01.txt,0,100000
6 _6 B& y+ r% Z( @, k2 `+ _& T    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt/ t6 D* Q) {* z, V- [/ e

: s% x& D0 I' V$ `6 ?* h    softreset; P3 T0 X5 R. Y' e8 t% m+ f
    游戏重启, 但不重新载入ROM
, j1 k: \! S" p) {4 L% ^
! w0 |& Q6 m/ q( ?4 M; D) ^    hardreset
/ t' _- T0 t3 H    游戏重启, 且重新载入ROM
' d- x& e. T1 I' }% m  b2 X8 Z6 ]0 g$ i& y. u( w
    snap xxx.png
5 L! T7 N# v6 I- Z    截图为xxx.png3 t" {2 m* A4 G
# c0 j& V3 n0 O' }9 t6 I* x% w0 R
  . f! U) X+ a3 W
  : f$ u5 `7 w9 ]' G
  # {' D! b8 r6 @' o0 [! T/ w6 x
热键:$ D% @+ ~: l4 A! B' T/ l. V5 |! g
    ~ 中断游戏
4 \) C, e! K0 z6 y4 E1 e3 L    F5 运行游戏$ x2 G* ]5 w% W" u
    F12 运行游戏且隐藏调试窗口' X6 P5 i- P7 ?/ G5 ?
    F11 步入, 单步执行, 会进入子程序
/ g$ j2 q: D7 N  U7 e8 G    F10 步过, 单步执行, 不会进入子程序4 b4 T! d& F! @% K, [* p" m! j! d
    Shift+F11 执行到子程序返回
: y# N0 w  t; P* |+ J    Ctrl+M 内存浏览窗口
! Y0 F9 m# d; P& \    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU$ {. w( X: L  o* A# B9 D3 r8 B0 \" J! l
0 j1 o+ M: z! j! l& Q
{:4_94:}
0 |- A2 b+ j7 F# h( x; C$ z+ B) x+ I& N& f& |" u' c( ]8 i2 n

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-3-20 10:14:03 | 显示全部楼层
我又来顶帖子了
[发帖际遇]: 银河漫步踩坏了花花草草,被罚款15 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2590 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。, V( j8 y- {2 v- Q$ y

% j, @3 H; m0 Y# S7 l" M/ s1 kPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 2013-3-20 16:27:53 | 显示全部楼层
看到二楼就忍不住顶顶

签到天数: 31 天

[LV.5]常住居民I

发表于 2013-3-21 09:48:53 | 显示全部楼层
先顶一下!有时候研究一下
[发帖际遇]: sdiencelee 在论坛发帖时没有注意,被小偷偷去了 1 个 柠檬. 幸运榜 / 衰神榜

签到天数: 149 天

[LV.7]常住居民III

发表于 2013-3-22 23:02:26 | 显示全部楼层
要详细些的东东1 |0 L; s3 i! z/ C# d. d. W/ b
11111111111111

该用户从未签到

发表于 2013-6-14 19:10:18 | 显示全部楼层
感谢分享,谢谢。{:4_118:}

该用户从未签到

发表于 2013-6-19 19:43:21 | 显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|国治模拟精品屋 ( 沪ICP备15012945号-1 )

GMT+8, 2026-1-26 13:39 , Processed in 1.187500 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表