EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

4 Z' o/ g1 w8 `, v1 L很快速的整理我自己常用的指令6 P' L; ]5 P6 _# R5 p8 }
0 H# A6 P+ o6 C1 m5 W2 W4 i
{:4_112:} $ `( \6 p) x* S# q2 Q: h% I

) R5 g* v( W! {# lMAME DEBUG常用指令
  ^+ ^5 `/ I, V% b8 x1 |# G7 D* @, w. |. U
内存搜寻: ci, cn, cl
* q! Y: K0 M: K6 F3 {4 {( V
' O1 w9 g( @! \4 x( X' _    ci5 P" I& }5 W- J& q" M
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令; v2 x6 A) q. g$ E4 I+ |
+ z5 z2 K9 X% \; E( W7 A+ E
    cn/ I9 U5 B7 H) p5 X
    搜寻指令
2 w! n3 D0 |, ]0 N    例子:
5 S* k8 ^& t5 a9 ^9 e+ p% d3 d    cn eq,60
9 E' ~8 U( X  O7 [( A8 y    搜寻目标等于60 (十六进制)" ^9 _: A# H) @1 Q7 \
        
$ z; W! o1 Y7 I7 m' F    cn eq,#96
( k3 o- f( d4 y5 w( N. Y    搜寻目标等于96 (十进制)+ C) w, X! ?; e1 ]  n- s

" Y& {+ C3 u& ^% t9 _    cn eq
" B& D* Y5 t" _9 O* O% r    搜寻目标的数值没有变化
0 k7 l7 w& K+ y8 }# M
- M* e9 n" L) L7 b/ r4 Z/ M    cn ne+ ^! k) L4 e- o0 u
    搜寻目标的数值有变化
8 f2 [) G  z- \0 S6 o1 q" w3 L' g        
7 Y5 a6 c. e! B& _1 `    cn +& Q7 I2 h; m  g
    搜寻目标的数值增加! I( k/ a% `& v$ Y
   
8 F' C" [: n/ |    cn -
* y* E" X5 t  `. c    搜寻目标的数值减少- h% ?2 G7 D+ H9 A5 k6 H
        
4 {% G' q' N( r    cn +,3: p, w, K9 A# Y) K2 e: B
    搜寻目标的数值增加3 (十六进制)
( w! Y, ?4 j' o1 i6 \& u5 F4 F/ m& n! l6 g
    cl6 Z3 g/ p3 P& Y, F4 U
    列出所有搜寻结果
9 G) f. R* a$ Q2 f+ S/ k8 |; i' h7 _  O5 u( z7 U" I. D5 w
    cl xxx.txt+ @8 o2 I$ ]+ p' ^/ Q- ^/ O
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
+ j7 W9 k! f( R6 Y: |( J; Z$ V& ]6 R/ m% s. W6 L
   
9 L0 |3 N. ~1 m3 X9 I8 ~内存监视点指令: wp, wplist, wpclear6 r( X: g2 K9 b, o4 R- T
    例子:
! u- p" d, [  F4 a5 ]5 _9 B8 D    wp 1234,1,r
6 }! t5 Y' V2 ?4 w3 N& z  r1 F# [4 Q4 Y      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度14 |4 S* ^( O- O8 z) f

- g! v- ~9 L& _+ _; d4 `    wp 1234,2,w
+ c9 @( @- z$ t; M7 M, x5 \4 f3 o      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2: A$ K& K: p* X. s
     1 y9 m* I% q& x4 n4 w
    wp 1234,6,rw
  O/ I* a" c/ y      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6/ R, N" a+ `! y! A8 `* l" H2 l5 {/ e
4 D: T- \# O8 l1 W
    wp 23456,a,w,wpdata == 1
$ h2 K* B8 Z; ?/ b  U: R      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
3 ^% F! }3 Z" x9 M2 y5 o
+ s- l* `, j6 S% H) |9 {    wplist
- L; u3 i& n1 w# S5 ]1 T      列出所有监视点- z, i1 @  m& I2 S& h/ p  g8 @

5 D% J. ]* w9 W' r4 v    wpclear 38 _8 M  F  t* L- w2 a/ ]4 R
      删除编号3的监视点
; J% x7 s7 ]5 n1 d! `$ T$ ^
1 t1 M3 p) s! C8 y* T, m8 ?' N    wpclear/ T0 \) }# R7 J3 v1 A
      删除所有监视点0 |5 p" p" H$ b) |- z" e

5 x" W6 Q8 d: R. s3 \      
* M9 q, N5 d* e8 A, A& k; W. C8 k) f9 k( B3 B4 p4 l
程序断点指令: bp, bplist, bpclear/ u) @# b; ?. O# k+ ?6 N
    例子:1 C0 [* _$ i  b+ g- j
    bp 1234
/ V& _( Z- v% r5 h  s4 e      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
  q% E, M: h2 ~5 K5 F9 H' ?+ z' H6 R: Q8 E6 X5 x( c) Z
    bp 23456,a0 == 0 && a1 == 0" U8 j5 X- k# q4 O
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
8 u8 G" G8 h% y1 b
4 S1 s! H8 B* M% k; Y    bplist
/ f# @1 P. J$ W+ F      列出所有断点+ B, _% I2 O) l! f- Z9 U9 a
6 [0 |9 f! a0 W9 K" V& ~+ u9 h
    bpclear 3
; T. S: w" E# T" |. V- C. }4 M$ |* S      删除编号3的断点/ E% [+ ?! F# y
2 `& {/ ?0 S0 V$ j
    bpclear
# H: A' q$ p' k5 U! f# a      删除所有断点
$ _: X; c* o' X9 n- R  A& f+ k: c% W: p0 b* O: k1 s4 _
      , m% L9 ?- p6 d1 z: @8 H0 }3 K
      
' Y# ?; F* k2 |# I6 A8 I  P5 T4 G跟蹤紀錄指令: trace. I8 S! G; i4 ]1 X9 p1 G
    例子:( y8 ^$ i+ F+ w% p1 c( q6 [
    trace 01.txt$ f0 M) T; {  O" \
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
! @) I9 O; p  T2 O% s5 m; u4 o; P: d# \0 C3 ^5 `
    trace off
3 y, g' o  I8 M; ~6 Y$ z. r" P    停止跟踪, 并且关闭文件
, T- z9 ?9 ]) Z( F* R/ c, c: a
4 b3 o$ ?; u. m* I( U    trace 01.txt,09 ?/ [2 q2 l. F0 O" V
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
, x. [0 q( _  V( [4 d3 D
0 C9 I6 d7 P, p: m: F, s0 l    trace off,02 F# b- \7 i  B! x) o
    停止跟踪编号为0的CPU, 并且关闭文件9 Z& d! }$ A  B4 ?/ ?/ Y7 J

8 o6 [( c0 W. T; Z" `9 r* Q    trace 01.txt,0,{tracelog "A=%02X ",a}
( e) \0 ?3 f6 d+ A5 Q5 \7 F    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
: _7 D" d6 w5 q' k: U" P4 b3 O    并且在每一行的前面, 写上"A=a "
1 z/ j# S, o2 Q4 k/ }4 O    "A=%02X ",a为一个C语言printf函数常用的输出格式8 U8 T) Y# H! A2 v! B8 C) v  [
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
4 N" g$ m* ]! H; D( l( r0 S! n    X表示为大写十六进制数
3 B( F, \2 p, s2 y$ S# u/ O4 U$ }5 E, L# ]; ]
* W7 u( @( F: z, d
: I6 u" y3 i2 J" X! w8 g- a
内存直接写入指令: maincpu9 {. j" U# \! z1 t: [3 h
    格式为 maincpu.[][]@地址=数据
' R* ^% G; S/ U4 D    第一个[]:
7 x$ A# X0 s+ F' s6 W& ^0 `2 ]    o 表示ROM地址
/ X; P8 @7 u! x# k8 `* l    p 表示RAM地址
6 Y" d8 O  k  k( I5 j9 M2 m/ u$ ]# B/ I
    第二个[]:* o" r: J* q/ A
    d 表示4字节- |+ X4 l1 c. b$ A, `% {) \
    w 表示2字节
8 @1 Z3 L6 s2 k  h$ ]- J! [    b 表示1字节
0 B/ C. i* R. |
' Q( T/ ~, p8 d' l% o+ k  O5 V9 e    例子:
8 `9 _1 g1 r/ G! s    maincpu.ob@1234=FF/ D9 ~9 H3 v1 l6 \. U
    在ROM地址1234处, 写入FF一个字节/ ^; m7 @% p2 B+ h, f
/ w8 x; x" n6 q( {, A
    maincpu.ow@1234=4E71
; i$ t! p8 h8 _; D, V8 g9 P- H    在ROM地址1234处, 写入4E 71两个字节
+ A6 w) I' b8 I! K* r6 V! A, `) ^6 D" z
    maincpu.od@1234=600A4E71# Y2 t+ w; p/ I* C9 R( c7 W
    在ROM地址1234处, 写入60 0A 4E 71四个字节% D( G; {9 e& w& e/ n
$ d5 o8 H8 s$ {; ?
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
$ i" Q* L/ O! S$ @) \   
; m* z) i1 ?- U  U7 P$ }& z, R8 X: E7 C$ @5 ?  O0 q  Y& w
其他:. J( V8 d% Q* o0 O$ @; [
    dasm 输出档案名,地址,长度
# c% V) O4 n+ ?/ y    输出程序的反汇编代码
/ o, }. o# F$ v. ]1 e0 i5 m8 S    例子:
, \' w; m# O2 v4 z# y    dasm 01.txt,0,100000; ?9 s+ V, T3 O# @3 J
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt. ^+ K! |: c) c/ W6 b/ x% L- ]& L  r2 c

& S. f: A- o+ A" N8 s+ H, ]4 z; Q" \    softreset& r, U* O) g3 I1 m" t
    游戏重启, 但不重新载入ROM/ r; S( o# F" I3 V$ N" e

" g8 |2 K+ t/ R/ W$ S3 b! X    hardreset
9 P4 H% H  U5 R0 p, f    游戏重启, 且重新载入ROM# E; _2 }8 g$ ?  L
' R* n# `- }, S- w* c' z2 K- Z$ k
    snap xxx.png
7 W6 [2 z8 t/ Q+ h/ V; r    截图为xxx.png( @9 f& ]! T1 t  T6 ~
5 e3 M7 C: g  |. L. B/ Z4 N
  ) k. O2 J7 d' {" O$ r2 [
  % x# Z: Z) ~7 c! A, W
  + k4 j2 Q0 w- {; t% K7 t" j) H
热键:0 t- h  p& C4 f
    ~ 中断游戏
+ [+ [* O5 o" g  w    F5 运行游戏- I5 r  y8 S# ?+ Z
    F12 运行游戏且隐藏调试窗口
# c3 D5 h6 e; u2 ]0 [5 c( B, I: q    F11 步入, 单步执行, 会进入子程序
9 t( [+ {! l* I1 ?9 s" A    F10 步过, 单步执行, 不会进入子程序0 f: `! G4 i: C# z# H
    Shift+F11 执行到子程序返回
% P( v9 C* @& u: R4 b    Ctrl+M 内存浏览窗口7 ]. q0 s0 v% L' W+ ~. \
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
3 n/ ]  q  j5 T8 }" P: q, ^+ r! g6 q2 A) l- C! Q
{:4_94:} 1 S2 }+ h9 Y5 }7 w# F
! z: I8 d7 D7 g+ l$ ]

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2552 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。4 g5 k4 a  R  N; Y0 ]6 K

9 H+ \# a* z* Z5 HPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
6 L3 q, L+ d9 p$ b9 ?  U+ W# @# p11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-4-22 12:30 , Processed in 1.160157 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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