设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

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

; V$ t/ X, T6 w" N7 [8 V很快速的整理我自己常用的指令
% L: ?5 v2 T% i3 ~: U" b$ N, z
3 z; B% P. C! v{:4_112:} 5 Y, }9 S1 f( h; A

1 }: v  U) S3 i: W" MMAME DEBUG常用指令4 N5 y% z* y; ^% S

6 r0 {% o4 r  m3 x: s( |% H内存搜寻: ci, cn, cl
* M7 r# {7 i! _4 N9 h& F5 N
' j- n1 u' A! X! B    ci
, B( W( m. D5 s    搜寻任务初始化, 每次搜寻一开始一定要输入这指令0 S; }$ G8 _; C7 W+ w8 N. b

) x1 [4 I  O  ^& T2 f3 ]7 f    cn
+ |0 n$ Y* F3 p" \& |' m0 V    搜寻指令4 @4 M6 }7 l2 m+ t( \8 U! i
    例子:" y+ x1 t5 H% D8 O9 _
    cn eq,60& g! j! X3 m1 J" u% z
    搜寻目标等于60 (十六进制)
# d; l' t+ W% C. p. [        
$ l2 ~# T& h. A2 z2 B    cn eq,#96. \! Y7 N3 I! W
    搜寻目标等于96 (十进制)( K  V/ J5 {' X2 f0 P

$ g. U! t% ^; Z* H4 K' l- ^# ]. ]    cn eq
: v' d5 R1 a' I0 r( q3 U* j    搜寻目标的数值没有变化( a' O& w) P7 C( u1 N, R& Z

: V6 M3 a& r2 N    cn ne( L/ z# m6 a: t3 F1 v2 J5 l) x
    搜寻目标的数值有变化+ G- @' G9 Q9 m9 D( U9 W8 i
        
1 U5 @" Y$ {7 V3 j5 V% M6 X. ~# t, }    cn +4 F  U6 M; N- K; A) ?8 s4 F
    搜寻目标的数值增加
, h: k$ a- f: L) r! E' B   
, `) n; S: S4 u9 Y0 m, `+ M    cn -
$ Q% [* h( z7 n9 M' {    搜寻目标的数值减少
6 d# X" @  m5 K" d  E+ |. m3 Q0 k        
8 g- q% y* U# p/ A. q8 g    cn +,3" I; C5 d0 G' o0 f" _' f
    搜寻目标的数值增加3 (十六进制)
! B+ {/ h& M" p* r( ~- Y7 B* I% q
$ Z4 L/ E5 H% d3 e- f    cl
. _4 k- U4 i- h! P, P( C' i    列出所有搜寻结果7 A9 a1 d1 J/ K% `
+ @- `3 ~: m5 h+ N6 O
    cl xxx.txt
: \! Y3 l5 h: B8 u3 G, l1 A    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式1 m, B* L: f  h

& X8 X4 Y! ^2 O: R7 }* {2 q   
9 u0 c) D: t( }* \+ d" A内存监视点指令: wp, wplist, wpclear3 v3 M# _( Y3 x8 w$ A9 q; o1 P
    例子:
3 {+ y- H/ W" W. H- [$ q    wp 1234,1,r
! e: {" }/ i3 q+ F      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度10 u3 r+ v' [3 s' f, W" `
% n; f9 N# b8 t. F: N. ?
    wp 1234,2,w( x9 d4 H7 I7 V# s9 s
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
: t3 G: O- i; t9 a0 E: a2 ^     . l( E; A1 ^( v* L( a. J! o
    wp 1234,6,rw! V6 p: W: g1 B
      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6( h0 m* r' O8 ]& R4 e4 z

. m5 H* G: j2 w- z# V. H    wp 23456,a,w,wpdata == 19 B5 q1 p% e  x4 f
      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1! l9 z1 m- m7 C

( w- D" r6 z6 N/ R8 b# E$ s    wplist+ e3 Z& e  J  R( P
      列出所有监视点
5 }; p. j6 w6 h4 W% D, ?) Q# H% [! u0 }3 ?8 K
    wpclear 3
) g) u4 d6 }/ W6 C! w! _      删除编号3的监视点% \/ H4 B5 B) g/ U
& T) N) i+ x* @
    wpclear4 ~0 n5 |! o+ R/ S4 z/ J
      删除所有监视点: L" w; I( ~5 y. H9 v! h9 i

% {+ O9 d" r7 ~; B1 Y* u0 P' U      
7 `4 u+ v% Y  J3 _9 I- a1 e
# O  l& }; ]' T* Q1 p8 j2 `& `程序断点指令: bp, bplist, bpclear/ J6 r4 m4 f, a
    例子:
5 Q* F+ O& A9 H8 V5 W    bp 1234# b' z& i" n# F9 L
      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断2 M9 r6 E$ A( F; E+ ?4 K

: ]( S! ]  U2 A3 z" `/ n% g    bp 23456,a0 == 0 && a1 == 00 V) }0 t  h" b( A
      在地址23456下断, 且中断条件为a0等于0以及a1等于0
; O' [, X3 }5 X( D. m- J
* V5 g; Z* ^( x' o% W    bplist' e7 B8 R7 J" C; x) b
      列出所有断点% g2 R' }: h5 {% T( k

/ [" I) q3 j0 C4 x9 X    bpclear 3( W/ F, c. e% X% t
      删除编号3的断点
9 ?4 A  W8 x% s5 v+ C0 ?+ e
8 T: b3 b& u3 R    bpclear/ s+ \: _; J9 A& _
      删除所有断点
) _# {  G# i  m* b( X2 d
( |* j1 R8 l# \* O6 a# r+ l! H" U      
8 r: ~5 Q% J& A" O  q      : `! x: `- ^6 Q; X$ {7 }+ u" B
跟蹤紀錄指令: trace
, o- S+ ^) @  b" t    例子:
# l3 P. }9 L# s- L2 Y3 t4 W    trace 01.txt
# [) s  O  N7 R  O( A/ V    跟踪当前CPU运行的所有代码, 输出至文件01.txt. P+ c8 Z3 d5 ~- h5 x
: M! e% r/ f% V5 E) f* k
    trace off4 B* y& C! u: n0 a5 L6 V4 B
    停止跟踪, 并且关闭文件
8 L( f; u1 p* {) |4 ?, _! G9 N2 {
    trace 01.txt,0/ S! a( N$ P6 a8 k( g% H
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
# s$ g* B, h9 a7 @8 o3 a
, [# w1 y0 e9 _    trace off,0
1 {4 f: q8 Q( U- V4 q    停止跟踪编号为0的CPU, 并且关闭文件
8 O5 z  S# v- ^
/ o% G" F' s- t. j: b    trace 01.txt,0,{tracelog "A=%02X ",a}) z5 a) H* R3 e. P* y
    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
, b% M: s" @& @$ b0 q  ]9 x  ~4 t3 x    并且在每一行的前面, 写上"A=a "
9 [* S$ X: z1 v* r6 S5 L) S    "A=%02X ",a为一个C语言printf函数常用的输出格式! Y  e$ [# [2 h$ |. z0 Y
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
0 D8 S  o) J7 i) `0 Z1 s0 f    X表示为大写十六进制数
+ S( ^) B( `# q3 s5 ]0 |+ Z3 E. O3 ~8 i! L& }2 z- w
/ s# k/ k8 q' |: `
9 r' x, y0 D; l1 u7 h
内存直接写入指令: maincpu# g+ N+ [* v9 t5 A1 ~" s( @
    格式为 maincpu.[][]@地址=数据  E- g) {4 \5 U, m. ]
    第一个[]:
+ E! s8 {# t% i, i  Z    o 表示ROM地址
  B6 Y+ ^# P# F/ s, ^/ g2 s$ g    p 表示RAM地址6 r+ h* R4 Q8 s- W2 k2 L
* s% P/ g. Q6 W! L0 f) _+ ~- C
    第二个[]:
) n* K* w- K& Q    d 表示4字节- q; d1 y* S: k8 v' e! j( p
    w 表示2字节! \, ]8 V/ x+ _$ |* R
    b 表示1字节! X( W# N! j9 h- e8 ~0 u+ q

( V% s4 {3 J/ s    例子:1 v) L, ^' M/ y$ _1 B( m8 v5 X
    maincpu.ob@1234=FF
6 P3 @' n+ ^& N4 }    在ROM地址1234处, 写入FF一个字节1 g4 j9 ?) x' W+ H
8 |/ y; T: _0 P3 k4 I1 \
    maincpu.ow@1234=4E71
8 ~" U6 @! v  x. A$ K    在ROM地址1234处, 写入4E 71两个字节
6 n5 P/ J' R. e1 Z4 d1 G
4 O+ U( A( o: `( E6 l# ]! ?- j+ k    maincpu.od@1234=600A4E71
2 ^6 }: i/ l4 c! u  F    在ROM地址1234处, 写入60 0A 4E 71四个字节
* F7 S! R4 M  c( i  W: Z! {- F; d) i/ p
# G( `/ u6 f3 i& H$ P- S) E    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
' A  ?1 Z( ]6 B* F* s" ]# J    - b* g# l/ {4 X- }4 K% |

1 r  D8 J- V# ~& E, L5 M其他:
  C; R: s* T2 ^. q$ \9 i    dasm 输出档案名,地址,长度* e7 Z. |, `0 Q3 S7 T7 o; [
    输出程序的反汇编代码0 t0 ]' D* f! K, _6 p/ Z* T
    例子:2 Q4 g. C# W+ X9 D- b; [
    dasm 01.txt,0,100000% `' T+ t' t3 P; o' w- L/ B/ o
    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
0 i) ], q) E3 z; m1 s5 u8 c, G) j) u! b; a! E
    softreset
7 Z% w* K5 x% u' o    游戏重启, 但不重新载入ROM2 q* F( i* I5 e7 }

% ^# u" t7 \# E9 y& {$ T% k; J    hardreset
! K9 B% E+ T) x9 d0 A, x# [    游戏重启, 且重新载入ROM
5 r' {0 }8 s$ Z% Z2 o- E8 a; M; y+ Z! r8 E; }
    snap xxx.png
3 H+ g" \7 v; d0 g0 R6 D  @    截图为xxx.png
/ x( Y' ]5 }9 n- `) F% C* m1 q+ ?2 t+ Y" X
  
3 Z( ]! ^" F, S) o, d+ z  
  Q. `( }0 |- V1 G5 Y: O) f5 l  " P: ~8 @5 f/ \8 E# G+ q$ |" X. {
热键:5 N0 Y4 j. V! R" Y8 [
    ~ 中断游戏
7 W* U% h6 t1 o    F5 运行游戏
4 d% }2 j3 R% @, X    F12 运行游戏且隐藏调试窗口2 _# O$ ]; V7 ?
    F11 步入, 单步执行, 会进入子程序
9 S4 w/ |, b* ]* @3 K$ V6 l1 ]    F10 步过, 单步执行, 不会进入子程序! A" G: I2 }; R% D7 X4 @  q
    Shift+F11 执行到子程序返回
# G# b' x8 z7 T  T& G( k    Ctrl+M 内存浏览窗口
4 K0 k2 n* z& }) ~5 |6 `    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU
$ b. ~) e) z! J, s" F, X1 R7 e  ~7 e4 @  {- f
{:4_94:}   g1 i- E0 g! M8 J" Z, B9 c; f  d( x

. q4 q% h7 r8 O7 T

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2562 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。
- n7 i. E1 z+ }6 i% j$ y6 i: u+ j( \: K
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 | 显示全部楼层
要详细些的东东: y4 ~2 `/ }; X
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-9 07:30

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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