设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
- s+ o: S1 O% v" w6 i. ^6 f% P" }0 \
很快速的整理我自己常用的指令
! e0 v, Z" L9 {- [# A2 |! n: J; m) j' n9 t3 ]
{:4_112:}
; c  B6 }. b" F6 V5 S/ k  Z/ _' b1 M' c& u8 E! q4 M
MAME DEBUG常用指令
( W' D& B/ I+ i& P- h
; h- q! z3 i" a0 L内存搜寻: ci, cn, cl
( I; K' N, r2 j6 x; u& t5 ^" L+ r
- m7 A' S( f% u0 w  a    ci% E( J' j% L  W5 q2 |+ x' P
    搜寻任务初始化, 每次搜寻一开始一定要输入这指令" d! {! p/ e5 F8 L8 W$ b" d5 W
( I, a0 Y. ]5 W( C4 }4 q3 U
    cn3 n' W7 g  L$ U' z" d
    搜寻指令
% l+ q7 D* i5 X- p8 {1 D+ X    例子:
! H/ M5 y% J" F- F3 {) N5 U    cn eq,60
+ k: v' A$ d& {. D+ X" G    搜寻目标等于60 (十六进制)
- ?% ^4 j+ T. M( \        1 r6 `/ A( t. J5 }- E6 b
    cn eq,#96
! J$ K5 k. B5 ?9 b1 i3 ?7 @    搜寻目标等于96 (十进制)/ c* G# B1 k1 Z' G, x1 w9 _' z
/ p2 q- q/ i+ V
    cn eq( a# D2 f8 m/ M4 I! Q$ n
    搜寻目标的数值没有变化
6 Z/ H8 K6 n1 z+ X5 ^
. u# ~! K2 b0 A- i3 }6 [    cn ne1 ?9 B2 V  [: U, R
    搜寻目标的数值有变化
+ T/ w/ f) z1 b+ a) n          U  R1 I4 p# A/ A& e
    cn +1 m6 s1 A! `2 {( `- h2 X+ \
    搜寻目标的数值增加: v9 [; D+ T' r" q# E
    2 ?% f4 ]! ?  I+ r+ E5 E, U
    cn -
! a2 s& J, z% E" b    搜寻目标的数值减少
, `* I. g# ]8 v' q& y) o0 W        
, ^4 v- w' v; a3 C5 h% x    cn +,3
  g5 t0 r, M' M3 c. k) d    搜寻目标的数值增加3 (十六进制)
8 R( `) z: T& R& _5 r) q4 G: |9 U
% y+ T4 D- T0 C2 i    cl6 a9 Z, P& P2 v1 l' k
    列出所有搜寻结果) B- g: M+ l: @

+ p. Y9 u" c+ A; q+ S7 A    cl xxx.txt) d6 N, r% w& L' u* m* ^
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
( @# S1 B1 `, q6 w; J7 ^* D( o$ u% t: L# `6 D/ u' u8 ?, R
    - B: \- N9 t5 D7 G
内存监视点指令: wp, wplist, wpclear
0 @. A+ j1 F/ F9 k) ?9 w+ U    例子:, R! L' E* o9 q6 l& K! R- r
    wp 1234,1,r) ~; M/ ~2 Y1 C% O+ d
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
# b& c& ^; n5 C  V. ^$ M  Z' f' K( t) }- Z  X% m# K, N, h
    wp 1234,2,w9 S5 k% Q2 B: t$ D9 c  B- m
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度29 C% V9 Y& Z0 Q7 b6 I
     
9 }& b: n: ?, h5 Y4 g& q    wp 1234,6,rw
7 A, @( b; z0 S7 b1 R* P      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6: b% }. k' n; x3 V

% _6 O9 R  k  U3 t1 r# f; L6 h" C6 ^    wp 23456,a,w,wpdata == 19 j4 R3 q/ D, C
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
) J0 [# O% ]6 y% ?9 E
1 x( _$ A" W' F0 y& k0 L    wplist
  W) g$ t! f3 u  J: s7 j      列出所有监视点
/ P: d5 l4 t0 y' @/ w/ h! \1 w5 w" V8 X1 g7 ~) F1 v
    wpclear 3
% i) Y% A1 |' H0 N* f6 P% C# N      删除编号3的监视点* j" s0 q  o7 R2 M5 a# b4 H

  i/ s6 p) n. Y- u    wpclear
2 Z% J: H! z$ l) w. `. Q* }/ P& X8 S      删除所有监视点- j# _8 [* f6 Z" D; F% n% h" E

5 C! L, X2 j$ Q& r& F. E8 M9 d; B8 C2 Q      
- f" v. X" |% y7 D4 ]+ u( U# _4 h4 a$ U
程序断点指令: bp, bplist, bpclear1 }2 D" ~" J' Z, F8 W
    例子:
; s) N3 V  K+ N) S4 O) Y1 h2 u    bp 1234
8 T+ S/ K1 D- b) d: S3 C& a9 i& Y; @      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
1 ?& l7 b3 {/ o
5 \/ h; K# ?  j6 \- h+ m    bp 23456,a0 == 0 && a1 == 0
% q1 a# i0 X- q      在地址23456下断, 且中断条件为a0等于0以及a1等于0
/ q* `; f" F% U1 F; r$ Z
5 Z/ E9 x' a* ^' Z; z: ~. \    bplist6 ?+ M$ \( e/ [& R% A/ f# z
      列出所有断点" R1 a! b. z+ M2 c. W
* @: y; z/ q. @% D
    bpclear 3
" n0 V! j0 E- c2 r( y! s      删除编号3的断点7 k" j0 C! F4 c# B, i" V1 B' J

$ s  W4 x. ?" Q1 M    bpclear* Z# _. w* z5 n3 v. j1 @3 i
      删除所有断点6 h, V# R8 [+ T

. z5 x7 ^6 l- X8 ?5 R2 x      
6 H9 B/ g) l  q0 K, q, ]      ) R% V3 Z& |* I, e: ~
跟蹤紀錄指令: trace/ m( k2 S0 n2 s1 r9 U" S- `: p
    例子:
1 ]; X$ V$ l* h3 c. f4 v0 V) N! U, ^    trace 01.txt2 T: y- M% g' t2 B: j/ K
    跟踪当前CPU运行的所有代码, 输出至文件01.txt
7 {, k4 a) J. m  P+ s$ N+ w7 K4 S- d7 ]6 h( ^9 X4 z  v# E0 D0 E
    trace off
3 I  f( ]* o+ O( d" x' O- R    停止跟踪, 并且关闭文件7 k$ [8 U) R! T5 o6 q
6 R; Z$ C4 H3 s! R# `- k
    trace 01.txt,0
! B# i4 Z, d8 G5 H    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
( p( M. e1 X+ y( q7 ~6 s; N& M$ J! S& o1 k
    trace off,0
8 y" c. U3 r; Q# J& u! \$ @. E    停止跟踪编号为0的CPU, 并且关闭文件' U( G2 z4 v4 D3 Q

, a  ]# n( S  D/ _& k/ `. s7 j    trace 01.txt,0,{tracelog "A=%02X ",a}
* d; u2 G8 f4 K    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
, J: J/ v. L. o/ X    并且在每一行的前面, 写上"A=a "$ U9 C3 y( H( S4 ~
    "A=%02X ",a为一个C语言printf函数常用的输出格式! `+ f3 I* M( p2 y" n% B
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
; Y( F- ?" C  j% M+ G' Z    X表示为大写十六进制数% ~* H7 F' p- L

0 {  Z8 l7 H5 e9 ]; R
- H  u1 h/ m) g  M+ X) ]$ t" t, }% \9 {, y7 L9 o7 M# H6 i) j* @
内存直接写入指令: maincpu5 X% B9 a2 f/ o2 t7 `5 A' ]( b
    格式为 maincpu.[][]@地址=数据5 R9 m2 r0 _) K3 M- ~
    第一个[]:" [8 y  ^2 C% {3 E0 w$ B# I
    o 表示ROM地址; Y' R* N, ]! N( B4 Y0 A  D# U
    p 表示RAM地址' C  W& u, F5 A+ e
( X- w8 ~# p, D7 C7 G2 [, m2 S
    第二个[]:) k9 |6 ]" R  u+ f7 n
    d 表示4字节; P# u8 M8 w. M# z
    w 表示2字节
9 H* k6 G% T9 e# T; Z' I9 W# I    b 表示1字节/ A5 |' ]  w8 [$ }* O
6 K( h* m% g' [5 Z, z
    例子:1 O& J: {8 E+ b4 V5 ]
    maincpu.ob@1234=FF
0 f8 |, h; J1 G* T6 r    在ROM地址1234处, 写入FF一个字节
  _  z7 B. u" M- S2 \' d) p3 k  z$ d, O" m
    maincpu.ow@1234=4E71* k' e: ]7 Z4 m. c( R
    在ROM地址1234处, 写入4E 71两个字节
3 }8 g1 f4 F) A; `0 j
' I0 \$ W* g' H7 x    maincpu.od@1234=600A4E71
: T# J4 W- |# O% D4 e( T% @    在ROM地址1234处, 写入60 0A 4E 71四个字节
2 Z4 L% g; ?4 F) C; T) B4 k" R! v- l  o- u- |. @% S! r. A
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
5 E1 z0 K6 Y( O7 \( u4 S" Z3 e   
6 Q; i1 X( j7 C6 d5 P* l- s! c. Y- d  G
其他:
/ Q4 t. @1 w8 d9 ~  L# u5 S    dasm 输出档案名,地址,长度( U4 z1 T% @# v* |
    输出程序的反汇编代码
5 T4 \2 K% ~3 P; h    例子:
% E1 G. V* A) p+ i( X    dasm 01.txt,0,1000005 C4 s* j* f5 y2 x' B
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt. v& ^: t; e# n( |1 R
& e6 m+ l  f7 V& D3 S
    softreset
1 r/ M( u/ l( V( C9 C    游戏重启, 但不重新载入ROM- C$ M# E8 X7 D' M, _
1 c4 w8 h' [2 B- F
    hardreset
# e6 d4 s* n% c4 m! n/ g    游戏重启, 且重新载入ROM
; ?0 J* z1 L% x+ k3 t
' {+ J; G5 b! w0 \! ~0 M    snap xxx.png( d4 s/ h1 B& E/ q2 r3 p6 O) A% v
    截图为xxx.png6 F5 R4 E1 b! Z% [
- E  G! N0 }# ]! l' j" ?; C' y
  
  I9 b9 B$ ]2 W* U/ F. M6 A  ; p5 v, m* J) O, o1 ?
  & \/ ~6 n5 h! E6 D- C! K
热键:
4 b/ N/ ^' s+ g0 K$ J5 D2 }- L5 y    ~ 中断游戏
% D2 A5 L* {! Z: g/ d- k, W    F5 运行游戏. D1 O- |4 O! P. z" C
    F12 运行游戏且隐藏调试窗口
/ |  P7 b3 d9 |9 s/ S, }; K% n, a& }0 Q# Y    F11 步入, 单步执行, 会进入子程序; L" B. H1 w. R
    F10 步过, 单步执行, 不会进入子程序5 [+ h, h- E) a- r
    Shift+F11 执行到子程序返回
  s3 l9 W) B! I0 w0 c/ Y    Ctrl+M 内存浏览窗口& [2 [' G* @( K
    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
) c# U  B9 ?7 [+ K. a+ n
/ A/ e% T' A2 t; e" k. u{:4_94:} : ]! n: t7 z( k; D

6 @9 V6 r+ t1 Q- r! v; \

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2565 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
2 B( J" C% }* p$ |( C* n, D: D- S4 R" o+ t* `2 w
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 | 显示全部楼层
要详细些的东东$ j2 H1 Z1 j- V: p
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

发表于 2013-6-19 19:43:21 | 显示全部楼层
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-7-23 08:33

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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