EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
! t; ?2 m- f; Y+ K6 S
很快速的整理我自己常用的指令+ v. v$ L4 S6 U

- p' i/ z/ n$ t9 V{:4_112:}
# \8 `0 D; F. J, d9 A. J/ `, ~3 w: Y' E8 Y4 t
MAME DEBUG常用指令
3 q4 F0 ^0 ]  @' P: I6 [) M' C4 C' S# I
内存搜寻: ci, cn, cl
1 K, a4 w. b. ^  U. y5 M( r6 w
; G. p& ?* q* Y7 D    ci
( ^. H3 R) Z7 w( J    搜寻任务初始化, 每次搜寻一开始一定要输入这指令6 F* c+ j3 W& J

$ ]+ I6 }; b; j- J    cn9 p2 D" V( X3 s4 K  v4 U
    搜寻指令& \( C8 r5 X8 P5 l" J, ~
    例子:
0 V% ~$ E( k; E    cn eq,60
9 _/ u8 a3 j' r, F    搜寻目标等于60 (十六进制), E# K5 @1 D. G, g; Y- ~
        
; H% v# q$ @) f    cn eq,#96
& z3 ]- A. {7 W9 w" S% K( q; G    搜寻目标等于96 (十进制)
4 i: y( F/ }1 \/ Q" C. m4 x! }5 Q
    cn eq- k$ ?" P$ i8 C. C2 O/ V
    搜寻目标的数值没有变化
3 {) e' u+ ]% T; p
0 _$ j$ E+ @5 f) h- ~8 f. c0 r    cn ne
7 G; }0 ]0 S7 m, Z( x0 @( N    搜寻目标的数值有变化
  _# Z. u1 k1 {% _4 R; L' Q        
3 g/ D" W& u7 ?( b1 Y* }9 M    cn +
4 N5 P8 s% B0 B4 k6 B    搜寻目标的数值增加
+ {4 H- N/ y; d8 Y  m    7 s, V& y/ D  B( c
    cn -/ M- \3 u" L1 Z* v, W
    搜寻目标的数值减少
! |  q/ `8 U5 I1 e; q        
5 n: D4 ?" q2 x0 r5 L    cn +,3$ a1 A7 s% {- y
    搜寻目标的数值增加3 (十六进制)
; Q. `% n# |) ^$ M3 `4 \( w1 r5 K
# O- D# p+ `6 S( n& Z+ J& i    cl: D3 a, S8 L8 I' @1 Z
    列出所有搜寻结果
( S  b% U0 r. m+ i9 l7 T
5 {7 S$ I9 v: ?. C( T0 y4 [    cl xxx.txt5 f5 j- K# K, q
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
% ?) f3 _7 V' R5 f4 b  Q5 W* v6 Z! s) x) \
    + A' \/ G( ~0 C* _  P: O
内存监视点指令: wp, wplist, wpclear
) c; _! z7 l# x+ ]3 B5 s$ @4 }    例子:
# l1 C' Y* Z7 o    wp 1234,1,r
9 }9 R' ]5 D! i0 y, {% Z      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
. V# |0 d: l& W; w$ }/ R) a
5 d5 x/ l8 Q# X( Y    wp 1234,2,w% L1 r1 K& F7 G) W% ?+ \6 ]- ~
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
/ i! Y7 @! s3 x: D     
/ P8 _; e8 ?+ ^  G; ]  l/ q7 _    wp 1234,6,rw/ H; p7 R2 r% p4 B7 |4 T' I
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
9 L& J0 G! |( t; v4 u+ F8 i* L1 J, T8 r1 l1 b; Q
    wp 23456,a,w,wpdata == 1  L. F- S+ ^( Q9 h9 X) H) c
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
2 @) H  N6 a* d8 N  y  r& V8 H/ v. F0 i
    wplist8 v- }+ g; x: P
      列出所有监视点, f2 ]. S! Q) x
" `( G: }6 c5 \9 Y
    wpclear 3
2 w6 C9 a% L+ J      删除编号3的监视点
0 S2 G2 H+ x: L( E) P1 N; o8 L$ K: e7 e, j' o$ x
    wpclear/ Z+ q: z5 w3 M  h- R/ A
      删除所有监视点1 e" A7 f* B  L4 \( }: `# J
$ ~1 r$ L& ]/ n5 r" u2 b
      
. q8 E$ u: J% ]% P, e5 I/ o4 M6 K# |& s
程序断点指令: bp, bplist, bpclear
# c& H* e& E- ?* g+ |    例子:
; _& G5 k. ?9 c- n' {$ q+ z$ d( R  m    bp 1234
& G, s8 ?/ O+ }2 m# ?      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断. l* Y. H# n" S& C
$ q2 I, d/ r8 U* \( g8 N7 ~1 K
    bp 23456,a0 == 0 && a1 == 0" |8 Z( c0 S0 U* U
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
% r; q) t# W  W5 Q9 g& t/ M
& r# }1 z. Q) c$ e5 p; n" V, W! ~& ~( Z    bplist
& i* k4 Z- o6 e% g3 Y- ]6 j8 ]9 _      列出所有断点
; ?: E- i7 y) w( z& b" U/ z1 f+ s. x' Q7 d
    bpclear 3( H* _$ Q- M# E
      删除编号3的断点# h7 V4 V- T% R* p  e0 Y5 r

0 p5 ~& n7 u6 Y- }- W. h    bpclear4 @  T# c+ }* f1 b3 t( \8 s% Y
      删除所有断点
( }6 q* ?; r$ [! h  {( {% `
; b$ {; M: Y& u* r" O) g7 w" G      
" `5 k2 j4 I5 Z/ Z0 t" Z  n7 O* t      
! h- v+ }: S. I. e, y3 A跟蹤紀錄指令: trace9 l' }) [( y* x
    例子:/ A9 w% J& x# P9 p8 z* [2 V" Y
    trace 01.txt. M& O0 z' r, L
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
# B- I* L. Y- k& l+ q2 K  R1 I
, g4 k  {2 ]/ |! [. k2 ^7 L    trace off
& w, O2 F& k+ W7 g$ Z    停止跟踪, 并且关闭文件: h5 Y0 u  E" A2 U4 ?; e

: x* q1 F5 x" N' ^    trace 01.txt,0
- G( f, e5 P/ y+ F- T# f7 g( K1 D! t    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
9 I5 ]2 ^4 ]/ ]  p
8 g4 Z" |: W+ g8 o6 [2 `    trace off,0& Z  ]( G# t- g
    停止跟踪编号为0的CPU, 并且关闭文件0 B: z( H' w& |
# Y) W5 f) E4 _/ A; H( c. S6 k$ b
    trace 01.txt,0,{tracelog "A=%02X ",a}! c& b& Q. Y, m" R7 z: N
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 0 }7 \, D$ p3 l$ r7 U
    并且在每一行的前面, 写上"A=a "
5 j' S$ U2 b' o' U- m0 R+ i    "A=%02X ",a为一个C语言printf函数常用的输出格式
! w1 j7 J  Z/ D+ F    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
  L" q: o* r* K1 b( t/ j7 z9 a    X表示为大写十六进制数
2 c+ I5 u) Q! S( E$ I8 G) m3 Y4 D' {* o8 E4 Y! P

2 R- ?/ G$ z, c7 S& k
: d. k% K- }# {! G内存直接写入指令: maincpu2 S0 c$ u9 X5 K+ `" H
    格式为 maincpu.[][]@地址=数据
: Y) A0 P2 g' V2 K  X    第一个[]:
% i1 d7 r9 z# g8 B- }; B    o 表示ROM地址3 i* J& I  ?% L9 M9 o0 _' u
    p 表示RAM地址
! [; Z; T, x; X$ M- F. C5 U
6 @5 v8 t. h' G$ U+ i$ p    第二个[]:
( g9 P4 b5 [0 q' F5 b4 I; _    d 表示4字节2 W, m: X& D. M, c3 k, f
    w 表示2字节
* h, R; e3 k& c    b 表示1字节
  e- P$ Y! j  {8 G: F! p0 A: _4 C2 L& l
    例子:
( F; o: A$ V( y( e  s    maincpu.ob@1234=FF
- r1 q, M% Z) T  ~3 N    在ROM地址1234处, 写入FF一个字节$ w: Y9 Y! C. ]; x) s; W6 {# Z

, \2 c, d5 _2 e9 N1 u$ V7 T    maincpu.ow@1234=4E71" o. y$ C  T6 |- }6 w/ |5 J
    在ROM地址1234处, 写入4E 71两个字节
7 o7 D5 a8 x# H6 C
! a& u8 _1 s! D2 I7 O7 `: @% o  q    maincpu.od@1234=600A4E71$ K8 @+ _- [4 d* A! J& d' l' y6 B% G
    在ROM地址1234处, 写入60 0A 4E 71四个字节
  S' M2 J5 p8 ~0 f! N
! q/ [/ v! ~7 T4 P2 L    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写! H* r( Y" D* Q( N
    , n9 h* r1 K* M9 z; S
+ n- h. u% ~: Q" Y4 O* p
其他:
( N9 B& U' S- |, j; T. K    dasm 输出档案名,地址,长度5 f6 M5 R% c; R; n) @) [+ J7 j
    输出程序的反汇编代码5 L  K7 G' K5 t3 {/ l. f* n
    例子:$ `! A; d0 h/ X6 X  @5 n. h8 r
    dasm 01.txt,0,100000
' A6 i! F6 c: n    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt( Y5 N9 X  I1 H% f

& {' o7 e" s# Q: a% X% G6 l    softreset% I7 U/ y1 k, u' {
    游戏重启, 但不重新载入ROM7 z6 n! N2 c$ O  z# t

; i3 j& g5 R; ?6 X: N    hardreset
3 Y& O1 b2 j7 I    游戏重启, 且重新载入ROM1 \: Z( v4 ]2 r. |

2 q6 |; p- N7 G    snap xxx.png
9 \2 f$ ]/ J. w/ q" F    截图为xxx.png- T$ g# m* h: l2 ]" D* v! Y
% ?9 ^8 I/ T, K; j8 U) W
  
- a  `1 S# g8 B9 ?  
* p: ]# n5 f7 I( Q/ Z  8 N7 O5 V1 N- w7 Y5 O# @/ q- x) ]7 Q: U
热键:
. v" @: l3 z5 b    ~ 中断游戏' t5 A: N$ W- @5 e* E5 d4 p
    F5 运行游戏$ G1 v" a* N1 Y2 D. r
    F12 运行游戏且隐藏调试窗口9 C( y" b  E7 `9 M6 D) x9 e3 s
    F11 步入, 单步执行, 会进入子程序
  Q( F) N! P* }    F10 步过, 单步执行, 不会进入子程序
) T) w4 T# ]4 C4 T- H! D8 z1 n    Shift+F11 执行到子程序返回* E3 g1 G8 F! x4 [" i% P, N9 w* Z
    Ctrl+M 内存浏览窗口) @6 a( W( \( l+ `" @. {
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU/ B3 \' T: }( ?/ F# k+ R: b4 E
3 U3 N& B7 }+ H* S- Y
{:4_94:} ( S: {$ N  j( i

' M6 a" R8 @$ B! L& n

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2591 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。6 @" g2 t1 b! T! ~

" f/ E5 @9 }' K6 I, T. ]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 t) e. d" p3 A6 Z6 j) {11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-30 14:05 , Processed in 1.183593 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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