EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
9 H: Y& N; H% F4 @5 `* i
很快速的整理我自己常用的指令
+ E7 k* N- n; n& B! |7 \' Z2 l% H9 }  w( F* w4 E
{:4_112:}
- y0 A; E, V4 d8 i  Y/ U, {  ?, c4 S7 ^
MAME DEBUG常用指令
4 ?7 I: E  x& ~# r; G4 v
) t3 p, X3 Q6 e, r5 p# T; F内存搜寻: ci, cn, cl
; J' g+ N3 M: r. g# L
1 B) A' s& u* w3 U4 k    ci
3 u! W$ s! b1 u6 p5 d4 t    搜寻任务初始化, 每次搜寻一开始一定要输入这指令' x/ ]9 x& p* S

. \9 ~  S' y( {3 w1 p9 Q    cn
" F$ a' ~6 U* V$ j& k7 D6 v" q    搜寻指令
! r# D* R4 C- L1 G0 \' b    例子:& `+ P+ Y. U9 r! s, e
    cn eq,60
0 l: T: g# |# ^, ~( n9 j    搜寻目标等于60 (十六进制)) x! ^2 q) y2 U! a
          I- w! W" ^' r7 J8 j0 [+ ^$ m
    cn eq,#96
* P5 R9 m% L) X7 Z) ]    搜寻目标等于96 (十进制)5 j- @9 s' k4 ?- W) [# Z4 P

! `& {6 {/ c! a0 o# F5 q    cn eq
+ R. Z+ c! \+ U2 `    搜寻目标的数值没有变化
3 `  p+ q; K, ]* h- z
( K, _- h( ?  @) `2 U    cn ne# o8 t1 ^* P- D  _
    搜寻目标的数值有变化0 P" C0 I- _; J# R2 Q
        
% u- b' E) ~5 t2 q    cn +
4 l! J0 N& `3 B    搜寻目标的数值增加' A" }- h$ r, u& E4 E0 ~. C4 D  I
   
8 x, b. D$ X2 G( d0 M/ B( D5 a    cn -8 n' a; A2 p" i$ B# b
    搜寻目标的数值减少
. H8 _( h' t! q0 W- @        - k, d+ X/ j, z" r/ }' E
    cn +,3
. q% o2 H6 c: K* _% o9 \$ ]5 m! m  ^    搜寻目标的数值增加3 (十六进制)' }5 k: f: \1 Q  Y4 a
8 R  w7 `2 N$ [4 I: B* Z( U
    cl) U; N: H9 [' O: a
    列出所有搜寻结果  S. w3 z7 }! z/ s/ _* k- e; {5 H2 x
1 O! g9 I% T/ Z: t8 e/ ]2 ~
    cl xxx.txt
5 N4 X8 T$ G' {2 M5 J" S    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
3 W; q& C" k5 ^, g( c: s
" N4 ^! x- m+ @2 Z. j    - r! K5 n* ~' a3 {0 `  {
内存监视点指令: wp, wplist, wpclear
; r. p8 N7 I- Z% W    例子:3 }. z  R+ o* {- v9 q
    wp 1234,1,r
" B* G; s6 D9 [8 H& Y" D      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
8 d' Z  P$ h( S/ x/ i% I7 Y+ i( _$ _: q& I
    wp 1234,2,w
8 i7 n* d# o3 ]$ P      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
( s/ Q, T: ^; {0 [     % e" \1 F' F# Z& k
    wp 1234,6,rw
2 O/ X2 K  J0 ?6 C- W      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度63 D; d* Q/ N" u1 P$ {+ S

' d; L# }# `- x5 U* I1 T    wp 23456,a,w,wpdata == 1
% ]3 q' {7 M% K3 [      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1- c7 c( T2 V9 B5 c. N
# j6 h8 k1 `* V' P# H  N. }
    wplist
' b# u. r" K0 k* x      列出所有监视点
* w* V/ D, e2 c% h4 m. i" q* d& ~" s- g' C* }/ |5 e
    wpclear 3
" ^" g' ^. S- G      删除编号3的监视点
8 o4 P! l: n2 y
) ^7 x3 q' J0 U  [( [) m& `    wpclear7 e$ d5 i$ n8 H' [( Z
      删除所有监视点
( L0 Q+ e! ?' G. _) a! T" @0 r7 I* g4 z8 i4 C% A
      
) n! p' M. o$ [& {& E% w+ e# @' ?/ L3 y6 Y6 _
程序断点指令: bp, bplist, bpclear
+ R# l1 w, M3 U2 |! f& ~  v    例子:" T3 h6 g$ r/ s1 J3 d; [# V2 T
    bp 1234
( \% t# g" M3 f7 t      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
& t0 N& e0 @# o- d- R4 E$ y: t
& A2 ~1 q. }+ l0 X: \( T    bp 23456,a0 == 0 && a1 == 0
( I, `' V+ e- ]2 W+ ?1 A      在地址23456下断, 且中断条件为a0等于0以及a1等于0  @3 k, D; B, W. b& l5 V
2 e9 \5 l% n. w/ m8 {9 u7 h3 ?
    bplist. n0 g4 V5 j9 s9 r3 S" S
      列出所有断点. [, P1 F) u1 t' O& I8 ~5 p

( o! H$ L3 E, O" O3 z/ B7 e    bpclear 3
2 i0 @$ K/ i# O0 p      删除编号3的断点
+ @1 B7 y0 H' O2 L6 v: O. J; R
5 W3 P# D9 J$ ?0 D. M6 D: ]    bpclear
1 L/ G! h7 a, D4 J0 O4 W* j      删除所有断点+ o( O' A" `* G1 K

+ L& [9 p3 E0 l  D      
4 b5 L7 x( g2 i: P( P) a% m$ x% H      
* i/ f( I. I2 j跟蹤紀錄指令: trace: d" h) [6 c7 N: ]% y5 v# T
    例子:
6 d7 w3 b+ P! @, e5 v    trace 01.txt
' d) u$ k' |8 ^) e; V: p0 j    跟踪当前CPU运行的所有代码, 输出至文件01.txt1 C, G3 T, M4 a5 L
4 M( s/ g% n) l, J, e
    trace off& K" L" H, A, M
    停止跟踪, 并且关闭文件. V$ F5 |9 J8 H9 Z% G( h8 X

  i9 K$ r3 X+ I% U  l5 r% Q; t/ F    trace 01.txt,0
6 H7 F9 g" F$ X/ e" ]" h# {" o; U    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt0 r5 N; X7 n. O
& E- @# W0 o% N0 Z! @
    trace off,0
3 s: Q7 R! b5 H( M: ~    停止跟踪编号为0的CPU, 并且关闭文件! w( ?, `2 I8 h9 W) B: v

* a( B! F% g: Y( N) O    trace 01.txt,0,{tracelog "A=%02X ",a}
1 O6 i9 @! H& y/ d    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
+ _" t1 t, f0 o. S9 m2 j! L    并且在每一行的前面, 写上"A=a "
) n( t3 p& H" m7 R" ?- b- J0 L    "A=%02X ",a为一个C语言printf函数常用的输出格式! r3 A1 l9 U' o1 T! Y% M
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入5 s1 Q6 @% j3 f' N
    X表示为大写十六进制数
9 R2 N. T1 D; \# m/ V3 o3 o' f; n! l6 Q# p6 Q- Q7 P8 t4 a+ u8 i
; K5 G( e/ a9 [* c
' l* H! z. m7 ^1 Z: D  L
内存直接写入指令: maincpu
. s2 u. v' u) {2 g9 \    格式为 maincpu.[][]@地址=数据
( n$ G2 v# A; T% G  a" T) T    第一个[]:& }' `5 _3 w) _- Z9 c" R6 v/ ^  j
    o 表示ROM地址  x- T4 S. B- o1 ]/ d+ j
    p 表示RAM地址" x( l" x, F# E# _7 R9 H

" C0 [3 j! @* `: P! Q( y! V    第二个[]:! v& \; \  f1 y+ X- I: [
    d 表示4字节
# _6 G7 K  P+ Z    w 表示2字节  Y! S9 ]* \* c* |0 L
    b 表示1字节: s/ a  U5 {5 I0 c) L+ g; t

7 M' \9 F! R5 T    例子:. v0 v( ^& j  V; O1 g( z
    maincpu.ob@1234=FF
5 H- p$ \7 I! j- @$ o    在ROM地址1234处, 写入FF一个字节# {' Q% {. s$ S
. q  d4 p. M, z% O6 L5 O3 F
    maincpu.ow@1234=4E71+ w( ^6 J' J$ w% b$ H  x
    在ROM地址1234处, 写入4E 71两个字节
; c: a3 x5 V  Z) Z+ X% S# Y6 ?' Y. b- a
    maincpu.od@1234=600A4E712 O* D3 O- @# q# \) W) E& ?
    在ROM地址1234处, 写入60 0A 4E 71四个字节
; s5 F$ I* L, _; |; v5 @. n- ]' |, Q& [0 }, U0 }3 |5 Q) p
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写6 B+ Z4 ]$ D) B1 ]8 V) y& s) n
    " b2 j: p+ n  ?5 {

- `  m+ L' o  e/ v其他:
) m/ q& a1 I- V    dasm 输出档案名,地址,长度4 P& A& v& A8 U* p, q) s8 z' a
    输出程序的反汇编代码
/ ~" a+ Z! s9 R* ~% r+ ]: i: b    例子:6 _  {& `, R2 Q1 t- w+ M1 t
    dasm 01.txt,0,100000: v; u; h. m# C" U
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
' }. c* j$ x- e' C5 V# G1 R9 d" l: E$ [2 A0 @; W3 v2 u6 C# |9 J8 d
    softreset
8 X* ]' G- k! r$ @+ O    游戏重启, 但不重新载入ROM
! P2 t! Z( v% @
* F* r8 i, I4 t) Q5 D    hardreset" h% }( R  U% [9 D- S( i
    游戏重启, 且重新载入ROM
; p' w* Z8 d3 L1 f6 R0 g+ a6 r7 O; Q
    snap xxx.png
% V+ U+ u. L, ~; A2 L" a7 [7 c    截图为xxx.png. g5 k: }# U3 S3 V

( D" V/ k% g/ |9 J, u7 z  . P5 g/ l9 A: u! @0 w) ^/ E* C
  # T. B% x, Y% m" l3 {7 A6 d0 Y
  
# }7 `1 M/ {, ^% O7 B热键:- R' \6 @6 A. F9 Z7 c5 n% h
    ~ 中断游戏# X% B3 y4 `$ B6 i" i) m# r. Z
    F5 运行游戏# s0 \0 F" B% f7 x$ B4 n+ c
    F12 运行游戏且隐藏调试窗口
) D! W. }0 ^* u    F11 步入, 单步执行, 会进入子程序. O' f, s. @2 R) `9 x0 |# `+ K
    F10 步过, 单步执行, 不会进入子程序
/ D& {0 a7 v  N+ t0 Z    Shift+F11 执行到子程序返回
+ g/ T4 ^$ X& U3 a4 ]    Ctrl+M 内存浏览窗口
5 L  {7 e! o6 e) u! S' `    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU: x3 t( _1 p& x6 E0 t: J

3 s, x' b* e; M) O; a# d& k6 c# J{:4_94:} ' |8 _" @! S4 p( M8 G' c  o

  O. a$ G5 M' M: D# M2 d/ t

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2569 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
5 A9 q0 r! q2 g0 N2 [) y: D. K: {& [) ]6 i# y+ I3 o
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 | 显示全部楼层
要详细些的东东8 n" j% G: O$ e4 i: y5 B2 v
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-8-24 16:15 , Processed in 1.107422 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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