设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
5 r# T# e. y" k. Y
很快速的整理我自己常用的指令- q+ z. t4 [, K. H, g

8 D! f9 z! s4 q- F$ v& o7 P{:4_112:} . k: x8 b+ F* Y# h6 W6 I% |9 x- V

* ?- i/ z6 ~4 i" \# o4 XMAME DEBUG常用指令" h/ \  s& n9 Q7 y- p- p: r

& G3 A9 }& |8 x5 C( T4 q* {0 E内存搜寻: ci, cn, cl
- E: w& W9 |  Y9 M) V# S
3 J2 R/ x7 n. L& V- v4 {- t    ci
* N% Q$ s/ a$ K, t) N: p  a    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
, S4 F" N* o" k( E. e3 O5 G# M  P" i$ X7 O) w
    cn
" m/ r& B5 I+ c  K: M, m    搜寻指令
/ J, t, T1 [* r& R    例子:
6 ?/ k# i7 w7 O7 k5 l    cn eq,60' Q' \6 E1 d1 B  q5 _1 L5 P% x
    搜寻目标等于60 (十六进制)
  m! W( h# I9 Z$ x$ ?. l8 j2 q        
9 G; Y6 R  _( F: J# Z1 C    cn eq,#96, ^) ^8 j5 C9 ?' B6 i
    搜寻目标等于96 (十进制)
4 H$ T+ L9 m* B5 f+ d! ^& x1 I/ `: k5 G+ j/ W5 a& _7 N
    cn eq- y$ c- b' R1 X' W$ d# r7 l
    搜寻目标的数值没有变化
9 L9 E* f5 k- c0 k( z9 W5 D* A, U, |
    cn ne
+ a+ F1 k  l5 ^3 Y1 _    搜寻目标的数值有变化- m7 b( M) h( f6 ?
        
3 r* `; N; M6 i/ K: c+ k    cn +
; @. w. r+ [8 c1 z) {2 [4 i    搜寻目标的数值增加
3 K: s# m$ ]! `! I, r) }9 e8 m: Q    ! q, D, n$ @: O2 {" ]" w
    cn -
" m1 O& U7 ^$ `; {1 Y    搜寻目标的数值减少1 Z( `% t- ^  `
        , c+ S. U1 q5 r& C% o+ f
    cn +,3
4 E# F7 `. Z2 A: f7 X) y8 I6 b# v5 m$ Q    搜寻目标的数值增加3 (十六进制); i& F  ?5 k6 k* s1 T# `

+ [6 _8 _* c& `8 Y8 f4 e    cl
0 T" A7 Q$ U# ~% F# Z    列出所有搜寻结果
  N: N5 N/ c" [: B( S  h3 ~0 _. f: E, w$ ]
    cl xxx.txt
3 d1 ^3 g+ l2 C    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式* p6 {4 e7 ]8 a1 d/ T2 [7 l) H9 D6 Y

! ^4 F& H' G% h5 T$ K   
0 F' \) |* k$ i& a! G* w+ z! F8 O内存监视点指令: wp, wplist, wpclear
$ U) \- |3 d; U3 L2 a) v    例子:( _) K/ u7 k$ w
    wp 1234,1,r; j$ @# u8 I! ~, h7 v
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1# q5 X% q3 _, |9 j

$ j6 L5 W! U) k5 a' n% o3 e3 r    wp 1234,2,w
$ [) g8 G& b* W      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
5 _& g& \% g. j4 h2 i     9 I2 F" I6 R  V; i0 |
    wp 1234,6,rw
" m2 G7 e) P: _4 ^      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
7 z7 @! r0 o5 c1 Q; P- L7 I) a% f% b9 U  {2 M: t
    wp 23456,a,w,wpdata == 12 B0 W# H; O0 \) E0 F
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
; i+ E& Z$ |  v! c  v! v$ S* s* @3 c
    wplist0 B  E1 b+ p/ Y: R
      列出所有监视点
; ]! G9 V7 I5 h7 B4 t9 ~9 e/ @2 a, R; r, ~/ w& y1 O, {$ K  S
    wpclear 3
, S' r: }  j  z, i* O* H% f      删除编号3的监视点0 L* m& S* J/ k
/ W3 ~# T' U" ?- W
    wpclear
' D; P$ F! ?: k7 O      删除所有监视点% I! n" G" e' P3 e) |* ]
4 ~7 v" G( ?1 H, z3 I
      
: j9 ]# W# }1 Z* |
* T" v" F* r2 U4 ~程序断点指令: bp, bplist, bpclear
/ ^3 k; J% `# Y( j( n    例子:
, z. b, o* T9 T% V$ B8 g3 @" c    bp 12349 v. {4 V: Q" [) x% O( L
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
. Y5 p( ^/ u3 I. `5 {/ k( v4 E: J# c) _' }6 D" J
    bp 23456,a0 == 0 && a1 == 0
+ P* o2 |1 x& Q- d      在地址23456下断, 且中断条件为a0等于0以及a1等于0
/ {/ d, b& J: R
. C8 j0 d0 P5 r+ f3 S    bplist
" W6 o# ]: ^4 N* o; T/ N      列出所有断点! e2 a% C: K8 E4 [
# @6 |  F9 U) M, @' F7 w( v6 [
    bpclear 32 k3 K8 g, g$ ]1 W7 ~
      删除编号3的断点& }4 o2 b: G2 I  u
" j4 l2 D3 X6 `0 x1 x
    bpclear7 x+ S  s! W& ?1 r  T
      删除所有断点1 g/ J) X+ F3 K+ [# F

8 i+ Z4 o* y: a/ V4 o$ F      
+ L/ _. v! s+ S& M/ M: M      
7 a+ `; d5 t4 |9 E; U) J" `9 N跟蹤紀錄指令: trace' r* J; I7 B0 L- c$ E3 _
    例子:
2 ]! F) W; z5 K' P    trace 01.txt0 N& J* N0 w; m& q
    跟踪当前CPU运行的所有代码, 输出至文件01.txt7 B0 i3 b7 A- B6 T  S: c
  L- ]8 R* Z. D( A7 T8 R
    trace off
7 z, g* I" ^" |* t0 l. k  N( G    停止跟踪, 并且关闭文件# I0 ], M1 j: |) U" u' R8 l/ a  I

' A; b! X, \- C$ u' i    trace 01.txt,0; [& k, l6 `- p0 a
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
- T+ S+ J# y) ~0 [6 E! L* n$ J2 Q$ `- X! J/ b, W6 ?4 u, ^8 F0 n2 [" O
    trace off,0% A0 [, f4 I& F* |
    停止跟踪编号为0的CPU, 并且关闭文件
8 l, M, `* N( `
( _# Z( A# `# W, h4 Z    trace 01.txt,0,{tracelog "A=%02X ",a}
% s' D2 u4 a1 p    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
9 z3 y5 d% Q3 v    并且在每一行的前面, 写上"A=a "
/ B3 |5 A$ U" x- D; B$ g    "A=%02X ",a为一个C语言printf函数常用的输出格式7 E+ m( h$ ^( K9 K+ P& S
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入3 z" B/ S8 y1 o! |6 b
    X表示为大写十六进制数, e/ Z$ |; ^$ @/ \1 R1 E
& q: m# H: m# ]. ~! g# j) q
: X' l6 v% {, u% O# V

3 A) ~( |# O' Q内存直接写入指令: maincpu2 z7 A; ^& `% B% G$ |7 B2 [5 i  t- Z
    格式为 maincpu.[][]@地址=数据
% Q5 a) Y7 z5 x+ i) H    第一个[]:
3 z3 b. @* Z( R& G; e& k    o 表示ROM地址3 u" h( p# i0 k/ N# ~# X
    p 表示RAM地址
# e4 c0 N; ^9 ]7 _3 `: B* [! Y! R; V  }1 V
    第二个[]:
: E6 a) T7 {+ `/ ^6 {9 a    d 表示4字节
+ q/ Y/ _6 I; N8 r' _0 ^  C) X    w 表示2字节
- ?# f4 |6 q6 X' ?9 r, Q" O    b 表示1字节& \. e7 }0 P' @0 R& k' o' G" \9 G2 z
6 C: {! q( w5 o' M, Q5 r7 m
    例子:
; K8 Q1 R, M& N" @; E    maincpu.ob@1234=FF; ?5 q3 y( I6 A. l7 G6 R
    在ROM地址1234处, 写入FF一个字节
# [! x5 p4 R& `: U2 C# \! a! N% b6 L. I9 v) n" f
    maincpu.ow@1234=4E71
" `0 m2 t6 T+ H0 H    在ROM地址1234处, 写入4E 71两个字节( v+ w6 D5 Y3 H3 U# X
4 b5 i% r' ^, p: g
    maincpu.od@1234=600A4E71- O  Q& ?' r& }* v% |
    在ROM地址1234处, 写入60 0A 4E 71四个字节" _* z  U. n. ]6 H# _

6 L! Q  h. g1 q  l* [    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写' ?) |% G1 L4 F; u
   
! m: D* O0 z1 d: h$ F5 E& m. b0 B# _; k) U6 k; |' ^; `$ V' R1 Z
其他:8 O3 g/ o8 _; f2 f3 |+ q7 [, y
    dasm 输出档案名,地址,长度% v- w7 k  y9 J" N# G" D8 d5 x0 L9 s
    输出程序的反汇编代码
/ P, c: _; x. [! i2 O    例子:
; l6 v& Y6 D* N8 R* F% Q, U    dasm 01.txt,0,100000
+ L2 h, h6 Z1 V5 m    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt7 t1 L" }% h7 B9 `4 _1 y5 M

6 `1 X7 `* ?. H) v: J: ^    softreset
; X/ |+ E! Q, j    游戏重启, 但不重新载入ROM
9 j. c/ @: d" B3 y/ R% q) `, R- J0 @0 E
    hardreset
  t( g% j1 }: E0 E+ N" y/ y& n! k    游戏重启, 且重新载入ROM
) y6 j8 p) a; e
+ x! U$ z5 y( m7 q* {3 S4 p# D) O    snap xxx.png$ j5 Y9 T; ?5 G) e! V
    截图为xxx.png: }7 t) Q* E! B3 C4 |& g
4 {, m' X) L! t! B" u2 c' J; }& r
  * \! d! W0 y* v/ J) `" B/ v$ a
    L  F9 @4 O6 \; S
  * N% |0 v; r- B' _; d# W
热键:
3 Z- k/ H7 @; A" L- v' y    ~ 中断游戏- b: D# y4 e/ U
    F5 运行游戏
! S, t1 I: p9 R& A' U    F12 运行游戏且隐藏调试窗口8 w3 y9 c! C. {6 K% f6 [
    F11 步入, 单步执行, 会进入子程序
% z) I, w- @; t- S; O2 j$ u3 W    F10 步过, 单步执行, 不会进入子程序
* {4 u; _: `+ f0 |3 q    Shift+F11 执行到子程序返回& z' {, R, n3 M) C4 c
    Ctrl+M 内存浏览窗口
" I" ~2 L/ x3 b/ }( B* \    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU% h6 u! q2 l! a6 ?9 R, _

/ M$ s7 ~4 h2 E3 P% |+ `{:4_94:}
8 n2 I* S- e% H5 A5 t$ ?( E  O. b, b, g" `1 r$ k6 b

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2552 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。, w$ C) u5 H( F% k& F, q5 L7 N

' b5 t$ f! g8 ^; x) @/ PPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。
回复

使用道具 举报

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东! b. n. K5 @( _# G
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-10 12:39

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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