當前位置:編程學習大全網 - 源碼下載 - NES 模擬器開發教程 04 - NES 卡帶(Cartridge)

NES 模擬器開發教程 04 - NES 卡帶(Cartridge)

04 章的時候了解了 NES 文件結構,NES 文件本質上只是從卡帶上 dump 下來的信息,所以首先需要實現卡帶的模擬,把程序等數據加載進內存後,才能進行下壹步操作

Mapper 已經在前面的文章出現過很多次了,現在來詳細了解壹下

03 篇文章提到過,NES 總線上,PRG 的尋址範圍為 0x8000 - 0xFFFF,CHR 尋址範圍為 0x0000 - 0x2000,他們大小分別為 32K 和 8K,對於大型遊戲這麽點空間是遠遠不夠的,顯然任天堂在設計的時候也考慮到了這壹點,所以采用 Mapper 來進行各種擴展

Mapper 並不位於主機中,而位於卡帶上。每壹張卡帶都對應了壹種 Mapper,在 NES 1.0 格式中,可以表示多達 256 種 Mapper

每種 Mapper 行為都不壹樣,比如有的 Mapper 增加了音頻芯片提高音頻性能,有的 Mapper 增加了寄存器擴展程序大小,有的還有中斷計數的功能

比如 Mapper2,增加了 Bank 選擇寄存器,以控制不同的 Bank 映射到 0x8000 - 0xFFFF,這樣就擴充了遊戲容量

了解 Mapper 作用之後,首先看看最簡單的 Mapper - Mapper0,這個 Mapper 沒有任何的擴容能力,所以它的 ROM 最大只有 32K + 8K = 40K

唯壹需要註意的是:

了解了 Mapper 作用後,就可以開始定義 API 了

首先定義 ROMInfo 接口,表示從 NES 文件解析的 Header 信息

另外還需要壹個 Mapper 對象,用來表示不同的 Mapper。對於 CPU 來講,只需要在意 Mapper 的讀寫能力,所以需要定義 write 和 read 接口

最後,Cartridge 當中只需要 Info 和 Mapper 兩個實例就夠了

在這裏舉個例子講壹下 Cartridge 如何模擬(只列舉核心邏輯,其他簡單的邏輯就等妳自己完成了)

壹***需要兩個類,壹個 Cartridge,壹個 Mapper0

文件 cartridge.ts

文件 mapper0.ts

  • 上一篇:QQ寵物企鵝的餵養秘籍
  • 下一篇:eclipse為什麽無法安裝?
  • copyright 2024編程學習大全網