EMU618社区

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

' y: c4 q. Z; K) o很快速的整理我自己常用的指令$ \4 s3 e& B; W" f% [) S  D& q7 o6 m# _, F

3 {1 J& q" B! O{:4_112:} : l$ I3 U/ r( _- X, {

* }# m% Q" R( W4 mMAME DEBUG常用指令
2 z& X( S! A/ r# ?
) r. H6 S) L( k8 v, c7 B7 ?内存搜寻: ci, cn, cl0 N* y! e) }7 {3 Y( w

- M! ^/ d# E. F& @9 v5 [3 m    ci
) J3 c/ n8 G; F# d    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
  z9 \1 O) K0 [/ f8 H6 A7 A. a7 z- S+ k7 y0 R
    cn# a; i7 S& Y6 T6 n- x0 K' U2 Z7 O* L
    搜寻指令
9 B8 T4 ^- B& N3 O  L  J- k    例子:$ k- A1 A3 g( y5 I9 V
    cn eq,60# i+ [( V9 g- o, x
    搜寻目标等于60 (十六进制)8 I( c# N: W! F7 R1 l( d
        
/ m, G6 d( e8 ~" M    cn eq,#964 _/ g5 b9 _7 Z: c/ ]* ]0 }: J! R
    搜寻目标等于96 (十进制)
6 r- J0 j  }& A; R
8 m9 z  u6 z4 H4 `1 Q7 f0 E$ @    cn eq; W' y% s2 t' D( x) \* H) [
    搜寻目标的数值没有变化
; g, k' `" V6 }" P- n; k0 l2 X" a- ~/ Q* u, G, {: }! e
    cn ne9 o7 k  l* l: M" P, R7 F" ?9 [
    搜寻目标的数值有变化5 Z7 v( a( ?, I& g' |' Y# ~
        " N) `8 g9 Z% T
    cn +
: l) T6 I% k6 j" G, V) G    搜寻目标的数值增加+ W, r  M3 f" a) I9 c" @
    " [9 o* b& M5 L; f
    cn -* y& Y- Z& o& A/ T/ v  R
    搜寻目标的数值减少
* [4 Z3 W* c! n5 J* s" I( R        3 M) v0 u' y/ }$ ]
    cn +,31 U6 t  |1 t9 l) `' j* K
    搜寻目标的数值增加3 (十六进制)& c) o5 W9 l2 d' j

& F( h( U) w1 H  w  ^    cl
4 u( j) F# c1 J/ x. Z# n    列出所有搜寻结果
% q1 r6 |' M2 h' @6 c- C0 b; F- g/ l: N' S% X
    cl xxx.txt
' i. d3 C' t; A$ ~9 X5 I    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式
( C6 W! Y8 l) q1 s/ ~  @! p' O7 W: Y4 p; y
    + f, @( z7 k2 l" O! Y2 o7 n1 v$ T
内存监视点指令: wp, wplist, wpclear  {- i* G6 O1 B
    例子:
; _4 T9 b6 K0 Q% e4 s    wp 1234,1,r. s3 C# K- r7 s  P0 {: J6 d! S
      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
5 `- T% U2 ^' e( H. N5 V2 F) u+ I5 U
    wp 1234,2,w! N9 U( h5 ?' r4 K
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2  Y+ Z! X5 Z& L, D* z  K; o
     3 y# `2 \& u# H$ m0 ~: Z+ y) U
    wp 1234,6,rw. {0 A5 g0 o1 ]$ u
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度67 |4 b8 Q5 K; N# I

2 a% i8 ?- P: I& @    wp 23456,a,w,wpdata == 1
+ z" @8 Y4 ?0 K- U      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
* b/ ?9 y; C# y/ }$ `7 z
! y' X+ T* y, s: ]+ Q/ o$ h    wplist$ p* @# U% h1 @; r
      列出所有监视点
+ Y3 \+ p/ x0 T6 S0 D; O! }
* U3 D/ D1 l. f1 H* S9 W* i2 }    wpclear 3
7 u4 H' s5 A' X' {: r      删除编号3的监视点1 B/ H& W/ t$ L+ l% v& {" J! E% n$ w

% r+ L" l$ u, @4 H6 r    wpclear
  X# S$ V. W2 x' r/ x% [' r* H# D      删除所有监视点# A! `' p" x& W1 {" {( [8 v5 a; b

4 E; F* H2 N% h' B: v0 }# s2 {      2 t" p" c8 t. C; t
2 w  Q- U1 O& R' @9 W6 x4 m! `
程序断点指令: bp, bplist, bpclear
, Q% {+ G; o% Q" V    例子:
. @& d8 [8 {* B0 S0 K6 z$ ~    bp 1234' s' [5 }5 B& K; t& X
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断5 H/ ]8 L0 j/ {- i! R8 x! P# ~: N
1 k' E( J7 T, G9 B5 G2 T# z" x
    bp 23456,a0 == 0 && a1 == 01 h* d# _/ h4 [: M
      在地址23456下断, 且中断条件为a0等于0以及a1等于0! b. L; V4 x+ g" C

0 f3 e+ B. ~# b6 b    bplist
9 C& ~. Q: q  d6 e+ l8 ~( ^7 l* N      列出所有断点. ?0 s/ x3 D3 [1 z6 G5 v: O% [

: y9 d# a" K4 I7 t2 G3 B    bpclear 3
, C( T2 M$ V5 l  o) W      删除编号3的断点6 a, ^/ m, z) U1 X5 D4 n3 m4 N) U
# `* W+ \" {" M$ ^. I1 M* j
    bpclear2 z5 D. D9 ?! `9 p* _- Q( }0 Q
      删除所有断点' S) e8 [- p4 v# C* P

' o  Z; l% e- M' {' E      1 V. I- R9 x; b
      
# ?  Y1 i" S. R6 e5 |跟蹤紀錄指令: trace
1 N% P1 W* d; N  T4 F) @9 A+ t    例子:$ Y+ u4 i( w2 V& J* H* Q
    trace 01.txt* [" ?* a; |8 }6 g- W
    跟踪当前CPU运行的所有代码, 输出至文件01.txt3 q6 B3 [  W/ e! M8 k; u8 h7 m! J$ e
; D( c% Y. }% w5 L. S
    trace off
6 ~8 z- ?4 o0 Q, l; B    停止跟踪, 并且关闭文件
% p' F, M% a& N5 s1 q: }# |+ ^0 s& n) j. i) j& L) G, t4 X: k
    trace 01.txt,0
" ^, H. J0 [# j- ?    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
; ?, p& m) r* y$ p1 Y2 I" `, H$ e+ a% j- v' L
    trace off,0
: {) I& i" Z* a' `    停止跟踪编号为0的CPU, 并且关闭文件
- ^0 c5 V3 a% C* G) a. f, P0 a) I" o; Y$ ?4 a6 b6 i
    trace 01.txt,0,{tracelog "A=%02X ",a}
0 c7 Q! @! S0 Z/ d1 _: b* E    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt * A0 T% E0 J; P! V
    并且在每一行的前面, 写上"A=a "
, o5 D' j7 n0 x3 h4 G( H$ b    "A=%02X ",a为一个C语言printf函数常用的输出格式
. p' @+ @" C5 x9 ^6 H! w( p% K& w    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入7 i. E; i! s+ ?' A0 `$ n( Y: t
    X表示为大写十六进制数, H' M5 i7 Y9 Y5 [
9 I2 u* j8 o3 X  a! J! W) h

. ?; o2 A& l  }) v$ p/ O
9 N- y9 R6 t- l- v2 d$ L内存直接写入指令: maincpu
' C( o& H' ]$ O% ^. X: }! _. q3 v: l    格式为 maincpu.[][]@地址=数据
0 |% U  u, Z9 ?/ h' O5 D8 k    第一个[]:" }; b) I  c$ o9 u
    o 表示ROM地址
6 v5 J: Z* B& i  m% Y! F! A    p 表示RAM地址1 |) V' A1 [" X6 f/ k* |+ n! _0 Z, t

1 n2 i4 n) A' q    第二个[]:
3 p; n" p& m) i# n! G# o2 G    d 表示4字节2 l  F% J- m& v3 v" s7 X
    w 表示2字节
$ `" O! a# L8 F( c    b 表示1字节
& Y" ^6 `7 \/ ~/ M
, J7 }3 o7 N; D" R5 E. ^# @% o2 q    例子:/ L1 S8 t6 }( A& |$ E. H" Y# f: s) t
    maincpu.ob@1234=FF1 D! L; D/ |4 C
    在ROM地址1234处, 写入FF一个字节$ ~# I- h0 V# W. Z6 O& {7 X
6 q* ?0 ^/ u' e, [
    maincpu.ow@1234=4E71
7 z3 ]! y7 w5 \( q    在ROM地址1234处, 写入4E 71两个字节
- [0 D# S0 D8 |7 a
% ]. x: U" l7 q- r    maincpu.od@1234=600A4E71
8 Q; j7 k; i6 I0 H( v- P8 d0 P    在ROM地址1234处, 写入60 0A 4E 71四个字节
2 x0 A( C' Z+ p  a+ w0 i4 J4 a% S* i" K7 X- a1 B3 ?0 \
    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写# s+ V0 ]/ p) E
    ) j6 Q; b' P. ~5 U

8 _  u- Q. W9 b6 l- J; I, f5 W& ^其他:# z3 E  X! j$ T- e. s0 t
    dasm 输出档案名,地址,长度; r; L0 O  W1 u  J
    输出程序的反汇编代码1 s6 C# O& b: E4 W% L/ F
    例子:  V4 g7 I" _8 o- `# {* ^
    dasm 01.txt,0,100000
0 _9 ~+ S3 Q3 C- `% x    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt+ ^# j" M* w2 @, i3 y2 G% v2 R- M

- K! Q; D) l6 j0 r1 A    softreset, L. h: d1 T+ G
    游戏重启, 但不重新载入ROM
7 t8 ?7 z+ L1 l/ P& v
4 Y! s: @. Z( O2 u    hardreset2 O1 {$ {7 D0 }) ^. ^: a
    游戏重启, 且重新载入ROM
* ~& q) ]6 F; L7 a! x2 ]/ @" E( N- T6 Z4 n. E5 ?* S
    snap xxx.png, w4 p3 K% i  l
    截图为xxx.png6 M* g3 j9 Y, l# Z6 a. a
& ?8 ~+ f. q; |3 m
  - s7 P7 O" J* I* O+ L0 S9 N
  
0 i) H& d1 C* B. x9 j1 m  8 V/ l+ @# V* r3 Q
热键:, y3 X6 ~, r; g4 @7 h
    ~ 中断游戏
; S+ u8 V+ z& V. f( [    F5 运行游戏
- A6 h+ U+ h! T2 ?! O% {    F12 运行游戏且隐藏调试窗口
: ^; a5 K8 x# t& K    F11 步入, 单步执行, 会进入子程序' l- S8 v4 t0 [+ K! t/ \7 J! h
    F10 步过, 单步执行, 不会进入子程序( J+ U/ ]6 y7 L
    Shift+F11 执行到子程序返回
0 g" ]  j7 r$ ?% ]" z    Ctrl+M 内存浏览窗口
# b# _/ V( S% {' E/ t/ C    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
, X* Y7 i& `. H& L* t
3 E# Y% C# h5 T. z9 h* c& m6 \0 m{:4_94:}
+ c9 H. b/ Y. F9 @% Y2 X1 @% _, b6 Z: L  [5 m& n, o  m- j' [! \

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

签到天数: 2577 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
8 n$ C+ ^  f& T6 Z9 l3 P6 @
8 t7 A! W4 L7 |6 e, I4 }) Q# aPS:如果能像楼上的大大那样,用一个实例来补充说明一下这些指令的用法就更好了。

该用户从未签到

发表于 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 | 显示全部楼层
要详细些的东东* P9 _  k# O+ i. D& s8 `
11111111111111

该用户从未签到

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

该用户从未签到

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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