疾风之狼 发表于 2013-1-23 22:28:49

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

应人要求,就写写关于MAME DEBUG版用法吧。

(1)如何加载ROM

先说说如何加载ROM吧

以MAME 0.148 DEBUG版为例:

1.从MAME官网下载MAME 0.148 DEBUG,MAME官网下载页面:http://mamedev.org/release.html

注:MAME官网的MAME是命令行程式,没有GUI。

2.下载完后双击mame0148b_debug.exe安装(也可自行用7zip解压MAME 0.148 DEBUG到任一目录),点击"开始"->"运行",输入CMD后回车进入命令提示符窗口;

3.进入MAME 0.148 DEBUG版所在目录,懂DOS命令者应该知道如何进入MAME 0.148 DEBUG版所在目录吧,不懂的跟我来,例如我把MAME 0.148 DEBUG解压到D:\mame0148b_debug,那么输入:

d:回车

cd mame0148b_debug回车

如图1:


4.输入mamed -createconfig创建mame.ini配置文件,用记事本之类工具打开mame.ini,把WINDOWS VIDEO OPTIONS下面的window选项设为1,不然会以全屏方式运行游戏,然后保存,如图2:



5.把ROM放在mame0148b_debug目录下ROMS目录里,当然你也可以不放在ROMS目录下,改放在其他目录,然后在mame.ini配置文件里CORE SEARCH PATH OPTIONS下rompath选项指定你的ROM目录存放路径;

6.输入"mamed rom档名称"(不包含扩展名)回车即可运行游戏(例如:你要载入龙王战士日版rom,输入mamed kodj回车)。

(2)如何呼出/隐藏调试窗口

1.用记事本之类工具打开mame.ini,把CORE DEBUGGING OPTIONS下面的debug选项设为1,不然没法呼出调试窗口,然后保存,如图3:



2.以龙王战士日版为例,在命令提示下输入mamed kodj回车载入龙王战士日版ROM,当载入ROMS后模拟器会自动弹出调试器,如图4:



3.按F12隐藏调试窗口继续运行游戏,要呼出调试窗口就按“~”键。

(3)如何下读/写内存监视点以及程式地址断点

先说说如何下读/写内存监视点吧

监视点命令格式:wp <address>,<length>,<type>,<condition>

<address>是地址

<length>是数据长度,长度必须用十六进制表示

<type>是监视点类型,r是读,w是写,rw是读写

例子:

例如对ff8569地址下写监视点,数据长度是1个字节

wp ff8569,1,w

例如对ff2235地址下读监视点,数据长度是2个字节

wp ff2235,2,r

例如对ff7533地址下写监视点,数据长度是1个字节,当ff7533地址的数值减至0时才发生中断

wp ff7533,1,w,wpdata == 0

以龙王战士日版为例:

1.我们知道1P生命数地址是FF125D,那么就对FF125D地址下写断点,出现watchpoint 1 set说明监视点设置成功,如图5、图6:




2.按F12继续运行游戏,当死一命时就发生中断,模拟器自动弹出调试窗口,黄色条停在010BA4 addq.b #2,($6,A0),看到前面010BA0 subq.b #1,($3,A0)么?那就是减命指令,后面嘛...你们懂的,我也不说了。如图7:



接下来说说程式地址断点

命令格式:bp <address>

例如对000488汇编指令地址下断点

bp 000488

当程式执行到000488地址时就自动中断

更多命令请打help命令查看,要得到某命令说明例如wp命令就打help wp或help wpset查看

有错误请指正。

补充一些命令:

"wpclear" 清除所有监视点
"wpenabld 数字" 开启监视点
"wpdisabld 数字" 关闭监视点
"wplist" 显示所有监视点

"bpclear" 清除所有断点
"bpenabld 数字" 开启断点
"bpdisabld 数字" 关闭断点
"bplist" 显示所有断点

孤独逍遥 发表于 2013-1-23 23:55:27

感谢 疾风之狼 提供本次教程 辛苦了

hellok 发表于 2013-1-24 06:11:00

授人以渔啊,万分感谢

银河漫步 发表于 2013-1-24 08:59:28

我在想为何要搞的调试器这么隐蔽

以前这调试器都是直接出来的说

qqture2005 发表于 2013-1-24 15:32:47

谢谢,有空学习一下。

疾风之狼 发表于 2013-1-24 19:15:24

更新补充一些命令

zsyf 发表于 2013-1-25 16:48:33

本帖最后由 zsyf 于 2013-1-25 16:55 编辑

太好了,终于有新版MAME的Debug相关的教程了,感谢发布教程。不过还有一点小疑问,还请管理员不吝赐教。

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

money_114 发表于 2013-1-25 17:02:41

1.新版调试器没内存查看功能?
2.就是ls所说的, 没作弊码的情况下如何查询地址

银河漫步 发表于 2013-1-25 20:10:50

本帖最后由 银河漫步 于 2013-1-25 21:08 编辑

CheatEngine搜到的临时地址当然无法对应MAME的内存地址

新版MAME没搜索引擎了么?
晚上我看看

MAME查看地址的功能还是有的
菜单里的第一个选项就是显示内存地址
不过确实没有之前的搜索引擎了

疾风之狼 发表于 2013-1-25 21:23:40

回zsyf:
1.DEBUG版MAME有作弊码查找命令

命令如下:
cheatinit [<sign><width><swap>,[<address>,<length>[,<cpu>]]]
<sign>是决定数据是有符号还是无符号,s是有符号类型,u是无符号类型
<width>是决定数据宽度,b是8位(单字节),w是16位(双字节),d是32位(4字节),q是64位(8字节)
<swap>是决定字节是否交换
<address>是地址,地址必须用十六进制表示,例:0x100248
<length>是地址长度,长度必须用十六进制表示,例:0xfffff
<cpu>是决定搜索哪一个CPU空间,0是第一个CPU,1是第二个CPU

请打help cheatinit命令获得更加详细说明

cheatnext <condition>[,<comparisonvalue>]
<condition>是搜索条件,有,,,,
是等于
是不等于
是减少
是增加
是减少或等于
是增加或等于
是小于
是大于
是数据有变化

<comparisonvalue>
要搜索的数值

请打help cheatnext命令获得更加详细说明

cheatnextf <condition>[,<comparisonvalue>]
说明同上

请打help cheatnextf命令获得更加详细说明

cheatlist [<filename>]
显示搜索结果,添加文件名的话,就是把搜索结果以基本xml格式输出到文件

请打help cheatlist命令获得更加详细说明

第一次查找要先用cheatinit对要搜索的内存范围进行定位并初始化

之后进行第一次数据搜索时要用cheatnextf命令来摸索

到第二次、第N次数据搜索时要用cheatnext命令来搜索

举个例子吧:

以合金弹头X为例:
1P生命数是2

先用cheatinit命令来对要搜索的内存进行定位并初始化,无符号类型,单字节,内存范围在100000~1fffff,指定搜索第一个CPU的空间

命令如下:
cheatinit ub,0x100000,0xfffff,0

再用cheatnextf eq,2命令搜索生命数2

cheatlist显示搜索结果

死一命后用cheatnext eq,1搜索生命数1

cheatlist显示搜索结果
.......
直到搜索结果不能再减少,就点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)调出内存查看窗口来试着对各个地址试修改看看效果

还有一些命令,例如:cheatrange、cheatundo,因为没机会用或不用,就不说了。

没作弊码的话....

不同的机板CPU,RAM范围大小不一样,干脆用内存查看窗口看看主CPU空间是多大,然后将其全部定位再搜索(这样做一但改错有死机可能)

或看看硬件资料(有的话,可惜我没有)或MAME源代码里的有无写关于68K RAM起始地址(或其他CPU RAM起始地址)

2.cheat engine搜索的是PC内存地址,不是游戏机内存地址,拿cheat engine搜索到地址来断点当然是不行

要用cheat engine修改或锁定数据并不是不行,要先找到MAME 0.148模拟器基址来定位

回114:
1.Debug版MAME是有内存查看窗口,点击菜单Debug->New Memory Window(或按快捷键Ctrl+M)
2.没地址如何查询地址?看上面我给zsyf的回复

打字真累.......orz.......

zhaoyunchun 发表于 2013-4-21 01:03:22

查出减命指令后怎么改到roms?完全不会啊

sdiencelee 发表于 2013-4-28 11:23:53

同问,我找不到kodj,不知道少了哪个bios,rom,但是有个三剑圣(wof的改版)的rom,也找到减命的指令,就是不知道如何对应到哪个rom的文件。最后一个个试验,似乎都不对。是不是rom加过密,我记得mame的rom,有变化过,最起码在00年之前和现在的不一样。连名字都不一样,到底这些rom是如何做(是不是叫dump)出来的?

cbsxzc 发表于 2013-6-14 19:12:06

感谢分享{:4_92:}

ckc7213 发表于 2013-6-14 19:20:04

大狼就是我的老师......!!!!!!!!!!!!!!!{:4_97:}

cbsxzc 发表于 2013-6-19 19:44:34

非常实用谢谢,不过最右边的数据是什么意思啊。

drogon49 发表于 2013-11-14 20:14:51

又是一张科普帖,一定要顶,而且要收藏

天迹云间 发表于 2013-11-15 16:01:38

果断留下技术的脚印

chenzongcheng 发表于 2014-3-11 00:01:41

万分感谢{:4_92:}
页: [1]
查看完整版本: 关于MAME DEBUG版用法(如看不清图片请点击图片放大)[更新补充一些命令]