EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
0 h+ E: N. H: T
很快速的整理我自己常用的指令" H+ X/ I: M7 }* E+ L4 l

) E; d; q3 c# c+ D* o{:4_112:}
' O* w, k2 x( j4 S. ^" L! a  y8 G# T" n3 ^+ `
MAME DEBUG常用指令
; o, M! D1 |% t/ o8 o5 O% k  F
3 [! F4 O/ l+ P, W5 v7 E内存搜寻: ci, cn, cl( t2 T. N7 Q: K3 l0 m8 R* O1 S

$ y. I4 Z* e2 E8 P: U7 r    ci
* P; d. n% C3 _% f/ k  k+ a4 c    搜寻任务初始化, 每次搜寻一开始一定要输入这指令. ?7 F* G# M  b7 V! v

: u$ G$ {$ V+ p6 j9 @) _, S    cn
/ M) u/ D: |0 i& Q% a    搜寻指令1 I, X. }; [: f$ @9 X
    例子:
3 k1 s! Y/ M8 r7 C    cn eq,602 K& \+ k% P! g$ U, p9 U& m# W
    搜寻目标等于60 (十六进制)( I5 M6 y3 d/ A* O1 k
        
( Y0 e' c( E' r" _! s$ q    cn eq,#96
! r4 w" d% d6 m* b. }' m, C; s    搜寻目标等于96 (十进制)
' a* ]: u: y, x' M7 ]' {# C
: G$ Z% I4 ?  I7 y5 ^    cn eq& q$ h8 L! C0 j. i
    搜寻目标的数值没有变化! w' y( k. x9 l- k

$ x# a, S& x' @6 K8 k  S    cn ne6 H1 o9 [3 u. O9 _7 w4 J
    搜寻目标的数值有变化
& z" X" f% A3 P( R) r        % u4 v3 m2 C) h  E' {  {
    cn +
/ ?  D, f# R% r- z8 P    搜寻目标的数值增加
* F" e4 _2 ^. U    : }8 M. ^) L" ^& c) x1 Z
    cn -
2 u% c! u  _, e* V7 V    搜寻目标的数值减少
# Q3 u  r& D. a, q        
5 D7 d2 G$ ?6 H    cn +,3
! c5 z0 c2 S, l* Z, g1 N* F# Y    搜寻目标的数值增加3 (十六进制)
5 _8 v/ F6 i4 Z, i( R, R- m9 {2 H$ P) J5 Y+ x+ L" ^+ E
    cl
: k! Z6 a2 o  Z    列出所有搜寻结果4 ]% N5 V$ P$ [
" i7 e% ]6 g2 x' j6 u( }1 R
    cl xxx.txt7 z; u. Z9 z0 r' `. m* Z
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式4 K9 g! ^2 P6 K8 O$ U4 l
3 m0 T! a# H" b5 Q+ n8 ^
   
& }% [- r/ g! q6 [7 v内存监视点指令: wp, wplist, wpclear
1 |2 M) u1 y0 g+ [- G6 v/ F( _    例子:: @7 i5 b- h6 Z$ \7 W
    wp 1234,1,r/ J6 q3 Y3 J( P* R& }4 T
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
& e2 }5 ~! K+ U, i' o+ j9 M7 z8 a  F
2 N' v- d0 }2 X5 O  p    wp 1234,2,w6 _+ u- o6 ~6 M) D! e3 s
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度21 B8 L  W1 Q5 s  V9 D* o- `
     
$ W2 Q9 a  I+ E    wp 1234,6,rw8 A0 p$ W* C7 ?( @1 r; l
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
( ^7 f0 j6 F3 \& H# K, ~4 T0 n2 c' w* t9 B6 C+ }% H+ b' Z
    wp 23456,a,w,wpdata == 1
3 A: Z4 L( b: v      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
% h& B- q7 v  K+ \
, \" F2 ]$ l- V$ z7 f    wplist' t. b& Y4 V# o( t# \4 T! b
      列出所有监视点
1 p. u* R& n" B* e2 r3 i9 V5 G6 ?# k6 ]( h# v. b
    wpclear 32 N9 g$ Q& K! U7 T9 e4 I
      删除编号3的监视点1 S# l. c7 J1 I) ?% ~, {, n1 e

* U. B0 c# D; |: F' |! N- o3 j    wpclear* b4 Y* K4 h" _* `8 [1 h
      删除所有监视点( r: c3 v8 c6 {4 V( N
0 T+ Y! |& k9 W( y: ~7 F
      3 f% Z5 W$ w; ~. S# M

6 l& L5 z4 M% A# \  b% Q2 U& q程序断点指令: bp, bplist, bpclear- m. O0 U) @" e5 r
    例子:% J7 I9 G2 D% |* Z: e4 T  i
    bp 1234! n5 f0 y6 b% j& @. B
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
/ ?. F% v" m0 q7 A) K/ f; i* {6 ~) T1 p( b* ^- F* c4 E( F
    bp 23456,a0 == 0 && a1 == 0! k; y1 E. I- \0 F* O
      在地址23456下断, 且中断条件为a0等于0以及a1等于0, O: M/ ]: S! y2 d2 V0 O
3 G: X/ w9 l) `, W, f
    bplist8 N9 ^5 l* M+ P; [
      列出所有断点
2 R+ E) Q, Z1 S
, b, [2 K% R8 Z, X1 L+ `    bpclear 34 V1 P# o5 E! v3 H. u
      删除编号3的断点
2 w; s6 V* O9 I' G* a3 V5 ^, d8 \0 {- H
    bpclear
+ B; j* n3 [( S      删除所有断点
8 C; [/ m- Q" K. r4 F) P
8 `' k- Y! Q# s, o  x      
8 y. e( h/ c0 P) E# H) j5 V      
8 l! u3 w: ?+ q- q, I/ j. i8 |跟蹤紀錄指令: trace
7 W: F1 L4 Q. ]    例子:' S# e" Q* Q0 Z6 a- i1 o
    trace 01.txt
) H1 Z7 q& ]' ]# l) J+ y- {    跟踪当前CPU运行的所有代码, 输出至文件01.txt
' F4 R6 N; `7 @0 K8 ~! V3 e& h+ b- a4 K5 D; F* U
    trace off
1 D- A4 z& P  C    停止跟踪, 并且关闭文件
, X) a* H: \6 @
  g9 f4 K' X# _6 ^* D+ j4 a& u    trace 01.txt,06 x0 U$ f( m  \8 `8 @
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt- A7 u+ p6 J7 c0 j0 t6 E! h
3 s0 x& }5 H: \1 |5 T0 K
    trace off,0
, d3 i8 n9 {  [! A& {- V    停止跟踪编号为0的CPU, 并且关闭文件
9 i3 |3 y5 P! H$ U# o4 Q( @/ X! g4 N& R0 L0 w8 S
    trace 01.txt,0,{tracelog "A=%02X ",a}4 `, `; h7 _5 G
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
- N( C/ a5 s% l3 v4 o+ O    并且在每一行的前面, 写上"A=a "# B3 k# e+ ~! S! J
    "A=%02X ",a为一个C语言printf函数常用的输出格式5 s* h* L# }8 p( I9 {! [
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
' g% L! l; A. r5 ~. H    X表示为大写十六进制数2 b$ i# I7 x% T3 Y$ j
1 p/ O* y; t3 z2 {
  ~6 N+ a0 Y% K+ R2 f3 s  y* m
) Y9 H5 t5 j$ w& |$ |
内存直接写入指令: maincpu$ k5 O' X, _$ R3 x) @( E0 e# \7 @
    格式为 maincpu.[][]@地址=数据/ W0 {4 S$ I6 t6 k
    第一个[]:& F9 d" f# B9 o, c3 |' _. n/ A
    o 表示ROM地址5 w( X" i, U3 e- [* t: j7 n
    p 表示RAM地址
; z" u1 F* _- H& j
, L( ]) V  N4 q    第二个[]:
% g. d0 ?! |* Y( W1 I    d 表示4字节5 v9 @9 \0 J  W& u2 S3 _) a# X
    w 表示2字节
3 y) s/ x5 s# E7 _5 t; N    b 表示1字节
5 y2 X- I. W. }6 ^! b1 Z& X0 x0 `2 [9 P, V) ?
    例子:5 t+ w# V8 s  \& a' c
    maincpu.ob@1234=FF
  W' s8 l. x1 X; H  A- \' G: O    在ROM地址1234处, 写入FF一个字节
% _$ @3 t' V' V# V" _# j, x5 k* C- t4 Y; X5 A
    maincpu.ow@1234=4E71! G0 ^: l1 D9 T7 s$ w
    在ROM地址1234处, 写入4E 71两个字节
# p0 |' @0 c9 c
9 ]5 \- S  j2 M8 q1 q5 [4 Z: J; x    maincpu.od@1234=600A4E71
7 n9 H' R8 }* q: S3 k! D$ f; Q    在ROM地址1234处, 写入60 0A 4E 71四个字节
  g7 Z+ f; I% P+ a: X, o, c- ^! D( N0 r4 I, D
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写2 p' \1 d4 A! m- b. _" q) N# w
   
$ ~) p# ]3 G9 v1 _! l
5 ]/ o0 x1 R0 X7 U3 W) |其他:
' ]  }& V7 T7 k, m+ X9 B+ E    dasm 输出档案名,地址,长度
# \3 N3 b4 U- w4 M0 I% [7 j& b    输出程序的反汇编代码/ \# B. ]* \! X% i
    例子:
( ^* B( k+ @6 e8 }8 B  y, k    dasm 01.txt,0,100000. K9 x6 ~5 t4 ]$ g' D
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt! C* Z9 W+ H, U+ B
) g6 P- N% P: s8 U" p" u
    softreset2 [# S" V$ o, G0 X, o3 d
    游戏重启, 但不重新载入ROM9 f" A) _( W- V, U0 N

* w0 v% u* j- }    hardreset
* H' ?  F5 a' y" x0 b" F    游戏重启, 且重新载入ROM. \- a: a+ \0 S- K

" \# a$ w: a  n0 I( e+ ]* d    snap xxx.png# y) O/ L5 h7 c( U' }
    截图为xxx.png+ M: C6 H6 s% y

: a6 }% Z& t/ l0 D8 G; x; U  
( b  W2 v2 c) G% E4 i" x" M  
8 \$ v: W: x( u1 f" b  7 S6 U; R: q) g
热键:
7 U$ ?: Y* e2 p. h1 ]    ~ 中断游戏
$ T6 l9 i; ?; K. y; s    F5 运行游戏4 R  Y. `9 l7 u! }* E% [! U. h
    F12 运行游戏且隐藏调试窗口' ^+ n9 Q: M+ ^, R) v% u
    F11 步入, 单步执行, 会进入子程序9 z  S/ h+ g+ z' c: ]
    F10 步过, 单步执行, 不会进入子程序
8 P# v' S+ w/ T/ W2 N) [& A    Shift+F11 执行到子程序返回
, ~' L' N! |. q2 |9 _/ {    Ctrl+M 内存浏览窗口% B* ^( g: ~8 F* j/ n# t
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
: R5 l# ^% P3 t0 R6 ^, A. ^4 M& H( Q9 E6 b9 a* l) d0 l
{:4_94:} ' V! w7 Y* I- }6 i2 q

/ _, c6 N2 w; H

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2583 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。" A( X/ ?9 w$ N! q
/ E2 ?: ~0 Y' u9 U" _* H, A
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 | 显示全部楼层
要详细些的东东
! |) a- a1 B. z2 w4 U4 U11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-4 04:14 , Processed in 1.074218 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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