EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

' v, R' ~. t  @: z, |很快速的整理我自己常用的指令' v0 ]% V' E7 I
- Z& K( B: `8 ]8 ^
{:4_112:}
, w6 l3 U6 ^* x* ~4 o4 w; {* _; I& y5 y
MAME DEBUG常用指令% q. F% ]$ d% A& I9 s$ s

& a( s- o: M$ S3 V. N* [内存搜寻: ci, cn, cl' ~! y* N" L1 H" M3 K" ^

. F7 x( Z1 y2 U: ~    ci: |1 w( [  @, L3 }
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令- k6 Z) F% g3 K  C1 ]

, d' Q- H2 r7 w/ W" s6 W" b    cn
; Q5 a* G+ M4 n$ g- Y& g$ |, }. O& D    搜寻指令4 z/ L" p/ `0 @& J, V6 K% \
    例子:/ T# r$ A$ s* h/ G/ K
    cn eq,60; K2 L( v7 F: ?! t$ }. l
    搜寻目标等于60 (十六进制)
+ y& m  N# B) {7 Y: w        
" W4 J: v7 x: w5 {3 L, l: I6 [3 M    cn eq,#96# T- @0 \8 E2 s/ U9 r9 \" `; q
    搜寻目标等于96 (十进制)
* d9 V# p, x# `& b9 @; S4 f. a7 T' y; h1 S( U
    cn eq
! ]3 v% N/ b6 p5 [6 C    搜寻目标的数值没有变化4 Y* e$ M! J2 e

1 o( ^3 ]9 {# R. `( U2 y, f    cn ne6 L0 O1 F2 q  n! Z4 k0 I8 E# w% ~
    搜寻目标的数值有变化: p! \) O) x; Y9 I2 Z' H
        
' o8 d; u) I4 W( }- D    cn +
! `* u' M" N4 h# g/ q0 q    搜寻目标的数值增加
$ z; A) V" |& b2 D    4 W. R6 D$ c" j
    cn -
3 e* N/ W. c  L- o3 [* h    搜寻目标的数值减少6 Y5 }9 w. }" [: f6 D  c
        
  p! h3 l, h* c1 b) K6 N* H    cn +,3
* T; e$ n( u  P( z. r2 w0 v    搜寻目标的数值增加3 (十六进制)
" r; H. Z- M& N) e  W. w
9 Q2 l: D7 H4 O( m    cl$ ?+ j' o; Q, d/ P
    列出所有搜寻结果
% S) J/ M4 c  V7 F
. x$ q) U/ `, }' F- F    cl xxx.txt0 t: x1 Y+ d, Y& a6 S
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
/ _- V0 c  P2 j# ?9 t5 |
- r+ G# S7 e5 B! k   
4 T. t) Q, L: f. ~' }3 t9 [8 J内存监视点指令: wp, wplist, wpclear/ t! y7 O1 w4 M$ K
    例子:3 g; B. p1 q- D
    wp 1234,1,r) o) x9 h8 k" s9 L
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
- u4 I9 R! S; Z: A9 P( E/ e- E/ N, \/ t. R6 A3 N' R8 T- B
    wp 1234,2,w3 w1 s( o) S( ?
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2$ ], Y! j. l1 B  ]& L( ?
     / S7 k$ x' D. S5 V  u
    wp 1234,6,rw2 {* c# `( ]4 G! j0 e& r
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6" Z/ w7 q, i: V6 F% L

' Y! J8 A6 X/ C1 q    wp 23456,a,w,wpdata == 1+ [; }, |6 q! p+ s
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1: f  ]7 h5 X8 F% _7 G6 ~& ]% x
2 p$ b# [% w% ~7 i. P7 F3 a
    wplist
3 ], E: \7 w; I      列出所有监视点
6 ?+ X+ V" I% S7 S7 Y$ y4 }, Y2 w- F1 u2 O# M
    wpclear 38 R* f' P, P. k
      删除编号3的监视点
3 h+ r9 ~/ {. ], ]
/ n  Y- D+ m" v4 r, R    wpclear2 e& B' R6 H- J9 ]% K: f8 k) o
      删除所有监视点# y- S/ O) D. M, ?. \
* q+ H1 ~2 E/ n  q6 w' q# Q
      + B9 t3 i7 ]& s, f8 g* J. B

5 ?$ b9 D* t" J% ?/ }9 m程序断点指令: bp, bplist, bpclear6 C- \2 h9 U. w9 |! A5 r
    例子:# b/ r* c. [) H& ?3 Y) R* A- r
    bp 1234
1 f% g! N" Q, u% w, ~3 `      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断+ p" K% V" b9 E( d$ F2 A

% }0 A, x5 \$ g" G) k5 H    bp 23456,a0 == 0 && a1 == 0- C5 k" b5 `  S, Q
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
) F2 A+ g4 {( K% k5 d/ O3 N9 e. p- B3 h. X: k' E- y8 K
    bplist; p; h- {- u" h
      列出所有断点
! g: @$ f6 N( j9 ]' s1 o' Q" P) s% U3 C
    bpclear 32 w6 P2 E# O( t& I
      删除编号3的断点( D% x! Y% z3 T/ i- a8 |

7 v% I* X" p% L# E9 s    bpclear
) u8 r" q$ |% F) p- l9 H/ z      删除所有断点7 J4 W" P1 B- z
( j/ g3 d0 M& [" g+ G
      
4 `! X6 A8 M) `* z* I/ O      
. s$ q* ]) S$ d跟蹤紀錄指令: trace
' q; e  `8 V+ B8 L. E    例子:
8 a. j/ V4 q1 F% ?( A. B    trace 01.txt) z+ m$ X6 v) [; X
    跟踪当前CPU运行的所有代码, 输出至文件01.txt  l/ ?* k  ]3 e' j, X3 a

% R# F( O9 K9 x) [) b" r  a    trace off
6 u. \2 q; M- x9 G' W: g, i. ^& H    停止跟踪, 并且关闭文件* B! L9 ^/ s% }/ ?+ r
* E# i8 S6 q* s; q) `( `4 @
    trace 01.txt,0; y- F+ S3 p* |0 C# J9 a
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
" O5 ~# t# Q  q& }6 ]
* h$ C5 i+ A& y    trace off,0
7 J1 |1 P8 F1 S2 Y8 u3 H: q8 U    停止跟踪编号为0的CPU, 并且关闭文件5 b1 Y8 W2 m+ t, g5 r

, A5 X* t) h" i    trace 01.txt,0,{tracelog "A=%02X ",a}8 D: @( `$ [* A) i& \
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
( H; g( J0 O+ L" y5 v9 ^, x$ y( c    并且在每一行的前面, 写上"A=a "2 [8 b5 a# Z. l4 P0 {8 n( G6 f0 v4 \' K
    "A=%02X ",a为一个C语言printf函数常用的输出格式
5 {1 U9 _% _, P" u' A    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
% b; i6 {+ w( y$ T, y6 ^  F    X表示为大写十六进制数
! F- r* c& s4 U: j& g
1 S# P. i4 Y+ k  v9 P
8 v# U+ g( G9 d$ Q# x" U2 c2 p* l% e/ x3 g
内存直接写入指令: maincpu
4 g: Y5 H) Y8 O    格式为 maincpu.[][]@地址=数据" d$ N0 C* @4 L  P7 C9 g
    第一个[]:
5 K: N9 L# B5 [$ j5 C8 L    o 表示ROM地址
# @5 l  Y0 ]! B, \" n) u0 I    p 表示RAM地址' u) B. s$ H2 s% S( S" E8 h

  h+ Z. m, z9 [5 O    第二个[]:
' K3 z7 m+ K7 a    d 表示4字节
# f, _4 D0 f6 U/ j2 O( S    w 表示2字节
4 I/ n$ ]1 s& e3 K9 e    b 表示1字节3 @; V7 N$ q0 p& V* L8 T

8 u+ B5 `9 m: X$ U    例子:$ S3 u6 t" I. Z- _( P0 e" C7 J/ b. r0 [
    maincpu.ob@1234=FF
9 N; i% d! e( M, s# |$ v1 J8 R    在ROM地址1234处, 写入FF一个字节
9 I& h! e& O8 [# Y9 O
( ~! X& z( `0 b6 z6 e    maincpu.ow@1234=4E71; D4 l1 O. o: y% t9 i3 I( d# a# u- k
    在ROM地址1234处, 写入4E 71两个字节
- O8 w% x3 z) ]8 ?+ _) g  `3 A+ _1 B/ D: m$ k
    maincpu.od@1234=600A4E71
+ m# n" V" U2 J9 s( \* y8 s    在ROM地址1234处, 写入60 0A 4E 71四个字节; q0 F# h0 |4 _0 x8 a
! b$ h: ~: i% x3 L$ V
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写1 [2 u# W  z: m* f' u
    ' q1 S7 J( _2 b5 p3 ?

& C! i- L8 C( `: K其他:9 W- d# {( a. W+ x, B5 @" f
    dasm 输出档案名,地址,长度
  e, K0 X$ {) c. I% ]" r9 [    输出程序的反汇编代码
" _- |& W4 \5 u5 E% y    例子:
1 n  G- n7 m( t4 i( n    dasm 01.txt,0,100000
! \' l0 o9 q; O6 n: V! u    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt  z' V3 B0 T/ M4 r5 M% U4 p, L' w
4 O# n5 [6 y6 c- e) E
    softreset
' f! O0 L4 e6 V    游戏重启, 但不重新载入ROM
% _- d' J3 B# q' D4 n, m/ U- J- n# o" M% ]6 G4 C" u" w3 f
    hardreset/ O5 |9 Y: n- B3 I+ f
    游戏重启, 且重新载入ROM
, q2 W+ A% b! P4 Q2 g5 f
% q8 \7 m  ~4 f5 N: ?    snap xxx.png
: ^  P/ H4 g9 J' I9 p8 d    截图为xxx.png
9 W2 w/ S% Z1 @/ ^9 U3 C( n% J0 `2 V
  
4 k: F0 d  P% N1 G7 E9 u6 D; O  / O4 {9 q+ k" Q6 ^1 ?1 Z
    m! _- n' _: L6 ~5 z
热键:
: j5 x0 V. \4 \6 T6 t) d    ~ 中断游戏
+ J# @& Y( X8 G. s    F5 运行游戏, Y6 U. f0 `1 I7 F. r+ n
    F12 运行游戏且隐藏调试窗口
+ ^0 R( z& o0 X4 g  V- b9 q6 X. A    F11 步入, 单步执行, 会进入子程序; H: V" W+ Q. p
    F10 步过, 单步执行, 不会进入子程序
5 f3 C3 S7 z- q( Q    Shift+F11 执行到子程序返回
6 S# I; J2 s3 a, J, L    Ctrl+M 内存浏览窗口
8 i+ u3 f2 F$ [    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU/ W7 S' e5 `. H; z* i
9 \/ `( s! X7 Z2 y) ~+ M
{:4_94:} + C9 _# C  T" Q: S

  J$ l+ g4 T# K

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2586 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。- W$ o# s  W/ F2 ^
+ ?2 R! v; C) l# [8 X; d5 Q
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 Y, |1 a8 {/ w  f- ^
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-12-28 18:33 , Processed in 1.088867 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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