EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

) J# \' ^) r* U! s很快速的整理我自己常用的指令
" F2 K+ i# q3 t* m, [! e$ }3 J' j. e( X9 I! _1 i+ a; ?# p7 f
{:4_112:}
9 q; D0 @" b8 ^) ?8 H( h
, R4 [; H' [: N/ x3 R: r/ pMAME DEBUG常用指令1 p. r9 T. _7 Z" L1 e# g# S
# H. n8 }$ x) C" F) `
内存搜寻: ci, cn, cl$ p  v: Y! T' |" N5 V, w* W  i

. r( _# f0 S7 C! D2 s0 X! X    ci
/ B8 M2 c8 F: r# S! I    搜寻任务初始化, 每次搜寻一开始一定要输入这指令" |3 }, U0 ^4 P

$ b& L* X& r# e3 S$ D* z    cn& p' l! E9 v1 R4 q/ x' ?3 L' a+ H  l# W
    搜寻指令
( m+ B6 u9 I5 W; p* M    例子:
5 H/ t8 W: v% v2 e9 t, Z    cn eq,60% h- G* Z8 r( A2 _" g: g! r
    搜寻目标等于60 (十六进制)
" _/ h6 ]% x- B- c        3 g$ ~1 [- v$ {
    cn eq,#96/ z: Z* D  [- C( w0 s
    搜寻目标等于96 (十进制), H. S# p8 o6 N4 l

; V. p: b8 Z$ I" x    cn eq7 V8 y' x2 A) n) m3 ?
    搜寻目标的数值没有变化( I$ A8 A, g: t# e

6 c* ?- v0 k- V9 ]! }3 s  e& A    cn ne
* L1 A) p" T/ `* C    搜寻目标的数值有变化
) ~+ t2 |% G  h4 S        
8 }9 ]0 U4 [# s+ a    cn +
2 Y! V. [' v) A8 J5 p! U9 i    搜寻目标的数值增加
- P* k+ Z0 ^) N" |# u0 _    + v; N, A# \: _/ N4 y6 M
    cn -
- }( [3 J) h% R7 r) [2 ?    搜寻目标的数值减少  R0 z; Y( l5 V1 [
        
# Z! F) x1 f. X    cn +,3( {" r; B/ \4 R' w; k
    搜寻目标的数值增加3 (十六进制)
' H! s( e# A: R9 o; O7 L9 \, }
% I7 Z; q' e9 m% L7 |    cl
3 ~1 _+ [+ z0 N' K% h    列出所有搜寻结果
, }3 V7 }) J. C
8 {0 u# p: c( D    cl xxx.txt
# H( {$ x  j& c: x* S    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式& R: i" \6 F/ ], J" I  V
/ a7 a' J1 C, k. [; p3 Y/ X5 O
    " s* c6 s/ Z: `  N, H; Y
内存监视点指令: wp, wplist, wpclear# S# }$ z5 g4 v1 c+ E
    例子:
. c; g# i& i. R' I    wp 1234,1,r) d; h4 x; B/ P7 M; x6 f% E
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1. }1 N1 ]; B5 b  j# V$ ]) P7 q

  a& H7 S: d$ X3 z' A* g" Y    wp 1234,2,w* P! [/ A4 }4 Z. j
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
+ q- z; z8 J% F     
$ ?, c9 ^. n/ L* L6 C. m" p3 P1 E    wp 1234,6,rw( ?/ R- o; H' j" _" \: W# t+ b$ k
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
6 Q" _' h7 d- z+ }* R6 ~8 Z7 m" a  {5 ?( `: V5 ?$ ~3 S5 t( u
    wp 23456,a,w,wpdata == 1# o! p1 g- _' ?
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1; t* O3 C4 E" D8 }  |
( @/ {' z" b; u. O0 T4 p0 b
    wplist# I# c9 P3 S  U' ~. i" J& u1 r4 Z
      列出所有监视点
- z5 g/ P# e4 B% a; C$ `9 {6 F8 M3 D% `1 D8 J: @
    wpclear 3% T7 c, L/ M5 w( V: P3 J6 W' k% K
      删除编号3的监视点$ {7 y4 ~, j) O! f4 Q7 T
7 F- X/ g- q- X5 R/ S
    wpclear
% y$ y) K( R- {  `. J7 E; G      删除所有监视点4 T: @, L7 W, G# @
# k3 p; o% Z  x7 r1 P
      / i, n$ i3 q) A/ I6 m' P9 E

! p  c9 k9 h% X3 E- Y$ g  S程序断点指令: bp, bplist, bpclear
" c& H- V4 P- L. X. J    例子:
; c* K+ O2 ^) ~! e    bp 1234
5 S7 q  u4 U! T/ ]      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断7 G( Z! {6 U: A" _- e
" M! T; T0 O. W" e- Q3 K3 A  s
    bp 23456,a0 == 0 && a1 == 0
/ Y" @6 g. _" K6 O      在地址23456下断, 且中断条件为a0等于0以及a1等于0. n! O# I! P; h! s7 }) a

3 p& R% ?1 s! a0 S( \    bplist: r+ N+ T& j3 I1 n  ?
      列出所有断点- d. N& j! V7 U8 k2 e

4 w+ m; b8 r+ C9 X  n5 k    bpclear 34 N0 F/ m4 s' j0 ~; x3 g. G
      删除编号3的断点  i- X+ [% s& k7 C8 Z

. W5 t7 Q- t' J7 d1 p    bpclear
7 Q2 W9 H4 s6 ~" }5 T      删除所有断点
, Y2 k  e! D# C1 r
; K6 e8 [8 n, E* t- `# Q! B. {      
* s" [0 Y$ c; g6 _$ y      
) ^7 Q" I2 \5 R. T: ]3 f' \* b跟蹤紀錄指令: trace4 r3 G/ e" m7 f9 u
    例子:8 u6 y3 U' @- |6 _
    trace 01.txt5 M! `  _  H; m4 D/ ~- P; F
    跟踪当前CPU运行的所有代码, 输出至文件01.txt% w% `6 X2 j! e  Q

" ?" k5 {6 }7 i+ Q$ ]5 ]# }* Y    trace off
* I" d! z6 N! ?# p" `! Q    停止跟踪, 并且关闭文件
/ _  S  l9 n1 c# x7 b* P7 D' O$ B/ u: s
    trace 01.txt,0# j  [5 |5 J. }! Y! e) t$ y% X
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt) T& g: Q, l) H+ u
% l/ i& Y: l* k: {8 B' W& n
    trace off,0
2 N+ g3 ~3 Q8 y( p    停止跟踪编号为0的CPU, 并且关闭文件
7 f: Q* ~% `* h, z4 T" o! N. c/ I! r4 o  p6 i* X
    trace 01.txt,0,{tracelog "A=%02X ",a}* \# G( u1 F3 Z- W& D0 |
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
) B2 Z0 n$ D$ {# \. i- l& ^  e    并且在每一行的前面, 写上"A=a "
( W! m8 n- o% L. M+ h    "A=%02X ",a为一个C语言printf函数常用的输出格式
- c6 {) _, t! ^    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入6 A% p9 g" S* X: Z' ]4 m# N9 d6 R
    X表示为大写十六进制数; r0 g$ j/ G2 J2 Q8 v/ t% ~

5 |0 ~0 A0 x( e$ r, h+ h) M8 }3 Y
. c3 D+ h. ^9 v2 s% f- g8 N5 |- M% F7 p  V5 ]
内存直接写入指令: maincpu: [3 M( S/ `: }4 P6 V
    格式为 maincpu.[][]@地址=数据" m! P' \6 p" q3 \; J  Y
    第一个[]:
+ M1 \0 s, F( L    o 表示ROM地址( D1 g' ^, s( v" Y5 N
    p 表示RAM地址
% q" t2 i9 k$ t( C' K/ w4 d
9 C5 z9 \3 x4 L    第二个[]:7 O/ f" K$ o3 _1 r8 R' x
    d 表示4字节
: a( [  C% h2 `: J2 T0 d8 J    w 表示2字节
3 i9 h5 N- o8 }, x2 c; c  F% }- o    b 表示1字节4 o7 a9 q, v5 e4 c& |

  S: W9 A8 \- l: B% ^" W    例子:
- ?0 \- e1 q. A4 X+ Y0 x5 d4 R2 U+ m    maincpu.ob@1234=FF) I5 n; ^8 ]- ^3 I& t, F( W" L
    在ROM地址1234处, 写入FF一个字节
, B2 G# J4 X; l2 f" X" N: E6 {- X- t) V! P1 f' G% b
    maincpu.ow@1234=4E710 Z# s5 z" o! ~+ S2 P5 B/ ~
    在ROM地址1234处, 写入4E 71两个字节0 c% ~- g% ?7 x. s: B
! o% v- a3 y! n0 B- X, ^
    maincpu.od@1234=600A4E71
: J2 G* ?4 s# G; V7 y    在ROM地址1234处, 写入60 0A 4E 71四个字节
( x6 j0 Q' W6 Y5 Y, n, ~9 P
9 d' l! }9 n+ ]- s! p8 g1 C    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写7 Z0 b( h0 J1 S9 V
   
: I5 @3 U- r$ k. X2 ^% {1 |) S1 Z2 J. g
其他:
+ ~9 Q& M1 @9 m! H" ^' j( ?: t; U    dasm 输出档案名,地址,长度
7 U7 P& v3 U4 |, h. E, r$ [    输出程序的反汇编代码9 s) m" e: B9 M3 S, |2 x$ C+ e; [, ~
    例子:: x! R- s; h7 p% e6 M( s# ^* ~+ [  J
    dasm 01.txt,0,100000% d$ @% m, n3 E5 s( F) h+ k# d
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt1 V1 {' P- w' W3 |& n
' O' C1 r5 M5 m$ d  I/ T0 I9 _, N
    softreset
6 |2 l; r) h3 V- F4 Q    游戏重启, 但不重新载入ROM* r+ m! ~4 U7 s% ~
, M! U2 j- a) c9 v9 |. `
    hardreset
& A! M' m6 A, E. p6 X    游戏重启, 且重新载入ROM
# u6 n+ i- v- c" f1 _) `8 z
% x6 @  e. M( n    snap xxx.png2 s) }; L4 w8 y+ d! ~( F' f) H2 I
    截图为xxx.png. ]5 b0 k# b2 e5 u
: A! i9 Q7 m- q- {4 g
  5 Q8 i2 m) ^7 T( ^) W" x$ Y
  
, x/ D2 i  a3 g2 c: C  + U7 E2 _- Z% `! M. m( q* H
热键:
' Z; G- [8 @: f1 m    ~ 中断游戏4 m: u0 e7 U$ O- _  H( h
    F5 运行游戏( h- h4 s/ a1 B. p2 h$ Y1 x1 J
    F12 运行游戏且隐藏调试窗口# z' H* F+ \0 X  L) Y
    F11 步入, 单步执行, 会进入子程序! ~7 r* {' `: I8 x1 i
    F10 步过, 单步执行, 不会进入子程序$ j0 U" V( z# R) Q9 ^
    Shift+F11 执行到子程序返回. u& v1 W% |/ L* }
    Ctrl+M 内存浏览窗口  x; a* z8 q$ Y2 {* [. w
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU- U+ ]9 f; H2 e8 q4 h$ V4 V8 P

7 o4 ]7 |  Z" Y% }0 s. Y{:4_94:} + g1 e  c5 S; u& K) F' z" s- X" {

- U4 y; p0 |/ E4 Z) x

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2591 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。* D! c7 Y8 L! u: k( `* p, H, b
/ _. t/ I4 f" o( Q" f- n) ~
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 | 显示全部楼层
要详细些的东东
8 s+ f& U7 h% p0 S11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-2-4 10:55 , Processed in 1.081055 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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