日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VM技术(一)NES模拟器VM综述

發(fā)布時間:2023/12/20 编程问答 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VM技术(一)NES模拟器VM综述 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

游戲和女朋友誰重要?當然是游戲(手動狗頭),游戲是每一個時代的記憶,從最早的LED點陣上的游戲發(fā)展到LED屏,同時游戲也不斷的推動著計算機的發(fā)展,現(xiàn)在,時代已經(jīng)過去,游戲機除了在古董市場,已經(jīng)無從獲得,但是我們可以通過VM技術去重新構(gòu)建一個借助虛擬化技術可玩的設備,追逐舊夢。 本系列將結(jié)合前面的Python VM系列虛擬機將知識融會貫通,總結(jié)一下偉大的虛擬化技術。

起步——認識iNES文件格式

要入手一個模擬器,首先得從如何解析.nes的游戲文件開始。
iNES 文件(拓展名 .nes,大小寫均可)是 NES 游戲分發(fā)的事實標準。該文件標準的最初是由 Marat Fayzullin 為其模擬器 iNES 而開發(fā)的文件格式。

01234567
NES^ZPRGCHRMAP/SWMAP/0(always)
4E45531A1020E140
  • 第 0 ~ 3 個字節(jié)指定了文件的格式
    0 = 0x4E (N)
    1 = 0x45 (E)
    2 = 0x53 (S)
    3 = 0x1A (^Z)

  • 第4個字節(jié)指定了 PRG(程序) ROM 塊的個數(shù),PRG ROM 塊每個大小為 16KB

  • 第5個字節(jié)指定了 CHR(圖塊) ROM 塊的個數(shù),CHR ROM 塊每個大小為 8 KB

  • 第6個字節(jié)為指定卡帶屬性的字節(jié)。各個比特位的含義如下:

    • 0 -> Mirror Type ( 1 為水平, 0 為垂直)
    • 1 -> 是否存在 battery-backed RAM ( 1 則為存在,映射到 $6000-$7FFF)
    • 2 -> 是否存在 trainer (同上,映射到 $7000-$71FF)
    • 3 -> 是否存在 VRAM
    • 4-7 -> Mapper Type 的低四位
  • 第 7 個字節(jié)還是指定卡帶屬性的字節(jié)。各個比特位的含義如下:

    • 0 -> 卡帶是否含有 VS-System
    • 1-3 -> 保留,但必須全為 0
    • 4-7 -> Mapper Type 的高四位
  • 第 8 個字節(jié)指定了 RAM 塊的個數(shù),每塊為 8KB,如果為 0 ,則假設只有一個 RAM 塊。

  • 第 9 個字節(jié)指定了視頻制式,如果其第 0 個比特值為 0,則為 PAL,否則為 NTSC 制式。

  • 第 10-15 字節(jié)為保留區(qū)域,必須為 0 通過010editor打開下載[2]的ROM文件可以看到

  • C++中我們可以定義一個讀取文件頭的結(jié)構(gòu)體

    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

    參考資料:

  • TinyVM https://github.com/jakogut/tinyvm
  • ROM http://romhustler.net/roms/nes/all
  • SFC ROM http://romhustler.net/roms/snes/all
  • iNES http://wiki.nesdev.com/w/index.php/INES
  • nes fromat http://nesdev.com/neshdr20.txt
  • 轉(zhuǎn)載于:https://my.oschina.net/VenusV/blog/3081591

    總結(jié)

    以上是生活随笔為你收集整理的VM技术(一)NES模拟器VM综述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。