EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
' s) t: ]+ P, Z. v
很快速的整理我自己常用的指令
  l/ k# U  n& P. Q' a$ S. Y/ J. ]7 I, f
{:4_112:} 4 j* `/ `6 y6 ^- e! j$ [# C

, U$ n( j  c, S/ k- \. ?# jMAME DEBUG常用指令4 F! h" o9 J. a0 j/ ]+ _% e

% x3 g5 q5 S" y内存搜寻: ci, cn, cl: m/ d0 q  i+ C& e9 I# M3 X
# `+ d9 ?2 s, [1 Y, s
    ci4 d! G/ n7 Z7 d1 I/ k
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
) x* O, E7 N3 P: f; F# d% A& j' Y% `4 `% c6 {" b
    cn
' u! |2 E4 Z  _+ G/ I- d    搜寻指令0 n1 P( ~4 I* Z# J3 j# p' u
    例子:* ?- {$ w" l* H
    cn eq,60( O" o% A8 b2 `$ h* L) }+ y
    搜寻目标等于60 (十六进制)
0 T/ t- F& f+ [& n" F' P        , h  Z8 ^. k% D: R# ]5 Q
    cn eq,#96
6 ~  Z1 y' l5 k/ s& p# j8 U& k! z. j    搜寻目标等于96 (十进制)
  U! \& h) `! n/ T2 n. q  a. f! ^% f) _: ~
    cn eq
, P9 e- Q4 J/ o: P    搜寻目标的数值没有变化4 O+ `" V+ u1 \
& E0 R& u) i( R
    cn ne$ _. ~) y: S& P) Z: J
    搜寻目标的数值有变化/ k4 C& m9 d3 {$ V4 _% z5 }" a
        9 I) h) U9 \, r6 E# x4 [
    cn ++ v& M/ X4 M- u* p7 j2 N) S
    搜寻目标的数值增加( q; w" K/ e5 \. ?8 ]. o
   
( M( h* l/ u5 ~! [    cn -
- R  P: s. I2 g5 W; T    搜寻目标的数值减少: @7 |( D# L+ s3 c) O0 e! @
        
, z+ ?' W; S( _/ [& K    cn +,3' L& H$ ]9 H0 _7 I! W1 ?7 v7 r
    搜寻目标的数值增加3 (十六进制)
6 @% m& @4 x' z' `# \, Z4 @/ U
, u. v7 o& P( P2 c# U8 k, M    cl( j. r' o) N& `/ h, \
    列出所有搜寻结果
; {% P  c4 P3 T3 w8 J1 L  ?3 U8 Q5 a$ y: T0 O& ?+ G, E% v
    cl xxx.txt/ v. M  w! ~- o. r0 W9 t
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
3 j- Z2 ~1 h1 u% v5 }5 O& m/ `/ r0 g- M( M/ ^' G
   
4 O' N  W& C6 b  `) N% n* X( f内存监视点指令: wp, wplist, wpclear: H. x; m0 j0 r# J3 f: o* v7 m
    例子:
1 [5 ~% e! t0 l! m6 T; S% h. j" Z7 p3 r    wp 1234,1,r, J0 x2 I# B# \) B# w4 {
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1' }6 a; J: ]% z) x( @7 Q' W

% h& C: G! t, I" A# P/ O2 _    wp 1234,2,w
% d( r5 @7 `5 _2 ~8 K      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
* N* s8 Q# @6 o! B+ N     # `# s% F2 _' s- V3 {
    wp 1234,6,rw
* _$ Z4 y: \9 K# M: T8 P0 Q4 \      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
( _+ M# M" ~# C4 R9 m
+ q7 A0 O8 Q7 z) D' Z4 _    wp 23456,a,w,wpdata == 1  u" r4 S# `" V+ h$ k
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1: r8 P8 o( F) s5 W1 B

! Z6 {8 j: o. @6 n5 a    wplist
$ |1 \/ I! e& d2 F% _      列出所有监视点
$ `  a( Z6 f% {- c% \2 }4 d+ ^( P9 c. f# x: T
    wpclear 32 @" e2 D0 j% Y1 P% \  L0 ?
      删除编号3的监视点1 p$ h3 ]& D# e6 h2 U# B, `

9 Q. Y( l9 H" ]& l    wpclear
4 _4 X+ `1 ~2 F' R( N" X, V      删除所有监视点7 u) x* Y8 g4 {3 B; [4 W
, S6 S  v- G1 }5 ]  F0 ~3 w/ t
      4 l) |$ ?/ D8 s% o' q! m( s
8 [/ O# f- t5 a) L8 i, ^
程序断点指令: bp, bplist, bpclear& Q8 `* i& C* I
    例子:9 o: D1 Q+ ~) p9 K
    bp 1234
2 {" b" |* b+ K, i2 _      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
# Z5 D* b6 e% X: a6 s
* ]; d; [3 q: y& f/ v    bp 23456,a0 == 0 && a1 == 0
8 W, Y' t4 ^6 {+ h9 v. e1 I      在地址23456下断, 且中断条件为a0等于0以及a1等于0
4 o0 x: ]( S! e7 C2 \7 ^3 \/ R# \! z' C4 e1 `
    bplist
9 m) ]$ E" r) c! X* b# _% v      列出所有断点
! Q& ?. n% X0 {2 p* O$ A, f  H9 Y9 m% b! X8 O6 B/ Q* Q
    bpclear 3/ R- T8 M5 a3 U$ n
      删除编号3的断点
; U. m2 K: p; u& b+ c; k
0 `* i: K1 U9 t! G! |    bpclear4 f' q# G$ w* P
      删除所有断点' }$ [- Z1 D! Y9 c
9 n' `. _2 I' e8 @3 D& Z6 T
      7 E" s% A# i* a( r
      / [+ w/ u( ]4 J2 b! J
跟蹤紀錄指令: trace- I; a8 ?* @, x4 K+ G0 l
    例子:& @4 [# ~0 Q, e/ G5 y
    trace 01.txt6 G# `7 {  i! z
    跟踪当前CPU运行的所有代码, 输出至文件01.txt4 L5 x, P4 N. j
/ O6 s9 i- ?1 _/ }3 k! m9 V
    trace off. I% _; m% o9 X9 l
    停止跟踪, 并且关闭文件, [* x; y' `9 e! `0 @0 Y

3 c0 Y* \$ D% U0 T- e0 m, e3 \; a. x    trace 01.txt,0# H7 g" Q( m2 q% Z# p8 T
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
  _# M8 X1 I% u9 K/ Z4 O8 D! Z! V* h( Y+ v% @' x
    trace off,0% \: ~3 d; A) {$ f
    停止跟踪编号为0的CPU, 并且关闭文件& _" O1 q5 s' K5 \0 p
; c" U" i8 b( s* l5 Z
    trace 01.txt,0,{tracelog "A=%02X ",a}
9 v. }' W. i9 G& I    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt 0 S$ N) s) y+ n
    并且在每一行的前面, 写上"A=a "
$ s5 ]' \+ ^. K2 O9 c1 q0 \7 p/ W    "A=%02X ",a为一个C语言printf函数常用的输出格式
4 z/ x% X; C" {6 _+ \    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入3 n/ x9 P+ B4 |, h) a
    X表示为大写十六进制数
& Q# K( o+ W/ W- p0 e* K5 F2 |! O9 x6 D* f! r
/ G% N0 s9 r! U+ t$ P7 ]

: S! H6 R2 g' d7 }8 P7 k内存直接写入指令: maincpu. K7 c0 n' ]9 n' h* x: ]
    格式为 maincpu.[][]@地址=数据( j4 J8 f1 J* y/ A6 s  m  {
    第一个[]:. D+ f' F1 Y, e  u
    o 表示ROM地址
9 J" M4 c4 l+ i9 ]    p 表示RAM地址/ U& o  ?# J6 p1 a- A! l

7 J) j- F! b- o+ G, j4 G& R. c7 {    第二个[]:
; o7 O% I% M6 |6 n, ~' S    d 表示4字节
" n0 V' f; e( g& f  l# p4 A    w 表示2字节
$ f" Q- s6 T* ~- u    b 表示1字节
! B0 D$ d* ^, C$ V) o; n
+ P$ d3 @( ~) @  [$ S    例子:& X! ]( E/ p- f- P/ s
    maincpu.ob@1234=FF
  Q7 a( V& T/ Z) e7 g    在ROM地址1234处, 写入FF一个字节
) m' @9 v3 X; [  r# u  P3 A+ G; S3 A6 Z6 S+ I7 x' T
    maincpu.ow@1234=4E71  Q! J0 }8 P6 C
    在ROM地址1234处, 写入4E 71两个字节% p6 b; w$ {. f+ j6 ^0 N- o+ ?9 H5 H

! F+ d. X1 H% d: j    maincpu.od@1234=600A4E71% z- _: l' e# F7 V
    在ROM地址1234处, 写入60 0A 4E 71四个字节( U) ]- b" ^. F1 v+ H$ D/ I3 l

8 n1 F. a# Z4 o# i9 p    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
" c: X8 F# v  i  S! u   
$ ^8 x! M4 _/ O( C! {) S7 W2 z0 l1 W1 Z+ ?3 \8 o+ }
其他:8 U6 z& y9 c1 k# \4 A
    dasm 输出档案名,地址,长度5 e' l' ?2 F0 m' M+ a) }
    输出程序的反汇编代码
* _5 @. X+ @4 ]& M0 @  M$ n    例子:9 B' j) b# X1 Y2 z
    dasm 01.txt,0,100000
# h' B- N9 f. u  @3 Y    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
2 c) e' t0 u. g: K/ o1 z1 O6 |, a+ [. Y
    softreset0 n: M6 a8 ^# N. E  J
    游戏重启, 但不重新载入ROM, E" X' h! ?3 m! [4 b) L/ m% y

+ F" a9 {+ _* E* `9 F    hardreset
/ y. o: X+ {( ]) ^1 W+ T$ A1 S    游戏重启, 且重新载入ROM+ b( x# y2 [- W& p' L

/ v, B0 F* f6 x# k# [    snap xxx.png7 J7 E7 ]* a5 ?; I2 h) T
    截图为xxx.png6 z1 B  a9 V: b, L# |  j

2 Y: }% S. {6 Z" x7 G3 d  
% j# i1 z7 F* s  * c; F) U; b3 F3 Y4 t8 f
  
8 b. z3 z, g4 \热键:4 Y. p- L1 B) V
    ~ 中断游戏% q' U7 W/ C8 v- f# b9 F0 u3 ?$ {
    F5 运行游戏
& O  d! H6 L, Q    F12 运行游戏且隐藏调试窗口2 r: I1 @* ~2 d1 J6 q" ~
    F11 步入, 单步执行, 会进入子程序% b" k" R% C# i
    F10 步过, 单步执行, 不会进入子程序8 E( ^" p/ G$ f/ O1 s' c2 |# q4 n! x
    Shift+F11 执行到子程序返回
# @) v4 G0 h* _2 h) z% a& m    Ctrl+M 内存浏览窗口+ T4 _& e' ]9 l) z0 l5 }8 X
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
* F9 h5 M- b( J2 g4 f. R& ]0 ]6 x5 G0 w1 Z6 _, A
{:4_94:}
$ q9 i: _& R2 j: X# g6 ^
" L7 F* A" h: [4 A

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2588 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。% U- O! `" p9 j+ O3 F8 s6 m% [9 J% Z8 @

' Q& g$ ^; h0 `* _. ]! A. WPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
; {  R) K' V; ^' {( U8 x! [  m11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-10 09:19 , Processed in 1.078125 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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