EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

$ `  o) |) G; ^, y/ M7 W9 y很快速的整理我自己常用的指令0 J$ B3 l0 O$ u* U3 n; Y, @

* t5 k$ A: p# D6 L+ a0 b, z, P{:4_112:}
: M* Z# {& _, h
! ?8 p5 [9 j% d: r; Q! dMAME DEBUG常用指令
: s: u8 Q" X+ m6 ?% v. o8 ]/ I8 e6 ^1 G6 b2 R- v1 l; `
内存搜寻: ci, cn, cl
1 y8 ~' U* Q+ N9 G" V  Y4 M- F$ E9 J
    ci. ~( \( p9 Q/ S" I; g- _* [$ ]/ G
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
, G2 c. \* o& ^9 e' K. E. D6 p9 O3 {5 R6 N' E+ K6 o
    cn  X3 z9 O( o5 F7 {
    搜寻指令
6 K+ @1 H- C9 ]: L    例子:' l1 b. {2 L  ~5 I# G2 l! w. e- s
    cn eq,60( ^7 [# {/ r# ~  K7 U" G
    搜寻目标等于60 (十六进制)
6 s! z% {5 J5 s7 _        ) c1 N) K9 d# W. ^4 n
    cn eq,#968 j: ^% x* y# ~* j( M6 S
    搜寻目标等于96 (十进制)% K$ x: ]+ L- {
# g* K8 h' R6 y8 q
    cn eq
* k. y4 L, W! q: p) b2 t    搜寻目标的数值没有变化
* z) N: o- W& L" g% ~: l8 t+ x  x/ P8 K; _- G% ]# N
    cn ne. P# M! d7 o$ W; J( L  F/ J8 p
    搜寻目标的数值有变化& d$ w! a( j3 B
        
: B9 w: ]8 v* ?. [    cn +
8 _/ n, x* J- Y% \    搜寻目标的数值增加
% r4 K. t7 B) S# [2 L4 K   
# w6 ~' C( \+ ~7 n+ K    cn -
3 G0 _0 }3 V3 _' p) U* |: X$ ^$ B+ |    搜寻目标的数值减少' y- T7 m1 F, y4 Y
        
+ A3 g4 I' x1 u# g6 I2 @    cn +,3
" U- c) e: u. c6 g    搜寻目标的数值增加3 (十六进制)' d7 T. l7 Q6 c9 f% @, M
0 S3 a: S7 v/ M5 d$ D
    cl5 X* t' v- K8 _( ]# _( i
    列出所有搜寻结果8 i$ t8 E! n) \+ s$ o

0 m3 Q5 |4 c* L" k    cl xxx.txt: b" [9 @- ^0 z! K' ?/ ~: F
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
5 w* Z) J+ w3 F
" g0 w! d9 A1 E7 ^3 L2 a4 q   
+ w- J$ ~1 w2 G; R内存监视点指令: wp, wplist, wpclear
/ D# e8 a. k7 a8 R# h    例子:
0 u* @/ k# {  B9 n/ ~    wp 1234,1,r
; s/ o/ w( u9 v( _' D/ @; n- y      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
0 g1 j  K$ ?; Z8 V) S7 z2 Z; \! ?2 P( G7 B$ e
    wp 1234,2,w
& v( _+ @/ M2 Z! H5 i      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
6 g# F2 N1 D3 @# z% Y- U     ! a0 x- e# d& u( F: Z3 Q
    wp 1234,6,rw9 q. n' h  v& S' u- ?- k- u" H
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6) C  a5 B  `4 C4 e3 l# V8 V

3 r5 k# W! }* a6 T1 z; I    wp 23456,a,w,wpdata == 1/ F2 i' u* C5 Q
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1/ @7 Q. E& l6 `' N% L

7 @' m% z& E3 o8 [: j$ l    wplist
( B; Q3 E% c! y# i6 S+ F; G" l6 F      列出所有监视点
% i# p2 C1 d6 s
/ S- Y* }; a# g- R. Z3 U6 k" U    wpclear 3
, x+ a' {9 P* e) u# k      删除编号3的监视点
- y5 C4 B  G0 S6 w9 G7 r  z% {- n! A/ X& H0 r& Y% b: |
    wpclear9 B' J$ ]: u7 W! h
      删除所有监视点
% j: D( [* y# E- Q  `
' Z. O0 n/ z8 ^6 j& X, J2 U* {      
. H' e* ]  |/ V& g! ^! c2 J  R9 h+ A/ x
程序断点指令: bp, bplist, bpclear9 ~5 c! V+ l& m  H3 H# N
    例子:' B1 ^9 T) R9 }7 S3 Z, t! m
    bp 1234: {& I) i8 h* z" w: z
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断7 O  c& I+ _' ~, x7 w9 z- I

4 |( T8 e3 P8 C) R- V2 k  }    bp 23456,a0 == 0 && a1 == 0
2 _7 k6 g4 ^! ]  r      在地址23456下断, 且中断条件为a0等于0以及a1等于0
- i# F9 h# t3 w1 q
! k# E% M- v0 L: ?5 }* u    bplist
1 u- q1 ?' I- ]' \4 i      列出所有断点7 L( j' F3 d' A  I# f

1 m$ C% }. o  m5 B! o% K: h+ \    bpclear 30 ?, f1 `5 z6 N+ g; ~5 w% w
      删除编号3的断点6 {1 \, c; W: h
2 W, @% C. G/ R1 j) n0 _
    bpclear
. [4 p* o% z5 Q9 s% h. @2 D8 [& t      删除所有断点( {; P* ^+ q! d& n, U/ u; b5 h

( h7 d1 [. e) @  i      1 y7 _5 v( W( o" A! n+ g$ Y
      
( [3 ]; U+ `  F$ ?跟蹤紀錄指令: trace
/ R$ u/ ^9 v: a  K9 t5 v    例子:
( }* s6 W  x% S    trace 01.txt% n8 r- @: o( t$ S& A
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
+ O. G3 ?' G( t$ O( M% ~  h/ s. @1 D0 }6 p& w; `2 P0 k( |
    trace off6 U: k8 Q5 k# W  A
    停止跟踪, 并且关闭文件" N! m' n! C9 v+ b$ A# _" C
' G1 Y- _* l2 R8 Y
    trace 01.txt,0
% w; M- ^& d' R4 H6 R. ~    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
6 q* e9 i3 Q  M' y) Y/ y
/ y( T$ J6 g  ~  z, i) |! G    trace off,0# Z# {" y- }2 s  r
    停止跟踪编号为0的CPU, 并且关闭文件2 }8 f# x6 A0 t& e8 p' _3 T, X
4 z; L) L. S: u8 T' C# G4 ~% o
    trace 01.txt,0,{tracelog "A=%02X ",a}
8 m$ e3 S  r; {4 {$ {2 M    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt ( ~# a2 {9 e7 T
    并且在每一行的前面, 写上"A=a "" @- y' y% f6 |0 d1 a3 m
    "A=%02X ",a为一个C语言printf函数常用的输出格式% H5 y. N" T5 \6 q
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
2 C! i% n0 `* H2 P. R: O    X表示为大写十六进制数
0 u* b5 c% z1 y' `; [$ b4 k  v; S( Q! _# }0 k6 b6 }3 h
, Q: ~1 N7 `1 s

, X, \  W! J+ D0 [: {- y) e5 m内存直接写入指令: maincpu
* B; c$ h* D+ u5 `( e    格式为 maincpu.[][]@地址=数据
0 e1 C! v- \, ~  ]+ i! g7 b    第一个[]:
  r( W5 p2 D" I4 U8 S    o 表示ROM地址# |# U; ]! ?8 j1 Y' B, O5 f/ Q* Z+ X- [
    p 表示RAM地址3 t! ~! }: X# v8 b8 I
  I: E: e, W" [* e6 [# E" l
    第二个[]:
0 W' h  _# O) m9 j0 h7 {5 v7 C5 H    d 表示4字节
1 o) e0 E1 M% s3 a2 v    w 表示2字节
2 h& I7 J" {% {; _$ g2 K    b 表示1字节
) D( ?$ Z) u8 D1 L& t' w/ [; p: U: b' m" ~1 V/ I) e: ~! B
    例子:
) ]4 |, p) p( O. R    maincpu.ob@1234=FF' s4 H6 Z  z/ F; h, I/ G
    在ROM地址1234处, 写入FF一个字节
- S$ |3 o( Y2 z. L! T# e8 _4 a& w# k4 W9 b+ q
    maincpu.ow@1234=4E71# _% n" \- s4 i( X3 A4 C
    在ROM地址1234处, 写入4E 71两个字节; u  H; X% r0 e5 D6 \! |: q

# a/ N4 v4 i+ u# ~    maincpu.od@1234=600A4E71: x6 f; H) Y, J, y) [
    在ROM地址1234处, 写入60 0A 4E 71四个字节, g7 k2 P& C& [5 f7 B
$ o( z! r, Z7 A) }
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写* A0 I3 ~! d- [$ r" K2 A
    0 n8 E2 P3 ?, X" b7 l

* Q+ c5 v2 M/ p4 P1 X3 Z其他:
+ _7 z9 o$ a. y$ r; K/ N% n* s% b    dasm 输出档案名,地址,长度: n$ ?+ C5 a( g! z; C
    输出程序的反汇编代码
/ I0 L/ |) ~9 S: m' C) s    例子:
! _9 v7 l4 q+ A0 R5 H8 n% q+ i    dasm 01.txt,0,100000) I" h) X' Y' x: \
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
2 r: w. Q8 L8 T( R0 u6 K# C3 Y7 g- h2 i. ?4 ?' K( q
    softreset/ K# `+ z7 H7 {  c2 H
    游戏重启, 但不重新载入ROM
7 I/ m4 b) }/ e
; E  Y/ d3 X; h    hardreset
- q4 T" ~' B: @& o7 }, v    游戏重启, 且重新载入ROM! x8 i% _" ^- ?0 h
( t! ?- R% M3 O; }
    snap xxx.png
2 q7 B( P8 d4 Y' b* K9 \) D    截图为xxx.png' S/ E$ m4 |! h; C
' d8 T# W% A" x2 e6 z
  
; [. B( i- i8 D  
, T: y4 w0 G- J7 d$ ^7 x  # `3 t, ^/ ^/ O( I
热键:
, t+ s9 {0 i3 q1 n' k    ~ 中断游戏
2 j4 `1 I. L( C9 Y( U6 ^( g    F5 运行游戏* g- Z( M- j, e! T! L4 a+ z2 D' i. @
    F12 运行游戏且隐藏调试窗口
* S8 }; c- w. H) ^    F11 步入, 单步执行, 会进入子程序2 B: _( N$ Q3 e( u
    F10 步过, 单步执行, 不会进入子程序1 i2 W+ [" i! f# t* d
    Shift+F11 执行到子程序返回' V2 j# b! [0 M+ a1 s$ S- K
    Ctrl+M 内存浏览窗口
2 O. V( h. c: `# t  R    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
5 [" a4 C( M! H& ~
( ?0 F) j5 W1 V; j{:4_94:} / `) Z6 m+ z$ e1 p* p' \, x
6 h! G  V. ]% ?3 S9 a( w

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2580 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。' K. r6 @1 a5 ^3 G4 _
2 S- ^- k8 I8 C; k( l% I8 h5 x
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 t6 q' e8 m- q# P& d( T+ j6 V11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-11-15 13:15 , Processed in 1.069336 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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