EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
. m# j" \6 ]) ]3 C3 J
很快速的整理我自己常用的指令
" x" C  k# P- P( Z3 C% S( f( {0 m. H: M" ?0 t: I) N; |
{:4_112:}
+ r) [6 a" y! `1 Z5 d& x' X/ n, d) {+ A2 Z% c1 }6 N, X- |% B8 T2 A0 W$ L
MAME DEBUG常用指令
/ W1 ^" n9 A5 Q" g+ ?3 r. O1 B: t5 W  q( Y+ Z
内存搜寻: ci, cn, cl' C1 p2 r/ P) O! _- Z  p
0 C1 ]! S3 y: p! Y! }
    ci
9 D. F# g+ C) }. T  a6 S    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
) V  Q2 z( r9 |0 [1 ?: \' s- `4 T1 e6 L! R
    cn9 H# @5 \# n% A& O2 u
    搜寻指令3 Q# n" k5 x" F' i- z* S
    例子:2 G+ u) a- i5 F6 M
    cn eq,605 D  E" K% i* t6 `& y3 D
    搜寻目标等于60 (十六进制)
) {0 ]5 J" d+ @3 L7 d        
$ X% a$ O; R4 n- v) J, g6 ?    cn eq,#96: c4 i3 B& P' l% c, Q! i* q! ^
    搜寻目标等于96 (十进制)
0 d+ h2 c% b  e: e' V0 T
$ ?4 E# l/ O2 B4 r# g' j6 ^    cn eq
9 v7 o8 u' r- [  m8 _' H    搜寻目标的数值没有变化
6 }$ x) N; ]- t
! g" B5 M( g1 u/ g+ X. h5 Q    cn ne6 Q* h! d. \1 t" K$ X  E
    搜寻目标的数值有变化
6 P5 A# @* A9 O4 z, A( B2 \3 S        ; ^/ u! H; U) [
    cn +& I3 n) b; v( ^+ O! q
    搜寻目标的数值增加
( \) U# Y' g8 z) S7 c- M7 a& e   
7 H. U) V- c, `    cn -
# _, [; n- P8 Y5 A& I. M1 J    搜寻目标的数值减少
( L* Z' `4 V/ b- l4 j. F2 M& P        
. X1 q6 e( u- w    cn +,39 y: h* S% n; H
    搜寻目标的数值增加3 (十六进制)
0 a6 r  n/ j( a3 o3 |% r+ T" t  S4 g; j% Y
    cl
; V' o/ Y/ A% x9 C; H! O    列出所有搜寻结果1 [& S: @2 |' Z. H8 u

* z6 j& N- L* ]2 V; S$ L0 K4 W; f% K    cl xxx.txt+ a8 B  N2 L4 b+ u( C. P
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式& @) c9 y- K( ]
3 ?0 Z! i0 D) u: o: v. e* u: S
   
2 V: z" Z- `0 }/ f: s内存监视点指令: wp, wplist, wpclear
/ m( m+ h. `8 ^1 ~& v( \/ L    例子:
% S: z; C& r3 y# B" p3 n0 @* s    wp 1234,1,r  v7 i" s# z$ y5 D" d. l$ A+ S
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
- v, w  l! J' S4 F! a$ I( V
$ A, q( H; P, ~$ C" N9 J6 a# ~: |    wp 1234,2,w; v/ n( b4 I' e
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2; u5 N" L0 G- C; q" g  n
     
  M% Z# M5 f( i' D    wp 1234,6,rw
: r9 b2 _& Q! a4 u4 `1 T      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
. D# z! C$ E: O# ?' S
: ]) F( `  `" f: [) x9 f    wp 23456,a,w,wpdata == 1
7 Q$ B& g& l0 {      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1% j" i( `5 x6 I- z) Q
$ Y$ v  ^2 q: Z( }2 J9 Y9 a3 p
    wplist2 l) J  V6 q4 P( k2 A
      列出所有监视点+ p" f$ {3 d# l2 p- Y

. T* ~2 S. \3 ]6 w: u1 G2 n    wpclear 38 O, c8 V! b" N+ V. z# z: b6 g/ _) U
      删除编号3的监视点/ r4 j( e4 F% q

1 R  |# Q. a/ k, Q- |% I    wpclear
, S  o, _5 r% p0 J      删除所有监视点
/ V8 F& P+ ]/ o! K1 C# ]# ~5 u, r$ D* W7 }6 y4 q' ~7 C9 i
      ! n/ B: O( K! i: g$ H9 w

& t' J1 r& C7 I) b: G程序断点指令: bp, bplist, bpclear8 w9 ]4 C  U; T3 Z( ~9 {1 M6 Q$ D
    例子:" _6 z: Q- N! f9 N
    bp 1234
& ^5 F1 Q& _: q- b  c      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断  G5 Y- L2 Y; H9 k: r7 ~

% Y4 D1 \7 i4 L& T- Z+ m    bp 23456,a0 == 0 && a1 == 0
1 W7 K  t  }0 z3 K0 r- A5 F      在地址23456下断, 且中断条件为a0等于0以及a1等于0/ U7 j/ b, S0 M5 k
3 a1 C; H. l( L4 G* K9 n3 [+ J
    bplist6 u$ K9 j  m; b% }/ Q$ G6 e2 K3 y
      列出所有断点
/ r* ^: V; U. ?. T
9 I/ U$ [& H- j4 O! V    bpclear 3
" \) b$ m* t: E. K3 ~4 V9 ^4 Z. b      删除编号3的断点& v; `* o; D( _

- J2 O+ W  B7 h    bpclear6 U2 o7 L4 r( @7 S7 z
      删除所有断点
' _  N0 d) [+ q" b+ _" Q0 r; t5 C: T2 n  T
      
4 b. d; c' I, r/ b0 Z      
( r8 {' Q5 w& Y5 h跟蹤紀錄指令: trace( q& k% U3 Q2 S; ~$ @
    例子:
2 }0 Z  [: r0 `7 u    trace 01.txt. b/ E! ^" |5 x$ T1 t- r/ {
    跟踪当前CPU运行的所有代码, 输出至文件01.txt3 M8 B' A% q1 _8 b9 h; Z
0 \8 ]) y1 s& U4 m* I6 O
    trace off; j2 W9 P' }& M  L7 H. j/ B
    停止跟踪, 并且关闭文件
1 m! r' z* y1 i' T% u( c7 P2 [# t1 s9 q& ]" k9 K9 s
    trace 01.txt,0# i; T# b% V3 [
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt7 b, Q8 k2 z8 U* A5 ~6 z
3 G% y  H9 }0 Z' h: ?. c! u- x
    trace off,04 `1 w/ O' b$ U+ U$ X5 f
    停止跟踪编号为0的CPU, 并且关闭文件
4 d- Q& _7 k. o. q- M0 R/ J# Z8 v( ]) G
    trace 01.txt,0,{tracelog "A=%02X ",a}. e" ^& O' Q  r8 T
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ) I3 @* R  z5 \+ X3 ?5 D" g
    并且在每一行的前面, 写上"A=a "
  c9 {/ U7 _8 P! ?    "A=%02X ",a为一个C语言printf函数常用的输出格式
6 }0 z- _9 G# M1 M! n7 _    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
$ ^8 G( @" B/ O) b: N    X表示为大写十六进制数
% I0 ?0 B1 @# K! v; f1 V, M8 C
6 W4 \- _6 o6 I4 W# ~
# a7 b% T2 B$ j7 H: _7 N* t! r) _( z) m5 e2 q5 @- ^% R
内存直接写入指令: maincpu
& x: v- A2 ?/ ]! {9 S5 I8 d. b    格式为 maincpu.[][]@地址=数据1 S( O5 T  a6 I( {( r
    第一个[]:( P' J9 \& q) O
    o 表示ROM地址1 G4 V2 j- c$ _
    p 表示RAM地址
  R4 G/ e" Y$ N3 h1 _2 H4 R) H5 a4 r' p6 G' V2 H
    第二个[]:
- F' w* H/ ^. S- ]/ Q    d 表示4字节
* H( e' S  O% P" |7 ^: Q    w 表示2字节
, ]" n7 t( W: H1 [    b 表示1字节
4 L5 l+ P* B" m* e2 ?# T5 ~# `  X) M- F1 e0 ^$ X
    例子:( ]) E3 s/ m) \) N2 L. {
    maincpu.ob@1234=FF
- J0 s7 |1 H4 ]6 h) a6 R0 j    在ROM地址1234处, 写入FF一个字节
% Y7 \9 _7 `5 @! l2 _* j4 R* {( C4 G, D& ?8 G7 n& }
    maincpu.ow@1234=4E718 `7 G# X# ~. t% z" ]* e
    在ROM地址1234处, 写入4E 71两个字节+ x9 i* s7 u" ~% R
+ D1 h0 G$ v% m# o' G- k7 m
    maincpu.od@1234=600A4E71
% U. f5 L& ]3 {6 P" b( I5 P: C; B    在ROM地址1234处, 写入60 0A 4E 71四个字节
* a% N+ f! Q4 p& V
2 ~9 G# V0 `$ ^! U' w  u1 H# s    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写, K% d% u1 C# _# h1 _8 o
   
; |0 q; w9 y$ X3 y+ r  h3 \1 z/ l, }- H, W, e% P# ?
其他:
1 j  ^7 |$ \/ L$ P% x) [    dasm 输出档案名,地址,长度
2 J% h4 r% P2 g$ a: A    输出程序的反汇编代码
6 ]6 O2 P6 E: e" p  L    例子:
5 l! l4 m7 Y' Y* Y) @) Y. }    dasm 01.txt,0,100000
; O2 P" n4 e: x    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
2 @) [" z5 x$ l0 `8 N' ~
- K, Q  A$ y; A: t    softreset! J0 L0 q% F- ]4 l0 }/ R
    游戏重启, 但不重新载入ROM
" W" z) A( R4 H" w- K
* `" I$ N! Z! E# w6 G9 M) Y9 A* G    hardreset
2 Z& X& a! A6 Z: Z  C9 Z+ B# z1 ~    游戏重启, 且重新载入ROM" k: p. r* _# T

. L' N9 `8 f) ]8 f7 R    snap xxx.png
. D9 y  s, g4 q4 ]    截图为xxx.png) n7 D4 l- q8 G- Z2 `% }4 f

& a' I& s) e/ Y! T  * c& b& a. d( S+ ^( g+ l/ Q7 k
  
0 f& ?) d' ^& D+ a  
, ~  t! U" b7 k; N热键:. `( {" s8 ?! r* A: a
    ~ 中断游戏  e7 _$ T- ]- Q0 u3 y( ?* z/ `
    F5 运行游戏
% s& x- V4 h8 a" M/ Z    F12 运行游戏且隐藏调试窗口- M* v5 m, D3 a8 W0 [. W2 |
    F11 步入, 单步执行, 会进入子程序
  S. X4 b. w. @. s- @. E    F10 步过, 单步执行, 不会进入子程序
4 d4 s, u) `2 X; E7 ]: b# P$ U5 Z) g4 n1 p    Shift+F11 执行到子程序返回8 D& Y, y& c  o; X$ [* ~
    Ctrl+M 内存浏览窗口
% M. W; T8 |0 i$ }    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
, h  t2 Y" g6 u- h4 F- J! z7 W  S3 {8 G, F6 f
{:4_94:}
! v" d! Z% y. F5 N9 ^, H/ j  m' h2 T) Z6 O

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2592 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。; L, k$ Q9 q' a' l

$ L3 T" t" p( x' o( K7 ?$ UPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
2 C! h% U7 G; X# g; n, y1 n$ M11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-6 21:02 , Processed in 1.150391 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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