设为首页收藏本站

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

[分享] MAME DEBUG常用指令

  [复制链接]

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2013-3-20 00:31:15 | 显示全部楼层 |阅读模式
5 N: C6 o( j% B8 H3 A& R
很快速的整理我自己常用的指令9 M+ d1 O1 F6 |
  v6 w% B5 ^( ~$ o' a& q, w9 W
{:4_112:} / ]$ c/ h( \4 b4 g  [3 g
' k- {: Z/ t4 p5 M; a
MAME DEBUG常用指令
6 Z' E! A) v" d  z9 D7 c$ W! p3 j/ W& O* E/ r2 ~0 |6 N
内存搜寻: ci, cn, cl
5 r. N! }. O; ~  G/ r2 ~( N0 @% O& i5 G/ @0 C9 Q" p
    ci
' B8 ?4 N( g' G    搜寻任务初始化, 每次搜寻一开始一定要输入这指令
4 }& e) g" @8 S  _( j! [0 ~' ~/ j" k, B
    cn( v0 j9 U3 v. C# f3 N6 d) e
    搜寻指令
9 }" D) H5 F7 r+ p0 m    例子:
# B9 G: P. T4 d- Z" s    cn eq,60
$ x' c* V9 E7 n4 i$ E    搜寻目标等于60 (十六进制)
" u. C1 z) ]; x        8 u8 @3 J6 C2 _* {
    cn eq,#96
- a4 L2 m+ h4 G% C, P    搜寻目标等于96 (十进制)7 z: b# T; p$ K  o  N2 p! x* A
3 V/ o/ U" X; t* C( _% e
    cn eq
6 b$ @& t8 d1 r& x* v/ B5 Y    搜寻目标的数值没有变化
. @# e! Y. s  P# g& J0 W9 `
& g4 E, N* ~, ~6 B8 p1 i3 L8 |    cn ne) n' [' h, w4 j9 v1 N/ r
    搜寻目标的数值有变化
, D4 `6 u0 N2 a! @2 k        
5 ~/ f6 o' E9 j& i5 ?    cn +
6 @+ A/ A: W% I* G6 \( C. f    搜寻目标的数值增加
# N, J8 s& v% [- B6 W( Y    + F7 {0 B1 f7 e) P- E( \. V
    cn -
6 m9 w8 [- ?7 J" N; |  G  M! f    搜寻目标的数值减少8 M9 c0 X8 m; ^% ~6 L( ^
        ; w; d: v& O: ]4 y- C$ M! m
    cn +,3
' w+ N. C% h0 p! t; O    搜寻目标的数值增加3 (十六进制)2 F; J6 h0 ^3 g6 D; ?, c- ~# w+ ~
$ w" l" T( B3 b! Y" m0 j8 J
    cl5 s3 ]9 ]2 l1 d+ ]: p
    列出所有搜寻结果
0 ]/ T  l' ~% a' ?2 F) Y* {! M) {% `% W* k) n1 m
    cl xxx.txt( `7 w! J) H* b2 W/ G( a. c, s
    输出所有搜寻结果至档案xxx.txt, 其输出的格式为XML cheat金手指的格式9 n; J, C  w) z1 E0 [/ k/ f. U8 B7 v

3 ^  U2 z% v1 u, `& m   
) a" }; }$ k6 e$ y% Q1 a内存监视点指令: wp, wplist, wpclear5 R0 R2 W5 ~( B4 R3 C8 E+ b, l0 }+ S
    例子:
0 C. M4 J3 g  j) H% ?    wp 1234,1,r
7 @7 {/ \$ q  q      在地址1234下读取监视点(该地址被读取的时候中断), 数据长度1
5 F( V2 K& S: z8 L. R: `2 Z
* L' H* W( ]; b8 a    wp 1234,2,w6 [& I9 G0 C% q' }& F
      在地址1234下写入监视点(该地址被写入的时候中断), 数据长度2
; s2 v. u8 v% Y  m" p2 O$ E     
; Z- ]1 o" t5 D; I3 s$ P. I9 l    wp 1234,6,rw
. |: t" d3 E: h7 l& Q      在地址1234下读写监视点(该地址被读取或被写入的时候中断), 数据长度6
5 b% n) A( l% T5 n3 Z$ h; J' `3 X8 R& i: }0 H
    wp 23456,a,w,wpdata == 1
" I; u! M% D2 h      在地址1234下写入监视点, 数据长度a, 且写入的数据等于1
+ J+ ~1 Q9 Z8 D. c5 A% U9 q( N4 ^; x0 _- I  ]* Y- e; R
    wplist0 |" d1 ^) W6 B0 a7 W
      列出所有监视点8 V  \# e) y' Z' c4 S& t
5 e: P) F& L) j  S2 q
    wpclear 3
; j% t0 N  j5 z: |( |      删除编号3的监视点* k8 a7 z( _6 [. R5 x; s( W. y3 P

0 M$ g; P- m& Y    wpclear# ~& N8 w* @+ e$ u  ]4 N
      删除所有监视点
7 t8 \; S8 e( @% t+ M* `) O% g
. H/ k3 Y6 Y' o, K' e      6 A& ^( Y, o) h+ V: i/ l. ^

% \! o" t. k( y& M8 {程序断点指令: bp, bplist, bpclear
- B  V3 g, S6 n0 y. k5 f    例子:
7 }* @- V9 V/ m$ o" v2 c& O( W    bp 1234
5 E6 u7 a# a( A3 a- z) m- d      在地址1234下断, 当程序运行到地址1234的程序代码的时候会中断
; Q- T0 @, k3 Y- Q+ L$ m" D4 ~2 c
    bp 23456,a0 == 0 && a1 == 0; [; J& s8 P& H5 \1 n
      在地址23456下断, 且中断条件为a0等于0以及a1等于0$ b: Y# h: l0 k9 ]

$ z7 o( l1 Z( m5 S    bplist6 ^* e8 f- L' \- W- n# a2 Y
      列出所有断点
8 G, j" V, W: U$ y: e% P; l# n# Z6 W4 A
  N' F3 j8 q( X3 n# a    bpclear 3
1 |7 z' y/ [* ]      删除编号3的断点) i4 b' b: F5 _7 R5 o: \
8 q: M4 k" `2 Y6 S7 U
    bpclear1 F5 i. g0 ]: w4 @2 G% k
      删除所有断点1 @6 A7 \9 d6 v( I7 l# g1 ?- A% A- R

4 f0 d2 `5 S2 t, s      
2 Y% `% e& c. G      
" s% A1 d+ U2 r1 p+ M跟蹤紀錄指令: trace
0 e9 J7 `( o8 M* \  {    例子:
3 ]) p6 z0 r0 J' H; V1 D    trace 01.txt$ d! Q* A" }+ ~% Z) V# y7 h3 b! x" o
    跟踪当前CPU运行的所有代码, 输出至文件01.txt* y6 Z! }# u3 c4 g9 P
# [" h2 H: O' N# K4 h
    trace off
  P5 x8 X( y; t2 J    停止跟踪, 并且关闭文件
. b8 T8 D: |! M
  L: P8 j1 q# ]/ d. n! w    trace 01.txt,0
0 q# o) z8 }0 b1 f    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt
; n" s9 t7 e4 x, n; Z% s7 X, h' s; a% O( N% K" g+ q  n
    trace off,0% L, F/ S% N& v5 z' b
    停止跟踪编号为0的CPU, 并且关闭文件
1 b& }  z/ U, |' B
" I1 \! s' D. j    trace 01.txt,0,{tracelog "A=%02X ",a}
! ~" e! N  `" m) z9 }' V    跟踪编号为0的CPU运行的所有代码, 输出至文件01.txt , @  i& w+ U0 t
    并且在每一行的前面, 写上"A=a "7 I; Q0 s2 C& B$ n9 L' w3 @
    "A=%02X ",a为一个C语言printf函数常用的输出格式3 t# ~) `, m. q1 \
    意为将a的值代入%02X中, 而02表示两位数, 不足两位时以0填入
' F% n  q  E: {    X表示为大写十六进制数
( J: [1 |1 i. b6 C% R; p2 K/ V! \8 |9 m3 p4 g
" Y* C6 L2 l& I
1 {9 H6 \) n5 G* }, M3 f- b
内存直接写入指令: maincpu8 F% Z' S$ C: l& H3 Z, f& a" o
    格式为 maincpu.[][]@地址=数据9 |3 ]1 P) M1 j/ \) B
    第一个[]:/ [4 @/ A8 z! D4 {6 [+ e0 j. l
    o 表示ROM地址  y$ e9 @1 |9 u; d; p0 X5 q" U
    p 表示RAM地址8 ?8 I8 l# A6 l
9 K5 \- e6 _. N+ B5 v3 r
    第二个[]:! R( E' h7 @) P: m" A5 _
    d 表示4字节
( W' c8 L8 J3 J. w    w 表示2字节
% g- X1 S# Z$ Y    b 表示1字节' l; Q. ^0 Z$ D7 e! `

& m* F' U2 ]4 |& x0 _; x, |" j    例子:& s: u, Z' L5 s4 N& [, P  P
    maincpu.ob@1234=FF9 S- b1 ^$ B* [
    在ROM地址1234处, 写入FF一个字节2 R2 S* |$ q7 ^6 y* B* d0 @( @
3 u2 X; I) `8 C% F3 \8 c+ S4 U
    maincpu.ow@1234=4E71- J% T" s: h; \; B* `/ O5 S
    在ROM地址1234处, 写入4E 71两个字节. u, u+ n. w6 I$ `
1 A; f. `2 m1 \8 {4 b/ ~5 z
    maincpu.od@1234=600A4E71
$ R& n* Z$ }/ @# Y+ u    在ROM地址1234处, 写入60 0A 4E 71四个字节
, l5 c( F. {6 G6 e. V9 `* i. J( ^
% U4 V) ~% G& Q    注: 如果是RAM地址, 可以在内存浏览窗口中直接改写
6 H9 @: f1 X) h7 l) o; j/ z; f    , f$ p% M" F, F/ n% {
- I. d1 e2 a9 R. b. b
其他:! d; _  T! S' \1 t1 y) b7 Q
    dasm 输出档案名,地址,长度' I- X! {0 A2 u8 N# m
    输出程序的反汇编代码
2 ]% g" E6 |# y7 r+ M+ Y6 e    例子:
0 l9 d. l/ C  H  e4 ~: p* P    dasm 01.txt,0,100000
, b4 v# m+ T$ \) b4 h8 n    将程序汇编代码自地址0开始, 长度100000, 输出至文件01.txt
; s- r% L7 R0 n0 A, D0 f$ y) A% A$ `% U& W2 P4 @7 s
    softreset: z/ b% Y6 c9 I' o6 L$ R/ O
    游戏重启, 但不重新载入ROM1 V3 N0 G1 B# ~

# i9 G) W: d! C* k( g; ?    hardreset
# S* T: u( C: b1 k% J' R5 U    游戏重启, 且重新载入ROM# e. g" b+ M( r+ \

  i; o5 `4 w' ^    snap xxx.png0 E6 x; L  a7 u) Q2 r
    截图为xxx.png+ R9 ?( O" p( Z
+ ^5 \/ B% v- e  Y/ T  Z
  
' r5 Y: `: b# O( h! r1 `  
! ~2 U3 Q" W- ]9 h& m' ?+ c  ' g" V$ q* r# s8 i3 {& e
热键:
5 D. g$ K& Q! l; r* {) J% @    ~ 中断游戏4 H5 H  l9 M9 h5 t, P" p
    F5 运行游戏
5 g4 v/ r. j" D- U$ K" w    F12 运行游戏且隐藏调试窗口$ t8 B& j) D7 w  f  s0 a
    F11 步入, 单步执行, 会进入子程序
9 [+ N1 D' N8 r1 F' v/ {; ~" X    F10 步过, 单步执行, 不会进入子程序0 H' ^! n" a( n. ]: A7 {
    Shift+F11 执行到子程序返回
: F7 U: c7 {9 M* {    Ctrl+M 内存浏览窗口
! C8 s6 B1 ?/ }$ N% [% F& R    F6 运行到下个CPU, 有时候~中断游戏会停在音效控制的CPU, 用这指令可以切换到主CPU, s, b6 V, t! a' @( L3 a

4 m0 h% o. k! q% X" e" G7 B{:4_94:} " F' E' m# O0 K1 E/ I

) M3 B8 Q% Y8 i4 N9 j4 Y3 s% A

评分

1

查看全部评分

签到天数: 6 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 2567 天

[LV.Master]伴坛终老

发表于 2013-3-20 12:40:42 | 显示全部楼层
楼主之前承诺的教程终于来了,非常感谢分享,像这样的教程真是太珍贵了。( s9 G0 t: W  A  J
5 [0 D3 Q0 F* c9 F, O5 [8 ]0 o
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 | 显示全部楼层
要详细些的东东5 Q; K  Q# ]! n/ @( h8 f+ j
11111111111111
回复

使用道具 举报

该用户从未签到

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

使用道具 举报

该用户从未签到

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-10 20:58

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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