EMU618社区

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

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

  [复制链接]

签到天数: 2039 天

[LV.Master]伴坛终老

发表于 2013-1-23 22:28:49 | 显示全部楼层 |阅读模式
应人要求,就写写关于MAME DEBUG版用法吧。$ F$ N4 @' H6 I
7 g- v; f. i8 N+ M0 n% d
(1)如何加载ROM. ~4 [9 s6 m& a" |9 Y" A

; G8 i; f9 g) W* n' y, y先说说如何加载ROM吧
* r; {  O4 h9 A6 S# q' ]0 k4 b4 k4 H2 k1 M. ~
以MAME 0.148 DEBUG版为例:# k+ S/ f  v2 v+ B2 t
$ w. l' p. d) P
1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html$ B- L0 u( M; d, P4 v

! q* A0 {" l  B! x' Y* u" [9 j# L7 a" ?/ V/ S注:MAME官网的MAME是命令行程式,没有GUI。
! i  C0 ?  c; f
7 ]' A) o8 v( V2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;
/ [8 b$ [4 g; n2 m9 Q+ l2 w9 @7 N
3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:
  X& C% |+ v2 a& J' Y8 d+ m. S5 \& u4 D
d:回车
$ U2 I0 q2 i9 q% k3 N. s, t8 `" V9 y7 g% T" [* [0 G4 Y
cd mame0148b_debug回车
; U( Q1 H/ _$ t7 \
- x$ s7 J7 Z1 f- n& {如图1:
) o% A6 V3 Q$ x' B( ?5 W. e& q8 f. ]/ f7 j* Y

7 q7 }% ?' j+ j6 `6 j4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:
( ^/ \* I  ^' L0 v% u; \! ^$ C- _+ _; h
' m3 R4 ]! h* j  t; W3 D9 S# T5 A: M0 S" ~# _8 c
. M" t1 U* N' o
5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;
& Z+ d0 P8 V: C- B7 T4 W' n* _; z. }- I  X( B5 J
6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。/ o. N! C. k& e/ b: X" r

6 u7 G0 ?: H9 ]- Y4 h# l& @+ t$ s(2)如何呼出/隐藏调试窗口
* A* _, V/ Y  ~0 l6 a: ^) @. L8 g9 ~4 c1 D4 |- r, c
1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:# r# W' f$ `4 l" l+ J8 D

% |& j% ?9 u6 i5 Z
% G6 ], v8 o# y
5 N* \- F, a* p# S2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:
3 r3 A$ ?0 J/ Y9 n2 L& @9 c; j( m0 ]4 q  ]( E* C' ?6 G0 ?1 a/ X+ Q
  W: w! X3 B) F! P" W: P1 |

, q4 A* r" G7 }3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。
% z1 {7 e/ Z, d# b' c# K
0 ~2 s- r& S3 }( V(3)如何下读/写内存监视点以及程式地址断点3 w8 F4 ?& K1 m5 R+ H% \7 A' z

, c+ ~- R+ P* d. r% ^5 F先说说如何下读/写内存监视点吧3 X1 m, y0 W4 c1 ^: X/ G) n

3 |5 H+ r0 m  U% K$ s监视点命令格式:wp <address>,<length>,<type>,<condition>
! F9 Q9 W9 `: h& O! H/ m
; p9 I- x$ K' Q<address>是地址
) I( D5 B% a2 z  b/ @0 x
& g# z$ l2 h; l. f. W- u+ u( @% s# o& z<length>是数据长度,长度必须用十六进制表示
: [9 \( I: q. n  e( j- w- Q, k
( }$ Q! [# B7 U' i) d$ J* \<type>是监视点类型,r是读,w是写,rw是读写5 N1 ~8 O& [: n) y+ D" a* p. a+ Z
% S; k9 }& W# Y% h( s* u# ?
例子:5 F- y2 N9 M3 ?2 D- d1 W) i: X) k
* J1 }8 i2 v& e
例如对ff8569地址下写监视点,数据长度是1个字节6 l6 L7 z: @9 y

5 ?% G1 W% Y& s- z& l1 s. bwp ff8569,1,w
2 X1 ^( Q: F- d! W$ L' }# _* \8 t- a" y! z. ]0 ]& q
例如对ff2235地址下读监视点,数据长度是2个字节% D# z" g- m4 d$ I4 H

1 i% ^1 X4 a9 s0 P! q0 b3 c' zwp ff2235,2,r
1 L4 g# N6 m% W5 M, ]* ?& v7 v" b5 n# H7 }. T. a
例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断) y% c1 V/ f5 j2 Y3 b9 R

- [4 ]; X6 L5 zwp ff7533,1,w,wpdata == 0
  k  F1 c+ d: y. T5 C- B/ G2 O
  z" ^) z: B( p* d* o以龙王战士日版为例:
  l8 `( V, o+ ?' d! e# H
, m: a. ^8 ^+ E- t) J1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:
8 [6 n) H; @6 N+ w( g# ?: s; ~6 t' Z2 X( Q

6 D) f& }9 W* y: a5 d! ?5 I1 W9 l. F: H: L. E/ n5 H& p
" O& z+ c* A3 |' [. A
2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:
1 [9 l" q( \1 j1 j: J% H/ e
* A! ?$ G& j9 x
! c; v4 J! f+ `. _  I7 ?4 m
! ?2 B$ N. I& b: ^接下来说说程式地址断点
$ {% ]$ ?0 M6 Y% ~: v. C- ]' q! z. x" S* q
命令格式:bp <address>- z& }2 c. D* o. q# d6 A
6 F- x8 g! q, a! r3 A0 _+ j
例如对000488汇编指令地址下断点; K- b% g- ^- d0 H. B$ k3 a
6 ^7 Z$ R- `! j* R+ a$ H. M; ~
bp 000488
: U! f+ x3 N+ W' x7 t9 ?. T, x: V- f
) \! _+ c6 q, v7 G' c/ `$ X当程式执行到000488地址时就自动中断# j6 ~/ J  G& w  x- _. z

8 r) {' x6 C5 U& p' p6 F& T: Y更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看
( N; e5 Q4 ^3 @. |1 T1 X
/ n7 k9 J, c  d  ^7 `% M4 \4 ^' L有错误请指正。
; H  k& I2 E0 v  M* V" e* h* L" e7 m8 |$ c/ u
补充一些命令:
; g/ |% k- H6 c' Y! r& `- d6 h- {0 |7 `, b" J
"wpclear" 清除所有监视点
- Q0 X& R# g/ }' k& c# }* e"wpenabld 数字" 开启监视点4 D0 C% \6 S: T3 w. ^; h% d$ Z9 w
"wpdisabld 数字" 关闭监视点
+ J3 z8 ?3 `  J+ r! u% ~  f# G5 y"wplist" 显示所有监视点0 R9 j& N. y3 k( H

8 O" t1 n3 G% Y% ~4 A! `"bpclear" 清除所有断点
0 n0 K' f7 i% ~) x3 t"bpenabld 数字" 开启断点
4 y# E# M, T8 A) j0 \$ D+ Z"bpdisabld 数字" 关闭断点% ~) H0 i, x! O$ T) @5 x: G
"bplist" 显示所有断点
' t' K! Z4 A) O

本帖子中包含更多资源

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

x

评分

3

查看全部评分

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

签到天数: 1548 天

[LV.Master]伴坛终老

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

签到天数: 3483 天

[LV.Master]伴坛终老

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

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-24 08:59:28 | 显示全部楼层
我在想为何要搞的调试器这么隐蔽. Q3 h+ @# J( V3 [
7 x% o, c7 t; S
以前这调试器都是直接出来的说

签到天数: 1296 天

[LV.10]以坛为家III

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

签到天数: 2039 天

[LV.Master]伴坛终老

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

签到天数: 2568 天

[LV.Master]伴坛终老

发表于 2013-1-25 16:48:33 | 显示全部楼层
本帖最后由 zsyf 于 2013-1-25 16:55 编辑 & `6 Q! p& |; M

' x- n! x2 v5 A  ^: z太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。
; t- A. V  p( \2 f1 t
+ G" u3 y- J# R! G. f其中“我们知道1P生命数地址是FF125D”这句里的FF125D地址,对MAME稍为熟悉一点就知道,MAME0.127以后就取消了内置的作弊码搜索引擎,而且新版本的MAME也不被很久不更新的EmuCheat所支持。因此,想请教的就是,如何才能得到只有新版MAME才支持游戏的相关内存地址?为何用CheatEngine搜索到的临时地址在MAME里下断点却无效呢?是方法不对还是工具不对?还望继续赐教!

该用户从未签到

发表于 2013-1-25 17:02:41 | 显示全部楼层
1.新版调试器没内存查看功能?
6 g5 x( e: G8 O$ U0 c! \+ [$ _  c2.就是ls所说的, 没作弊码的情况下如何查询地址
[发帖际遇]: money_114整理箱子竟然翻出了 9 个 柠檬. 幸运榜 / 衰神榜

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2013-1-25 20:10:50 | 显示全部楼层
本帖最后由 银河漫步 于 2013-1-25 21:08 编辑   `9 a6 L- \4 |0 \

0 P5 u; w3 D4 i. v' a5 TCheatEngine搜到的临时地址当然无法对应MAME的内存地址6 S* F, a1 B. I8 O# G4 p

( E2 P% `" M/ o新版MAME没搜索引擎了么?+ E' U+ h0 l5 y
晚上我看看. e# q* a0 V5 ?2 y
' o9 H* x3 k) e: b4 ~
MAME查看地址的功能还是有的
; a4 X2 v* E# F( [菜单里的第一个选项就是显示内存地址' f5 s& g1 x! N8 i4 x: D7 n
不过确实没有之前的搜索引擎了
[发帖际遇]: 银河漫步扶老大爷过马路,警察叔叔奖励银河漫步 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 2039 天

[LV.Master]伴坛终老

 楼主| 发表于 2013-1-25 21:23:40 | 显示全部楼层
回zsyf:
7 k% S/ S* q6 m1 y* `
1.DEBUG版MAME有作弊码查找命令
/ ^) Y" A# F& D8 u8 B0 S! O
( O  g; [+ d, e; c1 l& W, G  G命令如下:
. P" V2 f: ]6 o" Y5 pcheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
+ ?% u' \5 L8 J* n) v) n. m  {  G<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型6 E; B7 Q3 U' o) G& h
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)' n  F4 j4 h  N  A4 A- Y
<swap>是决定字节是否交换- p/ e( |" l& _8 A8 @" ^
<address>是地址,地址必须用十六进制表示,例:0x100248
& N4 e- z: A$ L" O<length>是地址长度,长度必须用十六进制表示,例:0xfffff( w# ?6 H4 y8 o6 k3 e8 K: s
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU
/ t. _- T" p* C9 Y  h3 M2 {& n  n2 @0 t- s/ }
请打help cheatinit命令获得更加详细说明
. i/ ~0 P3 L+ Z. \1 a5 c* V: t) h6 t0 e9 N0 h1 [% ^" T
cheatnext <condition>[,<comparisonvalue>]
  K) f2 Z) X+ n, ^0 V<condition>是搜索条件,有[eq],[ne],[de或-],[in或+],[deeq] [ineq] [lt] [gt] [ch或~]9 m* p$ T+ b% _# f8 Q3 w
[eq]是等于1 n, E4 F) v) d9 x8 {
[ne]是不等于
/ x2 ]2 Y! c% ~7 S5 p& j1 ^' A- [[de或-]是减少
7 m! R3 ]  ]8 |- o+ q& z[in或+]是增加
3 J3 o/ L# z5 n* r* A& k. o[deeq]是减少或等于5 [& ]/ Y0 {) y
[ineq]是增加或等于
9 p# Z, I. L: \3 t# E$ H[lt]是小于
, X- l! d' k7 T3 P% _7 A[gt]是大于
* V! N* I9 |% T[ch或~]是数据有变化- h- f: a* T2 r0 j8 ?
* `; h3 Q3 S9 o1 b* B8 W/ |
<comparisonvalue>
8 w1 Z8 o- s' D: ]& g要搜索的数值
; U$ ]( U/ w; y% U! U% N, H/ m" T) _# D9 ^
请打help cheatnext命令获得更加详细说明8 n$ w- A: E# Z4 ?

0 d  Y7 U* s! `, c/ j3 Ycheatnextf <condition>[,<comparisonvalue>]6 f- s0 _8 @& r$ R/ n9 g
说明同上, x  ]5 ?, `& X
: z. J3 O7 m  B# l1 Z  I
请打help cheatnextf命令获得更加详细说明( C  s& x' z! s, d
" ~! y, b4 z: y- K7 V7 d2 }
cheatlist [<filename>]* ~, T& @2 t0 c7 g) s6 |8 r
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件
# R3 E* R' l) F/ a
& P3 ~# G$ K0 G1 W8 C1 ?请打help cheatlist命令获得更加详细说明
5 ^3 L3 D, [2 _, a1 A: Z, u8 z' j" L7 w. Z9 e1 f8 {
第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化
3 F! R  W. Y  I7 J6 N+ r
2 E- g4 b" ^' T+ G% M之后进行第一次数据搜索时要用cheatnextf命令来摸索
* s9 Z- o+ i( n7 J) O
+ R* t$ }7 o7 c: H/ z/ H到第二次、第N次数据搜索时要用cheatnext命令来搜索& g' r& M4 p# ]5 J+ _; l1 y
6 E! @( r, {; d* G4 q7 |( d
举个例子吧:" L. U9 }; u( i
$ |' b4 |: D6 u4 o" X
以合金弹头X为例:
4 i* h5 {( {0 i( C8 L# s  D4 K1P生命数是2
; _/ l- {3 i5 i3 L" b0 D
& q' Z4 d  z  b; m/ e/ F先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间
& A% z$ W" _* @. Z! _" h
  R0 l: f5 f0 J7 S2 f命令如下:
3 J, K- W- D7 U% p, N( ?cheatinit ub,0x100000,0xfffff,0( g3 g/ A4 ^- [& H

8 l9 t1 s1 k' j1 g6 z( y5 e5 ?再用cheatnextf eq,2命令搜索生命数23 h1 p$ [+ w: Q9 R
: j8 b, A% ^% U  |* t# q
cheatlist显示搜索结果
7 I) n4 |2 V, A5 I" c; ~, V  u  U" C, \8 Q( \
死一命后用cheatnext eq,1搜索生命数1
7 I/ X% \6 ]' u6 t! |2 \% a2 O0 x$ `  }; X. N
cheatlist显示搜索结果* u& n5 @" p- j) Y, \. n
.......
0 \$ z4 u+ g& y: d- B, }直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果, X- R; d, p4 ]9 e" L

3 H) Y4 \3 B1 H  r* _# p还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。
: x7 c$ C( }! n7 c. V$ w9 Y6 P) B: V& F+ d
没作弊码的话....$ S# J% {( ~, J4 Z5 j6 ^/ m% q8 E
6 g" c1 z* Y8 L6 y; t$ |9 T! t* _7 E
不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)7 v2 B: D8 s! B2 p

; N( b# J  W3 u$ Y& Y/ O或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)
8 G' {) _; K1 t+ W+ D4 t
+ V- J0 \- _0 L( Q# P8 c* [3 x2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行$ e7 {4 p1 h: M3 }( B+ p& B6 h' X
6 q) X: @2 `2 ]$ Y  a2 c& c0 ?" I
要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位
( O7 e" r$ U: E5 F, W
0 Z$ _3 y1 E# t! J! V
回114:
# g* f+ T- `  v7 g
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
- c2 i. _% D. W% L2.没地址如何查询地址?看上面我给zsyf的回复
7 w1 h! F0 g6 {0 t/ i' ]4 A

( k4 @0 ?' m# x4 y3 d打字真累.......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. 幸运榜 / 衰神榜

签到天数: 3011 天

[LV.Master]伴坛终老

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

该用户从未签到

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

本版积分规则

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

GMT+8, 2025-8-14 12:12 , Processed in 1.095704 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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