最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【譯制】紅白機(jī)NTSC制式PPU——Ricoh 2C02技術(shù)參考(第一部分)

2021-02-16 23:33 作者:某科學(xué)的小姚同志  | 我要投稿

紅白機(jī)NTSC制式PPU

——Ricoh 2C02技術(shù)參考

Brad Taylor(BTTDgroup@hotmail.com)

譯者:某科學(xué)的小姚同志(bilibili@某科學(xué)的小姚同志)

第五版,2004年4月23日,譯者修正了一些錯(cuò)誤

譯者技術(shù)及翻譯水平有限,若有錯(cuò)誤懇請(qǐng)大家指正!

向NES開(kāi)發(fā)社區(qū)致謝,網(wǎng)址:http://nesdev.parodius.com

Neal Tew提供了關(guān)于屏幕卷動(dòng)(Scrolling)的信息,向他表示特別感謝!

推薦文獻(xiàn):任天堂PPU的專(zhuān)利文件(U.S.#4,824,106)

?

注意:為了正確顯示該文檔,您的文本閱讀器應(yīng)該能夠:

1、支持傳統(tǒng)VGA文本模式顯示,具有含256個(gè)字符的字符集,能顯示線(xiàn)條畫(huà)字符;

2、支持自動(dòng)換行,將字體切換為終端風(fēng)格的Windows記事本程序能輕松滿(mǎn)足這兩項(xiàng)要求

在下文中,將會(huì)討論

2C02內(nèi)部集成部件列表

2C02引腳命名法和信號(hào)描述

2C02的編程模型

視頻信號(hào)的產(chǎn)生

PPU的基本時(shí)序

PPU的其他雜項(xiàng)信息

PPU的顯存訪問(wèn)周期

幀渲染細(xì)節(jié)

掃描線(xiàn)渲染細(xì)節(jié)

畫(huà)面內(nèi)精靈(Sprite/Object)的判定

背景渲染流水線(xiàn)的細(xì)節(jié)

精靈樣式(Pattern)的取出和渲染細(xì)節(jié)

關(guān)于那些“多一個(gè)周期”的幀

MMC3的掃描線(xiàn)計(jì)數(shù)器

PPU像素優(yōu)先級(jí)的一些”怪事“(BUGs)

PPU屏幕卷動(dòng)和尋址簡(jiǎn)述

內(nèi)部集成部件列表?

- 控制寄存器和雜項(xiàng)寄存器

- 像素和掃描線(xiàn)計(jì)數(shù)器

- 彩色突發(fā)信號(hào)(Colorburst)發(fā)生器

- 顯存(VRAM)地址鎖存和計(jì)數(shù)器

- VRAM地址緩沖器,也稱(chēng)圖塊(Tile)索引字節(jié)

- VRAM讀寫(xiě)緩沖器

- 精靈屬性?xún)?nèi)存(OAM,Object Attribute Memory)

- OAM指針寄存器/計(jì)數(shù)器

- OAM臨時(shí)內(nèi)存和掃描線(xiàn)比較器

- 精靈垂直和水平翻轉(zhuǎn)邏輯

- 精靈像素緩沖器

- 背景像素緩沖器

- 多路復(fù)用器

- 系統(tǒng)調(diào)色板ROM和用戶(hù)調(diào)色板RAM

- 屏幕卷動(dòng)寄存器和計(jì)數(shù)器

- 電平譯碼器/相位(Phase)選擇器/數(shù)模轉(zhuǎn)換器(DAC)

- 地址/數(shù)據(jù)引腳復(fù)用字節(jié)指針觸發(fā)器

2C02引腳命名法和信號(hào)描述

???????????????? ___ ? ? ?? ___

??????? ? ? ? ? |? * ? ? \/? ? ? ? |

R/W? >01]???? ? ? ? ? ?? ? [40<? VCC

?? D0? [02]?????? ? ? ? ? ?? [39>? ALE

??? D1? [03]???? ? ? ? ? ? ? [38]? AD0

??? D2? [04]?? ? ? ? ? ? ??? [37]? AD1

??? D3? [05]??? ? ? ? ? ? ?? [36]? AD2

??? D4? [06]???? ? ? ? ? ? ? [35]? AD3

??? D5? [07]???? ? ? ? ? ? ? [34]? AD4

??? D6? [08]????? ? ? ? ? ?? [33]? AD5

??? D7? [09]?? ? ? ? ? ? ? ? [32]? AD6

??? A2? >10]??? 2C02 ?? [31]? AD7

???? A1? >11]????????????????? [30>? A8

??? A0? >12]??? ? ? ? ? ? ?? [29>? A9

?? /CS? >13]???? ? ? ? ? ? ? [28>? A10

?EXT0? [14]??? ? ? ? ? ? ?? [27>? A11

?EXT1?? [15]??? ? ? ? ?? ?? [26>? A12

?EXT2? [16]???? ? ? ? ? ? ? [25>? A13

?EXT3? [17]???? ? ? ? ? ? ? [24>? /R

? CLK? >18]?? ? ? ? ? ? ??? [23>? /W

?/VBL? <19]?? ? ? ? ? ? ??? [22<? /SYNC

? VEE? >20]????? ? ? ? ? ?? [21>? VOUT

?? ? ? ?? ??????? |_________|

?

R/W, D0-D7, A2-A0, /CS

這些是PPU的控制總線(xiàn)信號(hào),通過(guò)這些信號(hào)來(lái)編程2C02的內(nèi)部寄存器。R/W控制數(shù)據(jù)傳輸方向(低電平代表向PPU寫(xiě)數(shù)據(jù))。通過(guò)A0-A2來(lái)選擇要讀寫(xiě)的PPU內(nèi)部寄存器。當(dāng)/CS(片選信號(hào))為低電平時(shí),D0-D7被用作與選中的寄存器收發(fā)數(shù)據(jù)(若/CS為高電平,則D0-D7為高阻態(tài))。文檔的下一章節(jié)將詳細(xì)介紹PPU內(nèi)部寄存器的操作。


EXT0-EXT3

這些引腳可用作像素輸入(用作將外部產(chǎn)生的圖像與2C02產(chǎn)生的圖像疊合),也可用用作輸出(驅(qū)動(dòng)另一片PPU)。通過(guò)對(duì)2C02編程,可配置這些引腳的功能(輸入/輸出)。NES/FC主板將這些引腳接地(全黑像素),因此它們通常被編程為輸入模式。


CLK此引腳為2C02的21.48MHz時(shí)鐘信號(hào)輸入。


/VBL

此引腳在PPU進(jìn)入場(chǎng)消隱期(VBLANK)時(shí)變化為低電平,并在低電平維持長(zhǎng)達(dá)20條掃描線(xiàn)的時(shí)間。它常常與2A03 CPU的/NMI(不可屏蔽中斷)引腳相連,用于在每幀前產(chǎn)生一次不可屏蔽中斷。我們可以通過(guò)軟件快速清零/置位PPU寄存器中/VBL位來(lái)響應(yīng)這個(gè)中斷,故此中斷信號(hào)的持續(xù)時(shí)間往往不足一條掃描線(xiàn)。此引腳內(nèi)部為開(kāi)集(Open-collector)連接方式。


VEE, VCC對(duì)應(yīng)為接地和5V直流電源輸入。


VOUT

此引腳為2C02無(wú)緩沖的復(fù)合視頻信號(hào)輸出端。它通常與一個(gè)兩級(jí)的共集電極三極管放大器連接,從而將視頻信號(hào)放大到1V峰-峰值,驅(qū)動(dòng)75歐姆的負(fù)載。


/SYNC

當(dāng)此引腳為低電平時(shí),PPU內(nèi)部的顏色突發(fā)控制、掃描線(xiàn)和像素計(jì)數(shù)器/觸發(fā)器都會(huì)被復(fù)位到一個(gè)確定的狀態(tài)。當(dāng)兩片2C02通過(guò)EXT引腳以主-從方式相連時(shí),雙方通過(guò)此引腳進(jìn)行同步,即主PPU的/VBL引腳產(chǎn)生場(chǎng)消隱信號(hào),該信號(hào)輸入到從PPU到/SYNC端口。在Famicom主機(jī)中,該引腳被接于邏輯高電平上,

而在NES主機(jī)中,該引腳于2A03 CPU到復(fù)位信號(hào)相連,這導(dǎo)致當(dāng)復(fù)位按鍵被按住時(shí)無(wú)圖像輸出。


/R, /W, ALE, AD0-AD7, A8-A13

這些引腳用來(lái)控制PPU相關(guān)的數(shù)據(jù)總線(xiàn)(與顯存相連)。PPU將地址第0-7位放在AD總線(xiàn)上時(shí),ALE輸出高電平(通常用一片74LS373鎖存器來(lái)鎖存地址總線(xiàn)低八位的數(shù)據(jù))。/R或/W引腳低電平有效,指示PPU的AD總線(xiàn)上連接的存儲(chǔ)器將14位地址信號(hào)(A0-A7由外部鎖存器提供,A8-A13由PPU直接提供)譯碼,并根據(jù)傳輸方向的指示提供數(shù)據(jù)(/R信號(hào)有效表示將數(shù)據(jù)送入2C02,/W信號(hào)有效則相反)。/R、/W和ALE信號(hào)在同一時(shí)間至多有一個(gè)有效。

?2C02的編程模型

本章節(jié)將討論2C02的端口(寄存器)和可編程顯存的組織結(jié)構(gòu)。文檔中這些端口使用$200加上末尾的一位數(shù)來(lái)表示(例如$2002)。此處未說(shuō)明的內(nèi)容將在下文解釋。

?

可寫(xiě)的2C02端口

端口編號(hào)?? ???? 描述

-------- ? ? --???? ----

0?? ???? ? ? ? ? 0??? ? 水平命名表選擇

??? ?????????????? 1??? ? 垂直命名表選擇

?????????????? (0-1兩位共同選擇了2*2的4個(gè)命名表中的一個(gè)作為當(dāng)前命名表)

??? ?????????????? 2??? ? 7號(hào)端口訪問(wèn)時(shí)的PPU地址自增選擇(0:自增1-橫向,1:自增32-縱向)

??? ?????????????? 3??? ? 精靈樣式表選擇(第5位為0時(shí)該選擇才有效)

??? ?????????????? 4??? ? 背景樣式表選擇

??? ???? ? ? ? ? ? 5??? ? 精靈高度選擇(0:8線(xiàn)精靈,1:16線(xiàn)精靈)

??? ?????????????? 6??? ? EXT引腳數(shù)據(jù)方向(0:輸入,1:輸出)

??? ?????????????? 7??? ? /VBL信號(hào)無(wú)效控制(為0)

1?? ???? ? ? ? ?? 0??? ? 禁用復(fù)合視頻信號(hào)的彩色突發(fā)(1為禁用),會(huì)產(chǎn)生灰度圖像

??? ?????????????? 1??? ? 最左側(cè)8列背景像素裁剪(0為有效)

??? ?????????????? 2??? ? 最左側(cè)8列精靈像素裁剪(0為有效)

??? ?? ? ? ? ? ? ? 3??? ? 打開(kāi)背景顯示(1為有效)

??? ? ? ? ? ?? ??? 4? ????打開(kāi)精靈顯示(1為有效)

??? ? ? ? ? ?? ??? 5??? ? 紅色通道亮度強(qiáng)調(diào)/補(bǔ)償

??? ? ? ? ? ? ? ?? 6??? ? 綠色通道亮度強(qiáng)調(diào)/補(bǔ)償

??? ? ? ? ? ? ? ?? 7??? ? 藍(lán)色通道亮度強(qiáng)調(diào)/補(bǔ)償

3?? ??? ? ? ? ??? -??? ? OAM(在PPU內(nèi)部)索引指針(64個(gè)表項(xiàng),每個(gè)32位,訪問(wèn)粒度為字節(jié))

4?? ??? ? ? ? ? ? -??? ? OAM數(shù)據(jù)寫(xiě)入端口(寫(xiě)入地址通過(guò)3號(hào)端口設(shè)置,寫(xiě)入后地址自增)

5?? ??? ? ? ? ? ? -??? ? 屏幕卷動(dòng)偏移設(shè)置端口

6?? ? ? ? ? ?? ?? -??? ? VRAM讀/寫(xiě)地址端口(通過(guò)7號(hào)端口訪問(wèn)VRAM)

7?? ??? ? ? ? ? ? -??? ? VRAM數(shù)據(jù)寫(xiě)入端口

可讀的2C02寄存器

端口編號(hào)?? ??? 描述

-------? ? ? --??? -----

2?? ??? ? ? ? ?? 5??? ?指示讀取前最后一幀中單一掃描線(xiàn)上檢測(cè)到了多于8個(gè)精靈

??? ?? ? ? ? ?? ? 6??? ?指示讀取前最后一幀中最高優(yōu)先級(jí)的精靈(0號(hào)精靈)與背景非0像素發(fā)生碰撞(重合)

??? ????????????? 7??? ?場(chǎng)消隱標(biāo)志

4?? ??? ? ? ??? -??? ?OAM數(shù)據(jù)讀出端口(讀出地址通過(guò)3號(hào)端口設(shè)置,讀出后地址自增)

7?? ??????????? -??? ?VRAM數(shù)據(jù)讀出端口

?

精靈屬性結(jié)構(gòu)體(OAM表項(xiàng),一個(gè)精靈占用4個(gè)字節(jié))

字節(jié)?? ? 位???? 描述

---?? ? ?? --? ? -----

0???????? ? -???? 精靈頂部的坐標(biāo)(Y坐標(biāo)),用(掃描線(xiàn)坐標(biāo)-1)表示

1??????????? - ??? 精靈的樣式表(VRAM中)索引號(hào),當(dāng)使用16線(xiàn)高度的精靈時(shí),該字節(jié)的第0位用于選擇樣式表

2?????????? 0???? 精靈調(diào)色板項(xiàng)選擇(第2位)

???????????? 1????? 精靈調(diào)色板項(xiàng)選擇(第3位)

??? (第0-1位相當(dāng)于該精靈的屬性表;調(diào)色板項(xiàng)第0、1位存放在精靈的樣式表中)

??????????? 5????? 精靈相對(duì)于背景的優(yōu)先級(jí)(0:優(yōu)先級(jí)高于背景,1:優(yōu)先級(jí)低于背景)

?? ? ? ? ?? 6???? 水平翻轉(zhuǎn)精靈(將從樣式表取出每一字節(jié)數(shù)據(jù)的位順序反轉(zhuǎn))

??????????? 7???? 垂直翻轉(zhuǎn)精靈(訪問(wèn)樣式表時(shí),將8線(xiàn)矮精靈訪問(wèn)地址的第3位或16線(xiàn)高精靈訪問(wèn)地址的第4位取反)

3????????? -???? 精靈左側(cè)邊的坐標(biāo)(X坐標(biāo)),用掃描線(xiàn)坐標(biāo)表示

視頻信號(hào)的產(chǎn)生

一個(gè)21.48MHz的時(shí)鐘信號(hào)被輸入2C02作為其主時(shí)鐘,同時(shí)該時(shí)鐘也被2A03 CPU共享。

在PPU的內(nèi)部,21.48MHz時(shí)鐘被用來(lái)驅(qū)動(dòng)一個(gè)三位的約翰遜(紐環(huán))計(jì)數(shù)器(6種有效狀態(tài):000->100->110->111->011->001)。計(jì)數(shù)器每一位都由一個(gè)主-從D觸發(fā)器實(shí)現(xiàn)。這3位對(duì)應(yīng)主-從觸發(fā)器的主、從兩部分的輸出合起來(lái)正好可以編碼產(chǎn)生6*2=12個(gè)相位(Phase)彼此不同的時(shí)鐘信號(hào),其中每個(gè)信號(hào)的周期都是3.58MHz(=21.48MHz/6,為NTSC彩色突發(fā)周期,彩色突發(fā)信號(hào)為顯示器給出了用來(lái)區(qū)分用來(lái)代表不同色相的相位的基準(zhǔn)相位)。這12個(gè)相位不同的信號(hào)是PPU產(chǎn)生彩色復(fù)合視頻輸出信號(hào)的基礎(chǔ)。

當(dāng)用戶(hù)編程改變像素對(duì)應(yīng)用戶(hù)調(diào)色板所索引的系統(tǒng)調(diào)色板的低四位時(shí),相位信號(hào)1-12之一就會(huì)被路由到PPU的視頻輸出引腳上(這決定了視頻信息中的色相)。系統(tǒng)調(diào)色板低四位色相中的0和13則被簡(jiǎn)單地硬連接到高電平或低電平以產(chǎn)生灰階(消色)像素信號(hào)。

系統(tǒng)調(diào)色板顏色號(hào)的第4和第5位選擇線(xiàn)性直流電壓偏置信號(hào)1-4之一,該偏置作用于像素的色相信號(hào)上,決定了視頻信息中的亮度。

色相選擇14和15在任何亮度選擇下都產(chǎn)生黑色像素。

亮度選擇0和色相選擇13會(huì)產(chǎn)生一種“比黑色還要黑”的像素顏色。這種超級(jí)黑的像素的輸出電平接近場(chǎng)/行同步脈沖,因此,使用這種黑色的游戲(游戲精靈Game Genie就是最好的例子)會(huì)導(dǎo)致某些顯示器產(chǎn)生畫(huà)面撕裂或失真。此時(shí),這種掃描線(xiàn)內(nèi)的偽同步脈沖被顯示器當(dāng)作正常的同步脈沖,將行掃描時(shí)序打斷。這種現(xiàn)象不會(huì)損壞顯示器,但我們?nèi)孕枰苊馐褂玫竭@種“超級(jí)黑色”,防止產(chǎn)生圖像失真。

系統(tǒng)調(diào)色板低四位選出的色相信號(hào)的交流幅值始終保持恒定,不隨著系統(tǒng)調(diào)色板第4位和第5位的改變而改變。因此,我們沒(méi)有辦法調(diào)節(jié)特定顏色的飽和度。

PPU的基本時(shí)序

除了三位約翰遜計(jì)數(shù)器,21.48MHz的并不被其他PPU硬件組成部分直接使用。然而,此信號(hào)被四分頻,得到5.37MHz時(shí)鐘,作為PPU時(shí)序的最小單位。如無(wú)特殊說(shuō)明,本文檔以下所有PPU時(shí)鐘周期都是以該時(shí)鐘基準(zhǔn)為單位的。

?

- 像素渲染的速度與PPU基礎(chǔ)時(shí)鐘一致,即1像素=1時(shí)鐘周期

- 341個(gè)PPU時(shí)鐘周期(折合341/3個(gè)CPU時(shí)鐘周期)為一個(gè)典型的掃描線(xiàn)周期

- 1幀包含262條掃描線(xiàn),也就是說(shuō)一幀有341*262個(gè)PPU時(shí)鐘周期(除以3即為對(duì)應(yīng)CPU的時(shí)鐘周期)

PPU的顯存訪問(wèn)周期

所有PPU顯存訪問(wèn)周期都是兩個(gè)時(shí)鐘周期長(zhǎng)的,且可以連續(xù)發(fā)生(通常在渲染期間完成)。顯存訪問(wèn)可以拆分為以下步驟:

在訪存周期的起始,目標(biāo)地址的高位被更新到PPU地址線(xiàn)A8-A13上。這些地址信號(hào)將被保持直至下一次訪存周期到來(lái)。

為了減少PPU的引腳數(shù)目,PPU低8位地址線(xiàn)的和數(shù)據(jù)總線(xiàn)復(fù)用。在訪存的第一個(gè)時(shí)鐘周期,地址A0-A7被放在PPU的數(shù)據(jù)總線(xiàn)上,同時(shí)ALE(地址鎖存使能)信號(hào)在后半個(gè)周期有效。這一操作使得低8位地址進(jìn)入受ALE信號(hào)控制的外部8位鎖存器(一般使用74LS373鎖存器)。

在第二個(gè)時(shí)鐘周期,/RD或/WR信號(hào)有效,并在整個(gè)周期中保持有效。此時(shí),相應(yīng)數(shù)據(jù)被VRAM放在數(shù)據(jù)總線(xiàn)上。

PPU的其他雜項(xiàng)信息

- 通過(guò)讀寫(xiě)地址在 $3Fxx范圍內(nèi)的端口,可以訪問(wèn)PPU內(nèi)部含有25個(gè)元素的用戶(hù)調(diào)色板RAM。該地址的第四位用來(lái)指定訪問(wèn)背景調(diào)色板(0)還是精靈調(diào)色板(1)。地址的第3-2位用來(lái)索引調(diào)色板表項(xiàng)(0-3),而第1-0位用來(lái)索引調(diào)色板表項(xiàng)的元素(0或1)。當(dāng)?shù)刂返牡?-3位均為0時(shí),會(huì)訪問(wèn)相同且唯一(共享)的一個(gè)透明色(背景色)調(diào)色板元素。


- 從端口 $2002 讀取數(shù)據(jù)會(huì)清除第七位的場(chǎng)消隱標(biāo)志,并復(fù)位PPU內(nèi)部 $2005/6 端口的觸發(fā)器(寄存器/緩沖器)。向 $2002 寫(xiě)數(shù)據(jù)則沒(méi)有這樣的效果。


- 2C02的引腳 /VBL的輸出信號(hào)是 $2002 寄存器的第七位和 $2000寄存器 的第七位做與非邏輯運(yùn)算產(chǎn)生的。


- $2002 寄存器的第五位和 $2002 寄存器的第六位被PPU內(nèi)部邏輯置位后會(huì)相對(duì)于場(chǎng)消隱信號(hào)于新一幀的開(kāi)始處保持20個(gè)掃描線(xiàn)的長(zhǎng)度。


- 用戶(hù)調(diào)色板RAM在背景渲染期間會(huì)被PPU內(nèi)部所訪問(wèn)(期間用戶(hù)調(diào)色板的地址和數(shù)據(jù)不可能出現(xiàn)在VRAM總線(xiàn)上)。哪怕是此時(shí)程序員通過(guò)編程控制CPU訪問(wèn) $2006/7 端口以試圖訪問(wèn)用戶(hù)調(diào)色板RAM,雖然被訪問(wèn)的調(diào)色板地址確實(shí)被放在了VRAM地址總線(xiàn)上,但VRAM的讀寫(xiě)信號(hào) /RD 和 /WR 也不會(huì)有效。這個(gè)機(jī)制原本設(shè)計(jì)的用意是防止像素渲染期間讀寫(xiě)VRAM鏡像地址區(qū)修改命名表,導(dǎo)致渲染出錯(cuò)(PPU內(nèi)部的命名表RAM地址譯碼器是一個(gè)連接在VRAM A13地址線(xiàn)上的非門(mén),這導(dǎo)致讀寫(xiě)VRAM $2000-$3FFF地址區(qū)均被判定為讀寫(xiě)命名表)。


- PPU在設(shè)計(jì)上無(wú)法直接使用CPU通過(guò) $2007 端口給出的VRAM地址去訪問(wèn)VRAM,而是經(jīng)過(guò)一個(gè)內(nèi)部緩沖器實(shí)現(xiàn)的,緩沖器本質(zhì)上是一個(gè)只有一級(jí)的流水線(xiàn)。當(dāng)有VRAM讀取請(qǐng)求時(shí),緩沖器的內(nèi)容會(huì)被返回給CPU。此后,PPU會(huì)盡快于PPU時(shí)序讀VRAM的周期里從VRAM將請(qǐng)求的數(shù)據(jù)取回并放入讀緩沖器中。通過(guò) $2007 端口向VRAM寫(xiě)入數(shù)據(jù)也是經(jīng)過(guò)流水線(xiàn)緩沖的,但目前還不確定數(shù)據(jù)流經(jīng)的緩沖區(qū)和讀緩沖器是否為同一個(gè)緩沖器(猜測(cè)可以通過(guò)向 $2007 端口寫(xiě)入數(shù)據(jù)并迅速讀回?cái)?shù)據(jù),檢查兩個(gè)數(shù)據(jù)是否一致來(lái)簡(jiǎn)單地判斷)。

幀渲染細(xì)節(jié)

以下描述說(shuō)明了PPU在一幀共262條有效掃描線(xiàn)中的行為。對(duì)應(yīng)每一條有效(如存在圖像渲染行為)的掃描線(xiàn),PPU分別有如下描述的動(dòng)作:

?

第0-19條掃描線(xiàn):自場(chǎng)消隱標(biāo)志VINT被設(shè)置(同時(shí)產(chǎn)生NMI不可屏蔽中斷信號(hào))而開(kāi)始,20條掃描線(xiàn)組成了習(xí)慣上被成為場(chǎng)消隱期的時(shí)期。在此期間,PPU不訪問(wèn)VRAM(命名表、樣式表等)。


第20條掃描線(xiàn):自VINT場(chǎng)消隱標(biāo)志被置位20條掃描線(xiàn)的時(shí)間過(guò)后(場(chǎng)消隱結(jié)束),PPU開(kāi)始渲染掃描線(xiàn)。此后第一條掃描線(xiàn)(第20條)是“啞掃描線(xiàn)”,盡管在此期間會(huì)和那些顯示圖像的掃描線(xiàn)一樣從VRAM按順序取回?cái)?shù)據(jù),但屏幕上并沒(méi)有可見(jiàn)像素被渲染出來(lái),因而此時(shí)從VRAM取回的背景數(shù)據(jù)也是無(wú)關(guān)緊要的。在該掃描線(xiàn)的第256個(gè)時(shí)鐘周期處水平和垂直卷動(dòng)寄存器的內(nèi)容被裝入對(duì)應(yīng)計(jì)數(shù)器(據(jù)猜測(cè))。除此之外,這條掃描線(xiàn)的行為與其它掃描線(xiàn)有很大區(qū)別,其主要原因在于此掃描線(xiàn)的存在被用作啟動(dòng)精靈渲染流水線(xiàn),即它會(huì)花費(fèi)256個(gè)時(shí)鐘周期的時(shí)間來(lái)判斷第一條可見(jiàn)掃描線(xiàn)(第21條)上是否存在及存在哪些精靈。


第21-260條掃描線(xiàn):在渲染完一條“啞掃描線(xiàn)”后,PPU開(kāi)始渲染實(shí)際可見(jiàn)的掃描線(xiàn),將實(shí)際的顯示數(shù)據(jù)輸出到顯示屏上。這一階段會(huì)渲染240條掃描線(xiàn)(NES/FC的分辨率為256*240)。

?

第261條掃描線(xiàn):在最后一條可見(jiàn)掃描線(xiàn)渲染完成后,PPU會(huì)等待一條掃描線(xiàn)的時(shí)間且沒(méi)有動(dòng)作(起“補(bǔ)償”作用,使編程者能得到“完美的”場(chǎng)消隱中斷周期)。此掃描線(xiàn)結(jié)束時(shí),場(chǎng)消隱標(biāo)志VINT被置位,開(kāi)始下一場(chǎng)(幀)的第一條掃描線(xiàn)的計(jì)時(shí)。

(未完待續(xù))

【譯制】紅白機(jī)NTSC制式PPU——Ricoh 2C02技術(shù)參考(第一部分)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
宜都市| 革吉县| 上犹县| 噶尔县| 泰宁县| 霍山县| 大港区| 岳普湖县| 周至县| 沐川县| 禹城市| 南平市| 焉耆| 泰宁县| 永仁县| 安远县| 尼勒克县| 巴彦淖尔市| 巢湖市| 衡东县| 安达市| 大方县| 舒城县| 邓州市| 吉木乃县| 栾城县| 宾川县| 阿拉善左旗| 清河县| 鹤山市| 柯坪县| 新巴尔虎右旗| 麻栗坡县| 东光县| 徐汇区| 兰考县| 凭祥市| 白朗县| 新丰县| 潞西市| 化州市|