EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式

& o5 h1 T( q6 [1 R5 H: Q  |很快速的整理我自己常用的指令
6 _% N% ~, H, @' r% |$ a! _4 P; C1 e; G' H) r/ j8 h$ t
{:4_112:} ) P9 r' h% j: Y' C+ U/ \6 S
3 t- N7 U4 g! l  s1 k. O5 u: q8 c1 A
MAME DEBUG常用指令
- K+ Z' p1 ~8 k3 C+ I1 O- X& }3 o  M, g$ Y7 ~4 x+ W
内存搜寻: ci, cn, cl
; X1 ]0 x$ B# |8 l( H
! ]4 ~* l0 X; ]% N7 D    ci
8 q( C! s$ i9 ~3 ]3 o" i    搜寻任务初始化, 每次搜寻一开始一定要输入这指令& p4 k, w  R0 r% O& t; N

: K) w6 B8 O7 ^" e+ t    cn
% U5 S& V* [% g9 b    搜寻指令
& m, ?' Y$ v+ P2 c  t    例子:
$ L+ W4 M; |5 {6 E( F& a    cn eq,60
, h' w9 @- z* }( m    搜寻目标等于60 (十六进制)( m2 P: I' j; ]* I, P. Y, t- p
        ; z- D; B8 B! p1 |
    cn eq,#96
9 R# i& _0 ^, z9 u  {4 W/ G    搜寻目标等于96 (十进制)1 y* G, R5 ^2 g3 o' n
. H: N6 N$ Z/ A  i$ I% `
    cn eq3 {$ j  f0 M3 T, _3 I6 @9 J" {, |+ r
    搜寻目标的数值没有变化* o- [' c5 J6 ]: L7 q
* |, a8 K- P% ?# u: i- F& N
    cn ne  l' s, X5 X2 {' H" u* k7 U9 c) b
    搜寻目标的数值有变化
8 E& Y' H" O* y5 S# h        6 c' ~, U6 V# R6 t( e
    cn +
' I9 \& h/ P" V7 e* d    搜寻目标的数值增加
5 t9 A/ T4 r9 w   
/ [6 z4 L, Y" e2 F9 {+ U  N) q5 S5 l    cn -
) C. E$ y" ^% P! O3 Q$ V6 i& t    搜寻目标的数值减少; a* e9 H  q7 _/ {- W" e
        
6 c/ H# P1 p! C( X( w+ Q8 s( }    cn +,3
3 Y6 _, d) F' `" R    搜寻目标的数值增加3 (十六进制)
# i; y# L8 B2 |8 X8 K! x% d3 E7 [% r5 e( s3 F; }9 R
    cl
8 O5 ~3 h0 ]. ^; q6 N5 e    列出所有搜寻结果
3 j% u- `  k5 \$ M. u+ B5 R
2 b! ?7 ]5 y' s* ]3 s, J- J6 y  c6 A& H1 \    cl xxx.txt
! F$ z0 f- U6 b5 D    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
( ~; ~9 V  e% `7 [: R2 C
* u7 H7 H1 y3 j1 z& M1 n0 Y   
  W/ G$ y4 P) G4 {内存监视点指令: wp, wplist, wpclear
% j6 k% Q* C$ J; @$ ^; J    例子:4 V1 S- Q8 ~9 l& s
    wp 1234,1,r! \- h* j+ \, g' W$ Z
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度16 K5 _: `% N% N1 n( V. u
  m. e. d! Z# M1 Y4 Z* F% c4 [" `
    wp 1234,2,w
9 [9 \* d! J+ O9 Z6 u" c/ F7 y9 C      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2- l! r; O+ m* S3 U
     
) V; ?: l/ x* D: I    wp 1234,6,rw
  A% z4 m& d) J' n) m      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度68 }1 y( S& u3 V/ g
- l  U# d2 C' ]  @
    wp 23456,a,w,wpdata == 1
' d8 k6 z# o4 H/ t7 }      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1* z3 k# v+ u; ^. S1 p6 x
9 `- k" q% w' ~! H
    wplist
5 m5 K' B& L; Z% T) c0 V& _0 w& p# l) H      列出所有监视点
4 k- R4 M: r& k( k( G# W- ]3 E) M: r- a
, D. s2 Q+ q- j$ \# S; H  ~    wpclear 3
3 v4 T: q5 Z+ I! A1 a# d4 _' b# n      删除编号3的监视点3 r( ^% _" Q$ T6 p

4 N# r) l4 r2 P2 Z! R    wpclear) A$ U  M3 g3 c" [* A( C. J
      删除所有监视点
- X& ?; r. p: y4 t4 {" `) k- A  a2 s$ G3 K( b, b: }* G8 N+ K# s; b
      2 X' a1 c3 p5 }

" t# N+ o# p4 m/ S  f, r6 j程序断点指令: bp, bplist, bpclear
6 |; ?) b& q8 S  u    例子:
  x/ }  _" x8 w+ ~9 l, I    bp 1234
0 L3 b. L' p8 s' E      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
! K. S, ^+ ?7 g: }5 l3 [+ c
* \) N8 D% r+ ?; B6 |! c) I# V    bp 23456,a0 == 0 && a1 == 0
! |* k% x( F0 i0 N9 N  m      在地址23456下断, 且中断条件为a0等于0以及a1等于0/ ^, n+ z. ^% f- W% e% |' G7 c/ b
* Q7 Z3 z. v, u0 g4 }" w. c
    bplist
  u: j! K  r* k: U      列出所有断点
0 m+ i1 M4 H" x! {. l1 i7 a6 Q+ l& ^, L! ?) q
    bpclear 3/ R0 C' U8 {; |' K3 n
      删除编号3的断点8 @3 h7 L% J9 q

4 d6 f. I  w! p7 n! ~    bpclear; S! b4 v. L7 g3 [
      删除所有断点
* p- Y2 ]# ^  i4 \% J1 g# S# f& M' `& Z5 N  ^! ?& V* ^
      ( u" n1 J* O2 `
      " I; O: X5 k, ^: i; g
跟蹤紀錄指令: trace
/ B& ^4 [/ X) l! O7 ?$ @/ i    例子:
1 h. }2 `+ N  s" m3 T    trace 01.txt* A! T7 R6 o% j9 \) a, ^
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
. S3 r7 o! F! x. f# h) l& e5 }$ z& [: a% O' m7 V
    trace off
4 i5 V$ v' D$ a6 d) ]    停止跟踪, 并且关闭文件/ L! M& z/ J( z7 Z

% f* }+ w% [/ v' O$ X# [    trace 01.txt,08 f' [$ \6 E, c8 Z4 {& t2 p
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
$ Y. D1 i( M3 Y6 y2 u7 z3 E; U9 f- ~0 v9 i7 ~; b% x* b2 ]; w
    trace off,0, ^* e9 J2 d0 Z$ p. a& |
    停止跟踪编号为0的CPU, 并且关闭文件
! O/ F: G4 s4 H4 ]0 Y/ z7 s: ~( l5 L
% Z/ V; l5 @* Z% p    trace 01.txt,0,{tracelog "A=%02X ",a}
5 L$ c! r4 \2 k# w" s, \    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt : J8 j8 s5 O% j" @4 I7 r
    并且在每一行的前面, 写上"A=a "
; C% v  l9 H: A" Q. {, Y( Q0 c    "A=%02X ",a为一个C语言printf函数常用的输出格式
7 j( ^* W, R+ _5 }1 W  b) ~    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
! A9 L  L" H' P/ X# |' e. h- b7 Y    X表示为大写十六进制数% m8 g0 h! O0 p+ x( j9 y5 C

  @# |8 l* K" q% Y5 ]! ~. [! _/ h. C7 r7 v

- u* P9 Q- q7 I* V内存直接写入指令: maincpu. l7 T" }8 x) H# j
    格式为 maincpu.[][]@地址=数据
: e" @8 r9 w- }2 A+ i    第一个[]:
2 m* ~+ r, {' \0 X+ [    o 表示ROM地址# b9 N% M9 L- x( W
    p 表示RAM地址
; k; m  J" V8 q% m$ a" o7 J4 ~/ L( N) G1 f: R6 v1 i
    第二个[]:3 g! D7 s7 ?9 e0 \
    d 表示4字节( h+ E7 U3 A- Q. L8 c( l( I
    w 表示2字节7 j6 K; f! O* o$ M2 m
    b 表示1字节' [" ~0 l2 C/ k& W# y3 p$ `7 D

7 F1 l4 s+ C9 J3 b' g9 q+ L0 U    例子:
% A; {/ x( D9 c. {4 {5 r. G+ U    maincpu.ob@1234=FF
6 p3 J9 |  r( p* |. L  s    在ROM地址1234处, 写入FF一个字节# X) c% C4 j5 G1 |# F

2 @$ F, E, W: b. Q7 m/ W    maincpu.ow@1234=4E715 ?! [. ~$ m, ~1 h( G
    在ROM地址1234处, 写入4E 71两个字节
7 F' f: r! R6 Q0 J4 \
/ F: h- I1 G0 z- L0 O9 y2 K+ l    maincpu.od@1234=600A4E714 a+ [6 `' K5 w0 R9 R
    在ROM地址1234处, 写入60 0A 4E 71四个字节
5 E2 f' _7 h7 n; }
! d0 c7 @; a, f) n% J9 p1 _! E2 _9 ]    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
7 c" s( L% U8 v( X9 X6 A4 g   
5 y" v: \. U( n1 N3 X' G
2 R- A) Y$ u+ \& `0 O5 P其他:" ?* `3 U5 |6 U5 i2 F' e0 K
    dasm 输出档案名,地址,长度' q( k! A8 N+ S. H# _
    输出程序的反汇编代码# a3 h3 P0 F% r$ i8 q' f% O! R* E; i
    例子:
: `) C' H% ~( D4 j, c    dasm 01.txt,0,100000  ^* W! p; ~  P  i! O8 T
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
* a# d. o$ Q* e+ p# t
8 b) `  y' c# v8 M7 n    softreset
* K) k! I) l1 U9 c    游戏重启, 但不重新载入ROM
3 x. q) u8 x: l7 W9 @; q, M; l# ~
2 }0 R% v+ |: {0 O& ~    hardreset
7 s# e) s8 K1 z6 P4 q; }- q8 w( r    游戏重启, 且重新载入ROM
9 p: H5 v- g1 S0 n) }6 [; ~& ]9 p* [  w
    snap xxx.png
/ X2 D+ f: ]9 f5 `4 y    截图为xxx.png
/ P9 c' X6 a  d! S4 i3 p3 h  Q; E+ x
  
- K7 K# w* p5 v' E# T  $ X( ^- ^1 {; M9 @
  
7 |3 p+ g% t! _: U) i热键:4 D0 D8 J+ _1 v- f4 d8 T' z
    ~ 中断游戏5 w" W8 `, N  P/ I6 F! q
    F5 运行游戏
8 K( ~& m& w0 P/ b8 }6 y  v0 S    F12 运行游戏且隐藏调试窗口8 M/ F% M# g* q& w' e5 G8 m5 I$ o
    F11 步入, 单步执行, 会进入子程序4 w% n# ]% @0 v( R
    F10 步过, 单步执行, 不会进入子程序3 Z- |( S; i4 \: M: e; L4 g$ G
    Shift+F11 执行到子程序返回- r& S9 T7 ]6 N( u; W) M6 b
    Ctrl+M 内存浏览窗口4 O- o- z& X+ s
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
  O) Z5 v4 e0 p% C% Z0 `9 T, W  P
' Z: @- R9 j2 V$ H5 U{:4_94:} % @# ^6 o5 ^: U

' e! g' ^0 w0 q% m$ s5 ~' r

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2577 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。( j6 N; T4 B  |* e! f
# N" ~  B0 v+ G# ~$ X4 J, m2 j
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 | 显示全部楼层
要详细些的东东$ x) o: g/ c: n) c
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-10-29 14:21 , Processed in 1.082032 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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