EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

+ G9 ~4 \5 {1 j很快速的整理我自己常用的指令1 E) h' L* o/ ^9 V

  `1 _/ q0 z( h, v{:4_112:} # g( ~/ J3 \( t
& D0 _7 n5 q) r+ i  X
MAME DEBUG常用指令
. J5 T; ]" \! B; H4 [2 ^: D* C2 A" B8 I9 ?9 j: a$ I' C1 Q% @/ _
内存搜寻: ci, cn, cl0 j0 n% {% Q- j% b; f

- s( l' @& I; M9 h. K' t, e8 R    ci. B9 y' t  r# ~, D" l
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
% i' D; a' n$ q, V% j# L0 H5 V. {9 @( c8 ~& r) N
    cn
- ]9 X; a4 p/ Y! f    搜寻指令. h. t& j) V: B* E
    例子:
! ^- I2 ^0 C: ]+ i6 O    cn eq,60
" _" R' M& Q9 v* R0 K    搜寻目标等于60 (十六进制)
$ T& c) E9 n7 K. L/ \7 ^9 \9 L. o        
" g' p+ M7 F5 @0 P" E; O    cn eq,#962 C% R4 c$ {0 k
    搜寻目标等于96 (十进制)3 x5 _2 j7 `3 x  h4 Q6 V/ p) K

) n2 f3 X4 [% x1 j    cn eq0 o9 W6 m: @. t0 F* C/ w+ ^4 v
    搜寻目标的数值没有变化( u$ ~4 X' R+ W6 ~4 b7 d! [
3 Y* x4 W6 l4 T2 n0 _& Z( C( ?
    cn ne( Z) d8 D( z. u8 I" b% p" F; B9 e
    搜寻目标的数值有变化
2 _/ X; n% Z1 q4 L. Y: x. k# `+ w5 H        , y9 E& |8 Z  u
    cn +  `: P/ j( g8 A. ], o
    搜寻目标的数值增加/ s$ f6 r1 c! v2 Y. y( R: D2 P: l+ r
      L  Q2 s) D# D; p/ Z
    cn -4 Q9 R7 d/ f( \* H8 Q8 s9 Y
    搜寻目标的数值减少
7 M9 N+ Q( [: E' l4 p2 I8 Y; _: M        0 ]* {  u; R" b! c
    cn +,3
! l* M+ L. z( s' V    搜寻目标的数值增加3 (十六进制); u* Y; \# q" q/ o: Q2 @( T
( l5 B( \4 ~: Q+ g
    cl9 C( t) o7 B% J8 a' n0 K# S
    列出所有搜寻结果" G" }" V9 j  O! X$ |
9 Y* T/ ?4 ^8 P! U! t( M" |" y
    cl xxx.txt
* a  E2 z. b( z2 ]1 O: T    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式/ ^+ \9 W  U. c

* I% @1 X. R: k- c    - F& X2 a% y) I& g! I
内存监视点指令: wp, wplist, wpclear5 S6 h: h' H- I# ]# b0 n
    例子:
$ O: ^: p4 Z) m  S( M" P    wp 1234,1,r
9 D+ G2 b" X& d, V8 h9 @* g      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1' Q1 A4 b/ z$ _: Y' l" ?

: w$ @" t% c2 _3 C" T5 s    wp 1234,2,w
7 i8 u0 z+ j) m) t      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
$ j- y: p) Z: k" n     + d& z" q" r0 V" _
    wp 1234,6,rw
' e8 N& `  w) |& ^9 _2 z      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6* r, p! ]2 _! l8 {/ l' Y; [- u
; y% S8 B. H2 {8 B
    wp 23456,a,w,wpdata == 18 e  h0 a" ^+ S3 E
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1& c8 z. J4 m+ }$ f3 `. D

8 u: c3 r1 Z8 J# a8 [    wplist
" N; S7 V, a; y' {/ B- o8 s' G      列出所有监视点
3 x; v) \5 t( z; E; d* R9 p, g$ W* f4 f7 j- P
    wpclear 3
: y) B3 o6 ]) e. R- k% m& |8 N/ d' M      删除编号3的监视点
$ r4 C/ G7 F4 _7 ?7 k1 G+ y& E3 t9 H; A0 P9 x0 _; p
    wpclear& l1 @1 @4 u% N4 [- G; A
      删除所有监视点5 p5 {+ v4 b/ t
1 y/ e# f) f# Q
      # c& A$ J$ H; L3 N1 b
6 Z  X% t5 u& e0 C& r: d
程序断点指令: bp, bplist, bpclear& g- K7 [. `3 C; p1 M
    例子:
; a. D% d; j" U' T& L' R- C    bp 1234
# v# P1 g7 i% r      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
$ b% Z5 R* c8 z7 S8 h2 Z8 B% s' z( y* m2 X# i6 ]2 V$ q7 T0 E
    bp 23456,a0 == 0 && a1 == 0
8 [% X: \$ G. ~8 h5 G# W      在地址23456下断, 且中断条件为a0等于0以及a1等于0
8 {. W: I" F' v' H
6 w" S+ `. k1 U3 D; I1 s7 j) V' s    bplist
6 S. k4 L$ s4 m5 F1 I      列出所有断点& n* J/ P! ~2 R1 Q

  F+ E- P  N) |% F( e& W    bpclear 30 `3 o4 X9 h: y0 L. f  F# R$ N4 d
      删除编号3的断点
" C7 E/ \! G( H, X/ j- W* Y. s5 {  B% O0 z- d1 m8 s0 |) [& d# p
    bpclear+ b; }, R! ^; d
      删除所有断点( i) M7 d6 v8 O) @
. {8 v- h; K* E+ g6 I( [; y. H
      
/ s5 e/ X' \: ^! T/ n6 Z      
3 m/ h3 N7 ^" U; g# w跟蹤紀錄指令: trace6 V  ^' a# d3 u) e' b0 s
    例子:; M4 L* X. T8 W  k9 {+ U
    trace 01.txt4 f& v- u" ~% k* B( F. h  k
    跟踪当前CPU运行的所有代码, 输出至文件01.txt/ K9 ^8 {- f0 M7 M  c+ ?

/ B$ @7 ~2 Z4 x1 m! d    trace off
! f0 }- G" B( @5 F- Z    停止跟踪, 并且关闭文件0 Y4 }2 k) P* U) W, d

" B' Y( q6 Z$ ?9 Y& [) y8 y1 q    trace 01.txt,0
2 ~( ]3 Z6 a% c" N8 i    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt6 H/ @& Z/ k5 [; o
! [/ r# r2 z( u9 J0 t, m' ^  t
    trace off,0# i7 B7 G# X$ u' ]0 h
    停止跟踪编号为0的CPU, 并且关闭文件+ |5 S$ G4 c& {9 m" Z( L5 l

( V) \$ T+ i; J9 W& w    trace 01.txt,0,{tracelog "A=%02X ",a}6 V8 C7 P; r% i: \; {
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
) X. j* G! a, V& g4 Y    并且在每一行的前面, 写上"A=a "2 ~' p9 n) e3 l) w& E
    "A=%02X ",a为一个C语言printf函数常用的输出格式
* g) s" }6 Y0 h; g% l, c! d    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入' y, W: O" l% A+ Y# }9 ?# q
    X表示为大写十六进制数: i. c9 q) m7 z+ Y
* X( z* S8 d' f% `$ ?9 N
+ X; S" q) F- T7 E5 u
7 h+ x. l! }3 e1 F! g- \* j' t3 |
内存直接写入指令: maincpu
+ D. @7 G& r# R, r6 I  ]    格式为 maincpu.[][]@地址=数据
. Z- {% G" V+ V* S, |; u( J    第一个[]:
  a1 I% L9 o' e    o 表示ROM地址9 y. D9 z4 I6 t: ]/ p4 L/ s0 J, B
    p 表示RAM地址" n3 T* X3 z" ~+ Q# l  [7 X- I% F
! k2 E) n$ {: V0 }3 D* l
    第二个[]:
1 |; }4 h$ _( {    d 表示4字节
. U# e; S- i0 n- k+ J6 {    w 表示2字节
# t* S8 q0 H# V8 I5 }0 N    b 表示1字节
, ]4 G1 @2 |$ G8 `. x9 k' J6 T7 B5 b+ ?( O* P
    例子:, [! U+ U* ?1 M& U: a
    maincpu.ob@1234=FF
" I# ^( K+ L- ?0 _    在ROM地址1234处, 写入FF一个字节* ]' @6 x6 p* z7 e+ K& |/ _, e6 h
6 V, i9 S9 Q* [9 g) `4 @
    maincpu.ow@1234=4E71
+ Y/ n. r, v8 [3 U' Z2 J    在ROM地址1234处, 写入4E 71两个字节
7 ?/ C# |: y0 B1 U) p* @+ L$ b) @5 N, f" e
    maincpu.od@1234=600A4E71$ M/ c! U, `) v/ E7 }. F5 C1 m& U; D
    在ROM地址1234处, 写入60 0A 4E 71四个字节
+ G" _% s7 q2 n! C9 @/ R2 e4 t* K9 n4 B
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写( s6 ~* q6 m; k: h
    * T) V* h' C& b* R4 q

. ]" h. e% J, C/ a& `' y. L其他:
) k9 d9 y$ L5 e; {2 d% j( |, q    dasm 输出档案名,地址,长度, `$ a8 a1 R) |  [
    输出程序的反汇编代码5 x. T% K' I* O/ e, S- ?
    例子:3 r8 a4 I3 x# b. a) s( p
    dasm 01.txt,0,100000
/ X6 S, g# v) }2 {9 _  S    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt* l9 k+ F. g, _9 E( _+ _, c9 P* n/ r

/ U+ B' k' A% ^/ p, D/ n) L    softreset: ?5 O" x0 k# F* f8 J% Q
    游戏重启, 但不重新载入ROM3 F0 @% w! j2 S% f. M* E
' \) d* N6 z6 _4 N  @7 J3 H
    hardreset( \4 l3 f/ O0 l( r
    游戏重启, 且重新载入ROM
" L# ^6 w/ j! X% c8 T+ F  p; h
' c; N' w  c& g1 U+ C    snap xxx.png  `; o  Z: U& Z3 |
    截图为xxx.png! M' \  r! w4 ~4 N
+ r+ E4 E; i' @) e$ L' B
  : [) e# v3 l& Y, x# l
  
% e+ Y- E1 J1 h( V* f  _$ @  # c3 \- b8 P4 t0 H
热键:
- s8 K' a/ I; w9 ?& I    ~ 中断游戏/ V7 K) J6 W2 U$ R8 c
    F5 运行游戏
0 n4 f4 R; |9 i0 D3 r    F12 运行游戏且隐藏调试窗口
5 X) p) [' H; @6 H) [. M    F11 步入, 单步执行, 会进入子程序8 K8 M, R* V& q; [
    F10 步过, 单步执行, 不会进入子程序2 ]4 b" r3 r4 R5 |/ O: Z* X* h
    Shift+F11 执行到子程序返回, y8 }4 g9 C2 X8 h9 x' t
    Ctrl+M 内存浏览窗口, f' }8 t$ U4 u# q
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU3 N5 \$ K! z0 P" ^
" E% t* b% v, V  N
{:4_94:}
+ }2 A3 u. |! J5 j# ~, ]; v: O* p; y
! a: ~5 i/ s- g

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2582 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。; Y5 P$ X8 E: I! `8 |$ P

6 N- y5 t' j- bPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
) t$ J2 `# @' q! {3 f11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-3 14:47 , Processed in 1.081054 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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