EMU618社区

 找回密码
 立即注册
搜索
查看: 3726|回复: 17

[原创HACK教程] 关于MAME DEBUG版用法(如看不清图片请点击图片放大)[更新补充一些命令]

  [复制链接]

签到天数: 2157 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。
* z( o1 X( X) T5 V# T
: J$ J! ]( E4 c! y/ g, ?" R9 r: I6 d(1)如何加载ROM
0 ]9 `- o: b8 Y: R  p3 p/ b) o" p. A2 G
先说说如何加载ROM吧
! J! Z  T8 |5 Q! u3 c/ Y, F. t' z+ I  y3 A
以MAME 0.148 DEBUG版为例:
6 ]& U2 n& H: B# ?5 ~$ N$ ?( U9 y: t
7 c& O7 m$ x; }" Q. S1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html
; ?4 V. i6 [- s) z6 ?9 u3 p
/ e* h7 ^& S6 n1 @注:MAME官网的MAME是命令行程式,没有GUI。! _* K& V# t! Z8 W6 G
% Z; s. G' d% L% e7 ]! \
2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;' k5 j7 S, K/ K1 D
6 {& [; G) _& t* x, ^) ]
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:) A' a' @( R  g* T) U; q
9 j* p" ?, k) V& |  b
d:回车
. `6 ~. i, K& d% o. o( w" P5 C0 A# K+ I9 \5 `' @' t
cd mame0148b_debug回车* C! l( N# v! U& G, H

3 g, T& |+ ~; J( Z1 Y- \2 [2 {如图1:) Y" z# f0 Y4 \- J7 q

+ p# ^3 L1 a  Q7 l& g  j# M* Y- ?& O7 n. a0 b9 Q3 u' G7 L7 l
4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
1 b& |4 o" y( Q6 {7 _" V7 p& g$ c6 m
& G' C) @2 B# W' a) m. ]% m% i& W

9 s5 q$ k4 l2 R: Y3 |5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;: w  I7 Q3 `+ d" P* @; I3 ~
; [! g. t$ [. W& }( O
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。1 o8 m( [9 s0 V

* r) b8 }' c" X(2)如何呼出/隐藏调试窗口
7 C5 G. I) t& G. p7 S! W' }, ^1 Q& b
1 c( a) U! T8 p& }" S1 N; J* `1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:5 T3 ^  M/ X: N; M
, u0 B4 s) }$ O! {# i. q
1 @" w* P8 C; e& Y: k, m

  l9 E" [- J2 N  [; _' u7 h2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:  q/ }& v' _) ?' V, }
# J$ @! D0 T" H8 L& h3 |6 q
; L6 D* o! i( s5 g1 |8 f

" L3 L1 n$ F+ |& _' Z9 l- I9 t3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
! ?2 ]# _; R& O, h6 v! S! D
* B# ~- W: r" @8 L* a" K(3)如何下读/写内存监视点以及程式地址断点7 f- B& I) U4 S# c
9 x4 w9 S% b+ {% Y
先说说如何下读/写内存监视点吧
, X, N- L9 h- h7 v# A/ q* |( `9 z1 C- G" r7 |  f# Y2 c; i2 B
监视点命令格式:wp <address>,<length>,<type>,<condition>
0 D5 Z5 E) J7 _+ {5 V
+ F% L" P$ e1 ?- k1 }<address>是地址6 Q1 r/ v( V0 ^1 @! R2 `

$ p0 F1 R" b( X- O# N; E  D<length>是数据长度,长度必须用十六进制表示! Z; }2 U, h! K" [/ o9 Y# W" Y

$ `% Q. E* }' K) z( F( [/ H<type>是监视点类型,r是读,w是写,rw是读写
* o8 l  q8 y% t2 @* i4 g& [9 ^; y) M8 F+ y. a! I! Z
例子:
9 L) O+ Z, d) A: k8 I6 C4 X7 m2 p$ A$ s. }0 j; a
例如对ff8569地址下写监视点,数据长度是1个字节
& D! o9 S9 ^. ]; c6 a, V/ ~1 X9 u9 J$ B4 b2 W5 P" V# |8 M
wp ff8569,1,w
6 b/ T# ^- e9 o# O- g3 k
. {7 ~  |2 P: ~7 ^! L: v例如对ff2235地址下读监视点,数据长度是2个字节
/ C! O2 ~: H1 E' `# u
4 J3 B9 l/ Z/ ^  [, m$ ^wp ff2235,2,r
; K( b6 L6 P/ i4 l7 ~. t
$ }: a, ]' O) w4 y1 @例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断
5 C4 Q3 V0 a3 |7 Y$ Q6 C) {# X$ U
* l" P- G- i+ ~9 I/ `$ ?wp ff7533,1,w,wpdata == 0! V; a1 |3 O& X# W0 o$ ^

2 T- M: b0 F, h0 a以龙王战士日版为例:
/ I! G) c  E- B. F2 i3 d) P4 q8 x8 O0 ~8 `; ^. F# h( h
1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:1 N; l; U7 I. |8 _, l9 @0 \

, j: B! q; V5 C# T3 T9 _+ m2 f: q9 o5 K% n% _. n& [7 ]! B/ {

' T7 K0 b; o  e6 \- p7 d) }
$ N/ w% P4 @8 P6 o3 y2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:$ @7 b& O  e2 \5 a! A) v5 K4 b

( [, @, A" Y- z5 T: h
/ x" W9 |7 {1 s: q* v) J) G; b1 t
接下来说说程式地址断点; \6 y$ [  F2 r" ^9 m

. P+ j. L% Z) `# _4 A" M$ O; E命令格式:bp <address>
/ T4 a- y5 E4 q5 s" T8 a. C7 K0 v' a0 _  u- ^7 S, y) d
例如对000488汇编指令地址下断点. M2 E0 M! K# E1 w! A- h
1 `" V' Z' ~: f& H3 V, B6 u
bp 000488* Y: \/ G; r. a* L% h% o9 C

+ E4 s+ A" J6 N8 S. Q- a1 ~当程式执行到000488地址时就自动中断4 ~+ X$ o: F- y. u/ C2 I  g
% V% u. \6 C3 V! }3 J
更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
& N- L: ]* n" z. s3 g# Q- P% X, j: f0 h+ _
有错误请指正。+ [% J5 p0 n4 K* p8 `

* i# B6 Y5 X; w补充一些命令:: w  U; X6 F  a( T! o2 |  v

# L+ B$ k* e- @, x0 t1 j"wpclear" 清除所有监视点' ?/ r  A4 ?( a) u$ \- n2 p7 }  U/ r
"wpenabld 数字" 开启监视点
( X" Y( f5 G% u  `! _% T. {& i# O"wpdisabld 数字" 关闭监视点7 V; `7 _: A, B* g8 y' ?  h
"wplist" 显示所有监视点
6 f; Y( K* Y4 e. g  Q# k% W/ [9 G  C/ o: t5 G1 }7 K2 {
"bpclear" 清除所有断点% B9 f: z9 K0 d) I: E  R+ U
"bpenabld 数字" 开启断点3 T/ m, |. R3 l/ Y* K
"bpdisabld 数字" 关闭断点
: t# N* x; J2 f# A0 X; W"bplist" 显示所有断点$ r! \4 e# G1 [2 ~) X' e

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

3

查看全部评分

[发帖际遇]: 疾风之狼扶老大爷过马路,警察叔叔奖励疾风之狼 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 1548 天

[LV.Master]伴坛终老

发表于 2013-1-23 23:55:27 | 显示全部楼层
感谢 疾风之狼 提供本次教程 辛苦了
[发帖际遇]: 孤独逍遥整理箱子竟然翻出了 4 个 柠檬. 幸运榜 / 衰神榜

签到天数: 3602 天

[LV.Master]伴坛终老

发表于 2013-1-24 06:11:00 | 显示全部楼层
授人以渔啊,万分感谢
[发帖际遇]: 一个袋子砸在了 hellok 头上,hellok 赚了 2 个 柠檬. 幸运榜 / 衰神榜

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽* W# g" P2 ]5 e* i2 Y1 M4 m
, X8 {4 x7 \' A, e$ I
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

发表于 2013-1-24 15:32:47 | 显示全部楼层
谢谢,有空学习一下。

签到天数: 2157 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-24 19:15:24 | 显示全部楼层
更新补充一些命令
[发帖际遇]: 疾风之狼 捡了钱没交公 柠檬 降了 1 个 . 幸运榜 / 衰神榜

签到天数: 2584 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑
- b4 f% u, K9 p3 J1 b6 g4 v8 K" p0 e% L% b
太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。% i% A9 R, ^0 @7 a4 o2 g0 o* p

) }4 W4 R5 t8 j+ U4 d2 c7 `$ {6 y9 W7 [其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

发表于 2013-1-25 17:02:41 | 显示全部楼层
1.新版调试器没内存查看功能?
% W" {# Y; O2 F. t0 i2.就是ls所说的, 没作弊码的情况下如何查询地址
[发帖际遇]: money_114整理箱子竟然翻出了 9 个 柠檬. 幸运榜 / 衰神榜

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑 , t" ?2 Z; d# W, _, q4 a$ D) D& T
- N' {" E- _! ^$ M
CheatEngine搜到的临时地址当然无法对应MAME的内存地址1 b8 v: }; p4 Y, a! w  x

- X# Q, T+ ?2 ]$ F& t1 u8 s新版MAME没搜索引擎了么?
! J/ A/ h6 E) k: a+ Z晚上我看看
. \# Y  R1 b  x* e2 q% X! x2 l
* M. D7 Y$ i3 |7 J" k. t+ u6 T7 oMAME查看地址的功能还是有的
. c+ z5 s# O$ d菜单里的第一个选项就是显示内存地址) v. ?/ [& V& r: I# z, f( n0 U
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2157 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
; u4 C! M# v( m% o& t( v
1.DEBUG版MAME有作弊码查找命令
2 p7 o5 n2 s% a( K; E  ?. T! [  G; z7 ^( U
命令如下:
* `2 L5 D+ t1 n$ X3 w  D7 ccheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]- y) g. V- m; v3 V& r
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型+ j( C) a8 C" L5 I. ^* }1 g' ^
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
2 D# n1 R" j# b- [! j3 v<swap>是决定字节是否交换0 T* ]/ u0 t$ G9 w3 _, i
<address>是地址,地址必须用十六进制表示,例:0x1002488 @/ V* v: N+ B4 V
<length>是地址长度,长度必须用十六进制表示,例:0xfffff3 D1 n3 a1 b9 L  \$ m( Q  t+ V
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
4 l, O/ u& p2 T7 R6 m# D- }: W" z
  s5 i( }8 g7 ]8 s$ F请打help cheatinit命令获得更加详细说明
: \; C# K& C. a
3 `& C7 q, e7 ?# G9 u: Rcheatnext <condition>[,<comparisonvalue>]/ v% I+ ]2 C+ }0 t0 _
<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]" c. d+ G" x& E: w, f5 |: I3 {
[eq]是等于
- p8 @+ X/ [! n; C/ x+ |9 f[ne]是不等于
" U# m0 k. L. r( y" `; J[de或-]是减少8 X- H7 s4 W! f
[in或+]是增加
% Z# Z$ ]: X) v[deeq]是减少或等于
* p' b, ?) ^1 z1 Y( t$ \[ineq]是增加或等于
2 I% W# v$ d2 v! ~# L- s[lt]是小于  H- l* N1 K& f" _& i/ _
[gt]是大于
. M% A4 L6 K, z  {5 M  F[ch或~]是数据有变化
( c! e  h  s% J: Z
! Z6 \  ^( ?1 N- M' n<comparisonvalue>, w- H( k' @& G' o9 x
要搜索的数值
9 }$ x* f9 M# w5 _# u. m& ~* ]% n* R) m, T5 G- z% G" g, l
请打help cheatnext命令获得更加详细说明
$ J! u) _5 T1 e# C
- `1 B' N" ]8 _& t: Rcheatnextf <condition>[,<comparisonvalue>]4 b) l) ^+ d% n7 H6 X
说明同上
& H, J8 w' }# z2 K7 o% y, y) q, z) P
1 q1 ^* E3 I" i) k7 Z: j/ x请打help cheatnextf命令获得更加详细说明- Y" O. f. X; t0 q; H- M
! M, a' e# D; _7 O/ W
cheatlist [<filename>]! `# e; u! k" ~4 G& a; [
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件# ]" s% j' Y5 w6 h6 |/ f% ~
. }: e) [2 {$ P" {0 B" z
请打help cheatlist命令获得更加详细说明0 L4 f4 k% r8 e: C! w$ M
+ k8 u7 Y$ }. C% C4 P' Y& h  @
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
, V# H; r: Q" A9 ?( h& j( a  z. R$ X& E2 D6 y% o
之后进行第一次数据搜索时要用cheatnextf命令来摸索
! c9 T) [* P/ @
3 C5 v3 ]% j  k0 Q! k到第二次、第N次数据搜索时要用cheatnext命令来搜索* Q/ R- L8 E/ f' ?5 j
3 f" o! h4 B7 z2 V' o
举个例子吧:
! i- \% q8 P/ c" N1 Z5 |) ^
- W1 \/ y) F4 f6 I( ]以合金弹头X为例:0 r* }8 b, K3 K, Y# l
1P生命数是2
3 Z, F3 @" j* [2 U7 `5 ?/ J2 f) A( m
先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间6 W, U7 \# ]! _" `
/ k) h% u6 R- ?& ?5 t' s. u
命令如下:; m2 ?, r( w+ v$ Z: ~' f
cheatinit ub,0x100000,0xfffff,04 Z4 Z% D7 g+ @, L8 L

% K4 I/ y$ }% {$ w再用cheatnextf eq,2命令搜索生命数2( p; Y" p- b; d) m9 _

$ q- \) s4 {% ^cheatlist显示搜索结果5 ~) t9 z0 O, V; M4 i! H) `
, I1 O; r7 C" D8 g5 _7 Q0 N
死一命后用cheatnext eq,1搜索生命数1( |: u( ^/ ~+ \+ Q4 q7 n4 Z* g1 G

$ E2 j2 c; C! _! Echeatlist显示搜索结果' w7 E6 r" Z  l
.......
1 T, p8 z9 S, f直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果& m" C- F; [/ E/ n

6 f2 G5 @9 A; ^% y还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
& z- u4 P( N, d  ~7 O* ~* l/ O; p
没作弊码的话....
& c7 W( j- Q0 w
8 Z. c# H* a3 D7 Q$ }8 d2 z不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)
5 V2 w( i$ M, H. R- Q/ W; n8 y  |
* ?* F1 m8 J+ o# c; P或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)9 u' H* s' ~/ m4 f
' f) s& y% f- Y9 a; g( R2 O
2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行
8 i( n( T6 Y9 N2 h5 @$ \$ k" S. u4 l3 ~( O7 z# j+ C
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
/ \; V3 I# w' R$ _

5 U- U/ Y# x9 b6 [6 U回114:
; ?1 f. j, U0 |. ]$ ?
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)* v' L, D' e; e0 C6 x8 Y
2.没地址如何查询地址?看上面我给zsyf的回复
0 F. X+ q8 I/ [5 \
% H+ L6 M7 U+ U: b
打字真累.......orz.......
[发帖际遇]: 疾风之狼踩坏了花花草草,被罚款6 个 柠檬. 幸运榜 / 衰神榜

签到天数: 69 天

[LV.6]常住居民II

发表于 2013-4-21 01:03:22 | 显示全部楼层
查出减命指令后怎么改到roms?完全不会啊

签到天数: 31 天

[LV.5]常住居民I

发表于 2013-4-28 11:23:53 | 显示全部楼层
同问,我找不到kodj,不知道少了哪个bios,rom,但是有个三剑圣(wof的改版)的rom,也找到减命的指令,就是不知道如何对应到哪个rom的文件。最后一个个试验,似乎都不对。是不是rom加过密,我记得mame的rom,有变化过,最起码在00年之前和现在的不一样。连名字都不一样,到底这些rom是如何做(是不是叫dump)出来的?
[发帖际遇]: sdiencelee摆地摊卖菜,占道经营被城管罚款 3 个 柠檬. 幸运榜 / 衰神榜

该用户从未签到

发表于 2013-6-14 19:12:06 | 显示全部楼层
感谢分享{:4_92:}

签到天数: 1279 天

[LV.10]以坛为家III

发表于 2013-6-14 19:20:04 | 显示全部楼层
大狼就是我的老师......!!!!!!!!!!!!!!!{:4_97:}

该用户从未签到

发表于 2013-6-19 19:44:34 | 显示全部楼层
非常实用谢谢,不过最右边的数据是什么意思啊。

签到天数: 380 天

[LV.9]以坛为家II

发表于 2013-11-14 20:14:51 | 显示全部楼层
又是一张科普帖,一定要顶,而且要收藏
[发帖际遇]: drogon49花7 个 柠檬买彩票,血本无归T_T. 幸运榜 / 衰神榜

签到天数: 3121 天

[LV.Master]伴坛终老

发表于 2013-11-15 16:01:38 | 显示全部楼层
果断留下技术的脚印

该用户从未签到

发表于 2014-3-11 00:01:41 | 显示全部楼层
万分感谢{:4_92:}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-11 18:50 , Processed in 1.096680 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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