当前位置: 首页 > news >正文

街机模拟游戏逆向工程(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.lryc.cn/news/281039.html

相关文章:

  • Element UI CascaderPanel级联组件使用和踩坑总结
  • Oracle全系列版本官网下载保姆及教程
  • 漏洞扫描是最该被防范的安全问题
  • Unity 工具 之 Azure 微软连续语音识别ASR的简单整理
  • MLP-Mixer: An all-MLP Architecture for Vision
  • redis前缀匹配数据迁移数据
  • 云贝教育 |【技术文章】存储对象的LIBRARY CACHE LOCK/PIN实验(一)
  • C# 快速模指数运算 快速求余运算
  • Chisel入门初步0
  • MySQL 8.0中移除的功能(一)
  • 可抓取性和可索引性:它们是什么以及如何影响搜索引擎优化
  • Django教程第4章 | Web开发实战-三种验证码实现
  • 深度探讨 Golang 中并发发送 HTTP 请求的最佳技术
  • VUE指令(二)
  • 开源对象存储服务器MinIO本地部署并结合内网穿透实现远程访问管理界面
  • 【TypeScript】tsconfig.json文件到底是干啥的?作用是什么?
  • wagtail的数据模型和渲染
  • OpenHarmony4.0适配LVDS屏幕驱动
  • 【playwright】新一代自动化测试神器playwright+python系列课程01-playwright驱动浏览器
  • POSIX API与网络协议栈
  • 互联网加竞赛 基于卷积神经网络的乳腺癌分类 深度学习 医学图像
  • 腾讯云 IPv6 解决方案
  • Appium 自动化测试
  • 深入浅出Android dmabuf_dump工具
  • Guava RateLimiter预热模型
  • 【搭建个人知识库-3】
  • 如何看待 Linux 内核邮件列表重启将内核中的 C 代码转换为 C++
  • springboot网关添加swagger
  • 代码随想录 Leetcode383. 赎金信
  • 上下左右视频转场模板PR项目工程文件 Vol. 05