简介
在街机模拟器中运行一个街机游戏,我们除了需要一个模拟器工具 ,也需要有一个街机的ROM文件。街机的ROM文件,称之为Read-Only Memory,可以理解为只读存储器。在 ROM文件中,包括了游戏运行所需要的指令代码,声音,图像,等内容。
而RAM全称为Random Access Memory,也叫主存,是与CPU直接交换数据的内部存储器,速度较快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。与ROM的最大区别是数据的易失性,断电或重启时,RAM所存储的数据将随之丢失。
我们可以把它们想象成,街机模拟工具就是一台电脑,ROM就是硬盘中保存的数据,而RAM就是电脑的内存。
修改RAM数据
在我们使用街机模拟器MAME运行一个游戏时,可以使用DEBUG调试器方便地查看到该游戏的ROM内容和RAM内容。需要查看ROM或RAM的内容,我们只需在内存窗口中输入内存的地址:
ROM和RAM所对应的内存地址因游戏不同而不同。它们的地址区域可以通过相关的网站去了解到。如cps1系统对应的资料:Capcom System 1 information
68000 Memory Addresses:
$000000 $1fffff 68000 ROM
$800000 $800003 Player input ports
$800010 $800013 ??
$800018 $80001f Input ports
$800020 $800021 ? Used by Rockman ?
$800030 $800031 Coin Control
$800040 $800041 Forgotten Dial 0 reset
$800048 $800049 Forgotten Dial 1 reset
$800052 $800055 forgotten worlds
$80005a $80005d forgotten worlds
$800176 $800177 Extra input ports
$800100 $8001ff Output ports
$800180 $800181 Sound command
$800188 $800189 Sound fade
$8001fc $8001fc Input ports (SF Rev E)
$900000 $92ffff Gfx ram
$f0e000 $f0efff Slammasters protection
$f18000 $f19fff QSound RAM
$f1c000 $f1c001 Player 3 controls (later games)
$f1c002 $f1c003 Player 4 controls (later games - muscle bombers)
$f1c004 $f1c005 Coin control2 (later games)
$f1c006 $f1c007 EEPROM
$ff0000 $ffffff RAM
我们需要知道的是,RAM中的数据并非只读形式,我们可以方便地在内存窗口中去修改其中的值。通过对应的资料我们得知,在cps1系统中,地址$FF0000 ~ $FFFFFF中的为RAM,我们就可以在内存窗口中直接选中其中一个地址,从键盘直接输入16进制的数据,从而修改该位置的数据。
我们也可以通过批令来修改RAM中的数据:
pw@ff0000 = $01
修改ROM数据
而ROM所在的位置为只读的形式存储在文件中的,所以,我们在默认情况下,不能对ROM的内容进行直接的修改。如果需要对该位置进行修改,首先,我们可以通过选择地址空间来对该位置进行修改。我们打开内存窗口,在地址空间选择中,我们选中:Region':maincpu'地址空间:
就可以象修改RAM一样方便地修改了。此方法在较旧的MAME版本中可能无效。
同样的,我们也可以用指令来修改该位置的数据:
rw@1000 = $01
注意,修改ROM中的数据容易导致程序运行的错误,当出现错误时,可以通过硬重启来回复ROM中的数据 。同时修改ROM中的数据并不能改变ROM压缩文件。