EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
6 A  K: C0 `: g$ x9 O: W
很快速的整理我自己常用的指令
( j1 n. }  G2 C" o  `' Z  U' f- n
6 v( v. u/ \* |{:4_112:}
1 E, M( C& x9 f$ @# j6 p
$ D. g/ l; P# E% m) d: o; }  cMAME DEBUG常用指令" e# m2 g1 f  d0 l( M

1 A( [& a5 b7 [: T% [( o6 N内存搜寻: ci, cn, cl# B4 f4 f9 l  _1 U  @; C

% ^2 o9 ~  c, f& c) k    ci
) Z2 l: i7 m& v    搜寻任务初始化, 每次搜寻一开始一定要输入这指令7 R' k- l9 P5 C0 N6 D. h9 ?- w
( A- A( B& ?4 r9 Q* s) a( {- [
    cn
% l  L9 h7 |1 ], a' T1 C+ l    搜寻指令
- z( ^. n- O3 f) F  C    例子:) _0 H; J2 C5 h' H1 s
    cn eq,60+ L# r1 |1 i$ u1 X5 K) o
    搜寻目标等于60 (十六进制); a! g/ o. `' H; L
        
% q, I0 a/ p# K3 h    cn eq,#96( N% \. g- M3 Y0 n; N! w
    搜寻目标等于96 (十进制)! d  e7 y# f% T# ?. @9 B6 B: A- o

  M2 K2 f# j  ]8 Z$ `  g    cn eq
5 V0 v  I6 e. z6 n; o* z7 C    搜寻目标的数值没有变化- Q" K5 P; ~" z
' G( ~; y  w6 D
    cn ne
% E* B2 g2 m3 I0 J    搜寻目标的数值有变化) p7 q$ L9 ~  v' l
        1 y. H- J+ ]' k  M
    cn ++ T/ O: r' I% z/ ~% u1 c
    搜寻目标的数值增加; {$ s( {2 }2 o0 t4 _
   
' `" S# z+ G" R4 `' E" m+ j    cn -
/ ^* Z2 o& c: {    搜寻目标的数值减少
* k8 z- q( x3 [8 g* f  G/ _. b' |        % q* W9 C1 t0 \9 X' k6 I
    cn +,3$ F2 J4 Z2 ~- v; f/ e
    搜寻目标的数值增加3 (十六进制)0 I% ~, O4 A9 G9 E
3 F7 a1 {3 }) w
    cl$ t6 W4 W% N) v
    列出所有搜寻结果( I1 Q* {- \$ l6 v6 @

# O: U7 ~6 }7 b0 j    cl xxx.txt
- B7 w4 A; s& J( {5 o: `    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
/ m: Q  P! E0 k7 V  e- q- Z% P3 X% P& M! V9 U5 j8 E4 L  {: _
   
9 S0 [0 k2 I5 y. m! E7 j+ t内存监视点指令: wp, wplist, wpclear  x6 y5 k: W, s3 P1 y6 Y. P6 ^  D
    例子:& S4 F7 e( |2 I6 @0 A: X
    wp 1234,1,r9 g+ w( ^3 W/ ~9 [
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1! U2 o: o; {9 F' n) ^7 e9 p
% [/ h; t' T# I/ F
    wp 1234,2,w# P% O$ o- S+ h2 u
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度21 T. ?. \" R# ~
     9 x4 Q. I' N3 [( G: J
    wp 1234,6,rw
- c$ z& W3 b+ C7 |      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
+ t7 C$ f9 A7 s& F  `: n. N! W9 z8 b  z# P8 [
    wp 23456,a,w,wpdata == 1( Y; ~  f4 \  Q$ B
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1. q7 I5 C% c4 w) W! J; ^7 \1 G

& B0 G7 O  o; u) u1 i    wplist8 u: B5 z3 T. b
      列出所有监视点
9 h- X; \/ [! T2 W5 E. v! J. J4 f. |4 ^. ^# l+ B, a0 g: R+ u
    wpclear 3& u% Y+ l4 `+ J+ |5 _/ Y; p( r
      删除编号3的监视点
4 Z+ I! @, @5 \3 ~& t  J7 D4 R6 _; z% }; S  l( r
    wpclear) D* {6 P  a4 O2 v- E( [* W
      删除所有监视点6 c* J" D4 O2 P- I% E& ~6 t1 d# D

$ H: d: X; W7 b: A8 L* S2 m      . \- A  p0 J) U: ?% B
# \, A+ a0 c5 w' p; Z$ |
程序断点指令: bp, bplist, bpclear
' i/ I2 T  O; T    例子:
6 s& n' ~3 a) B# `    bp 1234) U1 o+ |/ }; o7 V
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断" S+ [7 q9 G7 Z$ s5 @9 |

# c: r4 E; S4 X3 }2 G. G    bp 23456,a0 == 0 && a1 == 00 e4 F( y$ J+ i
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
8 {8 c* G2 C) c9 q$ x, U
& G7 l0 ]0 y& x9 f; C2 U! \    bplist
+ g$ H- o/ X7 C/ |      列出所有断点
- c6 S: P- ]3 R. z# B- u( R/ q. y/ G0 ]; [* Z8 `
    bpclear 35 y( c/ S/ ~$ D; X/ V
      删除编号3的断点
( l! I: d* c$ p, T8 F! v/ L7 z. J& O% U5 ~# k! }# L# i
    bpclear
% ]3 J3 n1 u) t      删除所有断点
' k. K9 }. e4 c1 ]4 u8 x+ u" J
+ C! [8 ?' S& @; W! y1 i6 _      & i5 Q- i3 H; E: u( M) L
      " c+ L- L2 e/ d" s- K  \) w
跟蹤紀錄指令: trace+ D, Q6 o( E6 t
    例子:
9 w. J4 Y% ?' t& _    trace 01.txt
9 s8 n- O8 N; s) D8 Z' P7 b    跟踪当前CPU运行的所有代码, 输出至文件01.txt) p& Z9 J" U6 a# j, Y

$ J* P5 Z; v& _( ^$ d9 e    trace off
# n& m, }4 \' V$ E0 t' s    停止跟踪, 并且关闭文件! L. M5 q, _+ A7 s1 F

5 Z; @) m/ C$ {; H- J( I) W    trace 01.txt,0
/ g7 E, G  ^/ X9 h" v* J    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt% h" {+ d' e! T5 h9 v8 c
* B; G. M' V/ ^/ J8 |
    trace off,0
  w1 K9 ~( L( P7 P    停止跟踪编号为0的CPU, 并且关闭文件  {& A( u$ L5 H' y1 W7 f6 p6 p
$ K; Q/ J! D% G1 R1 Q) X
    trace 01.txt,0,{tracelog "A=%02X ",a}
# [3 l8 T; K8 n; W6 r    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt # ~& }& o1 l+ K) D( L( T
    并且在每一行的前面, 写上"A=a "
+ h3 i# D0 t  U2 q: Q$ ?* I: h    "A=%02X ",a为一个C语言printf函数常用的输出格式3 K' y4 t: N* F, w6 x( f0 G
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入% m% L) v2 L! P3 v
    X表示为大写十六进制数% `* ?) F6 |. M$ Q: r
4 V+ @1 A# [+ n4 a% l& B; M
1 {8 d  K/ ?4 q+ D- a
3 U* v9 o. K3 D7 y( |; K6 R
内存直接写入指令: maincpu+ Z" g8 v- R- r; d/ S
    格式为 maincpu.[][]@地址=数据# [; W" O" X" Q$ b: `7 ?  k
    第一个[]:* o2 Q$ Y+ n. a$ ?0 \& l
    o 表示ROM地址% ^. E0 P9 L: i/ T0 D
    p 表示RAM地址
; i# s) N5 O' H4 R* [7 X4 {6 Q4 g( m7 a, b# n* N' l2 _2 E/ @; y
    第二个[]:  h1 ]9 D- s( ?! L, t' ]+ o
    d 表示4字节1 ]8 a% R& C) ~* R2 I
    w 表示2字节
! @0 ?8 c- y8 j4 l    b 表示1字节+ E# N+ _; c. F& p2 J" Z$ D7 d
1 H- ?. _7 T- A' K
    例子:0 f% F' l6 ~" E: D3 q0 u5 |
    maincpu.ob@1234=FF, a" K: {6 G8 L3 W- |% \
    在ROM地址1234处, 写入FF一个字节7 Y$ c6 y4 W) M5 e' J0 x0 P

+ L+ S" M4 M+ ^! \    maincpu.ow@1234=4E719 c* k7 A! l! ?) I# w
    在ROM地址1234处, 写入4E 71两个字节
- N# V  O  a2 l1 @& N& [+ _
8 S( m7 w' J8 q$ @- i  U& M3 i/ {6 l& z    maincpu.od@1234=600A4E71
* |; S) c4 t! O( c+ A    在ROM地址1234处, 写入60 0A 4E 71四个字节
3 d/ k& \# V% Z( H7 X( d. e. e$ `0 c' z* }6 l, X
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
0 y: W  B, Y3 N3 q    / ^& b9 t" f* w7 k9 l
* {0 t4 A/ }3 z
其他:
" |" H# I, d/ c3 z    dasm 输出档案名,地址,长度% W3 P7 ~  ]1 j+ e
    输出程序的反汇编代码
5 R9 ?/ |- ^1 B$ ^2 F+ T    例子:  {4 m/ }- E8 B1 c. Y0 t' s3 ^+ X1 p
    dasm 01.txt,0,100000
( i4 e1 ~0 [$ [$ y( A' d0 b' `    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt' l% D5 |! d' I" H1 H

- s+ ?+ d: j2 m. w. M* I    softreset
( @% Q/ I0 q$ ^% ]  D9 L* V    游戏重启, 但不重新载入ROM4 l) C1 S# [) k
% |3 E% E& X$ c& }0 x8 D
    hardreset1 a: X6 f% }# O0 w
    游戏重启, 且重新载入ROM
" Q* c, ^6 \. G
" L1 e) q0 d  @6 q, u5 [, M    snap xxx.png, b; X/ _! Z' f0 R+ p
    截图为xxx.png5 i0 D1 Y$ W) \1 ]0 n; I- t% m
% }, g+ X( y* o
  
# J% v* `4 d0 A( z; G. Q  
0 @  q5 h+ @# c; u  P, R: h  2 y, D( J' G& r* B$ F- S# S! X1 g
热键:" E" v# Z* R! L
    ~ 中断游戏, Y" L8 \; _. c" t5 v; {
    F5 运行游戏/ O0 _7 H, V- v* d' W3 _
    F12 运行游戏且隐藏调试窗口8 i% E% z7 s' F2 D) ^
    F11 步入, 单步执行, 会进入子程序1 n* m  c$ t9 ]* I' R1 n7 H
    F10 步过, 单步执行, 不会进入子程序
7 {1 b" t3 _( ^! g5 c3 i  _    Shift+F11 执行到子程序返回
. @, J: _% r  _$ S; E- U) {* d    Ctrl+M 内存浏览窗口
7 ?3 Q9 o7 ]& L! U4 T+ Z2 d) x    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU- c* j, m; y- B
, n: w4 {( ^2 G9 K0 p+ N, d  j+ u
{:4_94:}
) K! J5 G! `1 o$ E) W8 z; J% D. L* t3 |+ N0 b" B) h- J

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2587 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
% p5 Y# Z, K9 C
2 U$ X. L1 ]8 d0 ^- V5 B+ K& RPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东
1 T+ i' W# v4 O# T. w- J11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2026-1-4 12:05 , Processed in 1.093750 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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