EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
8 C# }" Z4 U  s/ V3 r5 \9 ?
很快速的整理我自己常用的指令
8 j# Q5 W. ]1 u  D0 L' L- f* C/ x1 B6 A
{:4_112:}   h5 w+ w+ d7 o1 a8 k- Y

, V) y( l  D1 ?MAME DEBUG常用指令
% `5 G" R' J- a; V1 Z- v
$ Y/ F6 h" Z, t内存搜寻: ci, cn, cl6 O3 c" q$ ^  F! Z! z7 c
4 P0 [$ K. l% |0 ~) B/ p8 y- [
    ci9 ~& E* x+ x& ?6 U' C* \
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令3 Y! D. M4 x! s5 g* p' G) G/ U
* |4 N8 r- M6 l: S/ _! k
    cn5 Z7 i! y: D# @( j- O# T
    搜寻指令( f& k, b  ?8 @% y; v+ q
    例子:
) W0 U. Y. a+ H  i( f) n    cn eq,60) M9 O9 J4 N/ M- B/ i& J- d
    搜寻目标等于60 (十六进制)
/ S- A/ M0 S( g3 y# }        2 N: ?9 M+ c" A# e( e3 O. d+ T
    cn eq,#96; X. f$ u# H( Z! m1 G
    搜寻目标等于96 (十进制)5 h) n% {$ T2 u& a" E  Z5 `
6 h3 c  y' Y9 Z& a
    cn eq
' C$ t9 Q  N$ F& X! r& `    搜寻目标的数值没有变化
( S1 g1 D% i9 b, U! U1 v5 \- W% |( e) c/ U6 `1 |
    cn ne
! v. B0 B3 q& Y! b5 n    搜寻目标的数值有变化
/ P( ~" c: Z+ T2 m8 X( V        ' O9 `- ]/ {, f% m+ Q
    cn +5 o2 @0 \# u! ^% G
    搜寻目标的数值增加, Q6 u9 J5 X! b* N& o9 g
      U! a' n  Q1 W9 [
    cn -! P! t! j: o9 A! F
    搜寻目标的数值减少/ A1 H, a  _3 G3 O1 T( J  C
        
' w8 p  w/ c* y3 ?# q+ u    cn +,3
- `+ V4 S$ i* [4 P    搜寻目标的数值增加3 (十六进制); ?* R  c4 ^* x3 f% R; m3 V

- _/ ^5 n# r8 l( Y" `/ e    cl
: k) @% P" j2 b: m6 D8 O1 t4 h8 Z* \4 r    列出所有搜寻结果2 B  u8 [1 ?. Q3 o. R6 R

" t, l- e0 V) ?$ W4 r, E    cl xxx.txt
, m7 ?. J9 n- e- C5 O6 B) T7 `    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式/ |' @+ B& z* o" x4 V! Q% m

% A- T! o' D6 Q  z( q' B' A   
" I  Z. C* B7 o+ v& @. H内存监视点指令: wp, wplist, wpclear
0 V2 _  {3 }0 l2 s$ ~    例子:
1 [- h9 `. \0 M- ]% i& {    wp 1234,1,r+ U+ D& ?  _% q9 L( S
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
+ I9 J# |4 R1 j) w+ u7 M) O+ E- ^6 G  l; L0 e
    wp 1234,2,w. i3 I8 x$ D; f/ j1 c( a8 I
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
& @$ M% M3 C! F' k: r2 g     4 r( c3 Z. g7 Z8 q1 ]' V# ?" M+ s
    wp 1234,6,rw
0 ~" n- V& ?3 v& G' G* d5 X      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
9 ?- Z+ e) t) Y/ k
% P( P; J$ I, K8 e7 B: J; h    wp 23456,a,w,wpdata == 15 F/ q3 ?7 ^0 Y& e4 N3 x4 _
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1+ _0 {; x; P3 F" a

& H: A1 B' L; t4 p8 w: |    wplist  R; E3 M- y6 E
      列出所有监视点
3 }4 D. R0 Z4 |* U9 W6 z1 c4 e4 T8 t6 W* [3 F* I  J+ _
    wpclear 3- Q) l& B6 x+ ^) @7 J
      删除编号3的监视点
4 X4 S. a/ j" f6 u" \( k2 e5 u4 ?7 s& t+ G. \3 F  T* x/ b
    wpclear
, x7 }$ L" h/ U; d) ^% U      删除所有监视点/ ^* [6 _3 h1 S
6 V: ^4 [2 y# p4 L. A
      # C+ r( U% L+ e# {; v
. t" b# m1 ]5 S
程序断点指令: bp, bplist, bpclear
3 ?& p5 l/ R; Q; h( H3 T3 f* [    例子:! M9 x( C9 o$ \' S0 o. G
    bp 1234% b( D7 x3 V  ?8 @
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
, }- V2 q, }# o( b4 I- Y; C4 J. [4 U% b( _0 C  g
    bp 23456,a0 == 0 && a1 == 0* [+ c& A! T% D; w
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
; G% G) L2 b! s1 r, j- B% ^# W" q- ]3 U6 f6 {
    bplist
1 R0 J1 N, W8 L! T. P5 g      列出所有断点
, @4 c" d# b/ Z7 y
+ B9 l% A. b3 M( v* E1 ~1 o0 B    bpclear 3
1 @7 z6 _2 |2 u6 l+ E. j      删除编号3的断点" m( d/ a0 |1 F* k
: U% ?6 c  m! k! v0 w
    bpclear
+ ^4 D- Y- @0 e- T      删除所有断点
( H5 s9 o+ g3 f1 D" v+ L9 l% ^, b4 `; ?0 f
      3 x- {1 m& Q4 L4 u! I: Q
      2 T: r7 F, {7 P
跟蹤紀錄指令: trace( w4 D0 i2 M- f8 u% E- \
    例子:
- s5 y2 B1 r( E* }0 @' ^; R: U. Y    trace 01.txt, p* q3 t5 T/ E) P
    跟踪当前CPU运行的所有代码, 输出至文件01.txt2 g0 @3 ]" \5 m# M- M1 }& B
: i0 R1 l9 g  r5 X" H
    trace off( Z+ e- }$ ~& L4 b
    停止跟踪, 并且关闭文件3 ~. o& I& X5 a$ D' t1 T, O. t9 A8 h

) k, ?' B' |+ S. @( Q    trace 01.txt,0: r. `% T2 v: x' X- |. E- f/ }
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt, y7 e1 r% J3 j1 i2 D

. A" r! v$ t# u    trace off,0
9 K6 Y$ k( D' ~( f. [    停止跟踪编号为0的CPU, 并且关闭文件4 Q0 C  |' ?7 r& p3 K" E& v. p

. I) z/ @; s( N4 }    trace 01.txt,0,{tracelog "A=%02X ",a}# v/ l: x5 h; V6 h# a
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
5 C% i& @5 _( k! S+ u6 p% y    并且在每一行的前面, 写上"A=a "
0 p4 c; x& U7 v  t- d+ Y6 E0 m    "A=%02X ",a为一个C语言printf函数常用的输出格式
. Q% Z5 F: w0 q6 b9 `/ l4 }    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
2 |; a- |5 J  O0 p    X表示为大写十六进制数& E& M  N9 T$ S7 f! S/ M+ g

4 T' R* x. ~# P$ u3 F2 \
% b* o+ R* ]5 I6 m" R) e
9 C4 |( ?: f- K  o1 Z内存直接写入指令: maincpu5 c8 Y7 z( ^. {, |  T
    格式为 maincpu.[][]@地址=数据
  j0 V6 s0 G7 |% g; r    第一个[]:0 z: H* v% B, y6 G
    o 表示ROM地址/ F  j! @. G! t# K: x
    p 表示RAM地址0 A3 |) D& X& {/ s- r# v0 q

$ o# f( E) l2 v2 F% d    第二个[]:- q5 a: I- U# M* I  X& D1 \* D' q
    d 表示4字节
; h* x9 W& _! M9 I$ ]9 w    w 表示2字节" E9 [+ X% o: e7 K/ w
    b 表示1字节7 x# h  s% z1 n6 ^+ ^/ d8 [! E
7 Z8 v; C5 v0 [5 A6 K9 e
    例子:
) k* Z7 H+ o/ l5 J6 c0 z    maincpu.ob@1234=FF4 Y1 M5 B+ K) ^/ c8 [& v7 t# o
    在ROM地址1234处, 写入FF一个字节6 i* G/ o! e( U2 _9 Y. q/ P7 A

. _' A) s$ B" O3 c  P    maincpu.ow@1234=4E71
  E, O6 q3 H/ L    在ROM地址1234处, 写入4E 71两个字节" }" L6 B7 {- [- a
3 a+ @4 i0 ]& @" ^5 c% _& r" _
    maincpu.od@1234=600A4E71
! g2 @/ s1 T* ]* s    在ROM地址1234处, 写入60 0A 4E 71四个字节
% E, L1 ?% M0 S
0 g" S  f( ^' o9 k6 M    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写5 o4 h# `! c& g3 }
   
* M8 M* E/ C7 Y7 B1 @' m
) F+ F! c. n( H* F1 _. Q, `* o/ f1 i其他:
3 b1 t8 N1 w/ y0 U    dasm 输出档案名,地址,长度
( ~; u0 O# u  P. y  f( Q    输出程序的反汇编代码1 x. W& l2 t9 h/ |; F7 \
    例子:) t* }6 ~1 Q  h
    dasm 01.txt,0,100000
1 G) Q3 b2 C( E, Q4 W    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt' _; A, T6 @! ^4 [  B

% _- \" v* j; k! V% z    softreset! z" q- H" ~' m
    游戏重启, 但不重新载入ROM
; M$ a+ W3 f+ c# D& y& @6 C& i" M
4 ~( C! M$ l3 v+ A; Y    hardreset7 Q" a, |) h! V0 I% v. l4 X
    游戏重启, 且重新载入ROM- V, H9 G6 U3 `) h# e7 `

# d! N! e' U/ Q9 S5 Q    snap xxx.png
9 b8 A9 r/ v: \    截图为xxx.png
: I/ D2 l. b+ l' p* j* t) o
% P' ]+ ~& [" d0 k3 Q+ B  
3 l, d3 O( I+ ^8 p  ) i) n% a8 }( E8 i
  
3 ^' B/ q8 W1 U7 Y5 i- Y: R热键:
) Y; H- |7 z5 t9 u    ~ 中断游戏
1 k+ _) n7 o. e3 l' C2 S" O0 v    F5 运行游戏
! }+ x" [9 X% w. ]+ q' G  L    F12 运行游戏且隐藏调试窗口7 a) H2 M+ c) B3 I, w2 \) f
    F11 步入, 单步执行, 会进入子程序
: A; o/ \$ p7 q  l2 X    F10 步过, 单步执行, 不会进入子程序) s$ |) K, h, [* |* i  f
    Shift+F11 执行到子程序返回8 q  f7 q4 P1 {3 c
    Ctrl+M 内存浏览窗口
6 R! }# b8 j9 ~9 {! C% {    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU( H7 K$ e% P* h" s+ G- e

5 M9 P0 K) q' r1 z{:4_94:}
8 h% c5 U4 J: u0 f2 K% t8 X$ N  u) p7 }, w" G" g

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2590 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
9 N% b$ Z  N! ?% c7 ^* n4 b9 i6 ^; s5 {. D
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 | 显示全部楼层
要详细些的东东9 F; J: D- z/ C; f3 }* ~/ h7 ]) E2 m
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-27 11:56 , Processed in 1.096680 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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