EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
; f' ^  a3 q7 u7 }( y; B4 p3 e
很快速的整理我自己常用的指令
8 E) [9 G+ S6 y
& q2 e! d8 A6 X/ E{:4_112:} 4 U5 M" }, j! A

2 ?$ L7 n0 Q2 g+ [MAME DEBUG常用指令' a1 E8 S% x" x- \5 A
- ]; N/ P0 Z, E
内存搜寻: ci, cn, cl
8 b; m- s/ \. k2 v
2 ?2 ~1 t7 `( H. p    ci
- ?+ w3 G/ M: O    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
2 ~* s4 f* W, v, M( g
0 v* A6 Y( d5 u- H    cn
9 R% `) c( ]. O& V# {  x+ H9 {    搜寻指令
! L6 c& {0 a# r& I" L9 @    例子:0 ]; v9 J5 A+ d" M# U3 \
    cn eq,60
( j/ U$ [: r) B    搜寻目标等于60 (十六进制)
) d* ?. P4 p: D4 {+ d: v" n        " B6 O: P/ ~# _* L+ N3 Y
    cn eq,#967 ?' a: j2 _+ Q8 w- m
    搜寻目标等于96 (十进制)
3 [; ~/ j# \; j2 A
% Y8 M7 b# l( k4 @) B, ]    cn eq) `6 N+ G$ b/ @  [& S! f
    搜寻目标的数值没有变化
# W& r5 U- l4 b/ F" r6 s. k. Z: d  O8 P1 O4 n, r0 {: h7 \
    cn ne
& T5 l6 _* m/ N8 h    搜寻目标的数值有变化$ S0 E9 d8 m, v4 d: ^8 s& h
        * m# I* l! Z5 b4 Y. W& x
    cn +
1 F+ I1 Q* R( s' ~/ B/ w7 [    搜寻目标的数值增加0 j7 X% Z$ l3 g  J( ^
   
. B2 O2 h1 E& W; p" p4 t& s4 n    cn -/ r. g0 C0 Y' V' w/ s% E4 u
    搜寻目标的数值减少
- U/ }, l& m" `5 U        
8 f0 v- ?5 g* J6 Y" n, `  i& b    cn +,3  x) A& f' d" J4 F* a, X5 b: A6 T
    搜寻目标的数值增加3 (十六进制)" L8 X( c. g* I. J' I, L% t

+ q. ]+ Z$ j1 H6 |: S$ E    cl6 T. F+ L2 k) F) v
    列出所有搜寻结果: x: a7 ^# V& f

! S% D' {0 b$ [/ {- I/ b! n    cl xxx.txt: p5 E- d+ n6 D& \& k5 F
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
6 u) j% b7 e- k( ^7 j8 S
9 h( J" N2 M: h% I. T1 D    ; Z3 w5 C; ?' w7 p
内存监视点指令: wp, wplist, wpclear6 v! q0 J0 r- h. f
    例子:* Z; @# l) o0 e5 z0 `8 z
    wp 1234,1,r
6 I: ]! E8 @5 v3 Y! e. [" o      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1. N3 B- W) y6 V- T. }8 u+ p3 L

$ [& S4 N0 Z/ `    wp 1234,2,w7 _  n/ @5 A; O0 H: b2 }
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
' ]1 M; M* a8 o9 V" b! d     6 x( Q: U( n& N' Z, @/ ~/ B
    wp 1234,6,rw
$ F! D2 v2 s8 g      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6( {+ H* i; P5 z; E# m
% {9 B1 U- G, d& e
    wp 23456,a,w,wpdata == 1
3 ]6 n( l+ p  [% p0 p- F( r8 l) k      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
- a3 Z+ R8 k0 V  R! N  ^9 W0 T7 _: F) ?# @9 a
    wplist% m/ c) F7 Y- F0 k" P0 E1 {
      列出所有监视点
) C! J  F' t1 n
2 ~4 T* i, g* T6 r    wpclear 3
3 `" |* ]- V0 Q; I! K      删除编号3的监视点
$ r1 I( o8 m5 K# ]" u
5 ?' m/ O( B' `$ I6 V  r    wpclear7 x1 g# n2 V0 U3 o$ f& v
      删除所有监视点7 N/ Q! i  c* l. N1 p

0 E# b# S! X* e, H% e: b' _      
# q5 u/ T+ [* ~2 a2 Z+ A$ d
0 M# Y1 R# D' ]4 o9 ]! @+ Y程序断点指令: bp, bplist, bpclear
) K7 l" b% A0 X- D" K+ U: J+ }    例子:* o/ S& X0 c& x7 A2 S2 P2 ^
    bp 1234! _' V( W8 ?1 o7 |2 ~$ J
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
8 p# o9 g' U  T$ }6 w
  c6 N# ?4 }) s$ d8 P    bp 23456,a0 == 0 && a1 == 09 r1 d. y/ h7 X/ ]
      在地址23456下断, 且中断条件为a0等于0以及a1等于0  z2 K1 j) ]8 Z

  _- ]8 B! x' ~    bplist1 G1 h" ~0 W) o' }: O# X
      列出所有断点7 H* M4 [4 p: i. l, ~
8 a0 _  O. e+ A  h  ]
    bpclear 3
8 s. \+ u' q) C/ ]6 r9 u      删除编号3的断点
1 F/ G: T  A, a: |* ?6 b
0 Y" ^5 }- m7 S# k! P2 i3 D; G, j( G    bpclear
% h+ B+ W' z8 X: J9 D# ^7 m! _      删除所有断点/ ~  G; {1 ?9 n! ?( I

% ]( A$ {* }7 D. o- y+ C      , z2 i4 f" h! n0 w- K* z
      1 |, K8 M# K0 E( E- s0 w
跟蹤紀錄指令: trace
9 p( K4 }% x% H    例子:9 f2 X2 j" x/ @8 r) A! h. ~2 |
    trace 01.txt
: d2 k6 F2 r' T) V7 Z) Q    跟踪当前CPU运行的所有代码, 输出至文件01.txt' j5 p7 i* f( K( `2 X
0 n( u4 D8 C# E
    trace off& P1 [( K- v: s* o( q+ J+ F  d7 [% b! b4 F
    停止跟踪, 并且关闭文件( d# F! G+ f0 ]" m* c; w0 l$ k
+ u& X3 F. a0 N* F# M; i$ F8 B
    trace 01.txt,04 N) V4 A  u5 t8 P9 t2 B! R3 U
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt+ l" e+ y- g, X/ s) |& o+ H$ f

- v, O8 [0 \" h' X8 V) c& M7 \    trace off,0
* o& L4 H$ ~2 ?/ O9 [+ V( e# \2 u    停止跟踪编号为0的CPU, 并且关闭文件
7 r6 W2 g; Z2 u* n7 Q8 ?, `, P$ c' q  V1 x) l/ @2 t1 _: z  I& r$ B
    trace 01.txt,0,{tracelog "A=%02X ",a}
4 Y% m9 L! L4 r    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
9 }" V( O, C* _" F3 g) l    并且在每一行的前面, 写上"A=a "
" m  z3 [- G) J  O, D    "A=%02X ",a为一个C语言printf函数常用的输出格式
; r4 f9 R, F0 k4 t3 r0 h    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入1 M# w% v8 C) z. p1 L: U
    X表示为大写十六进制数4 q( L& h' E  _# l- H6 i  X1 O
2 {+ S" C) l3 _/ w: }9 f2 ]

" G4 }$ F" Y  b
; u2 ~: T+ k" P内存直接写入指令: maincpu1 u* D4 S7 ^5 W# j& j. u  E
    格式为 maincpu.[][]@地址=数据
  c5 m/ w  x1 C4 U% t: o5 T' w    第一个[]:
7 G3 R# ]( Y9 q" _: ?    o 表示ROM地址
+ W2 J$ p, X" q9 I. U* n) X/ f    p 表示RAM地址" P. t  t1 [. m8 _7 r' h& A) b
3 H5 t% e$ ^- N- W
    第二个[]:
. _4 P% u5 s8 j: S7 y; {    d 表示4字节
6 i0 f; e  a6 l0 |& [/ ^( g, b" G$ @    w 表示2字节
. K) b7 l" K/ e6 P6 R    b 表示1字节# n7 A; E9 h+ ]3 {' k7 M" s1 w

1 P+ ~" p  D# T    例子:
% R$ j: i; D1 q- s$ E+ c    maincpu.ob@1234=FF2 a; l3 y& _% f8 J) X# O, j
    在ROM地址1234处, 写入FF一个字节
% L- v) @( e, I
3 B$ A0 e( @! x2 U/ G% ^    maincpu.ow@1234=4E719 n8 L! a' h1 T9 C" J* j
    在ROM地址1234处, 写入4E 71两个字节
' i  G  P0 s# V) V5 S: {4 N
& f9 O% F; P( V4 I8 w( E    maincpu.od@1234=600A4E719 w- s( Z$ u+ z1 w
    在ROM地址1234处, 写入60 0A 4E 71四个字节6 G8 U( r: W& w9 T

1 M# c: O( d( r0 s, W  g  g    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
) a; l: E& L2 Q( A2 M8 A& y   
3 T) y" d, A; m# X
( g  B1 p! F  s' `3 z5 I其他:! Q. U$ o1 G; m: c. W
    dasm 输出档案名,地址,长度% l+ q4 _# s/ [3 d3 e$ [
    输出程序的反汇编代码
( d# i+ ~8 H0 |& J; b& l2 v    例子:+ n  t$ b  k0 c1 N' n) q
    dasm 01.txt,0,100000
9 C3 c9 ~# h- W8 S    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
9 q+ h! G" U2 l3 O
: i* [3 Q$ {: }  j  l3 i    softreset
. X( M6 c' m+ L2 H& V/ Z. e7 ^7 S    游戏重启, 但不重新载入ROM
5 \5 c# w+ h, B% ?5 o6 @  i
& I2 d6 l/ M( s, O8 @% n    hardreset
9 Q( h4 e7 l; G; _+ a    游戏重启, 且重新载入ROM
, O5 X( M9 ?+ P* s2 u9 C5 S; R
4 K  }3 [( i8 N+ O    snap xxx.png: U/ K8 ?& Z; d* Q' A
    截图为xxx.png# _3 S/ r$ H0 y5 `+ Q3 a: K

, X& T6 a, e( X  , s& K5 g) [9 Q3 V9 M! Q# r
  + u7 j( L8 {, D0 P. T: a6 _
  
5 [7 @% _: }# _& x热键:$ G' a. a' C7 h* K3 N
    ~ 中断游戏
2 M+ h  c7 ]1 |; s+ c, x3 q) P    F5 运行游戏
2 W) p* t  {5 r) N    F12 运行游戏且隐藏调试窗口
7 ~) J' R' @: F# ]- j$ ]    F11 步入, 单步执行, 会进入子程序8 ]# K; Z( K  q& M6 K9 g
    F10 步过, 单步执行, 不会进入子程序4 T. Z( S# f# x& ~5 _- S
    Shift+F11 执行到子程序返回
0 w3 B2 u4 l$ B7 H, h: l    Ctrl+M 内存浏览窗口
- `7 j' X* U( U3 e+ |7 B% A7 T& G    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU  |) m& {. V; c; V* k" x7 }$ Y
+ m+ @: E1 e) J+ q5 W/ j
{:4_94:} ! c& _0 f4 g9 |) Y- A( S" ]
1 T  D2 k0 Q, P$ P/ L8 p" v- L

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2548 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
- Z$ Z8 g$ F+ \) W9 @* g. F; J1 q" @# |8 o0 m
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 | 显示全部楼层
要详细些的东东2 @3 {& m9 f! [- G( g: D6 f
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-25 06:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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