游戏和女朋友谁重要?当然是游戏(手动狗头),游戏是每一个时代的记忆,从最早的LED点阵上的游戏发展到LED屏,同时游戏也不断的推动着计算机的发展,现在,时代已经过去,游戏机除了在古董市场,已经无从获得,但是我们可以通过VM技术去重新构建一个借助虚拟化技术可玩的设备,追逐旧梦。 本系列将结合前面的Python VM系列虚拟机将知识融会贯通,总结一下伟大的虚拟化技术。

起步——认识iNES文件格式

要入手一个模拟器,首先得从如何解析.nes的游戏文件开始。
iNES 文件(拓展名 .nes,大小写均可)是 NES 游戏分发的事实标准。该文件标准的最初是由 Marat Fayzullin 为其模拟器 iNES 而开发的文件格式。

0 1 2 3 4 5 6 7
N E S ^Z PRG CHR MAP/SW MAP/0(always)
4E 45 53 1A 10 20 E1 40
  1. 第 0 ~ 3 个字节指定了文件的格式
    0 = 0x4E (N)
    1 = 0x45 (E)
    2 = 0x53 (S)
    3 = 0x1A (^Z)

  2. 第4个字节指定了 PRG(程序) ROM 块的个数,PRG ROM 块每个大小为 16KB

  3. 第5个字节指定了 CHR(图块) ROM 块的个数,CHR ROM 块每个大小为 8 KB

  4. 第6个字节为指定卡带属性的字节。各个比特位的含义如下:

    • 0 -> Mirror Type ( 1 为水平, 0 为垂直)
    • 1 -> 是否存在 battery-backed RAM ( 1 则为存在,映射到 $6000-$7FFF)
    • 2 -> 是否存在 trainer (同上,映射到 $7000-$71FF)
    • 3 -> 是否存在 VRAM
    • 4-7 -> Mapper Type 的低四位
  5. 第 7 个字节还是指定卡带属性的字节。各个比特位的含义如下:

    • 0 -> 卡带是否含有 VS-System
    • 1-3 -> 保留,但必须全为 0
    • 4-7 -> Mapper Type 的高四位
  6. 第 8 个字节指定了 RAM 块的个数,每块为 8KB,如果为 0 ,则假设只有一个 RAM 块。

  7. 第 9 个字节指定了视频制式,如果其第 0 个比特值为 0,则为 PAL,否则为 NTSC 制式。

  8. 第 10-15 字节为保留区域,必须为 0 通过010editor打开下载[2]的ROM文件可以看到

C++中我们可以定义一个读取文件头的结构体

const NESMagicMumber = 0x1a53454e //"NES^Z"
typedef struct _NesHeader{uint32_t MagicNumber;// NES Magic Number,must be 0x1a53454echar     PRGNum;       // PRG-ROM banks numberchar     CHRNum;     // CHR-ROM banks numberchar     Ctrl1;          // Controlchar     Ctrl2;           // Control toochar     RAMNum;      // RAM number (8KB each)char[7]  _null;         // Empty bytes. Not used at this tume but MUST BE ALL ZEROS or games will not work.
}NesHeader

参考资料:

  1. TinyVM https://github.com/jakogut/tinyvm
  2. ROM http://romhustler.net/roms/nes/all
  3. SFC ROM http://romhustler.net/roms/snes/all
  4. iNES http://wiki.nesdev.com/w/index.php/INES
  5. nes fromat http://nesdev.com/neshdr20.txt

转载于:https://my.oschina.net/VenusV/blog/3081591

VM技术(一)NES模拟器VM综述相关推荐

  1. 构建一个轻量级的嵌入式虚拟平台,开发工程用板stm32 picoc解释器,大量自定义函数,sarm拓展,lwip移植,nes模拟器移植,系统优化,等等技术的融合

    让嵌入式想java一样一处编写到处运行 第一次写博客,其实接触嵌入式已经快两年了,从开始学51单片机的时候,怀着满腔的热情.写出了点亮第一个流水灯代码的时候那个无比的激动,到后面自己做许多有趣的东西( ...

  2. 单片机开发---ESP32S3移植NES模拟器(二)

    书接上文 <单片机开发-ESP32-S3模块上手> <单片机开发-ESP32S3移植lvgl+触摸屏> <单片机开发-ESP32S3移植NES模拟器(一)> 暖场视 ...

  3. 给手机安装NES模拟器,游戏无限玩

    MTK平台手机安装MRP的NES游戏模拟器教程和软件曾经的我们,在玩红白机(小霸王)上经典游戏的时候,经常会因为那些技术娴熟的人如同行云流水般的动作而表现出惊叹和钦佩之情.时光匆匆,游戏界的一代骄子如 ...

  4. 蘑菇模拟器TV版 for Android,安卓NES模拟器TV版下载

    NES Emulator TV精选了上千款经典的红白机小游戏,我们小时候玩过的经典游戏都能够在这里找到,每一款游戏在这里都能够分别存档,没有太多时间的上班族可以尝试一下,给玩家带来最好的游戏体验. 软 ...

  5. 四大金刚 数据结构_GIS技术在气象领域应用综述

    GIS 技术在气象领域应用综述 李丹 [摘 要] 摘 要 : 地理信息系统即 GIS 具有数据分析.图形制作.预测等多方面 的功能 , 在气象领域当中能够对气象数据进行实时采集 - 处理 , 从而为气 ...

  6. 模拟器不全屏_puNES 适用于 Windows 和 Linux 的开源 NES 模拟器

    在游戏方面,我个人并不喜欢玩网络游戏,如果要玩游戏,也都是玩一些单机版的,我个人比较喜欢 ATC 动作过关游戏.年前的时候用发小的 PS4 玩了几天,虽然游戏都是大作,但是仍然无法撼动我对单机以及像素 ...

  7. 一个完整的NES模拟器

    (这个版本的忍者神龟,好多年都没玩过了.译者) 也许不久后,你就可以在android手机上重温以前在电视上玩塞尔达和超级玛丽来度过暑假的日子了,就是这个NES模拟器. 模拟器有两个版本:lite版,你 ...

  8. 网络技术-ENSP 华为模拟器(二)静态路由配置-3路由3PC

    一.内容概述 根据<网络技术-ENSP 华为模拟器(一)静态路由配置-2路由2PC>的技术研习结果,本章将进行对之前拓扑图进行拓展并配置,其中包含新的知识点和问题解决. 二.拓展后拓扑图 ...

  9. Android Nes模拟器,nes/fc任天堂/小霸王游戏SDK集成

    Android Nes Emulator(Nes模拟器/FC任天堂/小霸王游戏)SDK集成 Android Nes模拟器SDK集成,一键引入,配置简单明了,链接如下↓↓↓ 欢迎留下star githu ...

  10. 2017谷歌I/O大会时间正式公布;微软发布利用实感技术的无人机模拟器│IoT黑板报...

    亚马逊Echo和谷歌Home或于今年引入电话功能 @cnBeta 北京时间2月16日消息,亚马逊Echo.谷歌Home是智能云联网音箱的代表之作,它们开始大举入侵生活空间. <华尔街日报> ...

最新文章

  1. WorldWind Java 版学习:10、服务器响应
  2. c# 18位身份证源代码
  3. Visual Studio中怎样更改Nuget程序包源
  4. slice 定义和用法
  5. 冠军奖金50万,2020腾讯广告算法大赛广发“英雄帖”
  6. UE4 中的人工智能解析—ShooterGame为例
  7. PTA—考试座位号(C语言)
  8. 4.5Python数据处理篇之Matplotlib系列(五)---plt.pie()饼状图
  9. springboot基于web的游泳馆信息管理系统毕业设计源码281444
  10. 在桌面计算机找不到光盘驱动,驱动程序存放在Windows7系统光盘的哪 – 手机爱问...
  11. word里画的流程图怎么全选_流程图怎么做?用Word制作流程图超方便!
  12. GitHub部署静态网页
  13. 论文:YOLOX: Exceeding YOLO Series in 2021
  14. vue.jsv-html,Vue.js-资料-组件化思想 —下
  15. 利用SVG滤镜实现水波倒影效果
  16. 古人教你怎样识人不走眼
  17. Proteus——测量脉冲频率
  18. 单位冲激函数与单位阶跃函数
  19. 曲靖师范计算机科学与技术,曲靖师范学院计算机科学与工程学院试讲表.doc
  20. pythonreader下载_使用Python的pandas-datareader包下载雅虎财经股价数据

热门文章

  1. Java基础-----匿名对象
  2. ubuntu升级22.04无法启动--ACPI BIOS Error
  3. web前端总结之文本超出显示省略号
  4. PHP读取HTML生成doc
  5. 呼叫中心_VOIP技术介绍
  6. 将m个相同的球全部放到n个相同的盒子里面有几种放法,盒子不能为空
  7. Python3实现基于百度AI开放平台和图灵机器人API聊天机器人
  8. 数据挖掘与六度分隔理论
  9. springmvc excel下载到本地后,打开提示“因文件格式或拓展名无效。请确定文件未损坏,并且文件拓展名与文件格式匹配”...
  10. R中rank函数使用