EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
6 @$ K7 H# ~; y5 n
很快速的整理我自己常用的指令
, V: j1 P; h+ X% Z& |& y8 w( y3 f" v: R( b/ A  a) x; u, b
{:4_112:} # k5 ~$ y2 j  [' q8 l- H  t; z# o
  S) H9 W7 P! |
MAME DEBUG常用指令
& U# E; o# j! n) L# L, D3 r; _) U: V" E  G3 r" d, ^3 X
内存搜寻: ci, cn, cl4 `* P, r8 m: x, a0 p# W1 E
- e& o, U- Z' p+ M0 O3 f
    ci
+ n$ K$ ^* i3 q" O$ ~7 Z    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
. R$ i% v. K, z/ ^4 t, \
( }$ ~" o& A7 Z; o* I    cn$ I7 W: v* {( N/ I% `  z8 P; l$ T/ H
    搜寻指令
5 n9 w6 G' T5 x: [$ c    例子:
, K: l+ H/ j% y! Z- i4 l    cn eq,60
7 I4 t4 n8 d) s2 n: \( X- {    搜寻目标等于60 (十六进制)5 T7 j" j0 b3 E8 `
        
3 G; L4 L$ ~+ `/ C    cn eq,#96
# L0 j2 j3 J: \# `5 n, c    搜寻目标等于96 (十进制)
: b" [9 G& o2 A3 w9 I
% b7 \0 O/ z9 L# _    cn eq' K4 s+ Q, u7 q3 }: R
    搜寻目标的数值没有变化$ S1 r) V# e' B
( j$ K% c  u: H; M5 y" }* O
    cn ne
% {7 W4 [( f$ _* o0 Y1 {    搜寻目标的数值有变化, p5 R% j6 g7 U; F6 F
        # u' j6 w! Y  ~1 |  F
    cn +
' I! U' q# r' k0 ~2 \    搜寻目标的数值增加
8 n* I% ^0 H, c' C' k   
, |% P! V- [" ]3 K* W( h    cn -3 d8 Z  n. x! t$ b
    搜寻目标的数值减少
: Q, M  f2 L3 I4 z3 l. T        
, w0 s7 A5 X% N$ ^    cn +,3
2 M+ |/ D, c- `, c9 v' l5 g    搜寻目标的数值增加3 (十六进制)
' `" D9 H9 w# K" }7 S$ K1 ]$ r3 l; S4 ~0 u1 S/ ]
    cl
  S2 G9 ?9 t. f$ E3 ?; a    列出所有搜寻结果  ^+ [5 k# p% E" X# b" a

$ x3 B7 h; r1 t; a( d    cl xxx.txt4 {4 M  |7 d# |
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式9 [: Q& ]" e6 e4 Q  H, k
; c+ N2 w  a4 J' T+ o) D
    4 r& z7 g  `: B1 s/ v
内存监视点指令: wp, wplist, wpclear3 i/ P* \6 `0 H% h
    例子:
7 O5 c$ Y$ I& \5 p9 \    wp 1234,1,r
8 S8 @  L0 `1 S9 `      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1: o8 t8 R$ g# F# E2 ^$ U  J# n/ V" D: b
6 v+ I# y; z: L* [, Q
    wp 1234,2,w
# M5 Q6 }, N: t: q  u& R) m/ a' a" v      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2- y0 q: z3 p% p! }
     4 @* W6 [# I/ g; u1 }1 P
    wp 1234,6,rw; ?% |1 C8 K, x9 ~# _& l, g: b
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
0 a3 ?1 B4 g9 H9 C* o5 O
+ X; k- L9 C4 G) s    wp 23456,a,w,wpdata == 1: L' C: v' }* ]; ?8 H8 v
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1/ Q4 ?1 k, e9 [& G; d

( X8 [: E' {& H3 W    wplist
# @+ t( x/ H7 S! I$ w6 {9 \' |6 l      列出所有监视点
$ A) l, p& F% D& I& G. ~8 B2 l& L, U
    wpclear 3  M( O, L; ~. n: X- C" F
      删除编号3的监视点$ I5 I1 ^0 M4 ?5 Y' n0 ~7 s

/ _& y' f  P. I# [    wpclear
5 v  A1 ?1 S8 E: f: J4 X      删除所有监视点1 A4 Z8 f, l0 G) ~! T0 M  I) ~
  x! B) ^2 k* U5 V$ {" ]/ f
      
. X# M* x6 R  c  S" C: Q6 K8 U* P$ x4 [* Y8 e; S( K+ V3 J
程序断点指令: bp, bplist, bpclear
( U! u: u4 a- p4 W+ y    例子:0 v( d! d* N) t- {) \6 K  v
    bp 1234
4 d, `; L) F0 M  \      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断. L- z3 t. u6 H
! G) `6 w, m+ a
    bp 23456,a0 == 0 && a1 == 0
: p2 y, t$ B6 T1 F      在地址23456下断, 且中断条件为a0等于0以及a1等于0
( O$ x1 N. U9 h. z& \  P9 O
% e! F2 {9 o4 h% T0 k9 {6 p  L    bplist
' h' s/ r, N7 f! l+ z- B) P      列出所有断点
' |# C- c1 ?/ \( b6 q/ T, ~% n" S+ ?( b* d2 s9 n
    bpclear 3
3 h8 U( b1 \6 A+ b; E, w      删除编号3的断点0 _5 {7 Z0 m/ p. r3 k9 D
" i6 O# D* u0 l8 w+ u1 n' S
    bpclear
5 N( B6 u+ A$ e, i0 j2 S: L) h2 |7 p% Y9 }      删除所有断点/ y6 x1 |! A" i! y. G
$ F9 N" e: a/ u6 [4 j! a
      
  W* [0 O5 Y  n. o* X      % v, O3 ^) ~* q- P
跟蹤紀錄指令: trace
0 {$ p; J! W7 P+ q+ }2 B: P, s2 B    例子:
- u  ^0 q: J4 ^' Y    trace 01.txt3 X. L' m2 M' T3 y9 a* q5 N2 o$ x2 Z; d
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
1 j( w0 S) j4 G% k9 o1 c# V' H/ i
9 M+ C9 q! }  U$ @  `- m" x, w' V. v    trace off" ~+ M1 Q5 ^3 ?$ ^- P8 a7 L9 s
    停止跟踪, 并且关闭文件
1 k, V- i' P0 F# n& o* ^: H
; o3 R( R& |) z7 v" f1 W" [    trace 01.txt,0) ]  a5 n3 w' J9 f5 h" Z4 g, W# `
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
$ `) Y1 O; n4 g5 c% G" w) F; o
9 l9 M& }  i: |# i4 z" R7 k" h- m    trace off,0) O' x; {/ N0 R# v
    停止跟踪编号为0的CPU, 并且关闭文件! p/ |' {, E/ C3 A. Z

9 k4 |+ b1 m9 u    trace 01.txt,0,{tracelog "A=%02X ",a}/ S) z5 E- ^7 j3 w. M
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt # f( g, E3 f0 Y' f
    并且在每一行的前面, 写上"A=a "
) W0 M2 L1 ~, z$ P    "A=%02X ",a为一个C语言printf函数常用的输出格式
6 Q- G% ^$ l/ l5 ?    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入4 u0 n9 v/ j- {; \  w+ d$ z! x
    X表示为大写十六进制数
& p# `! r5 U4 v9 g5 ?' E2 v: R( r3 {/ j" {

4 Y# l5 ^% ^* H. S0 H) Z$ X5 F9 s8 Q1 B4 U  A
内存直接写入指令: maincpu
! j1 s* P, r/ l1 h    格式为 maincpu.[][]@地址=数据5 Z3 _9 b6 w: ~1 s
    第一个[]:
$ Z3 O: h' s2 j; h& k    o 表示ROM地址
/ D. \" G1 _# \, y. m6 J0 L" Z    p 表示RAM地址
! k, }: w% Q  Q. ~8 D& s7 x7 Q! v7 [1 f
    第二个[]:
( P" \  R% w" v2 A/ w! j* U* N    d 表示4字节2 h$ r7 L8 C  ^8 q; N
    w 表示2字节4 U' V/ {' s4 d- }- y, V
    b 表示1字节
- K! ^; H% Q* Q2 R5 G" l, E) Q3 n, r
    例子:
* ?/ ]* O) Z- X( |  F3 D    maincpu.ob@1234=FF
9 ]9 H3 s9 f1 l    在ROM地址1234处, 写入FF一个字节
% o, h! y, H8 w4 @/ j* r5 H- ?) u+ R: P
    maincpu.ow@1234=4E711 e6 h( @& e; C; z1 t) a9 d; C, M) s
    在ROM地址1234处, 写入4E 71两个字节1 {6 `& L2 U4 H3 N7 h
# S( [5 z7 \5 m: l* K5 M5 ^: ~9 I6 P
    maincpu.od@1234=600A4E712 ]9 [2 n- [2 e1 r; @( }8 ^4 b
    在ROM地址1234处, 写入60 0A 4E 71四个字节+ g' e. Y- d5 F

2 q+ a9 ?1 l5 ]8 K. r' s6 W    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写) y3 ?/ |8 i6 o9 d
    2 q  X( Q) w  c# t3 _9 w" z

" e% [; Q2 w+ L) o8 `7 g% n7 M其他:8 y1 z0 [+ {* ^+ D7 a. C5 K
    dasm 输出档案名,地址,长度
4 p8 ^0 b6 N0 B# q8 o    输出程序的反汇编代码% ^+ {: s9 W. }- b2 v
    例子:
1 T$ f* s' w/ B3 U( G& N: l! O    dasm 01.txt,0,1000006 h/ T7 V: E" L  Y$ l7 X
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
) M& i% y  H: V. k
( {6 \  q* M5 o# T& s, A. Z5 @# _    softreset3 t: K9 o+ p8 A, s
    游戏重启, 但不重新载入ROM
1 F  T; f4 c$ j# V1 b) K' ~% i: `$ m8 p! q
    hardreset$ Y6 p/ v' ]' P! H# U" D. B
    游戏重启, 且重新载入ROM
2 x9 i% U# V3 n1 `3 `
) O( O1 J% |1 b7 v, e* Y9 I: R; x2 r    snap xxx.png
4 ~% H' o6 f4 k    截图为xxx.png  P+ D) t9 e0 N, @# N7 i; o
! a7 K& F3 k) h3 w1 l- A: J- e7 P
  . i2 l# {8 {' X
  
( r% c5 a3 x! N6 u5 L+ h3 [  
! D, [( N& s3 w  Y' O热键:& }" l& u! s0 M
    ~ 中断游戏. S) J) _8 Z, i6 I' c
    F5 运行游戏7 k& k. f& h7 \% H# I: v6 F
    F12 运行游戏且隐藏调试窗口
" A/ S; e. _0 U, p* m+ p    F11 步入, 单步执行, 会进入子程序, P4 L2 M; }/ B+ D* W
    F10 步过, 单步执行, 不会进入子程序
  K. J3 @5 p1 l) v5 }    Shift+F11 执行到子程序返回" U7 _# R1 ]; R0 y' f" E# m- J
    Ctrl+M 内存浏览窗口
( O- Q4 E& J- D# B$ V1 Z    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
  [: F5 h( H; V1 |+ N
$ i. m7 E: J/ J! B) V! R{:4_94:}
) S0 R, \$ N6 u5 j4 s5 R) f
! o6 k+ t0 [* _; |

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2572 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。7 g3 q. b% Q& Q

1 w! J% C( Z) o5 \PS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东' u/ R2 r/ ^  P( Z3 g/ e
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-9-16 23:33 , Processed in 1.077148 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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