设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

7 {  ?0 b- m3 D) [' _$ g, e很快速的整理我自己常用的指令. ^+ L4 I( F& V* x. z+ D- z

5 m% F) [! D/ o$ D' z/ t" R) V{:4_112:} * Q( m- V0 l, z4 W! o7 q5 y9 j

: E$ a% R% K  P* j1 g8 r9 j' }MAME DEBUG常用指令) U7 K5 d  ^7 `6 {, b( A
2 k5 g5 l7 g, g. u- q& `
内存搜寻: ci, cn, cl) w6 r6 Q. m. b) O9 X
: \+ l1 P" u/ P5 f7 A" p' h
    ci1 d% t. u" k: o
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令8 l  k: z. ]# F4 |' q

: `) F0 M  v# Z5 X! k    cn
8 ^. v. ?/ {- N8 Y: `1 c' d. ]    搜寻指令
) H; M0 B* l+ J" ^0 \3 l6 A    例子:
$ P; J. ^- ?" l& {    cn eq,60
+ l+ b3 {- {! m+ x    搜寻目标等于60 (十六进制)1 A9 K% O) M. M( v$ c
        
( ]  r3 L+ S( c: T1 G) l8 Q    cn eq,#96# T+ |/ D  `% e7 b
    搜寻目标等于96 (十进制)
  E; H0 N( P6 M+ J' I% o2 l: i+ C+ O+ n) I. [
    cn eq
% U' M1 e' _" ]- N9 S    搜寻目标的数值没有变化" W9 x, u( N& z2 Z; u% e& B
4 y8 r' G. d1 {+ Y
    cn ne
# b4 p  b0 I) Q& U    搜寻目标的数值有变化
3 @* ]( @% B% h. ?1 p3 h7 g        
1 X  J7 C: i) h' x) V7 ^    cn +
  W! W! f8 k7 {    搜寻目标的数值增加
  r8 c  @, ]% ]2 P* y   
9 N# X7 S( O1 @7 G- G    cn -: s9 Z# j7 l# Q3 o; g5 `
    搜寻目标的数值减少; {: U8 p( P/ \1 f  b8 P' o! l" O
        & y9 u+ ]! B: ?  j4 M) A" I+ O7 p: @) i( {" S
    cn +,3
8 @3 u$ Y, s. B1 ^    搜寻目标的数值增加3 (十六进制)( x8 C0 Z8 R0 }/ l6 @7 Q9 g
! U: S- u6 Z& ^0 w4 v
    cl
' F$ P" J1 v) c) v    列出所有搜寻结果, ~9 L1 L- \' P; v3 w) n

" p4 B) q" h# \! V    cl xxx.txt0 y/ N6 x7 i1 n6 J% k2 _
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式+ \  `! O7 x; v9 |! N

, x& }: X# u/ N    7 H+ [' m6 u! O9 y
内存监视点指令: wp, wplist, wpclear
- m+ F* j9 S" o    例子:: ]3 `8 N' G  X  k
    wp 1234,1,r
# K5 b/ I  X7 J# m/ d      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度11 E( W+ ?# K8 N' r

. F$ v7 i) M$ ]& j7 j) a0 V1 J1 m    wp 1234,2,w3 a7 t& U5 ]6 `! Q, K. z- q0 m7 f8 ], M
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度25 x* n* D" P2 V3 |7 a% h. }9 V
     
! k, \# z7 n. g% d, q    wp 1234,6,rw
$ _) Q' K1 t- B$ Z4 N; F3 C      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
3 v& j0 E  a; g/ W; ~/ _5 F2 l. l* k
    wp 23456,a,w,wpdata == 1
" F1 L& Q4 @# C3 h9 n2 i$ l' M& N      在地址1234下写入监视点, 数据长度a, 且写入的数据等于15 s' x: I4 u  P" X' b3 |. W

, Z% m/ ?: |- M3 V9 W& D- q    wplist
9 ?$ O8 i) J# Q$ [* f" h, f      列出所有监视点1 \( w2 Q+ [. \  c) m& {
3 `6 L5 b' Z. p$ P: \7 t
    wpclear 3
7 P) f/ n; K* c) G/ n! o# }4 z      删除编号3的监视点
0 A" I, `, y" f9 E' s
& }- C; g' Q1 n5 S: ]    wpclear  t! \6 d, Y" h9 l) `
      删除所有监视点
& i' x/ _  P# O1 a
+ k, h# w! t/ R3 M, X/ X/ h      
$ h1 P! R3 H0 ]1 G/ l2 d3 ^% H+ S
4 N+ y# W. i8 t* B$ {. Q程序断点指令: bp, bplist, bpclear% N1 X1 E/ h6 O" }+ ^
    例子:4 V# Y, W0 u% w5 j& \1 U
    bp 1234# [6 ^- ^0 H/ Q3 f, i2 m3 G
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断9 m2 @* p0 c% G; e7 @: N

1 O& @- H* Y% y    bp 23456,a0 == 0 && a1 == 01 L9 I) P0 ~+ _- \3 R1 a" c
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
* a9 B2 V  l+ H2 s0 e9 {. t6 E
9 J9 c# w. C0 j2 X  J    bplist
4 {- q8 l) ]2 _; k2 V) d9 o      列出所有断点
& n. j4 v! i9 `5 {
: K+ @( T1 ?  D& v- s: g/ N    bpclear 3# a+ I7 S" }' t. {. ^: D
      删除编号3的断点) D" z8 U1 h, Z
: j  F0 S. b+ J1 Z- A
    bpclear
: z0 F0 X) d2 F, q1 b; u4 {      删除所有断点/ y4 _& C- j. ?: f: S0 c2 N. Y
" Q. Y3 Q$ l; ?1 @
      
, n/ v5 A4 H! o4 @6 U- g  {      ( j7 |. I  e$ a$ }% D
跟蹤紀錄指令: trace0 _1 K( r1 b+ {7 ]4 ^% u" A) u( q
    例子:- [: x# F" M, l$ |; K
    trace 01.txt' l) w# k- p! Q6 h) V% p( n. g2 U
    跟踪当前CPU运行的所有代码, 输出至文件01.txt2 ^9 U3 B1 |( `/ H  |

/ A+ I/ x; S3 c& f4 l' G' d% {    trace off
9 _4 D3 L' l# a, ?    停止跟踪, 并且关闭文件
& G' K5 ~, D8 {  q: z( ~( C2 Z3 A4 X. Y% P
    trace 01.txt,04 d# H# P! ~* g6 h) W
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt% l4 u. i# a# k, _' e$ c( E

9 \/ j; F0 s' i1 ^% S9 V, y    trace off,07 K" v9 e, Z8 C9 }; e1 {2 i$ k
    停止跟踪编号为0的CPU, 并且关闭文件* ?% Z3 B& y4 q' J* P' S% g
2 @$ d* \( x$ z0 @
    trace 01.txt,0,{tracelog "A=%02X ",a}1 p) f% P( k1 k! ?0 ]2 p& v
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt , k  k; S6 R- O5 |7 |! Q
    并且在每一行的前面, 写上"A=a "0 @  e+ x7 j/ V: x9 d5 Q1 _6 _
    "A=%02X ",a为一个C语言printf函数常用的输出格式# A- I$ |0 o& U; s" Q; U& O
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
+ m. Q' _4 w% X/ S% _/ }    X表示为大写十六进制数! Z: `; j/ W5 r4 h: e

1 h% B( f: d  b
  M" }! F; M1 c- R: A- _
5 g$ O1 @( G) p8 ?7 y% D内存直接写入指令: maincpu
  q/ W( J  o/ y+ e' R: W# V    格式为 maincpu.[][]@地址=数据
7 U( a, g9 H/ w0 ?    第一个[]:
# W9 }9 i: d7 [* x    o 表示ROM地址
. v. y/ T5 M7 L. a    p 表示RAM地址) T7 c9 u! J  k* d7 B
* X# H6 g1 |" H& [
    第二个[]:
, ]& c6 H7 {8 N; Y% W$ S    d 表示4字节' }+ `$ A& X. g0 e8 y2 ]
    w 表示2字节/ A& J' f0 B' [, s8 e+ v3 G9 n
    b 表示1字节
* N4 e* ?. C+ I1 ?& h$ q
) O5 e# @; @0 o! I! p, O8 j. \    例子:' W1 B$ N: H. P; I
    maincpu.ob@1234=FF6 t# S, g/ D, R9 H5 n. s
    在ROM地址1234处, 写入FF一个字节7 t7 B0 R8 E* R6 m* X
  y/ }/ Q3 A7 d5 M3 {# e3 g
    maincpu.ow@1234=4E71
! X4 t! V/ h6 ]0 I. H  \# h    在ROM地址1234处, 写入4E 71两个字节
0 {9 B- B& U5 K
6 I. T' B9 F0 M/ @    maincpu.od@1234=600A4E71$ k4 e8 `0 s2 S: |3 g2 w- L5 S
    在ROM地址1234处, 写入60 0A 4E 71四个字节/ v$ }$ }7 h# D" f+ B" p- f$ g
  X6 |: t' M: P7 _5 ^* q
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
9 |' }' n' l& X3 K( Z    9 I% x5 M1 W8 J+ v& t* C
8 h8 l! p$ i1 D# o3 C
其他:
/ y1 N! b7 G; L( ~6 m    dasm 输出档案名,地址,长度& w* X" n4 c# R# K
    输出程序的反汇编代码
1 ?( O5 \4 d  _) A( s  O8 Y6 G    例子:
5 A: r* ^6 o' B& U" l2 F    dasm 01.txt,0,100000' C  L1 c; t# J  Q& [& D
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt5 C, s# m! ^: i) B) L- [

9 ]) S! f% O  M. }    softreset
( s1 P0 V$ k7 q# W    游戏重启, 但不重新载入ROM
6 c$ s" q# b) c8 I# L0 |+ n) }8 a0 E9 y
    hardreset' a, q5 R7 ~+ I4 d( K  [
    游戏重启, 且重新载入ROM7 g, z! G- E3 d* P
4 Y! J$ o8 o8 p
    snap xxx.png& w. g* G- {/ m! ]
    截图为xxx.png
1 T$ {# |8 D$ P: W$ [
! }0 E9 ^8 g' s% _  ( }* d# W- R4 n. a0 S/ f' U
  
& `) ], x4 [1 G, r: d5 _- B9 b6 v  + N- q$ K+ M" v' c8 s
热键:5 L' D1 j: p+ y- Y
    ~ 中断游戏
7 I) Y0 ]/ S+ P1 D: M    F5 运行游戏0 \& y% B7 T. e" z
    F12 运行游戏且隐藏调试窗口8 q" Z; ~1 d# {! W4 Y8 C4 P6 m' D
    F11 步入, 单步执行, 会进入子程序
/ f( ^: \4 ]4 L& Q# u, F6 _1 d* {7 s    F10 步过, 单步执行, 不会进入子程序0 A3 b) q7 f" z2 \; {
    Shift+F11 执行到子程序返回9 z, U( Z4 U) u$ b6 N4 d
    Ctrl+M 内存浏览窗口
9 {0 x( F4 n5 d! r7 Z, Z: I: @    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU# `# g' p/ Y4 |
$ ?6 {4 E' ]2 v" O6 a1 s
{:4_94:}
) Q& e2 }2 i0 _; [  L' q" ?& Q1 q7 V; g% r) s

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2552 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。$ r) l6 }" ^4 D# B; V9 n

, h$ `$ S+ U$ d: }1 c& S/ ~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 | 显示全部楼层
要详细些的东东6 @2 I% S: X; f( x
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

发表于 2013-6-19 19:43:21 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-4-6 02:51

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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