街机模拟游戏逆向工程(HACKROM)教程:[3]街机的ROM与RAM

发布时间:2024年01月15日

简介

在街机模拟器中运行一个街机游戏,我们除了需要一个模拟器工具 ,也需要有一个街机的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压缩文件。

文章来源:https://blog.csdn.net/m0_50114967/article/details/135585158
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。