Re: 從零開始的紅白機模擬 - [01]FC/NES模擬器

Re: 從零開始的紅白機模擬 - [01]FC/NES模擬器

來自專欄 dustpg的計算機相關博客8 人贊了文章

博客備份地址:

Re: 從零開始的紅白機模擬 - [01]FC/NES模擬器 · Issue #5 · dustpg/BlogFM?

github.com

任天堂 Family Computer

Family Computer

在國內因為外觀被稱為紅白機的任天堂FC(歐美版叫NES), 或者說Famicom(典型的日式英語縮寫), 可謂是自己走向編程開發道路上不可缺少的一環. 可能有許多和我類似的因為玩上遊戲, 就想開發一款自己的遊戲, 而踏進這個圈子的(然後在開發的道路越走越遠).

雖然這麼說, 但是實際上玩的是國內生產的兼容機. 作為童年不可忽略的一環, 後有詩讚曰

小霸王騎了吳瓊

Re: FC模擬器

這裡, 就讓我記錄FC開發模擬器部分細節, 也就是Re: 從零開始的紅白機模擬.

其中在大學的時候, 用C++11做了一款FC的模擬器, 已經完整地模擬了CPU, 然後...就沒有然後了. 不過這個項目了解到使用到的C++特性很少, 所以這裡重新用C在做一次, 這一次當然是完整地模擬FC. 這也是標題Re: 的由來, 才不是Neta!

這也是自己第一個核心用C寫項目

從零開始

開局一款編譯器, 代碼全靠撿. 這系列博客屬於筆記性質, 所以寫得很詳細方便以後查看. 也要求讀者擁有基本的能力, 例如C, 多媒體之類的.

(筆者喜歡的一款FC(友盡)遊戲-打氣球)

硬體概述

直接摘選自wiki:

FC使用一顆理光製造的8位2A03 NMOS處理器(基於6502中央處理器,但是缺乏BCD模式),PAL制式機型運行頻率為1.773447MHz,NTSC制式機型運行頻率為1.7897725MHz,主內存和顯示內存為2KB。

FC使用理光開發的圖像控制器(PPU),有 2KB 的視頻內存,調色盤可顯示 48 色及 5 個灰階。一個畫面可顯示 64 個角色(sprites) ,角色格式為 8x8 或 8x16 個像素,一條掃描線最多顯示 8 個角色,雖然可以超過此限制,但是會造成角色閃爍。背景僅能顯示一個捲軸,畫面解析度為 256x240 ,但因為 NTSC 系統的限制,不能顯示頂部及底部的 8 條掃描線,所以解析度剩下 256x224。

從體系結構上來說,FC有一個偽聲音處理器 (pseudo-Audiom Processing Unit,pAPU),在實際硬體中,這個處理器是集成在2A03 NMOS處理器中的。pAPU內置了2個幾乎一樣(nearly-identical)的矩形波通道、1個三角波通道、1個雜訊通道和1個音頻採樣回放通道(DCM,增量調製方式。其中3個模擬聲道用於演奏樂音,1個雜音聲道表現特殊聲效(爆炸聲、槍炮聲等),音頻採樣回放通道則可以用來表現連續的背景音。

評論

僅僅2kb內存和2kb顯存就能演繹出童年的色彩!

推薦閱讀:

TAG:紅白機FamilyComputer,FC | 模擬器 |