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

简介

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/624308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Fiddler工具 — 15.Filters(过滤器)界面

1、Filters介绍 Filters:过滤器,帮助我们过滤请求。 如果需要过滤掉与测试项目无关的抓包请求,更加精准的展现抓到的请求,而不是杂乱的一堆,那功能强大的 Filters 过滤器能帮到你。 总结:Filters过滤器的…

快速了解STM32的ADC功能,从入门到精通

快速了解STM32的ADC功能,从入门到精通 快速了解STM32的ADC功能,从入门到精通 1.关于ADC输入通道与GPIO口的输入关系需要查看STM32芯片手册(p31)而非数据手册。 2.外部触发源指的是触发ADC采样的触发信号,这与1的GPIO…

gitlab 命令执行漏洞(CVE-2022-2992)

1.漏洞影响版本 GitLab CE/EE 中的一个漏洞影响从 11.10 开始到 15.1.6 之前的所有版本、从 15.2 开始到 15.2.4 之前的所有版本、从 15.3 开始到 15.3.2 之前的所有版本。允许经过身份验证的用户通过从 GitHub API 端点导入实现远程代码执行。 查看 gitlab 版本。(登录后才能…

uniapp中组件库的Checkbox 复选框的使用方法

在uni-app中使用组件库的Checkbox复选框&#xff0c;需要先引入组件库&#xff0c;并注册组件。 首先&#xff0c;在页面的<script>标签中引入组件库&#xff1a; import { Checkbox, CheckboxGroup } from 组件库名称;然后&#xff0c;在components中注册Checkbox组件…

Mybatis-plus多租户插件

目录 Mybatis-plus多租户插件实现原理使用 Mybatis-plus多租户插件 Mybatis-plus多租户插件是一种用于实现多租户功能的插件&#xff0c;它基于Mybatis框架&#xff0c;通过拦截器机制实现对多租户的支持。该插件的核心组件包括TenantHandler和TenantInterceptor&#xff0c;其…

全国博物馆数据, shp+excel数据,数据来源可靠,基于国家文物局发布的《2021年度全国博物馆名录》

数据名称: 全国博物馆数据 数据格式: shpexcel 数据几何类型: 点 数据坐标系: WGS84 数据来源&#xff1a;网络公开数据&#xff0c;数据名录来源于国家文物局发布的《2021年度全国博物馆名录》 数据字段&#xff1a; 序号字段名称字段说明1province省份名称2city城市名…

不管你打开什么App,命运都会让我们相聚在购物软件

「不管打开什么 App &#xff0c;命运都会让我们相聚在购物平台。」 「现在谁还亲自打开淘宝和京东&#xff1f;随便打开一个 App 摇一摇&#xff0c;速度更快。」 最近&#xff0c;差评君在很多社交媒体平台都刷到了这样的段子。 如果你没get到啥意思&#xff0c;咱也不卖关…

一个完整的流程表单流转

1.写在前面 一个完整的流程表单审批&#xff08;起表单-->各环节审批-->回退-->重新审批-->完成&#xff09;&#xff0c;前端由Vue2jsElement UI升级为Vue3tsElement Plus&#xff0c;后端流程框架使用Flowable&#xff0c;项目参考了ruoyi-vue-pro(https://gite…

Java学习(十八)--网络编程

介绍 需求 如何准确地定位网络上一台或多台主机&#xff1b; 定位主机上的特定的应用 找到主机后如何可靠高效地进行数据传输 目的 直接或间接地通过网络协议与其它计算机实现数据交换&#xff0c;进行通讯&#xff1b; 网络通信 网络&#xff1a;两台或多台设备通过一…

怎样利用MATLAB制作图中图(局部放大图片)

先做一个声明&#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来&#xff0c;因此对智能优化算法感兴趣的朋友&#xff0c;可关注我的个人公众号&#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法&#xff0c;经典的&#xff0c;或者是近几年…

Quick taxi route assignment via real-time intersection state prediction

Quick taxi route assignment via real-time intersection state prediction with a spatial-temporal graph neural network(通过时空图神经网络实时交叉口状态预测快速分配出租车路线) PAPER LINK 简单说一下: 本文采用了一种新的方法,通过使用空间-时间图神经网络(ST…

Python 获取数组中等于给定值大小的值

Python 获取数组中等于给定值大小的值 引言正文基础方法方法1方法2------使用 np.where() 函数方法3------数组操作 示例1示例 2 引言 可能很多小伙伴看到这个标题会觉得很绕口&#xff0c;甚至可能会觉得这属于脱裤子放屁&#xff0c;多此一举&#xff0c;但是这里请大家耐心…

基于位的权限系统

基于位的权限系统是一种利用二进制位运算进行权限管理的技术。在这种系统中&#xff0c;不同的权限被编码为2的幂次方 (例如1、2、4、8等)&#xff0c;每个权限对应一个独立的二进制位&#xff08;可想而知运算速度是非常快的&#xff09;。通过将这些权限值组合在一起形成一个…

力扣198. 打家劫舍(java 动态规划)

Problem: 198. 打家劫舍 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 1.构建多阶段决策模型&#xff1a;n个房屋对应n个阶段&#xff0c;每一个阶段决定一个房间是偷还是不偷&#xff0c;两种决策&#xff1a;偷、不偷 2.定义状态&#xff1a;不能记录每个阶段决策…

笔记系统的部署架构

前天给笔记系统打了0.0.3的tag&#xff0c;一个简单的全栈功能闭环基本完成。既然是开源&#xff0c;因此&#xff0c;这里有必要分享一下部署结构&#xff0c;希望能够获得小伙伴们的反馈。 目前整个系统采用docker容器来部署。应用介绍 auth_app: 登录/注册的前端应用 web_ap…

手动数据分页

public static PageInfo<Long> cutPage(SegmentVo vo, List<Long> segmentIds) {PageInfo<Long> result new PageInfo<>();// 总条数int total segmentIds.size();int currentPage vo.getPageNo();int pageSize vo.getPageSize();List<Long>…

西贝柳斯音乐记谱软件Avid Sibelius Ultimate 2023中文激活版

Avid Sibelius(西贝柳斯终极解锁版) 是一款记谱软件&#xff0c;从有抱负的作曲家和词曲作者到教师和学生&#xff0c;任何人都可以快速轻松地开始创作和分享音乐。对于那些还不熟悉使用符号软件的人来说&#xff0c;直观的界面将引导您完成整个过程。磁性布局可防止对象相互碰…

GBASE南大通用GBase Command Builder 构造函数

初始化GBASE南大通用CommandBuilder 类的一个对象。  重载列表 1) 初始化 GBaseCommandBuilder 类的一个对象。 GBaseCommandBuilder() 2) 使用 GBaseDataAdapter 对象初始化 GBaseCommandBuilder 类的一个 对象。 GBaseCommandBuilder(GBaseDataAdapter) GBaseCommand…

跨国企业如何高效又安全的传输视频大文件?

在视频传输需求日益增长的今天&#xff0c;如何高效、安全地传输视频大文件成为跨国企业面临的重要问题。传统的文件传输方式存在诸多弊端&#xff0c;无法满足跨国企业对于传输效率、文件安全以及合规性的需求。那么跨国企业如何在市场是找到一种文件传输工具能在安全性、稳定…

构建基于RHEL9系列(CentOS9,AlmaLinux9,RockyLinux9等)的MySQL8.0.32的RPM包

本文适用&#xff1a;rhel9系列&#xff0c;或同类系统(CentOS9,AlmaLinux9,RockyLinux9等) 文档形成时期&#xff1a;2023年 因系统版本不同&#xff0c;构建部署应略有差异&#xff0c;但本文未做细分&#xff0c;对稍有经验者应不存在明显障碍。 因软件世界之复杂和个人能力…