EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

& a9 _5 z# X, f  O很快速的整理我自己常用的指令
0 O* R+ z" k: ]% P  I3 b! f) s1 m, P5 E* ~4 g: u2 a/ c
{:4_112:} 7 h# y: d# Y* z* W2 \$ L0 F$ ^! o
' A7 u* {4 G0 ?- W# z' l
MAME DEBUG常用指令# J6 u) c6 p6 O* N
# }) k. A+ G' X5 l$ k. l5 ]) N0 ~8 d
内存搜寻: ci, cn, cl2 a( d. J- c6 k
" x6 ^! v% l" }: r+ a0 e
    ci% S3 G' d$ e9 ?. G( |
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令' B' k# T6 X/ A" b

4 Z+ p* p) c# ^) P7 d* `; F    cn
/ ^9 D+ _8 k. r1 W    搜寻指令
  s/ N# V1 X( M3 j) ]7 K7 N* A) d0 m; S    例子:
7 {. v3 r$ a7 d. N3 C    cn eq,60
+ W. s* s5 H: N5 i" w    搜寻目标等于60 (十六进制)
1 q- D7 \$ T* I" ^. h        
2 A3 X( T* H8 u8 y* E0 k7 y, w) H7 ~    cn eq,#96* |; R. y! i. ?. s
    搜寻目标等于96 (十进制)
+ K3 b8 W! \7 i, d# Z- s* A. J1 k6 j5 r7 e8 W* W1 i. p
    cn eq
- [; ]: d: K2 b8 b$ m$ d( W2 |    搜寻目标的数值没有变化
% O& [$ e# d3 i' I; x
9 c# O% x( ~' N    cn ne
: E! j0 g' R% p' F# B7 U& N% y    搜寻目标的数值有变化# s. X" ~8 @" ^% K1 n
        
$ ?  b  ?6 g* ]3 g$ A+ z" z    cn +
$ G/ i8 ~7 a3 z+ C* ?/ b    搜寻目标的数值增加+ p6 M6 G  X# H: M7 e3 ]7 N: J
   
5 r: t4 }4 g; {    cn -8 N, m* ]# v0 A* H4 @
    搜寻目标的数值减少
+ g/ x' W6 ^5 C2 ?' Y        
1 O" T3 s0 q* n" m& C0 D# ]    cn +,3
) a) G8 f, h; H) g4 [$ \2 ]+ T1 s    搜寻目标的数值增加3 (十六进制)
' I2 y; F( A  t3 ]; C& E7 B
% H" |9 [  O! Y    cl3 u* E$ ^- c( `5 F/ j! s7 u; T0 P8 Z
    列出所有搜寻结果! @' t2 p% S8 x6 N. `" C

  Y. n; r9 V1 ]; w4 A! u! f    cl xxx.txt+ a) {  \4 I  A+ {  |  b! I
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式, ]. w. m% u! `+ K0 ~2 {( [# I

1 C/ c- n! `! y( g! C5 b) R   
' }) X2 B3 Y7 [7 V$ z$ Q内存监视点指令: wp, wplist, wpclear
3 M8 D/ R* v( z4 o9 g" j    例子:
+ `0 w) p7 K( A  U( I    wp 1234,1,r- `. r( L4 T- L; C8 ?9 C  `; b
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
$ Q: A- Q  ~( V: T1 J" v, w# q" p- s1 y5 F6 A
    wp 1234,2,w
% z. ?. \9 C2 w2 Y% f1 u  ?      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度28 P2 g- Z- m% o( |
     
, x$ F% v9 J4 y    wp 1234,6,rw# U) J) A! U. D- O$ x) b  C2 r. s
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
3 I$ U' T' h- V( K2 |8 w- H0 H! v) @" D
    wp 23456,a,w,wpdata == 1
" ~, y" n4 y- P3 k: V      在地址1234下写入监视点, 数据长度a, 且写入的数据等于12 @  i' k* q: N* r
9 q" V. \* h' {
    wplist
* D$ C3 r0 A1 \- |      列出所有监视点
+ ]' o5 k" k; N, N: R, C7 I" W, _0 V2 D: X% H
    wpclear 3
6 o( ^/ z4 i. P2 e# g" B      删除编号3的监视点! E% l5 x, F2 o! A, J2 h: u1 v
9 @% Y+ q) }) j) P$ W& i
    wpclear' x, D& A9 W6 z4 ^& ^
      删除所有监视点, O1 t$ c, W- K0 ]. [! _6 R, @

8 K5 u6 ]( u% K1 d) Z. e      ! m$ M! W" l& f6 x' e: ?- A: Q
* z! ?. A: m/ A  T' o
程序断点指令: bp, bplist, bpclear1 _# T6 {; r; a1 I' h0 K5 S. `
    例子:
% i2 r7 W+ `' \    bp 1234! [/ x$ N# J) t5 E
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断2 y0 A1 P( O  b8 I' u8 o
) ?7 |( a( z8 E' _8 z" z% }
    bp 23456,a0 == 0 && a1 == 0
1 w5 P) L& p. x      在地址23456下断, 且中断条件为a0等于0以及a1等于0
% l. F1 F. l: {5 e8 c0 ^6 E" x! P. Z/ R) w
    bplist, Z$ I$ h2 V1 X! A6 {
      列出所有断点5 G- c5 R( H- A- F' P
  [; F% D9 @, [: e4 B( ?
    bpclear 3
' ^  g' P9 [8 C% \& `      删除编号3的断点+ v4 U9 o1 G4 Y6 j" @# M9 d. F
& g: U+ @- a2 k0 S
    bpclear  ]! F+ W9 N% J' @4 }* ?
      删除所有断点
) K$ v" K1 p; r3 c
+ _9 w. E. P- n6 \      ( v; Z' Y0 ^! y. {: v) j- C5 q1 J
      
$ m8 U# D& G: ]# O+ r5 Y) A跟蹤紀錄指令: trace8 O3 B1 Y$ ~3 t3 s1 u, k
    例子:
, Z! ~, |+ m2 E' t6 w    trace 01.txt7 ?/ J$ d# f! Z, R: E6 q" a
    跟踪当前CPU运行的所有代码, 输出至文件01.txt& ]# l+ }4 @$ d: }9 {

/ I) _" w4 H- L6 r; i# @    trace off
. H" F+ |2 y: b( {) N    停止跟踪, 并且关闭文件1 T7 `1 o$ B  l; c5 T9 ]$ \) h

: k9 a. y& t$ m: O    trace 01.txt,0
) g9 \' U, u7 G* l) _% c0 x# U    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
8 n; L4 w' z+ r- V( S, O5 Q  G1 g# Y- X  a
    trace off,0& u& E. P: q8 Z, I. i6 b( I: w) @6 }
    停止跟踪编号为0的CPU, 并且关闭文件2 g* @* L* [4 O' s6 }# e0 I
! v" D/ d+ g# c( O( R  L# U
    trace 01.txt,0,{tracelog "A=%02X ",a}
6 e- q4 J& v- a, @3 a1 o    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ; g# H% ?2 w# d; k8 Q
    并且在每一行的前面, 写上"A=a "8 E0 S+ e6 B  Y- d. y
    "A=%02X ",a为一个C语言printf函数常用的输出格式  b* I+ |8 {4 ?
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入) u) N+ q! r( y9 y% \4 D
    X表示为大写十六进制数
( S% H4 y$ _' P. B( b" L( Q! g2 O# N0 Q+ ?+ k) s

& K3 ?7 ~  C1 A0 o/ {$ H; i/ {- U) N9 R. P$ a1 L* c3 v
内存直接写入指令: maincpu* R8 i+ m! \* T
    格式为 maincpu.[][]@地址=数据
; F2 v0 K8 a# ]1 _# [/ H    第一个[]:
0 F5 N0 \; c4 t! y% t; e( P    o 表示ROM地址- s- u. N1 H6 V, ]- s- {
    p 表示RAM地址
& B% ~9 V7 J( R' ^+ o* n6 {- `8 ^; U* D
    第二个[]:
0 d& e2 R2 |7 f( B! F    d 表示4字节0 l( @$ m: h  G' ], L4 ~/ U/ X
    w 表示2字节
6 {) O5 R1 y8 ^: [4 z/ s    b 表示1字节5 M2 |/ p& F$ G+ M4 e/ G, E

0 s5 ~  f( E, M    例子:) }: Q8 Z0 M8 d' a, ]
    maincpu.ob@1234=FF
: p& c4 a4 v, W% |# `    在ROM地址1234处, 写入FF一个字节2 u* J. i3 h& r6 o6 G
3 T2 s6 k  I! J) w& p( i( q
    maincpu.ow@1234=4E71* S; C# U; L: Z! r
    在ROM地址1234处, 写入4E 71两个字节6 A- u$ n/ P, ]

2 o( m$ ]  E9 p    maincpu.od@1234=600A4E71
7 [( P8 }" F% f2 B8 F    在ROM地址1234处, 写入60 0A 4E 71四个字节
+ N# {8 ]$ m$ g3 t( }
! c+ F: n4 D9 g0 P! p' n: c    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写  b+ U6 O: b' s( y  W
   
- ^4 A# S) [7 u/ p8 m" J# {3 T3 S' y' |/ p( A
其他:
/ a6 U( r( t# y1 s9 z1 U  ]    dasm 输出档案名,地址,长度
3 I7 r) D* h8 ~. T    输出程序的反汇编代码
, \1 W  E& Z' c/ P2 E9 a    例子:4 Y3 S- N  u$ K8 I( ^: \
    dasm 01.txt,0,100000
& q+ R. d: r7 X) ^    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
8 y4 @; s. c2 k4 i# k+ L
" {( C* m4 J9 h5 U  R) K1 N, Y- Q    softreset1 \8 F( \8 ^0 y0 F! g
    游戏重启, 但不重新载入ROM
, ?1 Z6 h) b) Q& C  i! w+ z' j* [3 }( k8 n
    hardreset
3 {; f/ p4 I2 P& H1 a    游戏重启, 且重新载入ROM
0 L! c7 L: ^) G
- K; `" [2 a6 m! a    snap xxx.png* a/ S2 I* y* @( |; F
    截图为xxx.png
- U6 s' Y( z; s0 `+ d
9 d, ~0 Z, r( i, l; Y, c  
" F( N7 P9 y7 d- x  " X; ~* K  j  Z5 v1 V5 c  {2 U
  3 e9 h3 L* b2 i
热键:
% U/ Y3 V0 I2 O2 n* M' X    ~ 中断游戏
* ]/ n/ H* d  w9 X2 k; N7 _    F5 运行游戏
8 E0 a' g6 [: U: t" B7 w    F12 运行游戏且隐藏调试窗口  c/ r  ~3 F+ J7 i: }4 N
    F11 步入, 单步执行, 会进入子程序  o' W: @& X8 `8 B4 z9 r
    F10 步过, 单步执行, 不会进入子程序; b2 C. u8 R8 P0 Q# r+ ~
    Shift+F11 执行到子程序返回( j- f0 w  e! B- ]+ F& z
    Ctrl+M 内存浏览窗口
( z2 o+ a+ @% Y% f    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
$ o, C0 B' a) ]8 {$ r7 a4 Y9 I1 W. t2 ~8 y# K; |
{:4_94:} ; a6 Y9 S7 y3 Z1 u* d  Z# b, `" k
- p8 p: H7 \1 d( Z( L$ P5 |# ^

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2590 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。' F3 b9 S( O& j+ ^& A5 d8 }# t6 E2 u

7 `  x/ e: }4 v/ lPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东( S: {8 j. J1 L$ k: @6 J
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-23 11:33 , Processed in 1.098633 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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