EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
1 D. r, y& l+ D, B; ]1 L
很快速的整理我自己常用的指令" E& O: ^, N- J% [& i; x8 H

# ~( R0 T1 `6 q3 [. Q1 g{:4_112:}
3 Z+ b6 S7 d1 b9 f) w2 e3 V! N5 c$ }" X
0 ^9 w( f* ~: f3 k- jMAME DEBUG常用指令& Z! d0 b) x+ W9 M2 O
( e7 a& X. o" ]" ^/ H2 e3 b
内存搜寻: ci, cn, cl
0 p% {) T& y. M, I9 X; d9 |2 u3 N  A2 e( U( T- f; L1 W
    ci. N9 ]& v8 t% z( H
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
' J, c' x7 c* n6 w) @+ a) p3 v
" s( y8 H6 C' ~  Q; C    cn4 Z0 g' d" `1 \. s$ Z" z
    搜寻指令* |% i& \, A/ P/ B* z
    例子:9 y: S( t. L7 ^; v# S3 c: |
    cn eq,60/ b7 x" S$ h4 x$ l% I" E
    搜寻目标等于60 (十六进制)8 C9 _' g2 g: b" C  x2 W7 {" S
        
+ N3 E* t& W% V+ U- S, {    cn eq,#96* \2 A* z1 G, o- E% h0 N& A7 H; E  m
    搜寻目标等于96 (十进制); _4 ?2 g; v$ D/ o
! u& ?: \$ \! z) G# Q! ?8 x
    cn eq* H! Y2 z- n0 _+ ^( W
    搜寻目标的数值没有变化
/ c# u( @. b4 G: R# x8 S3 c* Z9 x0 |3 h7 _3 s' u  b
    cn ne
( m8 J3 z8 ^/ S: ?; }* r    搜寻目标的数值有变化
2 N9 J4 r8 q& @+ m9 M2 s        2 s2 }# y7 W9 u& c6 N& l, @
    cn +, Z( D. T8 A1 u) X" l
    搜寻目标的数值增加
4 c( i6 g6 b2 \; K. n" r    : u( x& j1 \  N+ C5 _5 e
    cn -, U" a! u- Q' Z# N4 r1 G
    搜寻目标的数值减少1 _' f! B3 g3 I6 p) i6 v! s) f
        
" q# v, r3 Z' H* e) F    cn +,3
: i+ C( F% f% v- ^    搜寻目标的数值增加3 (十六进制)& Q) b$ _+ I5 W
. m9 I' U  b4 M! I
    cl
, ]: G, ~" M% r    列出所有搜寻结果3 z6 x9 |1 Q) ?# P- @

) D# P) C; [8 N1 I3 o- B& T    cl xxx.txt# i8 ^" s3 z+ D& U
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式" w$ E! e2 C$ ?! S6 d

6 k' x3 @7 I; d    : R5 W3 F* q, u* \# ?- q
内存监视点指令: wp, wplist, wpclear
# x3 t% Q4 ^8 \3 T3 |3 j2 @) G    例子:
, _* ]- O" O1 Q( c& a2 O( }# E( U    wp 1234,1,r$ s, B# b) Q* L6 Q$ C! L% K
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
/ `/ Z* S0 J& I9 N! w  w4 D4 Q
1 P) i; L/ R5 i- `# n, h7 W    wp 1234,2,w9 a8 y1 q+ P  Y+ H5 @2 s
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2* [, D1 j/ ^' N6 W4 _  b
     7 p/ N8 T, `  F1 [
    wp 1234,6,rw  h: s7 S. A4 Q
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
; p( L% t1 {" ^; E# g2 p8 c% _, a: t% D. R5 s; x
    wp 23456,a,w,wpdata == 1" c/ C) T5 X2 Q+ h
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
9 \' T. \- P' ~6 o& R/ e' X0 U9 A- e8 B3 e; M, M; x+ m+ ~
    wplist; y( T. l0 u- k0 F/ ^
      列出所有监视点
3 |/ J: S) s1 t# h  E; i9 o
* u( B& z  {& c0 F6 a' v: b    wpclear 3
. W6 ~( y5 i* B! _      删除编号3的监视点# j) {( P  {$ e& [, i
" W: {' o& e) L
    wpclear* v, G! i7 D% Q# x& ^, @
      删除所有监视点
/ G/ V: m1 h, p% Q4 Z) g; Z
* H- w1 ^7 m( v# A      5 g! O- q6 P6 W" ]- s

6 _3 _) q' [* G8 V4 z7 ~1 T7 Q+ }6 T程序断点指令: bp, bplist, bpclear
, Q. y: Z+ h$ D8 T" X% n    例子:
4 w6 x& Z* i( U0 a    bp 1234
* \+ U) o9 n, U8 i  m      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
! n1 B  L# ^/ L" T: }: a1 ], ]
  @% E; j/ O. t' J0 t3 ~    bp 23456,a0 == 0 && a1 == 0  i- `6 f! q$ u" r2 f
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
4 _# F2 R, f' o7 f2 @
5 [1 [+ a0 @9 K1 a    bplist
% k4 A, ~( t9 y2 i; f4 a      列出所有断点: D. n1 ~! k5 Q/ ~

, W# J+ }! r3 i/ T: }    bpclear 3
& u1 N; Q1 Y# h      删除编号3的断点# _  G$ k7 G4 Q6 r9 }) Y# J$ W  a

0 k9 {" u6 Y1 w% j9 [% W2 [    bpclear
  z+ _1 T8 a9 s. r8 R+ n4 Z0 c! V      删除所有断点
' V, G6 }8 ?; W# C5 K, ]3 n
6 P) M' |7 f% X( g2 K& B      9 S1 ^8 Y# M4 y; ~- K3 w
      
% @5 c  }  g& U# u& H2 N& T跟蹤紀錄指令: trace
) i1 a/ A9 Y. V( Y    例子:
' _+ Z& y( D1 @0 ^    trace 01.txt% C) J$ ~! l4 c4 J% y
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
# ~& h+ G! T1 ]  y, g" e6 a+ P" x  B4 f/ l
    trace off# y  D6 w: Z$ l6 E
    停止跟踪, 并且关闭文件7 k. d2 ^, M% F5 }$ C+ z
" X5 Y8 d4 o" y5 [1 s, n) F
    trace 01.txt,0
! V. M* |# G& ~, n: T    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt. ?- v( R2 [$ B8 K2 u

( Q* q1 T* M1 N, ]3 i    trace off,0
' n; ?9 w- e. Q8 f* Y6 i4 j    停止跟踪编号为0的CPU, 并且关闭文件( n3 ?* _$ b  F5 d6 [1 {
% }6 N  {; Z2 y2 p$ q3 ]7 h
    trace 01.txt,0,{tracelog "A=%02X ",a}
' L; h* P! C* t    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
1 R3 I% j# R# S1 Z. }    并且在每一行的前面, 写上"A=a "4 t5 l& ^% m8 f3 E1 P
    "A=%02X ",a为一个C语言printf函数常用的输出格式
* K0 [4 T5 I" {  q$ q4 d( o( D- }4 L    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入' W7 _4 J- e# V( x1 U
    X表示为大写十六进制数
; k, e* {. v1 a( r, A* l8 m
; B: V3 I: O3 ~, r' |4 h  }
. ~: L8 G% P9 i9 }0 A
( a5 x3 K2 @1 y$ c$ A内存直接写入指令: maincpu2 y3 S  j" p$ E% W2 c& Z4 D* E3 o
    格式为 maincpu.[][]@地址=数据
8 t( a' H% l  \' ?9 _. w    第一个[]:
7 t7 j0 A# O# Q    o 表示ROM地址* x$ K5 A: }& [+ X  A* }
    p 表示RAM地址1 N( A+ t; f: I- Q. Y2 U3 |! f& Q! U
  C4 n. D. u7 ?7 H/ i* I2 [
    第二个[]:
; G, E; K/ v# h. i: e    d 表示4字节. |8 [' }1 W/ ^$ [" C& T
    w 表示2字节
$ |) r6 T6 k/ o! a  C$ v8 r- y    b 表示1字节
0 q. k6 `. P8 {
1 W3 k8 W6 N- P6 U    例子:5 B% a3 Y1 v- w; q: X2 L% A) |
    maincpu.ob@1234=FF6 a+ }. T$ B5 t$ M
    在ROM地址1234处, 写入FF一个字节% y0 R( C0 x% |3 c$ _
. \, H) z) l! G$ m( l3 I
    maincpu.ow@1234=4E716 s) u7 U& B7 @& f6 G  i, t
    在ROM地址1234处, 写入4E 71两个字节9 J% p0 `" y2 z# H2 x9 g; W' x0 [
. |7 \0 j5 z6 L
    maincpu.od@1234=600A4E71
! ~: u( {% f. {! E  J    在ROM地址1234处, 写入60 0A 4E 71四个字节$ c% J- O5 `8 G0 @7 t- ]

3 A8 m5 E3 q% ~    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写. p1 W  ~! x, n% x3 e
   
* P+ e1 H0 t3 x/ P5 G6 ~
' u0 ~, d5 u. {, G9 S1 f+ _其他:" X9 x" x. [# Y# b% b
    dasm 输出档案名,地址,长度% X! Z( l1 h  n/ q7 ]$ q/ L, s6 y' y1 W
    输出程序的反汇编代码! O. G+ N4 C1 l: i
    例子:  D, e; O! E( z8 j( r
    dasm 01.txt,0,1000006 ]1 p' E' [# I: [; m$ c; ^0 r+ T7 \3 W$ g
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt, T( F4 a$ I; O* F

) e$ w4 `# N/ Y9 W    softreset
; N8 E2 x1 b- t0 c$ J    游戏重启, 但不重新载入ROM
5 \, X$ I' n& \' ~+ J4 z, Y
7 j- Z: A1 _/ i5 L    hardreset9 G# {+ c( k- v2 h7 k
    游戏重启, 且重新载入ROM
8 O( V0 r; l+ |( m6 X& Q- a
) P! `9 G7 Z6 q* g& {! K    snap xxx.png
' j6 |  Z, t* U* V  w  b& ~6 h    截图为xxx.png0 L+ m+ B/ k) n. v/ g

' e) T2 X6 }7 D7 g! Z  
3 s& s' P6 s. i8 Y8 g( I  
* v5 k* E: Y& b  
2 \. t2 N/ L& g! U7 G5 @" ?热键:% }; b2 H# |" J* O* N" I3 S, t0 |
    ~ 中断游戏
. e) `  r1 H8 B, r2 r7 j6 ^2 E1 b& N    F5 运行游戏/ k- O' c7 p/ H/ ^* E3 V
    F12 运行游戏且隐藏调试窗口
6 `2 ~$ @' j! T( Q- y3 A    F11 步入, 单步执行, 会进入子程序& P. B; o! G5 n9 d
    F10 步过, 单步执行, 不会进入子程序
+ J8 K& r& h; S9 i  j    Shift+F11 执行到子程序返回2 O; g2 q5 n9 J2 q
    Ctrl+M 内存浏览窗口( t8 a% M$ ~3 w! Y6 P4 q# b; R. V
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
# H* j0 N) I+ o9 @1 l& r# G" e7 y  K- E8 K; P$ Y( r2 t
{:4_94:} # b# X! [0 b1 c( D( t$ c

' e* B% C; w+ ?( h

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2586 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。8 ?' S: c4 v/ }, q) v; |
) t. r: ~6 f* K
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 | 显示全部楼层
要详细些的东东, n' q7 s; E" f8 a
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-30 03:40 , Processed in 1.083008 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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