设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
. c2 c) B0 L  t1 {/ ^7 e) `
很快速的整理我自己常用的指令9 `& T% D) d3 F7 K! P. r

* @5 m6 t! h8 ?! z# ~7 @( E{:4_112:} 7 l8 L9 p7 g" \7 t/ ?
  L9 Y' [0 M3 ?
MAME DEBUG常用指令
  [" h  ]! j3 [* `2 `& ?1 J& ?
: o  _# q! U2 a% W5 M内存搜寻: ci, cn, cl; j$ i$ p! j( t- p+ L& _

( A% @' }4 f, A) U3 g    ci& Y4 d. w  {+ A
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
# @* d9 a' t8 w1 c* c6 m
# n; i4 M6 `: s* b  x% O6 B    cn1 A" |2 t$ y' p# O" i  B5 q
    搜寻指令$ `4 u6 h' {' G2 f6 a/ \3 A+ m/ @
    例子:! M3 s2 I* q( d- N3 {3 t
    cn eq,60
& @" I  c+ c. |( N    搜寻目标等于60 (十六进制)
5 P% u  O9 \; P        1 W9 f& u& X* z/ J, l
    cn eq,#96
2 K7 Z% }  u- R    搜寻目标等于96 (十进制)
: f- v- ~6 b) L% f( a4 U5 Q. M3 @8 g2 @6 h3 D. D) `
    cn eq
( Y. ^) a$ J& [& r' s& s    搜寻目标的数值没有变化
- z: Q9 y7 K% V! J! z
+ V3 S6 g3 C( }3 h    cn ne
' i& ?* Y, o; ]/ I, l: L    搜寻目标的数值有变化5 a. U; ~7 w! `8 G" I. w3 X- \; A! |
        
' V0 G( H6 q  e    cn +
  u; p! M7 m( Z  g    搜寻目标的数值增加
' s; b0 Z  f# h2 @4 _! h; T    - B& o( K" X. p
    cn -* E- f7 A# N( x* w; D
    搜寻目标的数值减少4 P" c  G: |8 @6 s$ _
        : l: e* z! I" f/ C
    cn +,35 S4 i9 p: l: X+ G$ @7 x
    搜寻目标的数值增加3 (十六进制)
! Q- _9 a, G; O% Y1 o0 i. d' P3 {+ k2 l/ A7 w: r9 T2 }6 J
    cl
3 ]" i' M. V1 _% y    列出所有搜寻结果
! g' q6 x3 x' \9 w! E1 d* ^+ L, L5 r) {+ k
    cl xxx.txt
" l- M* {, m( V. j- T' A    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
+ ]' g8 F2 h2 U; g- Q4 Y7 K8 H6 }9 w
    ( e. L" ^$ R- ?1 u
内存监视点指令: wp, wplist, wpclear
- q0 H# t6 V5 H- l8 |' A    例子:
3 x% U0 B7 w- f) k, K: @    wp 1234,1,r( `- r( h- @% E! w+ ?9 V, |
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
: d( T; q, b, w9 }* A% i1 G
# T4 x! V" m7 D6 b( o- A8 U' {    wp 1234,2,w
: G' _, j6 r2 _! V. ?      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2" _6 L0 @( X# p+ G* t
     
2 I! x7 T  s( U& t. g, i3 G8 h    wp 1234,6,rw
& X. h2 {7 Z/ k& U      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
, y7 r; q# w7 g4 k0 g+ o
/ v+ M. I) v8 q    wp 23456,a,w,wpdata == 1. m6 D& V, k# t0 |3 q. U) m
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
% H5 ]0 G4 }% ]
4 j+ w8 l+ {  O, M) S  r    wplist
4 g2 p/ L$ j$ F4 H: g& l7 ]      列出所有监视点% h' A4 c8 L% z- c" E- H
2 Q8 P$ ~) [+ G5 Y
    wpclear 3/ K( T! G6 G: t
      删除编号3的监视点! s) P) M" H$ f# b/ `+ ]. b) s
, h$ R% ~$ E' l( h! c
    wpclear
- s# J! ]/ W! c7 I: g* x. R4 h      删除所有监视点; H/ A2 E4 T# p+ ^% B# E3 q

+ _% _4 g' h* l$ s      
3 i  ~1 U+ b2 w( [3 b$ r; g- ~
" w! t( Z, X4 z9 ~# A' |) ?程序断点指令: bp, bplist, bpclear
* X. F! _2 v. U1 p" j2 n) [+ L- h    例子:
' N& B+ x3 n0 {- C4 \! z5 b0 I    bp 1234& c1 ~+ p* q+ m% n, w
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
4 [5 s- V" N" a8 v0 H. E& X# s2 X
    bp 23456,a0 == 0 && a1 == 0  c  I& y! c' `
      在地址23456下断, 且中断条件为a0等于0以及a1等于04 P( Y/ }0 `" X3 W, r* h
; @* L  z, ]/ _% ~- z. d
    bplist9 x* k/ B$ v' u2 |' M
      列出所有断点
  z6 }4 H" U* P$ [9 f
' M8 u# S/ c1 q- X    bpclear 38 L1 n, S! f! [$ y2 }
      删除编号3的断点
) I' N4 K1 i# |$ }" b  a
4 k: k+ M, w! L    bpclear
! V& E8 J) L( D% r      删除所有断点
/ l# e" z  e" M
5 N3 t9 J( k2 l$ R5 b8 f      ! l8 N8 ]" P% I3 v7 [
      . q; _+ G3 S$ L  z+ W( Y' Y7 ?( T
跟蹤紀錄指令: trace3 P0 H. j# D3 k# N; @6 G# Y: _
    例子:: V1 W+ K1 a/ X. ~2 O# o
    trace 01.txt
- q- u( M9 W! g8 H1 D: y0 K2 ^) T    跟踪当前CPU运行的所有代码, 输出至文件01.txt
3 Q$ z7 d3 b! G% N: g6 b: j) L% I
    trace off$ M$ i) _+ E3 R, k7 z: j* R; e
    停止跟踪, 并且关闭文件) z4 {0 L( f5 i- \
) e1 c( U" V6 F0 Q
    trace 01.txt,0& |) J8 s( L& P/ O+ I8 n
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt. ~4 M1 v, G. {; k9 Q! [9 f9 p) K

7 ^6 Z5 L0 |) r* Y    trace off,0
5 \: v# u: P4 [& Z    停止跟踪编号为0的CPU, 并且关闭文件
% K) h# s) {" {% ~0 |4 y( B+ P. I* U+ m; R
    trace 01.txt,0,{tracelog "A=%02X ",a}
* @& F7 }, P$ N3 L) Z    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt & C" W; H% t* {% \( T9 _
    并且在每一行的前面, 写上"A=a "/ t- U/ {4 z7 K( ?4 R8 k3 M" o
    "A=%02X ",a为一个C语言printf函数常用的输出格式
) s1 @6 _/ z3 t8 c2 ~    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
/ f' q4 R% }# V) e- ?7 {* _    X表示为大写十六进制数9 v7 D0 A" N. i6 ~
# m: m8 X( I8 W, Q/ d7 p

: P2 w/ S5 ]3 l2 C9 `; D# l- i2 h# F( F* A
内存直接写入指令: maincpu7 J! A9 q9 X6 F$ u0 E1 C1 R1 o
    格式为 maincpu.[][]@地址=数据
2 s; a9 Y( Z# q3 T+ |    第一个[]:
( Q0 ]5 [; G0 q    o 表示ROM地址
5 @, Y- q  V$ ]' A3 {" F    p 表示RAM地址0 m- t# j% V# v: U/ J2 S9 t
$ l# R- y3 `0 a) o% H' t" ^* D
    第二个[]:2 Y2 B) B1 {* G+ u. D" ~8 Q9 D
    d 表示4字节
$ H& O( p6 D5 C9 y  z; \    w 表示2字节6 V9 T6 q+ d) Q5 h8 B1 ]6 n
    b 表示1字节3 K0 [: G' R) D1 Y: _

5 P( h* J3 t% s+ D# F    例子:# S9 n3 x6 {. X+ T, Y, g* G6 g
    maincpu.ob@1234=FF
. g) B* K3 `4 x  P3 i" E6 l  n    在ROM地址1234处, 写入FF一个字节' p5 N  [; Z5 y3 E2 O

" {  @1 U, c- T3 f9 ]0 v1 `! e    maincpu.ow@1234=4E71
1 ]6 b6 o, ]# O' V. o    在ROM地址1234处, 写入4E 71两个字节  m; \4 s( M. m2 O5 m1 n
' B4 O9 o% }& }0 H0 o0 B2 g) F
    maincpu.od@1234=600A4E71
) ]: v/ `3 D) Y" Q  C    在ROM地址1234处, 写入60 0A 4E 71四个字节! A" G% q1 F  p4 P9 \6 y* Y3 e
7 B; {( _7 y2 f9 n9 {$ O
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写( c/ ?. b3 y, U% P1 C# _7 W
   
$ E' @) D' H8 f9 Y( q9 \
; l6 s7 S% \" o" P" Z2 U3 M0 [) {# N其他:0 D: T+ |+ E! @8 t* e9 w/ S2 L) C
    dasm 输出档案名,地址,长度
  L. B' A4 g- D% t$ F# q1 p; Z    输出程序的反汇编代码, c: t2 [8 r% S% k% d
    例子:
% a9 P9 |  @- e. ?! }; W' Q  m    dasm 01.txt,0,100000( d8 k0 T, s. ?, I
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
! b# _; w& w6 w% Q5 j, L7 k+ _* h# j; C& p# {2 a
    softreset* a& T+ N, @* ]8 Z* S, R
    游戏重启, 但不重新载入ROM
8 D5 C0 m% ^0 x! v+ w8 k2 T3 V
, m, a$ m7 F$ c3 c% ]" d7 n# c# r    hardreset3 }% a! r* Y, ?6 Z0 F
    游戏重启, 且重新载入ROM; w; A( w  S& B
0 U) a! E" s8 K8 y! @
    snap xxx.png2 z" C: c$ r3 V7 F3 U
    截图为xxx.png# J6 z, |1 O. ]# c$ _
0 b3 U; c* p% p! N* ^4 T% I
  
/ x4 c4 R% }2 T( b5 n  
2 |  J6 V4 c) o8 m- F7 b9 N  
; B; x! C* T) C  v1 t) ]/ }热键:
0 {; Z# ^" g# ]6 U4 q0 s    ~ 中断游戏' f4 l6 \* z2 A# P
    F5 运行游戏
- s+ z- F1 I4 w$ x$ M. z    F12 运行游戏且隐藏调试窗口3 r, Q4 E# Y. R$ U# s
    F11 步入, 单步执行, 会进入子程序
6 e+ ]: E- p( `$ w" K- n$ s6 q3 t    F10 步过, 单步执行, 不会进入子程序
8 _7 `( ^$ E# Y- }: ~6 R    Shift+F11 执行到子程序返回
% D' [% r( c5 C4 h% X    Ctrl+M 内存浏览窗口; R& r4 d2 x6 {) V1 t6 p6 z
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU- ~# T$ l2 m9 K4 g. M. r

* p- n6 `" f$ R{:4_94:} ' V+ e* m2 t3 ^& D0 X
* P3 ]0 I1 P: d! w

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2556 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。( r" f, i: u; ?; t$ y6 H4 h

" Q) N+ J2 Y( }4 d) }6 f# hPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。
回复

使用道具 举报

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东: z5 ]. B: V# r& P7 l. Z7 ~' q8 e
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

发表于 2013-6-19 19:43:21 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-5-14 17:55

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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