專利名稱:圖形處理器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明概括來說涉及一種包括其中配置了可編程處理器的獨(dú)特的外部存儲(chǔ)單元的信息處理裝置。本發(fā)明具體涉及一種具有程序存儲(chǔ)器的可拆卸的外部存儲(chǔ)單元,程序存儲(chǔ)器中存儲(chǔ)的程序一部分由主處理系統(tǒng)如電視游戲系統(tǒng)執(zhí)行,一部分由為增強(qiáng)主系統(tǒng)的高速圖形處理能力而設(shè)計(jì)的可編程微處理器執(zhí)行。該可編程微處理器包括將基于像素的格式變換為基于字符的格式的硬件。
本申請與同時(shí)由桑等人提交的申請順序號為_,_題為“用于電視游戲系統(tǒng)等具有可編程圖形處理器的外部存儲(chǔ)單元”的申請(代理人案卷號為1248-2),和同時(shí)由桑等人提交的申請順序號為_,_題為“用于電視游戲系統(tǒng)等具有增強(qiáng)的存儲(chǔ)器控制電路的圖形處理器”的申請(代理人案卷號為1248-5)有關(guān)。
在電視游戲控制臺(tái)中配置有8位微處理器和相應(yīng)的顯示處理子系統(tǒng)的已有技術(shù)的電視游戲機(jī)一般通過在游戲卡中以8位乘8位矩陣形式預(yù)先存儲(chǔ)字符,并通過建立起利用這些預(yù)先存儲(chǔ)的字符的各種可編程組合的屏面顯示來產(chǎn)生圖形。這類已有技術(shù)的電視游戲系統(tǒng)一般具有使整個(gè)顯示背景和游戲者控制的若干“活動(dòng)目標(biāo)”或“子畫面”移動(dòng)的能力。
這類已有技術(shù)的系統(tǒng)不能出現(xiàn)這樣的電視游戲在這些游戲中包含由多邊形組合構(gòu)成的活動(dòng)目標(biāo),而且這些目標(biāo)必須能被操縱(如旋轉(zhuǎn))并在每幀“重新繪制”。這類系統(tǒng)中的已有技術(shù)的8位處理器和相關(guān)的顯示處理電路例如無法進(jìn)行所需的運(yùn)算來使三維的、基于多邊形的目標(biāo)有效地旋轉(zhuǎn)或使這類旋轉(zhuǎn)的目標(biāo)合適地縮放以產(chǎn)生3-D型特殊效果。本申請發(fā)明人認(rèn)識到精致的圖形需要逐個(gè)像素地更新屏面和實(shí)時(shí)地完成復(fù)雜的數(shù)學(xué)運(yùn)算,這類已有技術(shù)的基于字符的電視游戲機(jī)是無法勝任這些任務(wù)的。
已有技術(shù)的8位電視游戲機(jī)也不能有效地完成需要逐個(gè)像素地迅速更新屏面的其他圖形技術(shù)。例如,這類系統(tǒng)無法有效地在三維空間使一個(gè)目標(biāo)映像到作為另一個(gè)顯示目標(biāo)的一部分所顯示的多邊形上(此后稱為“質(zhì)地映像”)。
為了超過它有技術(shù)的8位機(jī)器的圖形能力,電視游戲系統(tǒng)已被設(shè)計(jì)成采用更具功能的16位處理器。這類16位處理器可為電視游戲系統(tǒng)提供處理更精致的圖形所需的數(shù)學(xué)機(jī)能。例如,這些系統(tǒng)可生成更高級的彩色和得到更好的圖形分辨率。這類16位電視游戲機(jī)是基于字符的系統(tǒng),允許在較大范圍上實(shí)現(xiàn)可預(yù)先繪制成基于字符或子畫面的圖形的電視游戲。這類16位電視游戲機(jī)還允許具有多種彩色的背景平面高速移動(dòng)并在這些平面的后面或前面配置有活動(dòng)目標(biāo)。
然而,這類已有技術(shù)的16位電視游戲機(jī)在實(shí)用上實(shí)現(xiàn)不了具有3-D型特殊效果的高級電視游戲,這些游戲要顯示由多邊形所組成的并需要每幀變化的復(fù)雜目標(biāo)。這類已有技術(shù)的基于字符的16位機(jī)器例如無法在實(shí)用中實(shí)現(xiàn)需要必須逐幀地放大或縮小的全方位旋轉(zhuǎn)的目標(biāo)或子畫面的游戲。本申請發(fā)明人認(rèn)識到更有效地實(shí)現(xiàn)涉及全方位旋轉(zhuǎn)和縮放的基于多邊形的目標(biāo)在內(nèi)的這類游戲,必需繪制多邊形的邊界并逐個(gè)像素地將合適數(shù)據(jù)填入這類基于多邊形的目標(biāo)。這類任務(wù)必須逐個(gè)像素地進(jìn)行,故要花去大量的時(shí)間處理。
在已有技術(shù)中,已對可拆卸的游戲卡作了改進(jìn),使現(xiàn)行處理器可訪問比與主微處理器相聯(lián)的現(xiàn)有地址線數(shù)目所允許的范圍更大的程序存儲(chǔ)器地址空間,從而得到更高級的游戲。例如,這類已有技術(shù)的8位系統(tǒng)采用了包括執(zhí)行存儲(chǔ)體切換和其他附加功能的多存儲(chǔ)器控制器芯片的游戲卡。然而這類有關(guān)存儲(chǔ)體切換的芯片無法使電視游戲系統(tǒng)勝任上面提到性質(zhì)的高速圖形處理。
本發(fā)明針對已有技術(shù)的上述問題,提供一種獨(dú)特的、全編程的、設(shè)計(jì)成配備在與主信息處理系統(tǒng)連接的可拆卸的外部存儲(chǔ)單元中的圖形微處理器。在這里所述的示范性實(shí)施例中,本發(fā)明是在一包括主電視游戲系統(tǒng)和裝有圖形微處理器的電視游戲卡的電視游戲系統(tǒng)中實(shí)現(xiàn)的。
這里所述的圖形微處理器和電視游戲系統(tǒng)具有許多獨(dú)特的、優(yōu)異的特征,下面綜述這些特征。
按照本發(fā)明,獨(dú)特的圖形處理器以插件方式與主微處理器連接。為使處理速度最大,圖形處理器可以與主微處理器并行地工作。在一示范性實(shí)施例中,裝有圖形協(xié)處理器的游戲卡還包括只讀存儲(chǔ)器(ROM)和隨機(jī)存取存儲(chǔ)器(RAM)。
本發(fā)明的圖形協(xié)處理器對存儲(chǔ)事務(wù)在它本身需求和從主微處理器讀取數(shù)據(jù)這兩者之間作出仲裁。該處理器能與主微處理器同時(shí)執(zhí)行程序以高速處理,在此之前已有技術(shù)的電視游戲系統(tǒng)是無法達(dá)到的。
本發(fā)明的圖形協(xié)處理器與配置在游戲卡上的三總線結(jié)構(gòu)結(jié)合在一起工作,從而通過優(yōu)化主處理器和卡處理器有效使用這類存儲(chǔ)設(shè)備的能力以使卡內(nèi)RAM和ROM存儲(chǔ)器得到有效利用。
本發(fā)明的全用戶編程圖形協(xié)處理器包括一設(shè)計(jì)成允許高速處理的獨(dú)特指令集。該指令集能有效地實(shí)行有關(guān)3-D圖形運(yùn)算操作,例如擁有由專用硬件執(zhí)行的用來在主電視游戲系統(tǒng)的字符映像顯示中標(biāo)繪單個(gè)像素的專用指令。
該指令集包括獨(dú)特的基于像素的指令,按程序員的觀點(diǎn),它通過允許對單個(gè)像素編址建立一“虛擬的”位映像-盡管主系統(tǒng)是基于字符的。該像素?cái)?shù)據(jù)是在掃描時(shí)由圖形處理器變換為典型地由基于字符的16位主機(jī)所采用的格式的字符數(shù)據(jù)。這樣,雖然程序員可用獨(dú)特的“標(biāo)繪”指令標(biāo)繪像素,但有關(guān)數(shù)據(jù)讀出到RAM時(shí),數(shù)據(jù)被變換16位主機(jī)所能采用的基于字符的格式。
專用像素標(biāo)繪硬件執(zhí)行這指令以有效地實(shí)現(xiàn)高速3-D型圖形。該標(biāo)繪硬件有助于將對像素坐標(biāo)的尋址實(shí)時(shí)地變換成對主系統(tǒng)所采用形式的字符映像的尋址。
這樣,靠指定像素的程序執(zhí)行圖形操作而標(biāo)繪硬件則在掃描時(shí)將各像素的指定值變換成相應(yīng)格式的字符數(shù)據(jù)。該字符數(shù)據(jù)隨后映入主處理器圖像RAM中供顯示用的合適地方。
標(biāo)繪硬件響應(yīng)各種有關(guān)標(biāo)繪的指令以允許對某個(gè)特定的像素的在顯示屏上的X坐標(biāo)和Y坐標(biāo)和規(guī)定的彩色進(jìn)行可編程的選擇,并標(biāo)繪相應(yīng)的像素使X坐標(biāo)和Y坐標(biāo)變換成與具有驅(qū)動(dòng)主處理器的圖像RAM用的形式的字符定義所對應(yīng)的地址。
結(jié)合附圖對下面的本發(fā)明示范性實(shí)施例的詳細(xì)說明會(huì)使本發(fā)明的所有的形式和優(yōu)點(diǎn)更易于理解。
圖1是根據(jù)本發(fā)明示范性實(shí)施例的示范性外部存儲(chǔ)系統(tǒng)的方框圖;
圖2是與目前較佳的示范性實(shí)施例的圖形協(xié)處理器一起使用的示范性主處理系統(tǒng)的方框圖;
圖3是內(nèi)置圖形協(xié)處理器的游戲卡和內(nèi)置主處理系統(tǒng)的底座部件的示范性物理配置的透視圖;
圖4A和圖4B是根據(jù)目前較佳示范性實(shí)施例的圖形協(xié)處理器的方框圖;
圖5是敘述為起動(dòng)圖形協(xié)處理器操作而由主處理系統(tǒng)執(zhí)行的操作序列的流程圖;
圖6是圖4A所示的算術(shù)邏輯單元的更詳細(xì)方框圖;
圖7是圖4A所示類型的示范性像素標(biāo)繪電路的更詳細(xì)方框圖;
圖8A是示出標(biāo)繪控制器接收的輸入信號和標(biāo)繪控制器產(chǎn)生的輸出信號的方框圖;
圖8B是像素標(biāo)繪電路的彩色矩陣中的彩色矩陣單元;
圖8C描述有關(guān)像素標(biāo)繪電路的定時(shí)、控制和數(shù)據(jù)信號;
圖9是圖4A所示的RAM控制器的更詳細(xì)方框圖;
圖9A示出有關(guān)圖9所示的RAM控制器的示范性定時(shí)、控制和數(shù)據(jù)信號;
圖10是圖9所示的仲裁邏輯的電路圖;
圖11是本發(fā)明圖形協(xié)處理器的示范性實(shí)施例中的再同步電路圖;
圖12是有關(guān)圖11的再同步電路的定時(shí)信號;
圖13是本發(fā)明圖形協(xié)處理器的ROM控制器的更詳細(xì)的方框圖;
圖14是根據(jù)本發(fā)明示范性實(shí)施例的圖形協(xié)處理器的超高速緩存控制器的方框圖;
圖15A是本發(fā)明圖形協(xié)處理器中與指令譯碼有關(guān)的電路的方框圖;
圖15B示出說明圖15A中的先行邏輯的工作用的示范性定時(shí)信號;
圖16和17是示出根據(jù)本發(fā)明示范性實(shí)施例的圖形協(xié)處理器的寄存器控制邏輯的方框圖;
圖18是敘述在完成多邊形生成任務(wù)中圖形協(xié)處理器的操作程序的流程圖;
圖19、20和21是用來說明按照本發(fā)明示范性實(shí)施例可以生成的基于多邊形的目標(biāo)的縮放和旋轉(zhuǎn)特征的示范性顯示。
根據(jù)本發(fā)明的示范性實(shí)施例,本發(fā)明的圖形協(xié)處理器與任天堂(美國)股份有限公司在市場銷售的商品名為超級任天堂娛樂系統(tǒng)(SuperNES)的16位電視游戲系統(tǒng)交互作用。該超級任天堂娛樂系統(tǒng)在1991年4月10日提交的申請?zhí)枮?7/651,265的題為“視頻處理裝置”的專利申請和1991年8月26日提交的申請?zhí)枮?7/749,530的題為“存儲(chǔ)器直接存取裝置和其所使用的外部存儲(chǔ)設(shè)備”中得到部分的說明。這些申請通過引用而明顯地歸并在本申請中。應(yīng)該理解本發(fā)明不僅僅限于與SuperNES有關(guān)的應(yīng)用,還可以用于別的電視游戲系統(tǒng)或別的非電視游戲用的信息處理系統(tǒng)。
僅為了引用的方便,根據(jù)本示范性實(shí)施例的圖形處理器在此之后稱為“Mario芯片(MarioChip)”。目前較佳的示范性實(shí)施例中所述的Mario芯片封裝在電視游戲卡中。應(yīng)該理解只要Mario芯片在使用時(shí)與程序存儲(chǔ)器和主處理單元連接,將Mario芯片與程序存儲(chǔ)器置于相同卡盒內(nèi)并不是本發(fā)明所必須的。
圖1示出根據(jù)本發(fā)明示范性實(shí)施例的示范性電視游戲卡/外部存儲(chǔ)系統(tǒng)。該游戲卡具有其上安裝有圖1全部元件的印刷電路板(圖上未畫出)。該卡具有排列在印刷電路板插入端的接插件電極陣列1以將信號傳送到或傳送出SuperNES主控制臺(tái)。接插件電極陣列1由安裝在SuperNES主控制臺(tái)內(nèi)的相配的接插件容納。
根據(jù)本示范性實(shí)施例,配備在游戲卡上的Mario芯片(圖形協(xié)處理器)2是100至128插腳的集成電路芯片。Mario芯片接收許多從主處理系統(tǒng)(例如SuperNES)來的控制、地址和數(shù)據(jù)信號。例如,Mario芯片由插腳P112接收來自主處理系統(tǒng)的21MHz時(shí)鐘輸入,經(jīng)插腳P117接收可以為21MHz(或另一預(yù)定頻率)的系統(tǒng)時(shí)鐘輸入。該系統(tǒng)時(shí)鐘輸入例如可用來向Mario芯片提供用于主CPU存儲(chǔ)器存取的存儲(chǔ)器定時(shí)信息和提供為Mario芯片內(nèi)的操作定時(shí)的時(shí)鐘信息。Mario芯片2還包括可選配的外部時(shí)鐘輸入(插腳P110),將Mario芯片與外部晶振4連接起來,以比從主系統(tǒng)接收的21MHz更高的時(shí)鐘頻率驅(qū)動(dòng)MarioCPU。
主CPU的地址輸入(HA)從主處理系統(tǒng)(例如SuperNES/圖像處理單元PPU)的地址總線經(jīng)插腳P37至插腳P62連接到Mario芯片2。來自主系統(tǒng)的數(shù)據(jù)輸入(HD)類似地從主CPU數(shù)據(jù)總線經(jīng)插腳P65-P72連接到Mario芯片2。另外Mario芯片2經(jīng)P119從主CPU接收存儲(chǔ)器更新信號RFSH,經(jīng)插腳P118接收復(fù)位信號,經(jīng)插腳P104、P105接收讀出和寫入控制信號。該Mario芯片可產(chǎn)生中斷請求信號IRQ并將該信號IRQ經(jīng)插腳P120連接到SuperNES。也可從SuperNES接受其它控制信號,例如經(jīng)插腳P106接收可起動(dòng)對主程序ROM10訪問的ROMSEL信號。另外該游戲卡擁有與SuperNES的認(rèn)證處理器在輸入線I、輸出線O和復(fù)位線R交換數(shù)據(jù)的認(rèn)證處理器3。用來認(rèn)證游戲卡的認(rèn)證處理器3和安全系統(tǒng)可以為美國專利USP4,799,635示出的那種,該專利通過引用而歸并于此。
Mario芯片經(jīng)RAM地址總線(RAMA)、及RAM地址插腳P74-P91和RAM數(shù)據(jù)總線(RAMD)及數(shù)據(jù)插腳P93-P100與RAM6和RAM8連接。這些RAM可以是利用分別經(jīng)插腳P90-P91連接的行地址和列地址選通信號(RAS,CAS)進(jìn)行部分控制的動(dòng)態(tài)存儲(chǔ)器件??刹捎靡粋€(gè)或多個(gè)靜態(tài)RAM來取代動(dòng)態(tài)RAM,這時(shí)插腳P90和P91將被用來在沒有行地址和列地址選通信號的情況下,將地址信號連接到它們各自的RAM。允許寫入控制信號WE可經(jīng)插腳P107相應(yīng)地送到RAM6和RAM8。
讀、寫控制信號(R,W)由主CPU產(chǎn)生并經(jīng)插腳P104和P105與Mario芯片連接。Mario芯片通過監(jiān)測這些讀出和寫入線能夠確定SuperNESCPU所要執(zhí)行的存儲(chǔ)器存取操作的種類。實(shí)質(zhì)上來自主機(jī)的所有地址線和控制線都類似地由Mario芯片監(jiān)測,以掌握主CPU所要進(jìn)行的操作。由Mario芯片接收的ROM和RAM尋址信號受到監(jiān)測,并將它們送到相應(yīng)的存儲(chǔ)裝置。在這方面,ROM地址經(jīng)ROM地址總線和插腳P2至P26與程序ROM10相連,而RAM地址經(jīng)插腳P74至P91與RAM6和RAM8相連。從主CPU出來的ROM和RAM數(shù)據(jù)輸入分別經(jīng)ROM數(shù)據(jù)總線和插腳P28-P35送到ROM10和經(jīng)RAM數(shù)據(jù)總線和插腳P93至P100與送到RAM6和RAM8。
應(yīng)該認(rèn)識到Mario芯片除了與這里所述的ROM和RAM外還可以與較寬度范圍的不同存儲(chǔ)設(shè)備結(jié)合一起使用。例如可以期待Mario芯片與采用CDROM的電視游戲系統(tǒng)便利地結(jié)合一起使用。
例如在圖1中不是采用ROM10,而是使用CDROM(未圖示)來存儲(chǔ)字符數(shù)據(jù),程序指令,圖像、圖形和聲音數(shù)據(jù)。將一種常規(guī)類型的CD機(jī)座(也未圖示)與Mario芯片2合適地連接起來,通過地址總線P2-P26為存取數(shù)據(jù)接收存儲(chǔ)器地址信號和/或通過數(shù)據(jù)總線P28-P35接收指令。至于CD機(jī)座和CDROM存儲(chǔ)系統(tǒng)具體的結(jié)構(gòu)和操作細(xì)節(jié)是本技術(shù)領(lǐng)域的技術(shù)人員眾所周知的。CDROM存儲(chǔ)帶來的優(yōu)點(diǎn)在于使每字節(jié)信息的存儲(chǔ)成本顯著地降低。存儲(chǔ)數(shù)據(jù)的成本可以比存儲(chǔ)在半導(dǎo)體ROM上低百分之一百到一千。不幸的是CDROM存儲(chǔ)器存取/讀出時(shí)間比半導(dǎo)體ROM的還長。
Mario芯片采用在至少三條總線上的信息允許并行利用的三總線結(jié)構(gòu)。在這方面,在圖1所示的游戲卡中,Mario芯片同ROM總線(包括ROM數(shù)據(jù)線、ROM地址線和控制線),RAM總線(包括RAM地址線、數(shù)據(jù)線和控制線)和主處理器總線(包括主機(jī)地址線、數(shù)據(jù)線和控制線)相連。
Mario芯片結(jié)構(gòu)允許發(fā)生流水線操作以優(yōu)化吞吐量。在這方面,Mario芯片可以在從ROM讀取一個(gè)數(shù)據(jù)字節(jié)時(shí),同時(shí)處理其它數(shù)據(jù),還同時(shí)向RAM寫入另外的數(shù)據(jù),因而能非常有效地處理有關(guān)3-D型的圖形。如下面進(jìn)一步說明的那樣,Mario芯片2內(nèi)部采用16位結(jié)構(gòu),還設(shè)計(jì)為與8位的ROM10和RAM6、RAM8等芯片接口。在內(nèi)部,所有的內(nèi)部數(shù)據(jù)總線和內(nèi)部寄存器均為16位。從ROM10讀出和寫入RAM6、RAM8均被“緩沖”并且一般不會(huì)放慢程序執(zhí)行。
類似地,Mario芯片2可以從CDROM存取指令和圖形數(shù)據(jù)并將該信息寫入RAM6、RAM8以便以后通過DMA(存儲(chǔ)器直接存取方法)轉(zhuǎn)送到主處理器(例如SuperNES的圖像處理單元PPU)的圖像RAM中。本技術(shù)領(lǐng)域的技術(shù)人員會(huì)理解可以對Mario芯片2進(jìn)行編程繞過RAM的存儲(chǔ)和存取操作而協(xié)調(diào)從CDROM直接轉(zhuǎn)送數(shù)據(jù)給PPU的圖像RAM。
盡管CDROM的讀出存取時(shí)間較長,但Mario芯片2極快的處理速度使CDROM存儲(chǔ)可實(shí)際用于圖形應(yīng)用。視頻和音頻數(shù)據(jù)在存儲(chǔ)于CDROM上之前采用常規(guī)的數(shù)據(jù)壓縮技術(shù)進(jìn)行壓縮。數(shù)據(jù)壓擴(kuò)技術(shù)對本領(lǐng)域技術(shù)人員是眾所周知的。在從CDROM取出壓縮的數(shù)據(jù)之后,Mario芯片2運(yùn)用常規(guī)的數(shù)據(jù)解除壓縮算法使數(shù)據(jù)擴(kuò)展所需時(shí)間比常規(guī)圖形處理器所能達(dá)到的短得多。Mario芯片2用21MHz時(shí)鐘信號進(jìn)行工作,故而Mario芯片2可在規(guī)定期間內(nèi)完成擴(kuò)展以轉(zhuǎn)送給RAM6、RAM8。
這樣有大量的視頻和音頻數(shù)據(jù)(以壓縮形式)在典型的CDROM存取周期內(nèi)存取。由于在Mario芯片2進(jìn)行數(shù)據(jù)擴(kuò)展后,每數(shù)據(jù)字節(jié)的實(shí)際存取時(shí)間顯著地減小,因而使其相對長的存取時(shí)間的影響減至最小。在Mario芯片2執(zhí)行擴(kuò)展的同時(shí),主圖形處理例如SuperNESPPU可自由地進(jìn)行其他處理任務(wù)。當(dāng)然,對于某一特殊應(yīng)用,如果速度不成為其問題,Mario芯片2可以以不壓縮的形式從CDROM存取數(shù)據(jù)。
當(dāng)使用靜態(tài)RAM時(shí)該游戲卡還可以包括一后備電池。后備電池12經(jīng)電阻R連接到后備電池電路14以在電源失效時(shí)提供靜態(tài)RAM的后備電壓(VSRAM)和靜態(tài)RAM芯片選擇信號RAMCS以保全數(shù)據(jù)。
另外,在選配項(xiàng)設(shè)定電阻16與RAM地址總線連接。在平常操作中,Mario芯片地址線輸出到RAM6和RAM8。然而在復(fù)位或加電操作期間,這些地址線根據(jù)它們是連在預(yù)定的電壓Vcc還是接地而用作輸入線以產(chǎn)生高或者低信號。在這種方式下,“1”或“0”合適地讀進(jìn)內(nèi)部的Mario芯片寄存器。在復(fù)位后,Mario芯片(在執(zhí)行程序期間)根據(jù)這些電阻的置值,例如可確定與Mario芯片關(guān)聯(lián)的乘法器時(shí)鐘頻率、RAM的存取時(shí)間、要用于Mario芯片內(nèi)的其他操作的時(shí)鐘頻率等。Mario芯片通過利用這些選配項(xiàng)設(shè)定電阻,例如,無需對Mario芯片的設(shè)計(jì)作任何改動(dòng),就可適合同若干不同類型的存儲(chǔ)設(shè)備一起使用。例如,如果檢測出動(dòng)態(tài)RAM置值就要在各相應(yīng)時(shí)刻加上更新信號。另外,可選配設(shè)定可以用來控制例如處理器乘法器電路的運(yùn)行速度,和允許圖形處理器以比所能執(zhí)行某些乘法指令還快的速率執(zhí)行到的指令。這樣,通過啟動(dòng)延遲的乘法操作,能以比其它方法可用的頻率更快的時(shí)鐘頻率運(yùn)行余下的指令(例如處理器時(shí)鐘為30MHz,而可選配設(shè)定會(huì)有效地以15MHz來執(zhí)行乘法指令)。
圖2是設(shè)計(jì)為與圖1中示出的示范性游戲卡相連的示范性主電視游戲系統(tǒng)的方框圖。圖2可以代表例如由美國任天堂目前銷售的SuperNES。但本發(fā)明不限于與SuperNES有關(guān)的應(yīng)用或具有圖2所示的這種方框圖的系統(tǒng)。
該SuperNES在控制臺(tái)20內(nèi)包括例如可以是65816兼容型微處理器的16位主CPU。CPU22與例如可以包括存儲(chǔ)容量128K字節(jié)的工作RAM32相連。CPU22與圖像處理單元(PPU)24相連,PPU又與例如可包括存儲(chǔ)容量32K字的圖像RAM30相連。CPU22在垂直或水平回掃消隱間隔期間經(jīng)PPU24對圖像RAM進(jìn)行存取。這樣,CPU22只能在PPU24對圖像RAM存取在進(jìn)行線掃描期間以外的時(shí)間通過PPU24對圖像RAM30進(jìn)行存取。PPU24從圖像RAM30產(chǎn)生在用戶電視36上的圖像顯示。CPU還與連接到工作RAM28上的音頻處理單元相連??梢园ㄊ惺鄣囊繇懶酒趦?nèi)的APU26產(chǎn)生與存儲(chǔ)在游戲卡上的ROM10內(nèi)的電視游戲程序相關(guān)的聲音。CPU22只能經(jīng)APU26對工作RAM28進(jìn)行存取。PPU24和APU26經(jīng)射頻調(diào)制器單元34與用戶家用電視36連接。
SuperNES中的圖像RAM30必須裝載存儲(chǔ)在游戲卡中的程序ROM10(它不僅存儲(chǔ)游戲程序,還存儲(chǔ)玩游戲時(shí)所用到的字符數(shù)據(jù))內(nèi)的合適的字符數(shù)據(jù)。任何活動(dòng)目標(biāo),譬如所要顯示的子畫面信息、或背景信息在使用前必須存入圖像RAM30內(nèi)。該程序ROM10經(jīng)與圖1中示出的印刷電路板邊緣接插件相連的相配的接插件18由CPU22存取。PPU經(jīng)共用的主CPU數(shù)據(jù)總線、地址總線和接頭23與游戲卡連接以提供讓PPU數(shù)據(jù)和控制信號與游戲卡相連的通路。APU26經(jīng)共用的主CPU總線和音頻總線27與游戲卡連接。
CPU22地址空間的分配,是使得程序ROM10存儲(chǔ)單元從位置0開始并一般分成32K字節(jié)的各個(gè)區(qū)段。程序ROM使用近一半的CPU地址空間。每個(gè)CPU地址空間32K字節(jié)區(qū)段的頂端位置一般用來對工作RAM32和各種寄存器編址。程序ROM10一般是4兆字節(jié)。用在SuperNES中的CPU22能夠?qū)Τ绦騌OM10的全體進(jìn)行尋址。另一方面,Mario芯片2只包括一16位程序計(jì)數(shù)器,因而還包括用以選擇程序ROM10中的32K字節(jié)存儲(chǔ)區(qū)的存儲(chǔ)區(qū)寄存器。
在本示范性實(shí)施例中,Mario芯片具有與SuperNES存儲(chǔ)器分配圖相對應(yīng)的全24位地址空間。在從位置$00∶8000開始的位置上含有ROM10,而游戲卡上的RAM芯片6、8則從位置$70∶0000開始。
既然游戲卡上的ROM10和RAM6,RAM8連在分開的總線上,他們就能由Mario芯片并行存取。而且對RAM6,RAM8的存取頻率比對ROM快,Mario芯片就是設(shè)計(jì)成利用這性能優(yōu)點(diǎn)的。Mario芯片無法對SuperNES中的任何存儲(chǔ)器進(jìn)行存取,即無法對工作RAM32或PPU圖像RAM30存取。
為使Mario芯片處理數(shù)據(jù)或繪入位映像中,數(shù)據(jù)必須存放在該Mario芯片的RAM芯片6、8內(nèi)。這樣,在NESCPU程序和馬里奧芯片程序間共用的任何變量一定要在Mario芯片的RAM芯片6、8內(nèi)。Mario芯片需要用的任何預(yù)先存儲(chǔ)的數(shù)據(jù)可以在ROM10中,任何變量則在RAM6、RAM8中。
僅僅是SuperNES所需要的任何專用變量無需放在游戲卡RAM6、RAM8中。事實(shí)上,RAM6、8的存儲(chǔ)空間很寶貴,所以最好將最優(yōu)先需要的內(nèi)容分配給RAM6、RAM8。任何非必需的變量應(yīng)該存儲(chǔ)在SuperNES的內(nèi)部RAM32中。
Mario芯片寫入的位映像是Mario游戲卡RAM6、RAM8中,并當(dāng)每一幀位映像已被全部提供時(shí),在SuperNES的控制下,通過DMA轉(zhuǎn)送到PPU的圖像RAM30中。
SuperNES的CPU22對SuperNES控制臺(tái)內(nèi)的所有內(nèi)部RAM進(jìn)行存取,就象沒有Mario芯片。Mario芯片無法對這RAM進(jìn)行存取,故而必須由CPU本身引入MarioROM/RAM芯片和內(nèi)部SuperNESRAM間轉(zhuǎn)送的所有數(shù)據(jù)。通過CPU22編程就可傳送數(shù)據(jù),或通過DMA傳送來移動(dòng)數(shù)據(jù)塊。對于所有的游戲程序,Mario卡ROM10和RAM6、RAM8都以慣用的方式映入。
CPU22控制哪一個(gè)CPU可臨時(shí)對游戲卡ROM和RAM芯片進(jìn)行存取。在加電或復(fù)位的情況下,Mario芯片被關(guān)斷,完全由CPU22對游戲卡ROM和RAM芯片進(jìn)行存取。為使Mario芯片運(yùn)行程序,有必要使CPU22程序放棄對ROM或RAM芯片,最好是對兩者的存取,而等待Mario芯片完成其所交給的任務(wù),或者CPU22可將某一程序復(fù)制進(jìn)內(nèi)部的工作RAM32并在那兒執(zhí)行它。
Mario芯片有若干可從SuperNESCPU側(cè)編程和讀出的寄存器。這些均被映入從位置$00∶3000開始的CPU22存儲(chǔ)器分配圖。
如圖2所示,SuperNES產(chǎn)生和接收種種控制信號。當(dāng)SuperNESCPU22需對程序ROM10進(jìn)行存取時(shí),它產(chǎn)生一控制信號ROMSEL。要開始存儲(chǔ)器更新,該SuperNES產(chǎn)生一更新信號RFSH。當(dāng)Mario結(jié)束某一操作時(shí),它發(fā)送一中斷信號到與SuperNESCPU相聯(lián)的中斷請求線上。CPU22另外還產(chǎn)生讀出和寫入信號。
系統(tǒng)定時(shí)信號是從控制臺(tái)20中的定時(shí)連鎖電路21產(chǎn)生出的。加電/復(fù)位信號也是在主控制臺(tái)20中產(chǎn)生并送到游戲卡。
SuperNES還包括認(rèn)證處理設(shè)備25,它按照上面提到的美國專利USP4,799,635同游戲卡上的認(rèn)證處理設(shè)備3在輸入線I、輸出線O和復(fù)位線R上交換數(shù)據(jù)。美國專利USP4,799,635指出,該處理設(shè)備25使CPU22處于復(fù)位狀態(tài)直到認(rèn)證被證實(shí)。
在圖2中用方框形式表示的SuperNES電視游戲機(jī)在此只是總體上的描述。有關(guān)包括PPU24在內(nèi)的SuperNES的進(jìn)一步細(xì)節(jié),例如可以在1991年4月10日申請的申請順序號為07/651,265的題為“視頻處理裝置”的美國專利申請中找到,該申請通過引用而明顯地歸并在本申請中。諸如SuperNES和游戲卡之間的信息如何傳送之類的再進(jìn)一步細(xì)節(jié)可以在1991年8月26日申請的申請順序號為07/749,530的題為“圖像處理系統(tǒng)中的存儲(chǔ)器直接存取裝置和其所使用的外部存儲(chǔ)設(shè)備”的美國專利申請和1991年11月19日申請的申請順序號為07/793,735的題為“鑲嵌圖像顯示裝置及所用的外部存儲(chǔ)單元”的美國專利申請中找到,這些申請?jiān)诖艘枚鴼w并在本申請中。
本申請發(fā)明人認(rèn)識到在一些應(yīng)用中,需要利用這種主處理器DMA電路在垂直回掃消隱期間傳送的信息比實(shí)際可能傳送的多。因而即使會(huì)導(dǎo)致畫面尺寸略有收縮,還是希望延長垂直回掃消隱時(shí)間。通過采用這一方法,在處理速度和畫面更新頻率方面就體現(xiàn)出顯著的優(yōu)點(diǎn)。
圖3示出容納圖1所示的Mario芯片和游戲卡上其它結(jié)構(gòu)的游戲卡盒的示范性機(jī)械外觀設(shè)計(jì)的透視圖。圖3類似地示出容納圖2示出的SuperNES電視游戲硬件的電視游戲控制臺(tái)20的示范性外部機(jī)座的透視圖。這類電視游戲控制臺(tái)20和相關(guān)的可卸下的游戲卡19示于1991年8月23日申請的申請順序號為07/748,938題為“TV游戲機(jī)”的美國專利申請的圖2-9中,該申請?jiān)诖艘枚鴼w并在本申請中。
圖4A和4B是示于圖1中的Mario芯片2的方框圖。首先集中看示于圖4A和4B中的各種總線,指令總線INSTR是將指令代碼送到各種Mario芯片元件的8位總線。X、Y和Z總線是16位數(shù)據(jù)總線。HA總線是24位的主系統(tǒng)地址總線,在目前較佳實(shí)施例中,使用時(shí)與SuperNES的地址總線相連。HD總線是使用時(shí)與SuperNES的數(shù)據(jù)總線相連的8位的主系統(tǒng)數(shù)據(jù)總線。PC總線是將Mario芯片程序計(jì)數(shù)器(即通用寄存器塊76中的寄存器R15)的輸出送給各種系統(tǒng)元件的16位總線。ROMA總線是20位ROM地址總線。ROMD總線是8位ROM數(shù)據(jù)總線。RAM總線是16位RAM地址總線。RAMDIN總線是8位RAM讀出數(shù)據(jù)總線,RAMDOUT總線是8位寫入數(shù)據(jù)總線。
Mario芯片和SuperNES共用游戲卡RAM6、RAM8,起到在Mario芯片和SuperNES之間傳遞數(shù)據(jù)的主要機(jī)能。SuperNES給地址總線HA和數(shù)據(jù)總線HD對Mario芯片進(jìn)行存取。Mario芯片的寄存器76由SuperNES經(jīng)SuperNES的地址總線HA進(jìn)行存取。
SuperNES經(jīng)Mario芯片2對游戲卡上程序ROM10和RAM6、RAM8存取。ROM控制器104和RAM控制器88接收到由SuperNES產(chǎn)生的有關(guān)存儲(chǔ)器存取的信號,就分別起到ROM和RAM的存儲(chǔ)器存取。順便解釋一下,RAM選擇信號RAMCS被Mario芯片用來確認(rèn)SuperNES正要對該RAM尋址。
示于圖4A和4B中的X、Y和Z總線是內(nèi)部的Mario芯片數(shù)據(jù)總線。X和Y總線是源數(shù)據(jù)總線而Z數(shù)據(jù)總線則是目的總線。這些總線載送16位并行數(shù)據(jù)。
當(dāng)執(zhí)行指令時(shí),Mario芯片2可以將指令用的源數(shù)據(jù)放在X和/或Y總線上面結(jié)果數(shù)據(jù)放在Z總線上。例如,在執(zhí)行將兩寄存器的內(nèi)容相加并將結(jié)果放在第三寄存器的指令時(shí),算術(shù)邏輯單元(ALU)50經(jīng)X和Y總線接收到兩個(gè)源寄存器的內(nèi)容并將結(jié)果送到Z總線(轉(zhuǎn)而送到塊76中的指定寄存器)。由Mario芯片2的指令譯碼電路60對指令操作碼譯碼得出的控制信號被送到ALU50起動(dòng)加法(ADD)操作。
正如針對圖1說明所注解的那樣,與Mario芯片相連接的ROM總線、RAM總線和SuperNES主機(jī)總線能并行地進(jìn)行信號通訊。Mario芯片2監(jiān)視經(jīng)過主機(jī)SuperNES總線轉(zhuǎn)輸?shù)目刂啤⒌刂泛蛿?shù)據(jù)信號以確定主系統(tǒng)正在執(zhí)行的操作。根據(jù)任何給定的時(shí)刻正在執(zhí)行的SuperNES操作可以并行地對游戲卡ROM總線和游戲卡RAM總線進(jìn)行存取。在通常的SuperNES游戲卡中,主機(jī)CPU的地址線和數(shù)據(jù)線直接與ROM和RAM相連,這樣RAM和ROM就不能被并行地存取。
根據(jù)本發(fā)明的一個(gè)方面,Mario芯片2使圖1中所示的ROM總線和RAM總線與SuperNES總線在物理上分開。Mario芯片2監(jiān)視在SuperNES總線上傳輸?shù)男盘枺⒋_定什么信號需經(jīng)不是分時(shí)的兩條分開的ROM總線和RAM總線送到ROM芯片和RAM芯片。通過分開ROM總線RAM總線,Mario芯片能同時(shí)從ROM讀出和向RAM寫入。在這種方式下,Mario芯片可以用便宜的其存取時(shí)間比RAM存取時(shí)間慢得多的ROM芯片有效地工作而無需等到ROM存取結(jié)束后才對RAM存取。
回到圖4A,Mario芯片如前面所注明的那樣,是全編程處理器并包括ALU50。除了乘法操作由乘法器64執(zhí)行和某些像素標(biāo)繪操作由標(biāo)繪硬件52執(zhí)行外,ALU50執(zhí)行Mario芯片中所配備的所有算術(shù)功能。一收到出自指令譯碼器60的合適控制信號,ALU50就執(zhí)行加法、減法、異或、移位和其他操作。如圖4A所示,ALU50從X、Y總線上接收所要操作的信號,執(zhí)行從指令譯碼器60收到的控制信號所起動(dòng)的操作,并將該操作的結(jié)果送到Z總線。下面將結(jié)合附圖6進(jìn)一步詳細(xì)地說明ALU。
Mario芯片2另外包括專用硬件以便有效執(zhí)行3-D型特殊效果和其他圖形操作,使運(yùn)用這些性能的電視游戲可以實(shí)現(xiàn)。在這方面,Mario芯片2包括標(biāo)繪硬件52,它輔助將對像素坐標(biāo)的編址實(shí)時(shí)地變換成SuperNES所采用的那種對字符映像的編址。好處是可以通過指定定義各像素在顯示屏上的位置的X和Y坐標(biāo)來對Mario芯片進(jìn)行編程。
這樣,圖形操作是根據(jù)程序員指定像素來執(zhí)行的,標(biāo)繪硬件電路52在掃描時(shí)將各像素指定值變換成正確格式化的字符數(shù)據(jù)。該字符數(shù)據(jù)隨后映入示于圖2中的SuperNES圖像RAM30中供顯示用的符合要求的地方。在這種方式下,Mario芯片程序員只需將SuperNES的圖像RAM30看作位映像,而實(shí)際上它是字符映像。
該標(biāo)繪硬件52響應(yīng)種種有關(guān)標(biāo)繪的指令,允許對一特定像素在顯示屏上的X和Y坐標(biāo)和預(yù)定彩色進(jìn)行可編程的選擇,和標(biāo)繪相對應(yīng)的像素使X和Y坐標(biāo)變換成與具有用來驅(qū)動(dòng)SuperNES圖像RAM30的形式的字符定義相對應(yīng)的地址。
標(biāo)繪硬件52具有相關(guān)的數(shù)據(jù)鎖存器,允許在寫到游戲卡RAM前緩沖盡可能多的像素?cái)?shù)據(jù),以使RAM數(shù)據(jù)事務(wù)盡量減少。在X和Y坐標(biāo)數(shù)據(jù)在標(biāo)繪硬件52中變換和緩沖之后,字符定義數(shù)據(jù)隨后傳送到游戲卡RAM。
該標(biāo)繪硬件52分別經(jīng)PLOTX寄存器56和PLOTY寄存器58接收X、Y坐標(biāo)數(shù)據(jù)。在目前較佳實(shí)施例中,PLOTX和PLOTY寄存器不是分開的寄存器(如圖4A所示)而是Mario芯片通用寄存器(即示于圖4B中的寄存器塊76中的寄存器R1和R2)。
該標(biāo)繪硬件52還經(jīng)彩色寄存器54接收像素彩色信息。如下面將會(huì)進(jìn)一步說明的那樣,所顯示的各像素的彩色存儲(chǔ)在8×8寄存器矩陣中,每個(gè)像素的彩色說明占據(jù)該矩陣的一列。
標(biāo)繪硬件52處理字符號地址和與X、Y和色彩輸入有關(guān)的數(shù)據(jù)并將它們送到字符RAM6、RAM8。字符地址經(jīng)輸出線53送到RAM控制器88和RAM地址總線RAMA。字符數(shù)據(jù)經(jīng)輸出線55、多路轉(zhuǎn)換器93和RAM數(shù)據(jù)總線RAMDDUT送到字符RAM。該標(biāo)繪硬件52在與SuperNES字符格式保持兼容的同時(shí)允許字符中的像素單獨(dú)地編址,以藉此提供給程序員一“虛擬的”位映像顯示系統(tǒng)?!疤摂M的”位映像保存在游戲卡RAM中并在每幀顯示結(jié)束時(shí)利用例如上面提到的申請順序號為07/749,530的美國專利申請中的DMA電路傳送到SuperNES的圖像RAM30。該標(biāo)繪硬件52能高速控制單個(gè)像素,使涉及到旋轉(zhuǎn)和縮放目標(biāo)的某些3-D型圖形效果得以實(shí)現(xiàn)。
由于要把像素格式變換成字符格式,標(biāo)繪硬件52還經(jīng)RAMDIN和數(shù)據(jù)鎖存器82和輸入線83從卡RAM6、RAM8接收與當(dāng)前像素X、Y附近的其他像素有關(guān)的信息。通過使用從RAM6、RAM8檢索出的和暫時(shí)存儲(chǔ)在RAM數(shù)據(jù)鎖存器中的以前的像素?cái)?shù)據(jù),可以使對RAM的寫入次數(shù)降為最小。示于圖4A中的RAM數(shù)據(jù)鎖存器80、84和86還用來緩沖收到的關(guān)于某一像素的彩色數(shù)據(jù)(它們已存儲(chǔ)于游戲卡RAM內(nèi)的多重位平面中),以將這些數(shù)據(jù)提供給標(biāo)繪硬件52。
RAM數(shù)據(jù)鎖存器80與SuperNES數(shù)據(jù)總線相連因而SuperNES能讀出該數(shù)據(jù)鎖存器的內(nèi)容。RAM數(shù)據(jù)鎖存器80、82和86由RAM控制器88控制。RAM數(shù)據(jù)鎖存器84和86用來接收來自RAM6、RAM8的數(shù)據(jù)并將來自RAM6、RAM8的數(shù)據(jù)送到目的端總線Z以便于裝載進(jìn)寄存器塊76中的預(yù)定寄存器。另外與RAM控制器88相連的鎖存器90是緩沖RAM地址的。RAM控制器88利用存儲(chǔ)在鎖存器90中的地址經(jīng)RAMA總線對RAM6、RAM8尋址。RAM控制器88還可以由SuperNES經(jīng)地址總線HA進(jìn)行存取。
標(biāo)繪硬件52還響應(yīng)讀出像素(READPIXEL)指令,它讀取寄存器R1的內(nèi)容所定義的水平位置和寄存器R2的內(nèi)容所定義的垂直位置上的像素的彩色信息,并經(jīng)目的端總線Z和輸出線87將結(jié)果存儲(chǔ)在寄存器塊76中的預(yù)定寄存器中。將結(jié)合圖7、8A和8B和說明對PLOT硬件52作進(jìn)一步說明。
流水線緩沖寄存器62和ALU控制指令譯碼器60與指令總線INSTR相連以產(chǎn)生控制信號(應(yīng)用于整個(gè)Mario芯片)來起動(dòng)與置于指令總線的命令相應(yīng)的操作。Mario芯片2是在其執(zhí)行當(dāng)前指令的同時(shí)就讀取所要執(zhí)行的下一個(gè)指令的流水線微處理器。流水線寄存器62存儲(chǔ)所要執(zhí)行的下一個(gè)指令,使得如果可能的話就在一個(gè)周期中執(zhí)行各指令。置于指令總線上的指令是按存儲(chǔ)于寄存器(例如可以是示于圖4B的寄存器塊76中的寄存器R15)中的程序計(jì)數(shù)器的內(nèi)容尋址的。
由Mario芯片2執(zhí)行的指令可以從示于圖1中的程序ROM10或Mario芯片的內(nèi)部超高速緩存器RAM94得到,或從游戲卡RAM6、RAM8得到。如果正從ROM10執(zhí)行程序,ROM控制器104(示于圖4B中)將讀取指令并將它置于Mario芯片指令總線INSTR。如果程序指令是存儲(chǔ)在超高速緩存RAM94中,則指令會(huì)經(jīng)超高速緩存RAM輸出總線95直接從超高速緩存輸出置于指令總線上。
對主CPU(即SuperNES)的編程,是使程序ROM10部分分配給Mario芯片程序指令。SuperNES程序命令Mario芯片執(zhí)行一規(guī)定的功能,然后將存取Mario芯片程序代碼的ROM10中的地址提供給Mario芯片。流水線寄存器62讀取正執(zhí)行著的指令的下一字節(jié)指令,以將有關(guān)指令的信息提供給指令譯碼器60,使譯碼器能在程序執(zhí)行當(dāng)中先行了解即將發(fā)生的事件來預(yù)期有關(guān)處理。部件60中的譯碼和控制電路產(chǎn)生命令A(yù)LU50、標(biāo)繪硬件52、超高速緩存控制裝置68等的控制信號,以完成由正執(zhí)行著的指令代碼所指示的操作。
Mario芯片還包括一個(gè)同ALU50分開的高速、并行乘法器64。乘法器64響應(yīng)規(guī)定的指令操作使從X和Y源端總線接收到的兩個(gè)8位數(shù)相乘并將16位結(jié)果裝上目的端總線Z。如果可能該乘法操作在一個(gè)周期內(nèi)完成。輸入到乘法器64的兩個(gè)數(shù)可以帶符號或不帶符號。乘法器還能完成長字乘法操作,使兩個(gè)16位數(shù)相乘而產(chǎn)生一個(gè)32位的結(jié)果。乘法器還包括相關(guān)聯(lián)的部分乘積寄存器66來存儲(chǔ)乘法操作期間產(chǎn)生的部分乘積。當(dāng)譯出一個(gè)乘法操作代碼時(shí),就由指令譯碼器60輸出的控制信號啟動(dòng)乘法器64。乘法器64將在最小4個(gè)時(shí)鐘周期內(nèi)執(zhí)行涉及16位字的乘法的長字乘法指令。
長字乘法指令具有以下格式
R4(低位字),DREG(高位字)=Sreg*R6執(zhí)行該指令就使源寄存器乘以寄存器R6的內(nèi)容并將32位結(jié)果存儲(chǔ)在寄存器R4/DREG(低/高位)。乘法是帶符號的并對32位結(jié)果設(shè)定零和符號標(biāo)志。
該操作按照以下六個(gè)步驟進(jìn)行步驟1不帶符號的乘法R4
=SREG
*R6
步驟2X帶有符號。R4
=R4
+256*SREG[8…15]*R6
。不管乘積的高8位,但保留加法的進(jìn)位。
步驟3X帶有符號。R5
=CY+(R6[8…15]*SREG
)÷256;加上符號。
步驟4X不帶符號,Y帶有符號。
R4
=R4
+256*SREG
*R6[8…15]。不管乘積的高8位,但保留加法的進(jìn)位。
步驟5Y帶有符號,R5
=R5
+CY+SREG
+R6[8…15])÷256;加上符號。
步驟6X、Y帶有符號,R5
=R5
+RY[8…15]*R6[8…15]。
用在本示范性實(shí)施例中的乘法器64例如可以是麥格勞-希爾1984年出版的由卡瓦諾著的《數(shù)字計(jì)算機(jī)算術(shù)》中所描述的那種。
參見圖4B,超高速緩存控制器68(在圖14中會(huì)進(jìn)一步詳細(xì)圖示)允許程序員有效地起動(dòng)裝載操作,將想要高速執(zhí)行的那部分程序裝入超高速緩存RAM94。這種“超高速緩存(CACHE)”通常應(yīng)用于在圖形處理中頻繁發(fā)生的小程序循環(huán)。Mario芯片指令集包括“CACHE”指令。緊接著該CACHE指令的任何指令被裝載進(jìn)超高速緩存RAM,直到超高速緩存RAM滿載為止。當(dāng)執(zhí)行CACHE指令時(shí),當(dāng)前程序計(jì)數(shù)器狀態(tài)被裝載進(jìn)超高速緩存基址寄存器70。這樣,該超高速緩存基址寄存器的內(nèi)容規(guī)定了超高速緩存開始的起始位置。
大多數(shù)指令在一個(gè)周期內(nèi)執(zhí)行。來自相對慢的外部存儲(chǔ)器象ROM10和或RAM6、8的指令必須在執(zhí)行它們之前就取出。這將花費(fèi)另外大約6個(gè)周期。為提高程序執(zhí)行速度,應(yīng)該利用在Mario芯片內(nèi)的“超高速緩存”RAM本身。
超高速緩存RAM可以是一512字節(jié)的指令超高速緩存器。這容量與平均程序的大小相比是比較小的,因而程序員必須對如何最大限定地利用超高速緩存RAM作出決定。能夠裝入512字節(jié)超高速緩存容量的任何程序循環(huán)均能以全速運(yùn)行,使讀取和執(zhí)行均在一個(gè)周期內(nèi)進(jìn)行。因?yàn)榭偩€是分開的,故而在執(zhí)行來自內(nèi)部的超高速緩存94的代碼時(shí)能同時(shí)對ROM和RAM存取。
超高速緩存RAM92可以通過在它執(zhí)行旋轉(zhuǎn)和縮放計(jì)算時(shí),在它利用PLOT指令(將在下面說明)將像素寫入RAM6、RAM8時(shí),同時(shí)運(yùn)行超高速緩存中會(huì)從ROM10讀出各像素色彩的循環(huán),來方便地使子畫面旋轉(zhuǎn)。所有這一切都是并行地發(fā)生的,盡管最慢的操作降低了速度但仍給出很快的吞吐率。最慢的操作通常是ROM數(shù)據(jù)的讀取,這就是Mario芯片為什么被設(shè)計(jì)成利用對ROM和RAM緩沖存取的原因。
與運(yùn)行來自相對慢的ROM的程序相比,運(yùn)行來自超高速緩存RAM94的程序速度可快約6倍,但它首先必須從ROM裝載到超高速緩存中。這是通過將指令置于所要超高速緩存的任何循環(huán)的起始部分來進(jìn)行的。從CACHE指令地址起,將只超高速緩存循環(huán)的前512字節(jié)。在執(zhí)行循環(huán)第一次迭代的代碼時(shí),程序就從ROM10出來并以60字節(jié)塊形式復(fù)制進(jìn)超高速緩存RAM。該循環(huán)所有進(jìn)一步迭代都將來自超高速緩存RAM而不是ROM10。
CACHE指令能隨意地用在任何重復(fù)的程序循環(huán)前面。只是循環(huán)的后續(xù)迭代能得益于其程序置在超高速緩存中。如果程序循環(huán)大于512字節(jié)并溢出超高速緩存94,它仍將正確地工作,只不過前512字節(jié)從超高速緩存94運(yùn)行而剩下的照常將從ROM10運(yùn)行。這部分地提高了速度但不夠理想。
在較佳實(shí)施例中作為超高速緩存控制器的一部分的超高速緩存標(biāo)志位寄存器72對超高速緩存RAM94中已裝載的存儲(chǔ)器位置進(jìn)行標(biāo)識。該超高速緩存標(biāo)志位允許Mario芯片迅速地判定某一程序指令是不是能從更快的超高速緩存RAM執(zhí)行而不是從程序ROM10執(zhí)行??梢杂沙咚倬彺婵刂破?8或SuperNES經(jīng)SuperNES地址總線HA經(jīng)多路轉(zhuǎn)換器96對超高速緩存RAM94進(jìn)行存取。
超高速緩存控制器68與程序計(jì)數(shù)器總線PC相連以裝載超高速緩存基址寄存器70并執(zhí)行超高速緩沖存儲(chǔ)器地址超出范圍的校驗(yàn)操作。
與從ROM10讀出可達(dá)到的并行度相似,Mario芯片還提供并行地寫入到RAM6、RAM8的途徑。不管什么時(shí)候只要Mario寄存器被寫入到RAM6、RAM8,它就起動(dòng)例如在RAM控制器88中的單獨(dú)的RAM寫入電路進(jìn)行存儲(chǔ)事務(wù)。這一般將花去6個(gè)周期,但假使程序員避免在這樣做時(shí)進(jìn)行另一個(gè)RAM的事務(wù),就不會(huì)使該處理器延遲。例如在兩個(gè)存儲(chǔ)指令之間插入別的處理就能進(jìn)行得更迅速。那樣RAM寫入電路就有時(shí)間進(jìn)行它的工作。如果連續(xù)用到兩個(gè)寫入,那么在進(jìn)行第一個(gè)寫入時(shí)第二個(gè)會(huì)使處理器延遲。
例如(使用下面將要說明的指令集中的指令)FROMR8;將R8存入(R13)SM(R13)SM(R14);將R0存入(R14)TOR1
FROMR2ADDR3;執(zhí)行:r1=r2+r3TOR4FROMR5ADDR6;執(zhí)行:r4=r5+r6注意這兩個(gè)存儲(chǔ)指令互相太接近了。由于RAM總線正忙于試圖完成第一存儲(chǔ)指令因而第二個(gè)將多花去6個(gè)周期。
運(yùn)行速度會(huì)更快的寫入代碼的較佳途徑是由其他有用的代碼間隔開這兩個(gè)存儲(chǔ)指令。例如FROMR8;將R8存入(R13)SM(R13)TOR1FROMR2ADDR3;執(zhí)行:r1=r2+r3TOR4FROMR5ADDR6;執(zhí)行:r4=r5+r6SM(R14);將R0存入(R14)在這種方式下,在第一存儲(chǔ)指令導(dǎo)致向RAM寫入的同時(shí)可并行執(zhí)行若干個(gè)指令,再在幾個(gè)周期之后進(jìn)行第二個(gè)存儲(chǔ)操作。
下面說明的指令集包括一將寄存器寫回到最后所用的RAM地址的快速指令。這通過從RAM取出值,對它進(jìn)行一些處理,隨后將它快速存回,故而允許“成批的”數(shù)據(jù)處理。
參見圖4B,一直接數(shù)據(jù)鎖存器74與指令總線相連。這一數(shù)據(jù)鎖存器允許指令本身提供數(shù)據(jù)源,這樣就不需要由指令指定源端寄存器。該直接數(shù)據(jù)鎖存器74的輸出與目的端總線Z相連。它轉(zhuǎn)而與寄存器塊76的一個(gè)規(guī)定的寄存器相連。指令譯碼電路60對“直接”數(shù)據(jù)指令譯碼并開始執(zhí)行相應(yīng)的向寄存器傳送的操作。
示于圖4B中的GETB(取字節(jié))寄存器98是與前面所述的延遲/緩沖讀出操作一起使用的。在這方面,已有技術(shù)的處理器由于廣泛地利用存取時(shí)間相對慢的ROM,只要執(zhí)行到ROM,一般就不得不等待它完成數(shù)據(jù)讀取。而利用下面說明的延遲/緩沖讀取機(jī)制,在完成數(shù)據(jù)讀取時(shí)還可執(zhí)行其他操作。按照該機(jī)制,不管以什么方法對寄存器塊76中的寄存器R14存取或修改,就自動(dòng)地在R14內(nèi)容所標(biāo)識的地址起動(dòng)對ROM或RAM的讀取。
如圖4B所示,寄存器R14與ROM控制器104相連。不論何時(shí),以任何方式修改寄存器R14的內(nèi)容,ROM控制器104就起動(dòng)對ROM的存取。對ROM存取的結(jié)果經(jīng)與ROM數(shù)據(jù)總線ROMD相連的多路轉(zhuǎn)換器裝載到GETB寄存器98中。下面列出的指令允許對在GETB寄存器98中緩沖的信息進(jìn)行存取。該信息經(jīng)多路轉(zhuǎn)換器100裝上目的端總線Z隨后進(jìn)入到寄存器塊76中的某個(gè)寄存器。
在這種方式下,若已知從ROM讀取數(shù)據(jù)要花去一定個(gè)數(shù)的處理周期,就可起動(dòng)那讀取操作并在起動(dòng)了這數(shù)據(jù)讀取之后,Mario芯片不是等著不執(zhí)行其它操作,而是能執(zhí)行例如與數(shù)據(jù)讀取無關(guān)的代碼。GETB寄存器98還可以用來存儲(chǔ)經(jīng)如圖4B所示的多路轉(zhuǎn)換器102從RAM6、RAM8檢取出的信息。
在寄存器塊76中配備有十六個(gè)16位寄存器(R0-R15)。寄存器R0-R13是通用寄存器(盡管其中某些寄存器往往用于下面所說明的專用目的)。如上所述,寄存器R14被用作為讀出存儲(chǔ)器的指針,當(dāng)被修改時(shí),就起動(dòng)從ROM(或RAM)的讀出周期。讀出的字節(jié)被存儲(chǔ)在臨時(shí)的緩沖器(GETB寄存器98)以便以后由GETL(取低字節(jié))或GETH(取高字節(jié))命令存取。寄存器R15是程序計(jì)數(shù)器。在每個(gè)指令開始執(zhí)行時(shí)它指向正要存取的下一個(gè)指令。
寄存器R0是一通用寄存器,一般用作累加器。對于大多數(shù)單個(gè)周期的指令它還是缺省的源端和目的端寄存器。例如,若想要使R0和R4的內(nèi)容相加在一起就只須明顯地指定寄存器R4。
當(dāng)執(zhí)行循環(huán)指令時(shí)就專用寄存器R11、R12和R13。寄存器R13存儲(chǔ)循環(huán)頂端所要執(zhí)行的指令的地址,而寄存器R12存儲(chǔ)循環(huán)所要執(zhí)行的次數(shù)。若寄存器R12的內(nèi)容非零,則將在R13內(nèi)容所指定的地址的指令裝到程序計(jì)數(shù)器(R15)并且執(zhí)行。寄存器R11存儲(chǔ)循環(huán)完成后所要返回的地址。
寄存器控制邏輯78與寄存器塊76相連并控制對通用寄存器R0-R15的存取。根據(jù)正要執(zhí)行的特定指令的格式,指令譯碼邏輯60將指定一個(gè)或多個(gè)寄存器R0-R15。寄存器控制邏輯78指定哪個(gè)寄存器是所要執(zhí)行的下一條指令需要利用的。寄存器控制邏輯78將相應(yīng)的寄存器輸出送到X和Y總線。另外,如圖4B所示,在寄存器控制邏輯78的控制下,相應(yīng)的寄存器R0-R15從Z總線接收信息。
ROM控制器104一旦收到來自SuperNES地址總線HA或來自Mario芯片的地址就對那地址進(jìn)行存取。ROM控制器104將在圖13中更詳細(xì)地示出。從ROM10存取的信息可以裝到超高速緩存RAM94以便快速地執(zhí)行指令。ROM控制器104和RAM控制器108都具有在SuperNES的和Mario芯片的存取要求間進(jìn)行仲裁的總線仲裁單元。
如后面會(huì)進(jìn)一步說明的那樣,Mario芯片還利用狀態(tài)寄存器(例如在寄存器塊76中或在RAM6、RAM8中),這些寄存器可由SuperNESCPU存取,可存儲(chǔ)用于標(biāo)識狀態(tài)條件的標(biāo)志,例如0標(biāo)志、進(jìn)位標(biāo)志、正負(fù)符號標(biāo)志、溢出標(biāo)志、“運(yùn)行(GO)”標(biāo)志(1表示Mario芯片正在運(yùn)行而0表示Mario芯片停止運(yùn)行);ROM字節(jié)讀取正在進(jìn)行標(biāo)志(表示寄存器R14被存取過);各種方式指示標(biāo)志包括ALT1標(biāo)志、ALT2標(biāo)志、直接低字節(jié)和直接高字節(jié)標(biāo)志,和指示源寄存器和目的寄存器已由“WITH”前綴命令設(shè)定過的標(biāo)志,和中斷標(biāo)志。
以圖4A和圖4B中的方框圖形式表示的Mario芯片由SuperNES調(diào)用,使Mario芯片每秒鐘多次接通和關(guān)斷來執(zhí)行任務(wù)。起初當(dāng)SuperNES開啟時(shí),存儲(chǔ)在ROM10中游戲程序被引導(dǎo)。注意在由SuperNES處理器和Mario芯片處理器執(zhí)行游戲程序之前,游戲卡首先被認(rèn)證。順便解釋一下,按照美國專利USP4,799,635指出的方法,可先將SuperNESCPU置于復(fù)位狀態(tài),執(zhí)行與游戲卡和SuperNES主控制臺(tái)相關(guān)聯(lián)的認(rèn)證處理器的認(rèn)證程序來進(jìn)行這類認(rèn)證。
Mario芯片一開始處于關(guān)斷狀態(tài)。在這一時(shí)刻,SuperNES可不受限制地對游戲卡程序ROM和游戲卡RAM存取。當(dāng)SuperNES需要利用Mario芯片的處理能力來執(zhí)行圖形操作或數(shù)學(xué)運(yùn)算時(shí),SuperNES在游戲卡RAM(或在規(guī)定的Mario寄存器)中存儲(chǔ)它需要Mario芯片處理的相應(yīng)的數(shù)據(jù),并將所要執(zhí)行的Mario程序的地址裝入Mario芯片的程序計(jì)數(shù)器。要由Mario芯片處理的數(shù)據(jù)可以是必須旋轉(zhuǎn)和放大或縮小的目標(biāo)的規(guī)定的X、Y坐標(biāo)數(shù)據(jù)。Mario芯片能執(zhí)行會(huì)實(shí)施算法來控制具有不同個(gè)數(shù)的子畫面或活動(dòng)目標(biāo)的背景和前景的程序。利用Mario芯片的提高速度的增強(qiáng)硬件和軟件,可使這些操作獲得高速性能。
應(yīng)用Mario芯片來處理子畫面能相當(dāng)大地?cái)U(kuò)展整個(gè)電視游戲系統(tǒng)的能力。例如,SuperNES每幀只限顯示128個(gè)子畫面。隨著運(yùn)用SuperMario芯片實(shí)際上可顯示數(shù)百個(gè)子畫面,并例如使它們旋轉(zhuǎn)。
當(dāng)Mario芯片完成了由SuperNES所請求的功能,就執(zhí)行STOP指令,產(chǎn)生一中斷信號并傳輸?shù)絊uperNES以表明Mario芯片已完成了它的操作-這轉(zhuǎn)而表明了它已準(zhǔn)備好執(zhí)行下一個(gè)任務(wù)。
Mario芯片可用于執(zhí)行諸如高速乘法運(yùn)算這類小任務(wù)或可用于畫一幅滿是子畫面的畫面。在任何一種情況下,只要SuperNES在RAM或ROM總線正由Mario芯片使用的時(shí)候不去占用這些總線,SuperNES可自由地與Mario芯片并行地進(jìn)行處理。注意即使SuperNES交給Mario芯片對游戲卡上的RAM和ROM總線的控制,SuperNES還是可以執(zhí)行從示于圖2中的其工作RAM32出來的程序。這樣,通過將所要執(zhí)行的SuperNES程序從程序ROM復(fù)制到它的工作RAM,而與此同時(shí)由Mario芯片執(zhí)行程序,整個(gè)系統(tǒng)的吞吐量就可得到提高。
示于圖5中的流程圖表示出為起動(dòng)Mario芯片從ROM在所要求的地址處讀取并執(zhí)行代碼而由主CPU(例如SuperNESCPU)所執(zhí)行的“運(yùn)行Mario(RUNMARIO)”程序的操作順序。由圖5代表的例行程序一般是在將該程序從程序ROM10復(fù)制到示于圖2中的工作RAM32之后由SuperNESCPU執(zhí)行。每當(dāng)要Mario芯片進(jìn)行操作時(shí),就由主CPU執(zhí)行這例行程序。
如方框125所示,當(dāng)執(zhí)行主CPU例行程序RUNMARIO時(shí),首先完成包括保留SuperNES寄存器在內(nèi)的初始化操作。在初始化步驟期間,該例行程序從程序ROM10復(fù)制到主CPU的工作RAM32中。
如方框127所示,存儲(chǔ)著所要執(zhí)行的Mario程序代碼的ROM10代碼存儲(chǔ)區(qū)被裝進(jìn)Mario芯片的某一寄存器。另外如方框129所示,在代碼存儲(chǔ)區(qū)中的實(shí)際地址被存儲(chǔ)在Mario芯片的屏面基址寄存器中。
此后,如方框131所示,通過指明將使用4種、16種還是256種彩色方式來設(shè)定I/O輸入/輸出方式。這些方式對應(yīng)于主CPU所運(yùn)行的彩色方式。另外還設(shè)定按可顯示字符的個(gè)數(shù)來限定屏面高度的方式。 另外還設(shè)定將對ROM和RAM總線的控制交給Mario芯片的方式位。對ROM和RAM總線的控制可分開選定,因而Mario芯片可設(shè)定為它對ROM總線、對RAM總線或?qū)烧哌M(jìn)行存取的方式。若對ROM和RAM均設(shè)定“Mario占用(Marioowner)”方式,則主CPU就不能從ROM或RAM讀出或向ROM或RAM寫入。注意若主CPU試圖在Mario芯片正使用程序ROM總線時(shí)對程序ROM存取,Mario芯片有一種向SuperNES返回偽地址的機(jī)能。向該地址的轉(zhuǎn)移會(huì)使SuperNES一直被占有直到Mario芯片不再需要對游戲卡ROM總線進(jìn)行存取。
如方框133所示,在Mario芯片的程序計(jì)數(shù)器裝上存儲(chǔ)著Mario程序必須執(zhí)行的第一條指令的地址之后Mario芯片開始運(yùn)行。
主CPU然后等待從Mario芯片來的中斷信號(方框135)。當(dāng)接收到一中斷信號,SuperNES被告知Mario芯片已完成了它的運(yùn)行并已停止(方框137)。如果未收到這類中斷信號,則主CPU繼續(xù)等待中斷(方框135)。在這一期間,SuperNES可以通過執(zhí)行出自示于圖2中的其工作RAM32的程序而與Mario芯片的運(yùn)行相并行地執(zhí)行程序代碼。
SuperNES隨后檢驗(yàn)狀態(tài)寄存器(例如在Mario芯片寄存器塊76中)以確定表明Mario芯片正在運(yùn)行的Mario芯片的“GO”標(biāo)志是否已設(shè)定(137)。另外,Mario芯片的狀態(tài)寄存器中的中斷標(biāo)志被設(shè)定以表明Mario芯片是主CPU所收到的中斷信號的源。這樣,在主CPU接收到中斷信號之后(135),對相應(yīng)的Mario狀態(tài)寄存器檢測以確定Mario芯片是否是中斷源(相對于例如是表明垂直回掃消隱間隔的中斷信號)。若Mario芯片已停止運(yùn)行(137),則清除對于RAM和ROM的Mario占用方式位,完全由SuperNES對ROM和RAM進(jìn)行存取。SuperNES從該例行程序(141)退出并返回在進(jìn)入RUNMario程序前它所執(zhí)行的程序點(diǎn)。
當(dāng)CPU22游戲程序使Mario芯片進(jìn)入ROMMario占用方式,它必須主動(dòng)地停止對ROM的存取。任何時(shí)候只要CPU22因某些原因需對ROM存取,它就簡單地關(guān)閉ROMMario占用方式。當(dāng)Mario芯片再一次需要對ROM存取時(shí),Mario芯片會(huì)自動(dòng)地在那里等待,直到ROMMario占用方式再一次還給它。若它運(yùn)行來自內(nèi)部超高速緩存RAM的程序就可完全不需要這樣做。
若Mario芯片處于對于ROM的Mario占用方式,CPU22游戲程序不要試圖從ROM讀出任何東西是重要的。當(dāng)發(fā)生某個(gè)中斷是,例如因垂直回掃消隱,它引起不可屏蔽中斷(NMI),CPU22就自動(dòng)地試圖從ROM讀取它的中斷向量。這是不希望的,因?yàn)镃PU已明確地告知Mario芯片它會(huì)避開ROM,而后來發(fā)生中斷,它還是要從ROM讀取。在這種情況,即盡管處于Mario占用方式,但CPU22仍要對ROM存取的情況下,就會(huì)使Mario芯片假設(shè)這是中斷向量請求。
在ROMMario占用方式下,讀取中斷向量期間,Mario芯片將把中斷向量重新定位到SuperNES的內(nèi)部工作RAM32中棧區(qū)的底部。例如,如果通常中斷向量是$00ffec它就JUMP(轉(zhuǎn)移)至位置$00010c。類似地所有來自$00ffeX的中斷向量都使CPU22JUMP到它們相應(yīng)的位置$00010X。這項(xiàng)技術(shù)在CPU22不該對ROM10存取時(shí)避免它存取ROM10,而是把它轉(zhuǎn)移到SuperNES的機(jī)載RAM32中。注意基于RAM的中斷向量必須含有向中斷處理程序的轉(zhuǎn)移或分支轉(zhuǎn)移。即那里應(yīng)該存有實(shí)際代碼而不僅僅是向量地址。當(dāng)Mario芯片不處于Mario占用ROM的方式時(shí),則仍使用平常的ROM中斷向量,因而最好繼續(xù)在這些位置指向相同的地址,以運(yùn)行到與基于RAM的中斷向量相同的地方。
指令集Mario芯片指令集為對高速圖形和其他處理算法的編程提供了有效的手段。下面對某些指令作簡明的說明之后,對不同指令所使用的某些寄存器作出說明。還包括指令集中的指令進(jìn)行詳細(xì)的羅列。
指令是8位指令,一般在一個(gè)時(shí)鐘周期內(nèi)執(zhí)行。但這些指令可由8位前綴指令改動(dòng)。Mario芯片指令集包括一獨(dú)特的寄存器優(yōu)先代用系統(tǒng),允許程序員在任何指令之前指定目的端寄存器和兩個(gè)源端寄存器。沒有這些“前綴”的優(yōu)先代用,指令將只在累加器上運(yùn)行。這樣該指令集是具有無數(shù)組合的可變字長的指令集。這里有一些一個(gè)字節(jié)長、在一個(gè)周期內(nèi)運(yùn)行的基本指令。通過加上前綴指令,程序員就能擴(kuò)展這些指令的作用。指令可視程序員的需要為8、16或24位。
Mario處理器利用指令啟動(dòng)執(zhí)行高速的、機(jī)載超高速緩存RAM的程序和對存儲(chǔ)器延遲/緩沖的I/O。利用單周期的像素標(biāo)繪命令,啟動(dòng)采用上述像素標(biāo)繪硬件的操作,就能有效地進(jìn)行圖形處理。
在列出Mario指令集之前,先在下面說明由處理器在執(zhí)行指令時(shí)設(shè)定或存取的各種存儲(chǔ)器變換的寄存器。首先列出狀態(tài)標(biāo)志寄存器。狀態(tài)寄存器是16位寄存器,下面標(biāo)明與該寄存器中16位的各位相關(guān)的標(biāo)志。
狀態(tài)標(biāo)志寄存器16位位標(biāo)志0-備用1z零標(biāo)志2c進(jìn)位標(biāo)志3s符號標(biāo)志
4v溢出標(biāo)志([位14向位15進(jìn)位]XOR[位15向進(jìn)位位進(jìn)位])5g運(yùn)行標(biāo)志:1Mario芯片運(yùn)行0停止6r(R14)ROM字節(jié)讀取正在進(jìn)行7-備用“GO”標(biāo)志(位5)設(shè)定為“1”狀態(tài)就表明Mario芯片正在運(yùn)行,而設(shè)定為“0”狀態(tài)就表明Mario芯片已停止運(yùn)行(其結(jié)果是產(chǎn)生一中斷信號送到SuperNES)。該標(biāo)志位由SuperNES處理器檢驗(yàn)。位6是設(shè)定來表明當(dāng)前正在進(jìn)行ROM字節(jié)的讀取。列在下面的取(GET)字節(jié)指令要等該標(biāo)志清零表明已完成數(shù)據(jù)讀取后才得以執(zhí)行。狀態(tài)寄存器的這些最低有效位可以獨(dú)立地或與余下的8位一起由Mario芯片處理器或主CPU讀出。狀態(tài)標(biāo)志寄存器的最高有效位由規(guī)定的前綴指令設(shè)定,定義指令解釋的各種方式。
位方式8alt1變更(ADD→ADC,SUB→SBC等…)9alt2變更(ADD→ADD#,SUB→SUB#等…)10il立即字節(jié)低位(在ih前進(jìn)行)11ih立即字節(jié)高位(緩沖低位字節(jié)直到高位字節(jié)就緒)12b設(shè)定SReg和DReg,由WITH設(shè)定13-備用14-備用15irq中斷標(biāo)志在如上所述的ALT1方式時(shí),ADD(加法)指令會(huì)解釋為ADDWITHCARRY(帶進(jìn)位加法)指令,而SUBTRACT(減法)指令會(huì)解釋為SUBTRACTWITHCARRY(帶進(jìn)位減法)指令。指令A(yù)LT1起動(dòng)該方式。
ALT2指令將對ADD指令的解釋變更為ADDWITHIMMEDIATEDATA(用立即數(shù)據(jù)的加法),而對SUBTRACT則變更為SUBTRACTIMMEDIATEDATA(減去立即數(shù)據(jù))。“立即”數(shù)據(jù)是緊接著指令以字節(jié)給出的。注意指令A(yù)LT3會(huì)把位8和位9都設(shè)定為邏輯“1”電平。位10和位11根據(jù)該立即數(shù)據(jù)是立即高位字節(jié)還是立即低位字節(jié)來設(shè)定。狀態(tài)寄存器的位12定義“b”方式,這里通過利用前綴指令“WITH”設(shè)定源端寄存器和目的端寄存器。狀態(tài)寄存器的位15存儲(chǔ)有在Mario芯片已停止運(yùn)行之后設(shè)定的Mario中斷信號。
除了上述的狀態(tài)寄存器以外,Mario芯片還包括許多寄存器。如上所述,Mario芯片包括16個(gè)如圖4A和4B的寄存器塊76的說明中所描述的16位寬的寄存器。這些寄存器大多數(shù)是通過用寄存器并能用作數(shù)據(jù)和地址的存儲(chǔ)。但是如上面所注明的,寄存器R15在所有時(shí)候卻總是用作程序計(jì)數(shù)器。一般來說寄存器起兩方面作用,用于同主CPU通信和控制執(zhí)行程序。另外Mario芯片還采用其他寄存器,其功能在下表中給出。
寄存器專用功能r0缺省的DReg和SRegr1PLOT指令用的X坐標(biāo)r2PLOT指令用的Y坐標(biāo)r3無r4LMULT指令結(jié)果的低位字r5無r6FRMULT和LMULT指令用的乘數(shù)字r7MERGE(合并)指令用的源1r8MERGE(合并)指令用的源2r9無
r10無r11用于子程序調(diào)用的連接寄存器r12用于LOOP(循環(huán))指令的計(jì)數(shù)r13LOOP指令分支轉(zhuǎn)移的地址r14ROM地址,一經(jīng)改動(dòng)就開始從ROM讀取字節(jié)r15程序計(jì)數(shù)器其他寄存器8位PCBANK程序代碼存儲(chǔ)區(qū)寄存器8位ROMBANK程序數(shù)據(jù)ROM存儲(chǔ)區(qū)寄存器64K存儲(chǔ)區(qū)8位RAMBANK程序數(shù)據(jù)RAM存儲(chǔ)區(qū)寄存器64K存儲(chǔ)區(qū)16位SCB屏面基址8位NBP位平面數(shù)8位SCS屏面列尺寸選擇256、320、512、640、1024、1280(屏面16和20個(gè)字符高,在2、4和8個(gè)位平面中)Mario芯片還包括一彩色方式CMODE寄存器。在該寄存器中有4位在例示性實(shí)施例中用以產(chǎn)生下面所述的特殊效果。通過設(shè)定CMODE寄存器所建立的效果,如下面例子中所闡明的那樣,是按照所設(shè)定的是16還是256彩色分辨率方式而有所不同。
CMODE寄存器各位如下CMODE位0標(biāo)繪彩色0位(非透明位)在16彩色方式時(shí)
若位0=1和所選擇的彩色半字節(jié)=0則不作標(biāo)繪在256彩色方式且位3=0時(shí)若位0=1和彩色字節(jié)=0則不作標(biāo)繪在256彩色方式且位3=1時(shí)若位0=1和彩色低半字節(jié)=0則不作標(biāo)繪注意透明性有效ON=0透明性無效OFF=1透明性O(shè)FF的唯一用途是將一區(qū)域填以0(用來清屏)CMODE位1晃動(dòng)位在16彩色方式時(shí)晃動(dòng)(高/低半字節(jié)給出兩種彩色)若(xposXORyposAND1)=0選擇低半字節(jié)若(xposXORyposAND1)=1選擇高半字節(jié)若透明性有效且所選擇的彩色半字節(jié)為0則不作標(biāo)繪在256色方式時(shí)晃動(dòng)應(yīng)當(dāng)沒有效果CMODE位2高半字節(jié)彩色位在16彩色方式或在256彩色方式且CMODE位3被置位時(shí)當(dāng)本位被置位,COLOUR命令將彩色寄存器的低半字節(jié)設(shè)定為源字節(jié)的高半字節(jié)(用來析取作為另一子畫面的高半字節(jié)存儲(chǔ)的16彩色的子畫面)若彩色寄存器的低半字節(jié)為0則在透明性有效時(shí)不作標(biāo)繪。
CMODE位3復(fù)雜位僅用于256彩色方式。該位被置位時(shí),彩色高半字節(jié)就被鎖,COLOUR命令只改變低半字節(jié)。
僅從低半字節(jié)計(jì)算透明性。
在標(biāo)準(zhǔn)的256彩色方式,如果透明性有效,它是從所有位計(jì)算出的;16彩色方式例ibtr0,$C0colour;置彩色$C0ibtr0,%0000;置0cmodeibtr0,$97colourplot;標(biāo)繪彩色$7ibtr0,$30colourplot;不作標(biāo)繪,因?yàn)椴噬珵?0;(透明性有效且低半字節(jié)=0)ibtr0,%0001;置位1cmodeibtr0,$40colourplot;標(biāo)繪彩色$0;(透明性無效)stop;16彩色方式且置位2的例
ibtr0,$C0colour;置彩色$C0;256彩色方式且置位3的例ibtr0,$C0colour;置彩色$C0ibtr0,%1000;置位3cmodeibtr0,$47colourplot;標(biāo)繪彩色$C7ibtr0,$50colourplot;不作標(biāo)繪,因彩色為$C0;(透明性有效且低半字節(jié)=0)ibtr0,%1001;置位3和位1cmodeibtr0,$60colourplot;標(biāo)繪彩色$C0;(透明性無效)stop;256彩色方式且置位3和位2的例ibtr0,$C0colour;置彩色$C0ibtr0,%1100;置位3和位2
cmodeibtr0,$74colourplot;標(biāo)繪彩色$C7ibtr0,$03colourplot;不作標(biāo)繪,因彩色為$C0;(透明性有效且低半字節(jié)=0)ibtr0,%1101;置位3、位2和位1cmodeibtr0$08colourplot;標(biāo)繪彩色$C0;(透明性無效)stop許多Mario芯片寄存器與特殊功能有關(guān)聯(lián)。如上表中所表明的,若不另外指定,系統(tǒng)就將寄存器R0缺省為某一特殊指令所需的目的端寄存器或源端寄存器。寄存器R0還可用于ALU的累加器。如上所述乘法指令返回一個(gè)32位的結(jié)果。最低有效的16位存儲(chǔ)在寄存器R4中。而寄存器R6則結(jié)合有符號帶小數(shù)的乘法指令(FRMULT)和長字節(jié)乘法指令(LMULT)一起被采用。
寄存器R7和R8用于執(zhí)行合并指令。該指令取用兩個(gè)規(guī)定的寄存器(即寄存器R7、R8)并將它們合并在一起以形成子畫面的座標(biāo)數(shù)據(jù)。這種座標(biāo)數(shù)據(jù)是用于對ROM表尋址以便將規(guī)定的子畫面映像在規(guī)定的多邊形上。這指令通過組合兩寄存器的部分來定義包含在要映像在多邊形上的子畫面中的下一個(gè)像素的彩色的地址,從而有助于有效地執(zhí)行質(zhì)地映像操作。
寄存器R11和R13是用來控制子程序執(zhí)行的。寄存器R11用作子程序調(diào)用的連接寄存器并存儲(chǔ)程序計(jì)數(shù)器的內(nèi)容加1。寄存器11的內(nèi)容定義循環(huán)結(jié)束后須存取的地址。寄存器R12用來存儲(chǔ)規(guī)定所要執(zhí)行的循環(huán)次數(shù)的計(jì)數(shù)。循環(huán)的地址則存儲(chǔ)在寄存器R13中。
如上所述,只要寄存器R14的內(nèi)容被修改,就從ROM在寄存器R14中所存儲(chǔ)的地址處讀出一字節(jié)。在這種方式下,可結(jié)合下面提到的GET字節(jié)指令實(shí)現(xiàn)延遲或緩沖的READ操作。
回到上表中的“其他寄存器(OtherRegistors)”,程序從其開始執(zhí)行的程序ROM位置是采用24位地址進(jìn)行編址。該地址最低有效的16位在程序計(jì)數(shù)器中得到。而確定程序存儲(chǔ)區(qū)的最高有效位則存儲(chǔ)在程序代碼存儲(chǔ)區(qū)(PCBank)寄存器。
ROM存儲(chǔ)區(qū)寄存器(ROMBANK)存儲(chǔ)最高有效位,以允許Mario芯片處理器取得存儲(chǔ)在ROM10中的程序數(shù)據(jù),這些最高有效位是被附加存儲(chǔ)在寄存器R14中的16位ROM地址上。類似地,RAM存儲(chǔ)區(qū)寄存器(RAMBANK)存儲(chǔ)高階地址位以允許Mario芯片處理器存取RAM中的程序數(shù)據(jù)。為有效地?cái)U(kuò)展Mario處理器的尋址范圍,可將RAM和ROM的存儲(chǔ)區(qū)寄存器的內(nèi)容與Mario芯片的ROM和RAM存取指令一起運(yùn)用。
屏面基址寄存器(SCB)被用來存儲(chǔ)正被建立、旋轉(zhuǎn)、放大或縮小的子畫面或目標(biāo)的虛擬位映像的地址。執(zhí)行PLOT像素指令時(shí),屏面基址寄存器SCB存儲(chǔ)RAM中被存取和被寫入的地址。
寄存器NBP被用來存儲(chǔ)正在使用的位平面數(shù)。它一般表明利用2、4或8個(gè)位平面。另外,屏面列向尺寸寄存器SCS被用來按照每列中所包含的字符數(shù)確定關(guān)于虛擬的位映像的信息。
下面列出的Mario芯片指令集說明指令的助記符和在對相應(yīng)的指令譯碼時(shí)所執(zhí)行的相應(yīng)的功能。首先在下面對不是不言自明的有關(guān)指令的某些功能提出簡要的評述。
STOP指令是在Mario芯片已完成其操作時(shí)執(zhí)行的,并用以置“GO”標(biāo)志為零,同時(shí)還產(chǎn)生中斷信號給主CPU。
CACHE指令用以定義要復(fù)制到Mario芯片超高速緩存RAM中并從該RAM執(zhí)行的那部分程序ROM。執(zhí)行CACHE指令時(shí),程序計(jì)數(shù)器的內(nèi)容被裝到超高速緩存基址寄存器并使下面要說明的超高速緩存標(biāo)記復(fù)位。
Mario芯片包括一系列延遲的分支轉(zhuǎn)移指令,其中接著該轉(zhuǎn)移的指令如下表所示的那樣執(zhí)行。轉(zhuǎn)移去的地址是相對于程序計(jì)數(shù)器的內(nèi)容的。指令集包括許多種基于下表中所列出條件的延遲轉(zhuǎn)移。
Mario芯片包括許多“前綴”指令,即至/由/自(to/with/from)。這些前綴指令涉及后續(xù)指令的數(shù)據(jù)往來。例如“T0”前綴為下一指令設(shè)定目的端寄存器(DReg)。“FROM”前綴為下一指令設(shè)定源端寄存器。而“WITH”前綴則兩者都設(shè)定。
許多指令在操作碼中指定第二源寄存器。若沒有前綴指令設(shè)定SReg和DReg它們就被缺省為R0。在不是前綴指令的各個(gè)指令后,SReg和DReg兩者均設(shè)定為R0。若Dreg被設(shè)定為R15(程序計(jì)數(shù)器),因而使下一指令在R15中存儲(chǔ)其內(nèi)容時(shí),就會(huì)起動(dòng)延遲一周期的轉(zhuǎn)移。
其它前綴指令在狀態(tài)寄存器的高字節(jié)中設(shè)定標(biāo)志以改變后續(xù)指令的操作。所有無前綴指令都使?fàn)顟B(tài)字的高字節(jié)清零。下面是有關(guān)后續(xù)指令可以怎樣通過前綴指令被修改的例子。
lsr;r0=r0向右移1位tor4lsr;r4=r0向右移1位fromr4lsr;r0=r4向右移1位
altlfromr6tor5addr7;r5=r6+r7+進(jìn)位altlwithr3addr3;r3=r3+r3+進(jìn)位(6502rol)若在狀態(tài)寄存器中量上“b”標(biāo)志,“TO”指令就修改為象操作“MOVE”(賦值)指令一樣,TO指令確定信息傳送去的寄存器而FROM指令則確定信息源。
STW指令在緩沖器中存儲(chǔ)一特別的字,這樣就無須一直等到完成存儲(chǔ)操作后才執(zhí)行后邊的指令。在這種方式下,采用比處理器慢的RAM并不一定會(huì)使處理器速度減慢。
LOOP指令的執(zhí)行將使得通用寄存器R12內(nèi)容遞減1。若R12的內(nèi)容非零,則開始向R13中所確定的地址轉(zhuǎn)移。
Alt1、Alt2和Alt3是設(shè)置狀態(tài)寄存器中上面提到的標(biāo)志以按下表中所示的不同的方式解釋所執(zhí)行的指令的前綴指令。
PLOT指令標(biāo)識所要標(biāo)繪的像素的X和Y屏面坐標(biāo),并在與X與Y坐標(biāo)(如寄存器R1和R2中所表示的)相對應(yīng)的屏面位置上標(biāo)繪由COLOR指令所確定的彩色。PLOT像素指令包括使R1內(nèi)容的自動(dòng)遞增,以有助于高速標(biāo)繪水平線而免除一額外的遞增指令。
若Alt1標(biāo)志被置位則標(biāo)繪指令被解釋為READPIXEL(讀出像素)指令(RPIX)。通過執(zhí)行讀出像素指令,在指定屏面位置上的像素彩色被讀出,它還可用來將不想要的像素信息從標(biāo)繪硬件沖掉。
讀出像素指令RPIX實(shí)質(zhì)上是反過來運(yùn)用標(biāo)繪硬件,從字符的矩陣讀出以確定在指令中所指定的某一特定像素的顏色。COLOR指令向彩色硬件提供可由指定的源端寄存器的內(nèi)容確定的下一個(gè)像素的彩色。
“CMODE”指令設(shè)定彩色方式并能用于產(chǎn)生如上面提供的例中所展示的不同特殊效果。例如,利用CMODE指令可使交替的像素以不同彩色交替變化,形成濃淡變化,從而產(chǎn)生晃動(dòng)效果。該CMODE指令還能用來控制透明性從而使子畫面的顯示會(huì)勾劃出背景顯示。通過設(shè)定如上例子的有關(guān)彩色方式的標(biāo)志來確定透明性。
指令集還包括在旋轉(zhuǎn)多邊形的計(jì)算中用來確定所要顯示的目標(biāo)的梯度或斜率的小數(shù)帶符號乘法。
遞增指令若與寄存器R14一起使用就會(huì)起動(dòng)從ROM的讀出。GETC指令會(huì)從ROM取出所存取的字節(jié)并將裝入彩色寄存器中。
下表說明按照目前較佳實(shí)施例的例示性Mario芯片的指令集(包括上面已討論過的那些指令)。
指令集十六進(jìn)制代碼助記符功能$00STOP使Mario芯片停止運(yùn)行并產(chǎn)生65816IRQg=0$01NOP不操作1周期$02CACHE將超高速緩存基址置為PC并且使超高速緩存標(biāo)志復(fù)位(只要PC不等于當(dāng)前超高速緩存基址)若超高速緩存基址<>r15則超高速緩存基址=r15,使超高速緩存標(biāo)志復(fù)位$03LSR邏輯右移DReg=SRegLSR1$04ROL帶進(jìn)位循環(huán)左移DReg=SRegROL1$05nnBRAsbyte總是作延遲轉(zhuǎn)移r15=r15+帶符號字節(jié)偏移
$06nnBGEsbyte若大于或等于則延遲轉(zhuǎn)移若(sXORv)=1則r15=r15+帶符號字節(jié)偏移$07nnBLTsbyte若小于則延遲轉(zhuǎn)移若(sXORv)=0則r=15=r15+帶符號字節(jié)偏移$08nnBEQsbyte若等于則延遲轉(zhuǎn)移若z=1則r15=r15+帶符號字節(jié)偏移$09nnBNEsbyte若不等于則延遲轉(zhuǎn)移若z=0則r15=r15+帶符號字節(jié)偏移$0annBPLsbyte若為正則延遲轉(zhuǎn)移若s=0則r15=r15+帶符號字節(jié)偏移$0bnnBMIsbyte若為負(fù)則延遲轉(zhuǎn)移若s=1則r15=r15+帶符號字節(jié)偏移$0cnnBCCsbyte若進(jìn)位清零則延遲轉(zhuǎn)移若c=0則r15=r15+帶符號字節(jié)偏移$0dnnBCSsbyte若進(jìn)位置位則延遲轉(zhuǎn)移若c=1則r15=r15+帶符號字節(jié)偏移$0ennBCCsbyte若溢出清零則延遲轉(zhuǎn)移若v=0則r15=r15+帶符號字節(jié)偏移$0fnnBVCsbyte若溢出置位則延遲轉(zhuǎn)移若v=1則r15=r15+帶符號字節(jié)偏移
$10-$1fTOrO…r15(前綴)設(shè)DReg為rn(下一操作碼的目的端寄存器)DReg=rn若b:MOVErn=SReg(無標(biāo)志置位)$20-$2fWITHr0…(前綴)設(shè)DReg和SReg為rnr15(源和目的和b標(biāo)志)DReg=rnSReg=rnb=1$30-$3bSTW(rn)在rn中的地址處存儲(chǔ)SRegRAM[rn]=SReg(字低/高被緩沖)(偶數(shù)地址上的字正常存儲(chǔ))若alt1:STB(rn)在rn中的地址處存儲(chǔ)SReg的低字節(jié)RAM[rn]=SReg.1(字節(jié)被緩沖)$3c:LOOP使r12遞減1若r12<>0則延遲轉(zhuǎn)移到r13中的地址r12=r12-1若r12<>0,則r15=r13(TO/WITH/FROM不起作用)$3dALT1(前綴)標(biāo)志alt1置位alt1=1$3eALT2(前綴)標(biāo)志alt2置位alt2=1$3fALT3(前綴)標(biāo)志alt1&alt2置位alt1=1alt2=1$40-$4bLDW(rn)從rn中的地址處取出裝到DRegDReg=RAM[rn](字低/高等待)(偶數(shù)地址上的字正常裝入)
若alt1:LDB(rn)從rn中的地址處取出(無符號字節(jié))裝到DRegDReg.h=0DReg.1=RAM[rn](字節(jié)等待)$4cPLOT在r1,r2(X、Y)處標(biāo)繪像素且使r1遞增(N.B.并未檢驗(yàn)r1和r2是否在屏面上,但會(huì)在RAM的任何地方繪制)標(biāo)繪(r1,r2)r1=r1+1若alt1:RPIX讀出在r1、r2(x、y)處像素的彩色DReg=點(diǎn)(r1,r2)$4dSWAP交換字節(jié)DReg.h=SReg.lDReg.l=SReg.h$4eCOLOUR設(shè)定PLOT彩色標(biāo)繪彩色=SReg若alt1:CMODE設(shè)定PLOT彩色方式標(biāo)繪彩色方式=SReg$4fNOTDReg=對SReg取反(NOTSReg)$50-$5fADDr0…r15DReg=SReg+rn若alt1:ADCDReg=SReg+rn+c若alt2:ADDDReg=SReg+#n若alt1+alt2ADCDReg=SReg+#n+c$60-$6fSUBr0…r15DReg=SReg-rn若alt1:SBCDReg=Reg-rn-c若alt2:SUBDReg=SReg-#n若alt1+alt2CMPSReg|rn(z,s,c,v)
$70MERGE將r7和r8的高字節(jié)合并到DReg中DReg.h=r7.hDReg.l=r8.h在該結(jié)果基礎(chǔ)上設(shè)定標(biāo)志:
s=b15ORb7v=b14ORb6ORsc=b13ORb5ORvz=b12ORb4ORc$71-$7fANDr1…r15DReg=SRegANDrn若alt1:BICDReg=SRegANDNOTrn若alt2:ANDDReg=SRegAND#n若alt1+alt2:BICDReg=SRegANDNOT#n$80-$8fMULTr0…DReg=SReg*Rn(帶符號的8×8r15位)若alt1:UMULTDReg=SReg*Rn(不帶符號的8×8位)若alt2:MULTDReg=SReg*#n(帶符號的8×8位)若alt1+alt2:UMULTDReg=SReg*#n(不帶符號的8×8位)$90SBK將SReg存到上一次使用的RAM地址$91-$94LINK1…4將返回地址連接到r11r11=r15+1…4$95SEX符號從低字節(jié)擴(kuò)展到字DReg.[b15-b7]=SReg.[b7]DReg.1=SReg.1$96ASR算術(shù)右移DReg=SRegASR1
若alt1:DIV2除以2(帶舍入)DReg=SRegASR1若DReg=-1則DReg=0$97ROR帶進(jìn)位循環(huán)右移DReg=SRegROR1$98-$9dJMPr8…r13轉(zhuǎn)移到rn中的地址r15=rn(延遲轉(zhuǎn)移)ifalt1:LJMP長轉(zhuǎn)移到rn中的地址(ROMBank來自SReg)并使超高速緩存復(fù)位r15=rn(延遲轉(zhuǎn)移)程序ROM存儲(chǔ)區(qū)寄存器=SReg$9eLOB低字節(jié)DReg.h=0DReg.l=SReg.l$9fFMULT小數(shù)帶符號乘法DReg=(SReg*r6).hw(帶符號的16×16位乘法)c=(SReg*r6).b15若alt1:LMULT長字節(jié)帶符號乘法DReg=(SReg*r6).hw(帶符號的16×16位乘法)r4=(SReg*r6).1wc=(SReg*r6).b15
$a0-$afnnIBTr0…r15,sbyte將符號擴(kuò)展的字節(jié)裝到rn中rn=立即字節(jié)(符號擴(kuò)展的)若alt1:LMSr0…r15,byte從絕對的偏移字節(jié)地址取出裝到rn中rn=RAM[byte<<1](字?jǐn)?shù)據(jù))若alt2:SMSr0…r15,byte將rn存儲(chǔ)到絕對的偏移字節(jié)地址RAM-[byte<<
1]=rn(字?jǐn)?shù)據(jù))$b0-$bfFROMr0…r15(前綴設(shè)SReg=rnSReg=rn若b:MOVESDReg=rn(z,s&v(符號低字節(jié))標(biāo)志)$c0HIB高字節(jié)DReg.h=0DReg.l=SReg.h$Cl-$cfORr1…r15DReg=SRegORRn若alt1:XORDReg=SRegXORRn若alt2:ORDReg=SRegOR#n若alt1+alt2:XORDReg=SRegXOR#n$do-$deINCr0…r14使rn遞增rn=rn+1(TO/WITH/FROM)不起作用)$dfGETC從ROM緩沖器取出字節(jié)來標(biāo)繪彩色若alt2:RAMBRAM數(shù)據(jù)存儲(chǔ)區(qū)寄存器=SReg若alt1+alt2:ROMBROM數(shù)據(jù)存儲(chǔ)區(qū)寄存器=SReg$e0…$eeDECr0…r14使rn遞減rn=rn-1(TO/WITH/FROM不起作用)$efGETB從ROM緩沖器取出不帶符號的字節(jié)送到DRegDReg=ROM緩沖器字節(jié).零擴(kuò)展若alt1:GETBH從ROM緩沖器取出送至DReg的高字節(jié)DReg=ROM緩沖器字節(jié)。與低字節(jié)合并DReg=(SReg&
$FF)+(byte<<8)(采用WITH)若alt2:GETBL從ROM緩沖器取出送至DReg的低字節(jié)DReg=ROM緩沖器字節(jié)。與高字節(jié)合并(采用WITH)若alt1+alt2:GETBS從ROM緩沖器,取出帶符號字節(jié)送至DRegDReg=ROM緩沖器字節(jié)。符號擴(kuò)展$f0-$ffnnnnLWTr0…r15,word將立即字裝到rn中rn=立即字(經(jīng)緩沖的)
若alt1:LMr0…r15,word從絕對的字地址取出裝到rn中rn=RAM[字地址](字?jǐn)?shù)據(jù))若alt2:SMr0…r15,word將rn存到絕對的字地址圖6至圖17更為詳細(xì)地示出圖4A和圖4B中用方框圖示出的各組成部分。為更清楚地展現(xiàn)本發(fā)明的獨(dú)到特征,那些對本技術(shù)領(lǐng)域的技術(shù)人員來說是常規(guī)或顯然的,以及會(huì)使這些獨(dú)到的特征不能被清楚看到的電路細(xì)節(jié)不在下面的圖中示出。
可用作ALU單元50的例示性算術(shù)邏輯單元示于圖6。如圖4A和圖6所示ALU50與X、Y和Z總線相連。因此,Mario芯片的通用寄存器R0-R15與ALU相連。
ALU50經(jīng)16位加法器/減法器152執(zhí)行加法和減法功能,ALU50還包括常規(guī)的“AND”邏輯電路154,“OR”邏輯電路156,和EXCLUSIVEOR(異或)”邏輯電路158。
ALU還包括常規(guī)的移位功能電路,其中任何進(jìn)位位移位到最高有效位位置而結(jié)果則經(jīng)線160送到多路轉(zhuǎn)換器164。另外,ALU50執(zhí)行常規(guī)的字節(jié)交換操作,可使載于總線上的最低有效字節(jié)和最高有效字節(jié)交換,而結(jié)果則沿線162送到多路轉(zhuǎn)換器164。X和Y總線如圖6所示與電路152,154,156和158相連。
加法器/減法器152,電路154,156,158的各自輸出,移位輸出和交換功能輸出與16位、6進(jìn)1“出”的多路轉(zhuǎn)換器164相連。根據(jù)譯出的指令,向目的端總線Z輸出相應(yīng)的結(jié)果。
加法器/減法器152除了從X總線接收16位,還根據(jù)送到多路轉(zhuǎn)換器150的指令譯碼器輸入接收在總線Y送來的信息或指令本身的信息。
ALU50還包括CPU標(biāo)志發(fā)生電路166。CPU標(biāo)志電路166產(chǎn)生零,溢出,符號和進(jìn)位信號以便于裝到電路166中的至少一個(gè)標(biāo)志寄存器。CPU標(biāo)志可由指令譯碼電路60置位,該電路對指令所產(chǎn)生的進(jìn)位起動(dòng)、零起動(dòng),符號起動(dòng)和溢出起動(dòng)信號進(jìn)行譯碼,根據(jù)加法器/減法器152所確定的相應(yīng)條件來使標(biāo)志置位。還可根據(jù)輸入標(biāo)志電路166的目的端(或結(jié)果)總線Z的內(nèi)容使這些標(biāo)志置位。標(biāo)志例如可用來觸發(fā)基于較廣的條件范圍的條件轉(zhuǎn)移操作。
圖7、8A和8B更為詳細(xì)地示出圖4A中的像素標(biāo)繪電路(52、54、56和58)。該電路執(zhí)行PLOT命令,它取出某一特定的X坐標(biāo)和Y坐標(biāo),并在那些屏面坐標(biāo)處以由COLOR命令裝載的彩色寄存器54的內(nèi)容所確定的彩色標(biāo)繪像素。
SuperNES如上面所注明的那樣采用字符映像的顯示屏面。標(biāo)繪硬件用以將像素坐標(biāo)地址數(shù)據(jù)變換為字符映像的地址數(shù)據(jù)。
SuperNES的字符是定義在位平面中的。字符可有2、4或8位平面以確定4、16或256種彩色。字符定義的每個(gè)字節(jié)包括該字符的一個(gè)像素行的位平面。這些像素從左到右,從高位到低位被確定。對于256彩色方式操作,有8RAM位置需要更新。
像素標(biāo)繪電路具有一個(gè)本地緩沖機(jī)構(gòu),它包括彩色矩陣206,該矩陣可存儲(chǔ)要顯示的某一特定字節(jié)的所有各位,因?yàn)檫@些位可能最終都需要更新。位平面計(jì)數(shù)器208與彩色矩陣電路206相連。像素坐標(biāo)從X和Y總線裝載到像素X和像素Y寄存器202、204。在本例示性實(shí)施例,通用寄存器R1和R2用作圖7中示出的標(biāo)繪X寄存器202和標(biāo)繪Y寄存器。這些寄存器接收按PLOT命令規(guī)定要標(biāo)繪的像素的X和Y座標(biāo)。
標(biāo)繪X和標(biāo)繪Y寄存器202、204與基于全加器和半加器的字符地址計(jì)算電路相連,該電路按地址輸出到2位置滾桶式移位電路214,進(jìn)而與標(biāo)繪地址寄存器216和地址比較器218相連。標(biāo)繪X寄存器的三個(gè)最低有效位與多路分解器212相連進(jìn)而與位未決寄存器210相連。
示于圖8A中的標(biāo)繪控制器200接收表明已對PLOT像素(PLOT)或READ像素(RPIX)命令譯碼的信號以及下述其他控制信號。標(biāo)繪控制器200產(chǎn)生以下述方式使用的標(biāo)繪電路控制信號。
如上所述,標(biāo)繪控制電路200產(chǎn)生在像素標(biāo)繪硬件52中使用的控制信號。如圖8A所示,像素控制電路200接收從位未決寄存器210的輸出,該輸出是經(jīng)AND門201與像素控制電路200相連的。若位未決寄存器210的所有8位都被置位,就通知像素控制邏輯200可跳過讀出周期并可將彩色矩陣206的信息寫到RAM。
像素控制電路200還響應(yīng)PLOT命令起動(dòng)其操作。像素控制邏輯200也響應(yīng)READ像素命令RPIX起動(dòng)基本相同的操作,不過新信息并不寫到彩色矩陣206以輸出到RAM。如上所述,若需要知道屏面上特定像素的彩色就執(zhí)行READ像素命令,該命令也可用來將彩色矩陣206的現(xiàn)存信息沖掉。
控制器200還接收RAM完成控制信號RAMDONE,它表明已完成RAM存取。如上所述,RAM完成信號還用來使標(biāo)記彩色矩陣206的位平面的位平面計(jì)數(shù)器208遞增。標(biāo)繪控制器200還接收從地址比較器218來的PLEQ信號,這表明地址匹配無需將彩色矩陣206的內(nèi)容寫到RAM,從而表明應(yīng)繼續(xù)對當(dāng)前的彩色矩陣內(nèi)容更新。該標(biāo)繪控制器200還接收告知標(biāo)繪控制器200有關(guān)必須讀出和寫入多少字節(jié)的屏面方式(SCR.MD)控制信號。
標(biāo)繪控制電路200產(chǎn)生使彩色矩陣206的內(nèi)容在它的第二緩沖級緩沖的轉(zhuǎn)儲(chǔ)控制信號DUMP(結(jié)合圖7和圖8B一起參考)。控制器200另外產(chǎn)生使位未決寄存器清零信號CLRPND和裝載位未決寄存器控制信號LDPND并將這些信號送到位未決寄存器210。另外,控制器200產(chǎn)生與結(jié)合圖8B說明的彩色矩陣單元相關(guān)的LDPIX和BPR控制信號。
假定像素標(biāo)繪硬件未被另外占用,指令譯碼器對PLOT命令的譯碼和輸入到標(biāo)繪控制器200的PLOT信號就起動(dòng)產(chǎn)生裝載未決(寄存器)信號LDPND。LDPND信號被送到位未決寄存器210而使數(shù)據(jù)得以從多路分解器212裝到位未決寄存器210中。清未決(寄存器)信號CLRPND是響應(yīng)表明未決數(shù)據(jù)已寫到RAM去的RAM完成信號RAMDONE而產(chǎn)生的。此后位未決寄存器閑置以供下一像素標(biāo)繪信息使用。
圖8C中所示的是說明由標(biāo)繪控制器200接收的信號,各種地址和數(shù)據(jù)信號,其他有關(guān)的控制信號和標(biāo)繪控制器所產(chǎn)生的上述輸出控制信號之間的關(guān)系的時(shí)序圖。例示性的地址值、數(shù)據(jù)值等僅僅是用于說明而示出的。
標(biāo)繪硬件52如下面那樣工作。當(dāng)標(biāo)繪控制器200確定標(biāo)繪硬件52未被占用,示于圖4A中的彩色寄存器54的內(nèi)容被裝進(jìn)8×8彩色矩陣電路206的水平行。彩色矩陣206按行裝載而按列讀出。彩色寄存器54的內(nèi)容由COLOR命令更新。任何后續(xù)PLOT命令將通過彩色寄存器54這個(gè)寄存器將彩色數(shù)據(jù)裝進(jìn)彩色矩陣。
彩色矩陣中裝上彩色寄存器各位的垂直位置是由存儲(chǔ)在標(biāo)繪X寄存器202中的3位最低有效位確定的。這樣這標(biāo)繪地址的三位最低有效位就決定了彩色矩陣206中的所要更新的一行位。
位未決寄存器210是用來記錄屏面字符的分節(jié)的哪些特定位正被更新。寄存器210包括表明各位已被寫到屏面的相關(guān)部分的16個(gè)寄存器標(biāo)志。該位未決寄存器210是響應(yīng)由標(biāo)繪控制器200所產(chǎn)生的信號LDPND而被裝載的并由信號CLRPND清除。
若為更新在相同區(qū)域的屏面映像而要執(zhí)行后續(xù)的標(biāo)繪命令,一給定位的操作就與裝入到8×8彩色矩陣206的對應(yīng)于像素的附加彩色數(shù)據(jù)一同重復(fù)。另一位則利用存于標(biāo)繪X寄存器202中的標(biāo)繪地址的最低有效位置設(shè)于位未決寄存器210中。特定位是經(jīng)與標(biāo)繪X寄存器202相連的3路至8路多路分解器裝載到位未決寄存器210中。若所要更新的像素水平位置在8個(gè)像素以外,或它處在不同的垂直位置時(shí),則已寫入矩陣206的數(shù)據(jù)必須讀出到RAM6(或RAM8)此后彩色矩陣206就可自由接收新的彩色數(shù)據(jù)。在接收到要求寫到RAM的后續(xù)標(biāo)繪命令之前,彩色矩陣206的當(dāng)前內(nèi)容一直在像素標(biāo)繪硬件中例如在彩色矩陣206中被緩沖。
當(dāng)來自彩色矩陣206的數(shù)據(jù)被寫到RAM6或RAM8就通過使用示于圖7中的邏輯門,半加器和全加器進(jìn)行地址變換計(jì)算以將X、Y坐標(biāo)變換成RAM地址。實(shí)際的地址計(jì)算是按照下面給出的注釋和例示性代碼進(jìn)行的。這些計(jì)算會(huì)隨著所采用的是4、16還是256彩色方式有所不同。所給出的例示性計(jì)算是針對256彩色方式的。
這些256彩色字符具有16字節(jié)的4組,各自確定位平面對共有64字節(jié)。
位映像是通過將獨(dú)特的字符放在所需屏面區(qū)的每個(gè)位置上而建立的。當(dāng)進(jìn)行與SuperNES相關(guān)的標(biāo)繪時(shí),最好以列組織字符。
例如(128個(gè)像素高的屏面)字符號01632……11733…21824…······153147…SuperNES并不限于256個(gè)字符,故而位映像容量主要受到存儲(chǔ)器和DMA傳送時(shí)間的約束。例如Mario芯片能在128和160個(gè)像素高的屏面上標(biāo)繪。最大屏面寬度是32個(gè)字符或256個(gè)像素。
下面的算法是舉例說明如何采用按列組織的虛擬位映像控制像素標(biāo)繪。
先對所有的位平面從X坐標(biāo)的三位最低有效位計(jì)算像素掩碼。
像素號掩碼0%100000001%01000000···7%00000001接下來利用去除了低3位的Y座標(biāo)計(jì)算沿著一列的下行偏移量,以給出沿一列的字符數(shù),然后乘上字符大小。
屏面彩色以字節(jié)為單位的字符大小416163225664接下來從X座標(biāo)去除低3位計(jì)算字符到頂?shù)钠?,乘以列大小。列大小是列的字符?shù)乘以字符大小。
一般的列大小彩色字符高16204256字節(jié)320字節(jié)16512字節(jié)640字節(jié)2561024字節(jié)1280字節(jié)Y坐標(biāo)的低3位給出沿字符向下的字節(jié)偏移。所有偏移與當(dāng)前位映像指針之和給出含有像素第一位平面的字節(jié)的地址。隨后的位平面交替地從上一次平面移上1字節(jié)和移上15字節(jié)。然后,像素各位就可用像素掩碼置位或清零。各位平面的位被置位或清零呈該像素所需的存儲(chǔ)在彩色寄存器54中的彩色數(shù)中相應(yīng)位的狀態(tài)。
示范碼
;以65816代碼在4個(gè)位平面上標(biāo)繪用于我們的游戲演示;程序基本上是表驅(qū)動(dòng)的;寄存器A、X和Y是16位置彩色;取彩色并加倍ldaColouraslatax;設(shè)置位平面0和1的彩色掩碼ldamask1tab,xstamask1;設(shè)置位平面2和3的彩色掩碼ldamask2tab,xstamask2rts標(biāo)繪;取水平和垂直坐標(biāo);使兩者加倍并送到Y(jié)和Z寄存器ldaplotx1aslatay;Y是X坐標(biāo)*2ldaploty1aslatax;X是Y坐標(biāo)*2;取沿列向下的偏移ldapyoftab,x;加列偏移初值
clcadcpxoftab,y;加兩倍的緩沖器指示(選擇位映像)clcadcdrawmaptax;X是含有所需要的像素的字從位映象基址的偏移;Y是像素的X坐標(biāo)*2;作位平面0和1lda.lbitmapbase,x;取含有像素字andpbittabn,y;掩去老像素彩色stapmaskldamaskl;將彩色和像素掩碼一起掩去andpbittab,yorapmask;加入其他像素sta.lbitmapbase,x;存到位映像;作位平面2和3lda.lbitmapbase+16,xandpbittabn,ystapmaskldamask2andpbittab,yorapmasksta.lbitmapbase+16,xrts;像素位掩碼對的256字表pbittab
rept32;num_coldw$8080,$4040,$2020,$1010,$0808,$0404$0202,$0101endr;字反向的上表pbittabnrept32;num_coldw$7f7f,-$4040,-$2020,-$1010,-$808,-$404,-$202,-$101endr;對位平面0和1的彩色掩碼(彩色0至15)maskltabdw$0000,$00ff,$ff00,$ffff,$0000,$00ff,$ff00,$ffffdw$0000,$00ff,$ff00,$ffff,$0000,$00ff,$ff00,$ffff;對位平面2和3的彩色掩碼(彩色0至15)mask2tabdw$0000,$0000,$0000,$0000,$00ff,$00ff,$00ff,$00ffdw$ff00,$ff00,$ff00,$ff00,$ffff,$ffff,$ffff,$ffffcol_sizeequ.Number_char_rows*8*Number_bit_planes(16)(4);對字符列表起始位置的偏移pxoftabtemp=0
rept32;字符列數(shù)dwtemp,temp,temp,temp,temp,temp,temp,temptemp=temp+col_sizeendr;沿列表向下偏移pyoftabtemp=0rept32dwtempdwtemp+2dwtemp+4dwtemp+6dwtemp+8dwtemp+10dwtemp+12dwtemp+14temp=temp+32endr更為仔細(xì)地參看圖7,確定所要標(biāo)繪的像素位置的屏面上的X和Y坐標(biāo)被裝載到PLOTX和Y寄存器202和204(這些寄存器實(shí)質(zhì)上可以是寄存器塊76中的R1和R2寄存器)。裝入到PLOTX寄存器202的標(biāo)繪地址的3位最低有效位按指定的X和Y坐標(biāo)確定位平面字節(jié)中的哪一位將被寫入。累加器R0的內(nèi)容被裝入到由標(biāo)繪X寄存器202的最低有效位所選定的彩色矩陣206的列。
若標(biāo)繪X寄存器202是0,則定義該像素的8位的各位中將更新最低有效位。隨著標(biāo)繪X寄存器202為0,3路至8路多路分解器將使位未決寄存器中最低有效位置為邏輯“1”。
既然位未決寄存器210的相應(yīng)位表明無需作修改位未決寄存器210被RAM控制器用來表明無需從RAM寫出的間隔。
位未決寄存器210用作像素掩碼緩沖器以防止從RAM覆蓋寫入新數(shù)據(jù)。為完成這一功能,如圖7中所示,位未決寄存器210的內(nèi)容作為輸入送到彩色矩陣電路206。
若BIT_PENDING寄存器210是0,則計(jì)算像素的屏面地址,并將它裝到標(biāo)繪地址寄存器216,該字節(jié)中的像素位置用來使BIT_PENDING寄存器210中的相同位置位。若BIT_PENDING寄存器210是非零,則使BUSY標(biāo)志置位。
若新計(jì)算出的地址等于PLOT_ADDR寄存器216的內(nèi)容,則新的像素位位置在BIT_PENDING寄存器210中置位并使BUSY標(biāo)志復(fù)位。
若新地址不同于PLOT_ADDR寄存器的內(nèi)容,則采取以下步驟。
步驟1若BIT_PENDING寄存器210包含F(xiàn)Fh則直接進(jìn)行步驟3。
步驟2從RAM的PLOT_ADDR+屏面基址處讀取字節(jié)送到臨時(shí)的數(shù)據(jù)緩沖器PLOT_BUFF中。
步驟3若BIT_PEND寄存器210所屏蔽的數(shù)據(jù)緩沖器中的各位全部等于PLOT_COLOR寄存器矩陣的第0行,則直接進(jìn)行步驟5。
步驟4將PLOT_COLOR寄存器矩陣的第0行寫入到由BIT_PENDING寄存器啟用的PLOT_BUFF的所有位。將數(shù)據(jù)緩沖器內(nèi)容寫回到RAM的PLOT_ADDR處。
步驟5
執(zhí)行相同操作(PLOT_ADDR+1)和執(zhí)行PLOT_COLOR寄存器矩陣的第1行。
步驟6若為8或256彩色方式,在(PLOT_ADDR+16)上執(zhí)行相同的操作和執(zhí)行PLOT_COLOR寄存器矩陣的第2行。
繼續(xù)直到所有彩色位更新標(biāo)繪X和標(biāo)繪Y寄存器的內(nèi)容是圖7中所表示的全加器和半加器電路處理的。在圖7的方框圖中對全加器FA和半加器HA的配置和有關(guān)的邏輯電路進(jìn)行了簡化。地址的計(jì)算可如下完成地址=屏面基址+2*y
+(y[3..7]+x[3..7]*16+(x[3..7]*4)&&scr_ht)*字符大小中間項(xiàng)為y7y6y5y4y3x7x6x5x4x300x7x6x5x4x30000px9px8px7px6px5px4px3px2px1px0因而例如用6個(gè)全加器和1個(gè)半加器產(chǎn)生一10位的中間結(jié)果px
。
為使中間結(jié)果移位成為所選定的彩色方式用的正確精度,該結(jié)果送到由字符大小值所控制的12×3多路轉(zhuǎn)換器。這與y的較低位y
結(jié)合形成16位屏面地址。要完成該地址計(jì)算,這再與允許將屏面置于1K邊界上的屏面基址值scr[9..22]相加。
這地址隨后送到根據(jù)所選擇的4、16或256彩色分辨率用來將所送到的地址信息輸入乘以1或2或4的雙位置滾桶式移位器214。
移位電路214的輸出被送到起到RAM地址的緩沖存儲(chǔ)器作用的標(biāo)繪地址寄存器216。由于在執(zhí)行標(biāo)繪命令之后,寄存器R1和R2即標(biāo)繪X和標(biāo)繪Y寄存器的內(nèi)容會(huì)改變,因而該地址需緩沖。
地址比較器218對作為從移位電路214的輸出由標(biāo)繪硬件確定的新地址與存儲(chǔ)在標(biāo)繪地址寄存器216的舊地址進(jìn)行比較。若地址不同則該地址必須寫到RAM。若存儲(chǔ)于地址寄存器216的標(biāo)繪地址與移位電路214的輸出相同,地址比較器218就產(chǎn)生(送到標(biāo)繪控制器200的)控制信號PLEQ。
回到彩色矩陣206,上面已說明過彩色矩陣206是按列讀出的。位平面計(jì)數(shù)器208與彩色矩陣206相連以確定要讀出哪一列。位平面計(jì)數(shù)器208與RAM控制器88相連,當(dāng)完成RAM操作,RAM控制器88產(chǎn)生使位平面計(jì)數(shù)器遞增的信號。
彩色矩陣206包括諸如圖8B所示的這類單元的陣列。在8×8矩陣206的一個(gè)矩陣元中有64個(gè)這類單元。當(dāng)對標(biāo)繪命令譯碼時(shí),控制器200將指令控制信號LDPIX送到鎖存器220,使該鎖存器裝有來自彩色寄存器54的彩色數(shù)據(jù)COL。由控制器200產(chǎn)生控制信號DUMP表明彩色矩陣206中的第一級緩沖已完成和數(shù)據(jù)需輸出給屏面。一旦產(chǎn)生DUMP信號,鎖存在鎖存器220中的數(shù)據(jù)就送給門電路226和鎖存器228。當(dāng)DUMP信號被有效地送到門電路226,門電路則將數(shù)據(jù)送到鎖存器228。同時(shí),門224關(guān)閉進(jìn)而阻止來自鎖存器228的同相輸出端的反饋回路使它保持以前所存儲(chǔ)的數(shù)據(jù)。
當(dāng)數(shù)據(jù)從RAM讀進(jìn)來并填到數(shù)據(jù)間隔時(shí),控制信號BPR就向門222提供零輸入且LDRAM信號將處于零狀態(tài)。在這類情況下,來自RAMD輸入的數(shù)據(jù)輸入將經(jīng)過門電路226送進(jìn)鎖存器228。鎖存器228中的數(shù)據(jù)隨后可讀出如圖7所示經(jīng)RAM控制器送到RAM數(shù)據(jù)總線。其他這類單元組合在一起將由X,Y像素標(biāo)識所表示的像素?cái)?shù)據(jù)轉(zhuǎn)換成同SuperNES字符格式相兼容的字符數(shù)據(jù)。
在圖9中詳細(xì)示出的RAM控制器88產(chǎn)生有關(guān)存取游戲卡RAM(s)的各種控制信號。游戲卡RAM(s)必須在SuperNES、Mario芯片的標(biāo)繪硬件,和從所執(zhí)行的Mario芯片程序取數(shù)據(jù)過程之間共用。RAM控制器88的作用在于確保在相應(yīng)的時(shí)刻將相應(yīng)的地址送給RAM地址總線。相應(yīng)時(shí)刻的RAM存取信號的產(chǎn)生是由圖10中更詳細(xì)示出的仲裁邏輯310部分地控制的。
RAM控制器88包括一在來自RAM數(shù)據(jù)插腳經(jīng)RAMD數(shù)據(jù)總線的輸入與指令總線之間多路復(fù)用的多路轉(zhuǎn)換器304。響應(yīng)從指令譯碼器60來的信號使指令總線或RAM數(shù)據(jù)總線選通,相應(yīng)的RAM輸出則置于目的端Z總線上。
RAM控制器88還包括一16位數(shù)據(jù)寄存器300,在從指令譯碼器60所收到信號的控制下保留來存儲(chǔ)從16位X總線或16位Y總線來的向RAM寫入的數(shù)據(jù)。裝進(jìn)數(shù)據(jù)寄存器300的數(shù)據(jù)被分成低字節(jié)和高字節(jié),經(jīng)多路轉(zhuǎn)換器302根據(jù)從譯碼器60收到的指令而將低字節(jié)或高字節(jié)送到RAM數(shù)據(jù)插腳。
RAM控制器88還包括-20位地址多路轉(zhuǎn)換器308。多路轉(zhuǎn)換器308對應(yīng)從仲裁電路310收到的控制信號(即從仲裁電路310中所產(chǎn)生的代碼確認(rèn)CACK,數(shù)據(jù)確認(rèn)DACK,或標(biāo)繪確認(rèn)PACK信號獲得的信號),選擇其一地址輸入。來自SuperNES地址總線HA的地址信號由多路轉(zhuǎn)換器308接收,只要Mario“占用”狀態(tài)位置為零就經(jīng)存儲(chǔ)器定時(shí)信號發(fā)生器312送到RAM地址總線。通過將信號RAN送給還接收RAM刷新控制信號RFSH的仲裁電路310告知仲裁電路310Mario芯片占用RAM的狀態(tài)。RAN和RFSH信號用“或”連在一起以形成圖10中所示的“暫停”信號。
地址多路轉(zhuǎn)換器308還從16位多路轉(zhuǎn)換器寄存器306接收地址輸入。多路轉(zhuǎn)換器寄存器306根據(jù)由指令譯碼器60所產(chǎn)生的選擇信號接收Y總線的內(nèi)容或指令總線的內(nèi)容。多路轉(zhuǎn)換器308還接收作為地址輸入的數(shù)據(jù)存儲(chǔ)區(qū)寄存器314的輸出和圖9中所示的程序計(jì)數(shù)器PC的內(nèi)容。屏面存儲(chǔ)區(qū)寄存器316的輸出用于形成輸入到多路轉(zhuǎn)換器308的標(biāo)繪地址的最高有效位,而從圖7的標(biāo)繪電路輸入最低有效位。屏面存儲(chǔ)區(qū)寄存器316和數(shù)據(jù)存儲(chǔ)區(qū)寄存器314均裝上了主數(shù)據(jù)總線HD來的數(shù)據(jù)并且可由主CPU尋址。這些寄存器示于圖9中,但本身不是一定得配置于RAM控制器88中,而是將它們的內(nèi)容送給RAM控制器。例如數(shù)據(jù)存儲(chǔ)區(qū)寄存器314可以在下述ROM控制器104中而屏面存儲(chǔ)區(qū)寄存器可以配置在標(biāo)繪硬件52中。
所要輸出的多路轉(zhuǎn)換器308輸入信號是如下選擇的。若發(fā)生代碼確認(rèn)信號CACK,則選擇代碼存儲(chǔ)區(qū)和程序計(jì)數(shù)器PC輸入。若發(fā)生數(shù)據(jù)確認(rèn)信號DACK,則選擇數(shù)據(jù)存儲(chǔ)區(qū)加多路轉(zhuǎn)換器寄存器輸入。若出現(xiàn)標(biāo)繪確認(rèn)信號PACK,則選擇標(biāo)繪地址。最后若既無CACK、DACK也無PACK信號出現(xiàn),就選擇主機(jī)(即SNES)地址輸入。
多路轉(zhuǎn)換器308的20位地址輸出送到存儲(chǔ)器定時(shí)信號發(fā)生器312,它則在合適的時(shí)刻將這些地址信號送給RAM6、RAM8。存儲(chǔ)器定時(shí)信號發(fā)生器312接收仲裁塊310中葛萊計(jì)數(shù)器(graycounter)來的輸出。存儲(chǔ)器定時(shí)信號發(fā)生器312對葛萊計(jì)數(shù)器來的輸出譯碼,并產(chǎn)生經(jīng)RAM地址總線RAMA對圖1中的RAM6、RAM8尋址的輸出信號。另外一種方式是,定時(shí)信號發(fā)生器312如圖1所示產(chǎn)生包括行地址選通信號RAS,列地址選通信號CAS和寫入允許信號WE在內(nèi)的用于存取RAM6、RAM8的控制信號。
存儲(chǔ)器定時(shí)信號發(fā)生器312產(chǎn)生一反饋給仲裁邏輯310表明RAM周期結(jié)束的DONE信號。存儲(chǔ)器定時(shí)信號發(fā)生器312還產(chǎn)生-用來將外部RAM來的數(shù)據(jù)鎖存進(jìn)RAM控制器中的數(shù)據(jù)鎖存器(未示出)的數(shù)據(jù)鎖存信號DATLAT。RAM來的數(shù)據(jù)隨后例如是經(jīng)RAM數(shù)據(jù)總線RAMD_IN送給Mario芯片電路。定時(shí)信號發(fā)生器312來的RAMA地址信號輸出可送給游戲卡上的任一靜態(tài)RAM。若游戲卡中用的是動(dòng)態(tài)RAM則產(chǎn)生控制信號CAS、RAS和WE。如上面說明的選配項(xiàng)電阻的設(shè)定所表明的,靜態(tài)或動(dòng)態(tài)RAM信號是根據(jù)Mario芯片的配置而相應(yīng)地產(chǎn)生的。圖9A中示出定時(shí)信號發(fā)生器312產(chǎn)生的示范性定時(shí)信號和其他有關(guān)信號。所示出的示范性地址和數(shù)據(jù)值僅用于說明。RAMDONE信號則示于圖8C中。
在合適的時(shí)刻存取RAM的信號產(chǎn)生是部分地由仲裁邏輯310控制的。如圖10所示,仲裁邏輯310接收有關(guān)存儲(chǔ)器存取輸入的信號CACHE(超高速緩存)請求CACHERQ,數(shù)據(jù)請求DATRQ和標(biāo)繪請求PLTRQ。這些輸入信號每一個(gè)分別臨時(shí)地存儲(chǔ)在鎖存器325,327,329中。若所要執(zhí)行的Mario指令出自RAM或ROM,則通過接收到CACHE請求信號CACHERQ來起動(dòng)處理,該信號就圖10而言是用來確認(rèn)正執(zhí)行的指令不是來自超高速緩存RAM因而一定是來自RAM或ROM的。這樣CACHE請求信號CACHERQ表明不能從CACHE(超高速緩存)94取出指令執(zhí)行。數(shù)據(jù)請求信號DATARQ是作為對需對RAM存取的指令(例如裝字節(jié)、裝字指令)譯碼的結(jié)果產(chǎn)生的。另外,仲裁邏輯310接收響應(yīng)標(biāo)繪命令的譯碼而由標(biāo)繪控制器200產(chǎn)生的標(biāo)繪請求信號PLTRQ。
當(dāng)Mario芯片正在運(yùn)行和Mario占用位被置位時(shí)仲裁邏輯310才起動(dòng)(如狀態(tài)寄存器SUSPEND(暫停)方式位處于“0”狀態(tài)所表明的)。在收到和存儲(chǔ)CACHE請求,數(shù)據(jù)請求,和標(biāo)繪請求信號后,鎖存器325,327和329分別產(chǎn)生CRQ,DRQ和PRQ信號。門331,333和335接收各自鎖存器的同相輸出端來的這些信號并為這些信號建立優(yōu)先級。在這方面,CACHE請求信號具有最高的優(yōu)先級,數(shù)據(jù)具有第二位高的優(yōu)先級而標(biāo)繪請求則具有最低的優(yōu)先級。CACHE請求信號被給予最高優(yōu)先級是因?yàn)樗砻饕言噲D執(zhí)行來自CACHE指令,但必須從RAM存取指令。若較高優(yōu)先級請求已經(jīng)使其各自的鎖存器置位,則門電路333和335用以確保較低優(yōu)先級的請求無法使鎖存器339和341置位。只有系統(tǒng)不是處于暫停狀態(tài),鎖存器337,339,341才能置位,因?yàn)镾USPEND(暫停)方式信號被輸入到門331,333和335中的各個(gè)門。當(dāng)Mario芯片占用即可自由地存取RAM時(shí)SUSPEND方式信號會(huì)處于低邏輯電平狀態(tài)。若SUSPEND被置為1鎖存器337,339和341不能被置位,當(dāng)確認(rèn)鎖存器337,339和341中的任一個(gè)已經(jīng)為“1”(即一個(gè)周期已經(jīng)在進(jìn)行)時(shí)也不能被置位。門331、333和335建立RAM的優(yōu)先級。若CACHEREQUEST(超高速緩存請求)鎖存器337被置位則數(shù)據(jù)確認(rèn)鎖存器339就不會(huì)被置位,若CACHE或DATA請求鎖存器被置位則標(biāo)繪確認(rèn)鎖存器341也不會(huì)被置位。
鎖存器337一由超高速緩存請求信號置位就產(chǎn)生超高速緩存確認(rèn)信號CACK,而它一由圖10中的邏輯電路確立,CACHE94(或RAM)就可供使用。若圖10中的邏輯電路確定RAM未被其它方式占用,就會(huì)同樣地產(chǎn)生數(shù)據(jù)確認(rèn)信號DACK和標(biāo)繪請求確認(rèn)信號PACK,以確認(rèn)數(shù)據(jù)請求和標(biāo)繪請求。
鎖存器337,339和341的同相輸出送到門電路343,進(jìn)而經(jīng)NOR門344使產(chǎn)生RAM存取的定時(shí)信號的葛萊計(jì)數(shù)器345復(fù)位。本技術(shù)領(lǐng)域的技術(shù)人員會(huì)理解葛萊計(jì)數(shù)器是每次僅有一個(gè)輸出位改變的計(jì)數(shù)器,這可方便地用來控制RAM存取時(shí)間。
由定時(shí)信號發(fā)生器312產(chǎn)生的DONE(完成)信號由NOR門344和鎖存器337,339,341接收。DONE信號表明一個(gè)RAM周期已結(jié)束。DONE信號的產(chǎn)生觸發(fā)仲裁邏輯310中的相應(yīng)鎖存器的清零,使已鎖存的請求取消。DONE信號還送到始發(fā)電路例如超高速緩存控制器68或標(biāo)繪控制器52,以表明RAM存取結(jié)束。
按照本發(fā)明的另一實(shí)施例,Mario芯片可采用雙時(shí)鐘系統(tǒng)。這樣Mario芯片處理器無需由例如驅(qū)動(dòng)上面提到的RAM控制器電路的相同時(shí)鐘來驅(qū)動(dòng)。例如RAM控制器88可由SuperNES來的21MHz時(shí)鐘信號來驅(qū)動(dòng)而Mario芯片處理器可由另一個(gè)可變頻時(shí)鐘驅(qū)動(dòng)。在此方式下Mario芯片處理器可不限定工作于21MHz時(shí)鐘頻率。
按照這示范性實(shí)施例的Mario芯片可采用異步態(tài)機(jī)器控制電路;諸如示于圖11的執(zhí)行再同步雙時(shí)鐘接口功能的那種電路。若采用不同的時(shí)鐘系統(tǒng)而不是工作在另一時(shí)鐘頻率的存儲(chǔ)器控制器來實(shí)施,則圖11電路可以用來與Mario芯片處理器接口。
示于圖11中的再同步電路接收與時(shí)鐘信號CK不同步的外來的時(shí)鐘信號DIN。不論DIN的頻率是高于還是低于時(shí)鐘頻率CK,再同步電路都會(huì)由DIN產(chǎn)生一與CK同步的信號。
如圖12的說明,圖11所示電路響應(yīng)信號DIN從狀態(tài)010,經(jīng)過110;100,101,111回到起始狀態(tài)010。圖11的再同步電路可用在諸如ROM控制器104和RAM控制器88這類接收雙時(shí)鐘信號的任何接口電路。
圖11所示的電路因由門F對鎖存器A置位故而通過將從其閑置或復(fù)位態(tài)“010”切換成狀態(tài)“110”而響應(yīng)外來的信號DIN。再同步時(shí)鐘CK一旦變低(也許已經(jīng)為真),鎖存器B由門E復(fù)位形成狀態(tài)“100”,當(dāng)時(shí)鐘再次變高時(shí),由門A使鎖存器C置位形成狀態(tài)“101”。
鎖存器C在圖11中的Q從所示的該電路產(chǎn)生輸出。當(dāng)輸入信號再次變低,鎖存器就再次由門C置位形成狀態(tài)“111”。當(dāng)時(shí)鐘信號CK在到達(dá)狀態(tài)“111”之后又變低時(shí),鎖存器A由門G復(fù)位形成狀態(tài)011。此后時(shí)鐘CK再變高并且由門B使鎖存器C復(fù)位,回到狀態(tài)機(jī)器閑置態(tài),其輸出就不起作用。
圖13更為詳細(xì)地示出圖4B的ROM控制器104。ROM控制器104包括超高速緩存加載器400,它可部分地控制將存儲(chǔ)在ROM10或游戲卡RAM中的當(dāng)前執(zhí)行的程序指令載入芯片超高速緩存RAM94。指令是以16字節(jié)的組加載進(jìn)超高速緩存RAM94的。當(dāng)在16字節(jié)段當(dāng)中遇到轉(zhuǎn)移指令,在執(zhí)行轉(zhuǎn)移之前還是必須繼續(xù)地填滿一完整的16字節(jié)段。CACHE加載電路400包括一2位狀態(tài)機(jī),它通過確保16字節(jié)CACHE段的剩下的字節(jié)加載進(jìn)超高速緩存RAM94來響應(yīng)對轉(zhuǎn)移指令的譯碼。超高速緩存加載邏輯狀態(tài)機(jī)的第一狀態(tài)是閑置狀態(tài),若程序執(zhí)行超出超高速緩存器的范圍或程序數(shù)據(jù)已被加載進(jìn)超高速緩存,則該閑置狀態(tài)為真。第二狀態(tài)表明超高速緩存的加載和從游戲卡ROM或RAM來的指令的執(zhí)行是同時(shí)發(fā)生的。第三狀態(tài)是由對轉(zhuǎn)移指令的譯碼觸發(fā)的,該狀態(tài)處于有效直到16字節(jié)的超高速緩存段中的所有字節(jié)均已被加載。當(dāng)執(zhí)行轉(zhuǎn)移而該轉(zhuǎn)移落到與超高速緩存16字節(jié)邊界不精確對應(yīng)的地址時(shí)就遇到第四狀態(tài),在這種情況下,超高速緩存從該邊界的開始位置被填充到16字節(jié)段中對應(yīng)于程序所轉(zhuǎn)移的地址的那部分。
圖4B中示出的超高速緩存控制器68產(chǎn)生輸入到超高速緩存加載器400的CACHE信號,它表明目前在超高速緩存RAM94中無法提供所需要的指令。因而必須從ROM讀取指令。代碼存儲(chǔ)區(qū)信號標(biāo)識所要存取的地址的三位最高有效位并且表明所要存取的是程序ROM還是RAM。超高速緩存加載器400還包括在程序執(zhí)行期間保持與程序計(jì)數(shù)器PC的各最低有效位相應(yīng)計(jì)數(shù)的計(jì)數(shù)器。該計(jì)數(shù)器是經(jīng)超高速緩存加載器的PC輸入端加載的。
ROM控制器104中的超高速緩存加載電路400還接收WAIT(等待)和GO控制信號,它們表明Mario處理器因某些原因而處于WAIT狀態(tài)和Mario芯片在“工作”或“運(yùn)行”方式。在這種情況下超高速緩存加載電路400產(chǎn)生一CODEFEFCH(代碼讀取)控制信號,送給示于圖13中的NOR門408,進(jìn)而送給ROM定時(shí)計(jì)數(shù)器406的清零輸入。當(dāng)超高速緩存加載電路400產(chǎn)生代碼讀取信號CODEFETCH,就優(yōu)先于數(shù)據(jù)讀取而啟動(dòng)代碼讀取,因?yàn)樵跀?shù)據(jù)讀取前必須開始代碼讀取。圖10所示的包括優(yōu)先級邏輯在內(nèi)的仲裁電路可用來使所產(chǎn)生的信號被給予比數(shù)據(jù)讀取高的優(yōu)先級。
當(dāng)清零信號從ROM定時(shí)計(jì)數(shù)器406取消,就起動(dòng)一計(jì)數(shù)周期。ROM定時(shí)計(jì)數(shù)器406用來產(chǎn)生ROMRDY定時(shí)信號,它表明在ROM數(shù)據(jù)插腳可獲得ROM數(shù)據(jù),該信號是從門電路410輸出的。
ROM數(shù)據(jù)就緒信號ROMRDY門與再同步電路402相連,而該電路例如可包括在圖11中所說明的再同步電路。在達(dá)到與處理器時(shí)鐘同步之后,產(chǎn)生信號ROMDCK使鎖存器404復(fù)位和產(chǎn)生DATAFETCH信號表示對寄存器R14的存取觸發(fā)了數(shù)據(jù)讀取,而這又導(dǎo)致發(fā)出EN_R14信號。當(dāng)ROM定時(shí)計(jì)數(shù)器406已達(dá)到一規(guī)定計(jì)數(shù),確保在ROM數(shù)據(jù)插腳上可獲得數(shù)據(jù)時(shí)就產(chǎn)生DATAFETCH信號。
圖13中所示的ROM控制器從下述的輸入中的任意一個(gè)選擇出地址信號的多路轉(zhuǎn)換器414的輸出端產(chǎn)生ROM地址。代碼存儲(chǔ)區(qū)寄存器412是從SuperNES數(shù)據(jù)總線HD加載的,以確定從哪一個(gè)ROM程序存儲(chǔ)區(qū)取出并執(zhí)行該Mario代碼。代碼存儲(chǔ)區(qū)寄存器412向多路轉(zhuǎn)換器414提供具有23位的ROM地址的8位。該ROM地址的最低有效位是從程序計(jì)數(shù)器PC的內(nèi)容得到的。當(dāng)正向超高速緩存RAM寫入數(shù)據(jù)時(shí),4位最低有效位是來自于由超高速緩存加載器400所產(chǎn)生的CACHELOAD信號。另外的多路轉(zhuǎn)換器414地址輸入是每當(dāng)存取寄存器R14時(shí),從Mario通用寄存器R14的內(nèi)容產(chǎn)生的。
對R14的存取致使數(shù)據(jù)讀取鎖存器404產(chǎn)生DATAFETCH信號,該信號用作控制信號使多路轉(zhuǎn)換器414選擇其R14輸入(和從SuperNES數(shù)據(jù)總線HD加載的數(shù)據(jù)存儲(chǔ)區(qū)寄存器416的內(nèi)容)。該數(shù)據(jù)存儲(chǔ)區(qū)寄存器416包含有與R14讀取操作有關(guān)的數(shù)據(jù)存儲(chǔ)區(qū)的最高有效位。
數(shù)據(jù)讀取信號另外送給門408,它將起動(dòng)由ROM定時(shí)計(jì)數(shù)器406進(jìn)行的計(jì)數(shù),進(jìn)而經(jīng)門410產(chǎn)生ROM就緒信號ROMRDY,當(dāng)ROMRDY信號產(chǎn)生時(shí),就可從ROM數(shù)據(jù)總線ROMD[7∶0]獲得數(shù)據(jù)。
地址多路轉(zhuǎn)換器414還接收從SuperNES地址總線HA來的ROM地址。根據(jù)送給多路轉(zhuǎn)換器414控制輸入端的信號“ROM”的狀態(tài)將選擇SuperNES地址總線?!癛OM”控制信號向MarioROM控制器表明SuperNES擁有對ROM地址總線的控制。
對轉(zhuǎn)移指令譯碼后,程序計(jì)數(shù)器的內(nèi)容加上由超高速緩存加載器的計(jì)數(shù)器所產(chǎn)生的四位最低有效位被輸入地址多路轉(zhuǎn)換器414。這允許向超高速緩存段加載上在轉(zhuǎn)移被譯碼前正在加載的16字節(jié)的剩余部分。
多路轉(zhuǎn)換器422提供ROM控制器104中從ROM數(shù)據(jù)插腳ROMD至Mario芯片的目的端總線Z的數(shù)據(jù)通路。已經(jīng)由鎖存器404產(chǎn)生的DATAFETCH信號和由ROM定時(shí)計(jì)數(shù)器406產(chǎn)生的ROMRDY信號被送給門418而使ROM緩沖器420的加載得以進(jìn)行。ROM數(shù)據(jù)總線ROMD[7…0]來的ROM數(shù)據(jù)被裝進(jìn)ROM緩沖器420。
多路轉(zhuǎn)換器422響應(yīng)指令代碼(諸如通過存取寄存器R14觸發(fā)的自動(dòng)進(jìn)行數(shù)據(jù)讀取的GETB這類指令代碼)的譯碼選取一輸入。若對代碼讀取操作譯碼,ROM控制器104就會(huì)將指令送到圖15A中所示的Mario芯片中的指令總線。若對GETB指令譯碼,存儲(chǔ)在寄存器420中被緩沖的字節(jié)就被置于Z總線上。某些GETB指令操作涉及X總線上經(jīng)圖13中所示的多路轉(zhuǎn)換器的相對應(yīng)的輸入端輸入的數(shù)據(jù),送給目的端總線Z的數(shù)據(jù)可隨后裝進(jìn)Mario通用寄存器76中的一個(gè)。
在圖14中更為詳細(xì)地示出超高速緩存控制器68。超高速緩存控制器68包括一標(biāo)記鎖存器506。標(biāo)記鎖存器506包括例如表明指令是否已存儲(chǔ)在超高速緩存RAM94(為便于說明將它配置于超高速緩存控制器中示出)中的64個(gè)鎖存器。
標(biāo)記鎖存器506中的64個(gè)標(biāo)志中的每一個(gè)都對應(yīng)于存儲(chǔ)在超高速緩存RAM94中的16位信息。在從ROM或RAM取出指令執(zhí)行的同時(shí)超高速緩存RAM94被載上指令。在如上說明的那樣執(zhí)行轉(zhuǎn)移指令時(shí),RAM94經(jīng)與圖13中示出的ROM控制器104一起說明的超高速緩存加載器400被加上16字節(jié)段的剩下字節(jié)。在加載上這些剩余的字節(jié)之前,該整個(gè)字節(jié)段不能經(jīng)標(biāo)記鎖存器506標(biāo)志為已加載。
參見門電路510,當(dāng)程序計(jì)數(shù)器已從0計(jì)數(shù)到15,14位減法器502輸出一超出范圍的信號(它被反轉(zhuǎn))當(dāng)ROM控制器輸出其ROM數(shù)據(jù)就緒信號ROMRDY(表明將要輸出一字節(jié)),門電路510就使標(biāo)記鎖存器506在由多路分解器504尋址的位置上置位。
當(dāng)對超高速緩存指令譯碼;在總線501上產(chǎn)生一表明后續(xù)指令將從超高速緩存RAM存儲(chǔ)器94執(zhí)行的控制信號。總線501上的控制信號被送給超高速緩存基址寄存器500的加載輸入端,并用于向超高速緩存基址寄存器500裝入程序計(jì)數(shù)器PC的13位最高有效位。同時(shí)如圖14所示,標(biāo)記鎖存器506被清零。
超高速緩存基址寄存器500的輸出和程序計(jì)數(shù)器的最高有效位(例如第3-15位)被送給減法器502,它確定程序計(jì)數(shù)器PC來的地址輸入是否在超高速緩存RAM94的范圍內(nèi)。減法器502例如輸出其六位最低有效位作為超高速緩存RAM地址的最高有效位,而地址的三位最低有效位則從程序計(jì)數(shù)器PC送來。
超出范圍信號O/RANGE是從減法器502來的進(jìn)位輸出信號而產(chǎn)生的,并被翻轉(zhuǎn)。該翻轉(zhuǎn)的超范圍信號高時(shí)用來起動(dòng)對鎖存器矩陣506中的一個(gè)鎖存器的置位。該鎖存器置位將取決于經(jīng)多路分解器504從減法器502來的超高速緩存地址輸出,并與超高速緩存RAM94的16字節(jié)段相對應(yīng),以表明指令是存儲(chǔ)在超高速緩存中與輸出的超高速緩存RAM地址相應(yīng)的地方。標(biāo)記鎖存器506的輸出被送給多路轉(zhuǎn)換器512,它將64個(gè)標(biāo)記鎖存信號中的一個(gè)送到NOR門514,這個(gè)鎖存信號是根據(jù)多路轉(zhuǎn)換器的選擇輸入確定的,它選定與DEMUX504輸出的64條選擇線中某一條對應(yīng)的鎖存信號作為輸出。輸入到NOR門514的另一輸入是表明所需要的指令不能在超高速緩存RAM94中找到因而需從外部讀取的超范圍信號。
圖15示出圖4A中示出的ALU控制/指令譯碼器的方框圖。如圖15所示,ALU控制器/指令譯碼器60接收超高速緩存RAM94,ROM控制器104和RAM控制器88來的指令。這些Mario芯片元件不是ALU/指令譯碼器的一部分,但僅僅為便于說明才在圖15中畫出。
多路轉(zhuǎn)換器525從超高速緩存RAM94,ROM控制器104或RAM控制器88選出指令輸出,并將所選擇的指令輸入到流水線鎖存器527。多路轉(zhuǎn)換器525選擇基于RAM的指令還是基于ROM的指令,取決于代碼存儲(chǔ)區(qū)寄存器的規(guī)定位例如位4的狀態(tài)。這樣根據(jù)一裝入代碼存儲(chǔ)區(qū)寄存器的地址信息,將對ROM或RAM來的指令進(jìn)行譯碼。另外多路轉(zhuǎn)換器525也可根據(jù)由超高速緩存器68送來的控制信號CACHECTL的狀態(tài)而從超高速緩存RAM94選擇指令,該信號表明所要執(zhí)行的指令是在超高速緩存RAM94范圍內(nèi),而且某一相應(yīng)的標(biāo)記位已如超高速緩存控制器68的說明中那樣被置位。
當(dāng)被程序計(jì)數(shù)器起動(dòng)信號PCEN.IL.IH啟動(dòng)時(shí),流水線鎖存器527接收多路轉(zhuǎn)換器來的8位指令,而這起動(dòng)信號例如當(dāng)正由ROM(或RAM)讀取指令時(shí),是由ROM控制器104(或RAM控制器88)產(chǎn)生的。由于從RAM或ROM讀取指令需花一個(gè)處理周期還多,因而指令譯碼器操作是由各自的ROM或RAM控制器104,88所產(chǎn)生的程序計(jì)數(shù)器起動(dòng)信號PCEN觸發(fā)的。
另一方面,若從超高速緩存RAM取出指令執(zhí)行,程序計(jì)數(shù)器起動(dòng)信號PCEN在所有時(shí)刻都是起作用的,并且指令執(zhí)行是以處理器時(shí)鐘頻率全速執(zhí)行的。由于ROM10的存取時(shí)間比超高速緩存RAM94或游戲卡RAM的存取時(shí)間慢許多,因而對ROM存取時(shí),產(chǎn)生PCEN信號的間隔,必須不如相應(yīng)的超高速緩存RAM的,或動(dòng)態(tài)或靜態(tài)RAM的譯碼起動(dòng)信號那樣頻繁。
暫時(shí)存在流水線鎖存器527的指令被輸出給圖示性地由門電路537,539和541所代表的常規(guī)的指令譯碼電路,以產(chǎn)生表示操作代碼1,2,…N的信號。
加載進(jìn)流水線鎖存器527的指令還被送給先行控制邏輯551。先行控制邏輯551用于提供操作代碼的譯碼預(yù)告,它將用來從Mario芯片寄存器塊76中選取合適的寄存器。這樣,為了在對操作碼進(jìn)行譯碼之前優(yōu)化執(zhí)行的速度,迅速地確定了需被存取的寄存器,以便對該指令所需的數(shù)據(jù)進(jìn)行高速存取。
先行控制邏輯響應(yīng)指令操作碼以及各種程序譯碼控制標(biāo)志。指令譯碼電路60包括程序控制標(biāo)志檢測器邏輯543,它響應(yīng)以前已譯碼的操作代碼而產(chǎn)生ALT1和ALT2信號,以表明如上所述的相應(yīng)的前綴指令已經(jīng)被譯碼。下面說明的與此有關(guān)的ALT1PRE信號也是由標(biāo)志檢測器邏輯543產(chǎn)生的。另外產(chǎn)生IL和IH信號以表明已對需要立即數(shù)的指令進(jìn)行譯碼(這里L(fēng)和H分別指低字節(jié)和高字節(jié))。IH和IL標(biāo)志用來阻止涉及立即數(shù)的指令被當(dāng)作操作碼譯碼。因而也需要非IL信號(IL)和非IH信號(IH)來起動(dòng)流水線鎖存器527。ALT1和ALT2信號如前面說明的那樣用來修改后續(xù)產(chǎn)生的操作碼,并輸入到例如在門電路541所示的譯碼邏輯537,539,541等,按照前面對這些信號的討論來修改輸出操作碼。
先行控制邏輯551根據(jù)預(yù)譯碼的操作代碼和對先前的操作代碼(例如前綴代碼ALT1或ALT2)譯碼時(shí)所產(chǎn)生的信號而產(chǎn)生寄存器選擇信號。例如如程序控制標(biāo)志檢測邏輯543中所示,若ALT1信號由譯碼邏輯545譯碼,則產(chǎn)生ALT1PRE信號,該信號由程序控制標(biāo)志檢測邏輯543輸出,并進(jìn)而經(jīng)OR門549送給先行邏輯531。該ALT1PRE信號還使ALT1鎖存器547置位。OR門549還將鎖存器547來的ALT1信號輸出,并將ALT1信號送給譯碼邏輯537,539,541等。
在圖15中示意地表示先行控制邏輯如何產(chǎn)生4個(gè)寄存器選擇控制位XSEL0,XSEL1,XSEL2和XSEL3。這四個(gè)控制位隨后送給在圖17中結(jié)合寄存器控制邏輯76一起說明的多路轉(zhuǎn)換器620和622,該控制邏輯選取16個(gè)寄存器中一個(gè)的內(nèi)容輸出給X總線供正執(zhí)行的指令使用。
這樣,指令在裝進(jìn)流水線鎖存器527前被送給先行譯碼邏輯單元529,它產(chǎn)生一寄存器選擇位XSEL_U0,進(jìn)而鎖存進(jìn)鎖存器535然后作為信號XSEL0輸出。鎖存器535由程序計(jì)數(shù)器信號PCEN起動(dòng)。類似地邏輯電路531產(chǎn)生鎖存進(jìn)鎖存器533作為信號XSEL1輸出的XSEL_U1。ALT1PRE信號被送給先行邏輯551中的各種譯碼邏輯電路529,531等,并被用于確實(shí)由寄存器控制邏輯76所選定的合適的寄存器。例如在先行控制電路551中所示,ALT1PRE信號是送給邏輯電路531的信號之一它產(chǎn)生鎖存在鎖存器533中進(jìn)而輸出信號USEL1的USEL_U1。
圖15B示出用于說明先行邏輯551操作的示范性定時(shí)信號。圖15B示出時(shí)鐘信號CK,和有關(guān)超高速緩存RAM數(shù)據(jù)存取的示范性指令操作碼。還示出表明流水線鎖存器被加載時(shí),將執(zhí)行指令譯碼操作時(shí),產(chǎn)生寄存器選擇信號時(shí)和將寄存器來的信息加載在目的端Z總線上時(shí)的定時(shí)信號。
如圖15B所示,超高速緩存RAM數(shù)據(jù)操作碼(操作碼1)將在時(shí)鐘脈沖CK上升沿之后的某一時(shí)刻變?yōu)橛行?。操作碼存儲(chǔ)在流水線鎖存器527中直到例如第二個(gè)時(shí)鐘脈沖的上升沿,這時(shí)操作碼2被鎖存進(jìn)鎖存器527。緊接著收到鎖存器227來的輸出之后,在圖18中示意地畫出的某個(gè)時(shí)刻指令譯碼器60開始對與操作碼1相應(yīng)的指令進(jìn)行譯碼。該指令譯碼的結(jié)果,如上所述相應(yīng)地將控制信號送給諸如ALU50,超高速緩存控制器68和標(biāo)繪硬件52等這類Mario芯片元件。
示于圖15中的先行電路551通過在對操作碼2譯碼前的某一時(shí)刻產(chǎn)生信號XSEL_U開始寄存器選擇譯碼過程。該XSEL_U0信號代表被鎖存進(jìn)鎖存器535之前的譯碼邏輯529的輸出。例如在某一時(shí)刻由鎖存器535輸出XSEL-O信號,使得該指令所需的數(shù)據(jù)會(huì)在指令執(zhí)行周期中盡早地被存取,以便于盡快地送給相應(yīng)的總線。
圖16中示出用來產(chǎn)生有關(guān)Y和Z總線的寄存器選擇信號的寄存器控制邏輯78的一部分。多路轉(zhuǎn)換器604選取16個(gè)寄存器的哪一個(gè)將從Z總線被寫入,而多路轉(zhuǎn)換器606則選取送給Y總線的那個(gè)寄存器。
多路轉(zhuǎn)換器604和606分別接收來自4位寄存器600和602的輸入。寄存器600和602用來完成上述的“FROM”和“TO”前綴指令。寄存器600和602分別由“TO”和“FROM”前綴的譯碼來起動(dòng),它們將指令總線的最低有效位送給寄存器600和602。寄存器600和602響應(yīng)用來使上述的控制標(biāo)志復(fù)位的指令而被清零。
多路轉(zhuǎn)換器604和606另外接收從寄存器塊76中的各種寄存器來的輸入。另外,多路轉(zhuǎn)換器604,606接收從指令總線上的最低有效位來的輸入來執(zhí)行其四個(gè)最低有效位確定指令的目的端或源端寄存器的指令。另外為使SuperNES可對該寄存器存取,將SuperNES地址總線來的規(guī)定的最低有效位送給多路轉(zhuǎn)換器604和606。該多路轉(zhuǎn)換器604和606分別選取送給Z和Y總線的寄存器。
圖17示出寄存器塊76和配置于圖4B的寄存器控制邏輯78中的附加寄存器選擇控制邏輯。由對FROM指令譯碼就產(chǎn)生的FROMSET信號設(shè)定FROMX寄存器618。一收到FROMSET信號,Y總線的內(nèi)容就被加載進(jìn)寄存器618。裝進(jìn)寄存器618的數(shù)據(jù)隨后成為用在后續(xù)指令執(zhí)行中的數(shù)據(jù)。寄存器618的內(nèi)容被作為輸入之一送給多路轉(zhuǎn)換器622,多路轉(zhuǎn)換器622還接收寄存器R0(用于缺省寄存器)的內(nèi)容作為其輸入之一。
多路轉(zhuǎn)換器622的另一輸入是多路轉(zhuǎn)換器620的輸出。多路轉(zhuǎn)換器620接收程序計(jì)數(shù)器(即寄存器R15)的內(nèi)容、在執(zhí)行MERGE指令時(shí)所用的寄存器、和寄存器R1(例如在執(zhí)行標(biāo)繪指令中所用的)來的輸入作為輸入。多路轉(zhuǎn)換器620根據(jù)由圖15A中示出的先行邏輯551所產(chǎn)生的XSEL2和XSEL3位的狀態(tài)選取這些輸入的一個(gè)輸入。
多路轉(zhuǎn)換器622的另一個(gè)輸入與Y總線上的內(nèi)容相接,以將與Y總線上相同數(shù)據(jù)放在X總線上。如前所述,多路轉(zhuǎn)換器622的另一輸入是上述FROMX寄存器618的輸出。多路轉(zhuǎn)換器622的輸出是根據(jù)圖15A中所產(chǎn)生的XSEL0和XSEL1位的狀態(tài)選取的,并送給X總線。
與寄存器R0-R15中的許多寄存器有關(guān)的專用功能在上面已詳細(xì)說明,這里將不重復(fù)。寄存器R0-R3的輸出送給多路轉(zhuǎn)換器608,寄存器R4-R7的輸出送給多路轉(zhuǎn)換器610,寄存器R8-R11的輸出送給多路轉(zhuǎn)換器612,而寄存器R12-R15的輸出送給多路轉(zhuǎn)換器614。多路轉(zhuǎn)換器608,610,612,614各自的四個(gè)輸入中的一個(gè)均是由YSEL1和YSEL0選取的,這些是從圖16中所示的多路轉(zhuǎn)換器606輸出的。多路轉(zhuǎn)換器608,610,612和614的輸出進(jìn)而輸入到多路轉(zhuǎn)換器616。多路轉(zhuǎn)換器616根據(jù)圖16中的多路轉(zhuǎn)換器606輸出的YSEL2和YSEL3的狀態(tài)選取四個(gè)輸入中的一個(gè)。多路轉(zhuǎn)換器616使其輸出送到緩沖寄存器617,其輸出進(jìn)而送到Y(jié)總線。
回到寄存器R0-R15的輸入,每個(gè)寄存器有一個(gè)由如上結(jié)合圖16所示而產(chǎn)生的ZSEL位0至位3所選取的起動(dòng)輸入。每個(gè)寄存器還具有一時(shí)鐘輸入CK和一數(shù)據(jù)輸入DATA-IN,在相應(yīng)地緩沖之后經(jīng)該數(shù)據(jù)輸入端從Z總線接收數(shù)據(jù)。
結(jié)合各種乘法操作使用的寄存器R4還包括停用低位和停用高位輸入以及允許低位和允許高位輸入。寄存器R15即程序計(jì)數(shù)器PC,它可接收從圖13的ROM控制器中的超高速緩存加載器400來的信號CCHLD,在當(dāng)前的超高速緩存16字節(jié)段被裝進(jìn)超高速緩存RAM之前禁止轉(zhuǎn)移操作。程序計(jì)數(shù)器另外從指令譯碼器接收一程序循環(huán)暫停信號LOOPEN,這表明得進(jìn)行分支轉(zhuǎn)移并允許向PC加上寄存器R13的內(nèi)容。寄存器R15另外接收加電復(fù)位信號RESET和執(zhí)行循環(huán)指令時(shí)將寄存器R13的內(nèi)容裝入程序計(jì)數(shù)器的輸入RN。
如上所述,本發(fā)明的圖形協(xié)處理器結(jié)合主電視游戲系統(tǒng)可以方便地用來產(chǎn)生涉及例如基于多邊形目標(biāo)的旋轉(zhuǎn)、放大和/或縮小的各種特殊效果。圖18是畫出梯形用的示范性Mario芯片程序的流程圖,說明可如何對Mario芯片編程以產(chǎn)生所要顯示的基于多邊形的目標(biāo)的一部分。下面提出一種用于產(chǎn)生這類多邊形的Mario程序同時(shí)對Mario硬件如何執(zhí)行程序加以詳盡的解釋。
首先參見圖18中示出的高層流程圖,最初將寄存器塊R1至R15的某些寄存器與梯形的產(chǎn)生中所用的變量關(guān)聯(lián)起來(例如寄存器R1存儲(chǔ)像素X位置,寄存器R2存儲(chǔ)像素Y位置線,寄存器R7存儲(chǔ)梯形高度等)。此后,如方框650所示建立循環(huán)計(jì)數(shù)器和計(jì)算初始像素值。
如方框652所示,隨后進(jìn)行查詢以確定梯形水平線之一的長度。若從該線的終點(diǎn)減去該線的起點(diǎn)的結(jié)果是負(fù)值(-VE),則該程序分支轉(zhuǎn)移至方框660。若從該線的終點(diǎn)減去該線的起點(diǎn)的結(jié)果是正值表明還未超出該線的長度,則使循環(huán)計(jì)數(shù)器遞減(654)并執(zhí)行標(biāo)繪像素指令而畫出合適的像素(656)。
如方框658所示,隨后進(jìn)行查詢以確定循環(huán)計(jì)數(shù)器的內(nèi)容是否為零。若循環(huán)計(jì)數(shù)器不為零則進(jìn)行轉(zhuǎn)移以分支轉(zhuǎn)移回方框654以使循環(huán)計(jì)數(shù)器(654)遞減并標(biāo)繪另一個(gè)像素(656)。
若循環(huán)計(jì)數(shù)器等于零,則多邊形左側(cè)的X坐標(biāo)和多邊形右側(cè)的X坐標(biāo)被更新(660)。此后使梯形YHEIGHT(Y高度)遞減(622),若結(jié)果不為零則程序?qū)⑼ㄟ^分支轉(zhuǎn)移回方框650重新執(zhí)行(664),使Y坐標(biāo)遞增以移到下一掃描線(665)。若YHEIGHT等于零,則程序?qū)⑷繄?zhí)行好,梯形就完成(666)。
為說明產(chǎn)生圖形的Mario芯片指令集的運(yùn)用,下面給出實(shí)施圖18流程圖繪制梯形的示范性程序。
;繪制梯形循環(huán)rx=1;標(biāo)繪x位置ry=2;標(biāo)繪y位置rxl=3;頂線左側(cè)x位置rxlinc=4;頂線左側(cè)x位置遞增rx2=5;頂線右側(cè)x位置
rx2inc=6;頂線右側(cè)x位置遞增rdy=7;梯形y高度rlen=12;循環(huán)計(jì)數(shù),水平線(hline)長度rloop=13;循環(huán)標(biāo)記hlinesmiwtrloop,hlines2;設(shè)定hline循環(huán)的起始hlines1mfromrx1;x=(rx1)>>8mtorxmhibmfromrx2mhibmtorlenmsubrx;長度,rlen=(rx2>>8)-(rx1>>8)mbmihlines3;若rlen<0則跳過hlinemnopmincrlen;總是繪制一個(gè)像素hlines2mloopmplot;繪制水平線hlines3mwithrx1;rx1+rx1incmaddrx1incmwithrx2;rx2+=rx2incmaddrx2incmdecrdy;rdy-=1
mbnehlines;重復(fù)rdy次數(shù)1mincry;和下行的下一個(gè)y為說明Mario芯片硬件如何用來執(zhí)行程序,以下的說明是針對上面給出的梯形生成程序的。在執(zhí)行梯形生成程序前,主計(jì)算機(jī)系統(tǒng)例如SuperNES如上面結(jié)合圖5流程圖的說明所解釋的那樣直接向代碼存儲(chǔ)區(qū)寄存器和屏面基址寄存器寫入。另外,SuperNES將從SuperNES地址總線HA譯碼得出的XEQ地址的低字節(jié)寫入ROM控制器104中的局域寄存器。SuperNES隨后將高字節(jié)寫到ROM控制器104,它與該局域寄存器的內(nèi)容組合并送到Z總線。此后啟動(dòng)寄存器R15用作Mario芯片的程序計(jì)數(shù)器。
一檢測到上面SuperNES向ROM控制器104寫入操作的后沿就使Mario的“GO”標(biāo)志置位。若程序計(jì)數(shù)器減超高速緩存基址寄存器大于超高速緩存容量,或超高速緩存標(biāo)志與程序計(jì)數(shù)器的積減去超高速緩存基址寄存器除以16等于零,就將程序計(jì)數(shù)器的內(nèi)容送給ROM10而起動(dòng)ROM定時(shí)計(jì)數(shù)器(圖13方框406)。
一開始,在執(zhí)行繪制梯形子程序之前,用于梯形循環(huán)程序的變量與SuperMario寄存器是相關(guān)聯(lián)的,如梯形程序列的初始部分中所示,例如,作為“標(biāo)繪X位置”的“rx”與寄存器R1是相關(guān)聯(lián)的,而變量“rloop”則與寄存器R13相關(guān)聯(lián)。
分配好這些寄存器之后,梯形程序開始如下執(zhí)行。當(dāng)ROM控制器104中的ROM定時(shí)計(jì)數(shù)器達(dá)到5的計(jì)數(shù)(近200納秒),就將所要執(zhí)行的第一條指令“IWTrloop,hlines2”從ROM數(shù)據(jù)總線鎖存進(jìn)圖4A中的流水線寄存器62。數(shù)據(jù)同時(shí)被寫入超高速緩存RAM94。在執(zhí)行指令“IWTrloop,hlines”時(shí),使程序計(jì)數(shù)器遞增。設(shè)置“IL”和“IH”標(biāo)志以表明指令流的下面兩字節(jié)是立即數(shù)據(jù)。當(dāng)ROM定時(shí)計(jì)數(shù)器406達(dá)到5,就將立即數(shù)據(jù)(低字節(jié))寫入超高速緩沖RAM94,并保存在ROM控制器104中的暫時(shí)寄存器。重復(fù)ROM讀取機(jī)能,該立即數(shù)的高字節(jié)與低字節(jié)結(jié)合并送到Z總線。為設(shè)置循環(huán)計(jì)數(shù)器,起動(dòng)寄存器R13并在那兒存儲(chǔ)Z總線的內(nèi)容。在該例行程序的這一時(shí)刻開始,就從存儲(chǔ)器讀出每條指令直到遇到循環(huán)指令為止。
在執(zhí)行指令“FROMRX1”時(shí),指令代碼的最低四位被裝進(jìn)寄存器控制器中的四位“FROMY”寄存器602(見圖16)。另外允許RX1(寄存器R3)來的數(shù)據(jù)上Y總線并將它存進(jìn)16位“FROMX”寄存器618。在執(zhí)行“TORX”指令時(shí),指令代碼的最低四位被裝進(jìn)寄存器控制器中的四位“起動(dòng)Z”寄存器600(見圖16)。
“HIB”指令是通過將“FROMX”寄存器的十六位內(nèi)容裝入X總線而執(zhí)行的。ALU將X總線的高字節(jié)放到Z總線的低字節(jié)上并使Z總線上的高字節(jié)設(shè)為零。這去除X位置的小數(shù)部分并在寄存器RX(寄存器R1)留下第一水平線的起點(diǎn)。
在執(zhí)行指令“FROMRX2”時(shí),執(zhí)行如上所述執(zhí)行“FROMRX1”中相似的操作。該“HIB”指令導(dǎo)致對梯形的頂線右側(cè)X坐標(biāo)進(jìn)行操作(類似于上面所說的那些)從而將第一水平線的終點(diǎn)留在寄存器R0(用作累加器的缺省寄存器)。
“RLEN”指令和“SUBRX”指令是通過從線的終點(diǎn)減去該線的起點(diǎn)而被執(zhí)行的RLEN(12)=R0-Rx。若結(jié)果為負(fù),符號標(biāo)志將被置位,表明條件假。
“BMIHLINES3”指令是兩字節(jié)指令,若符號標(biāo)志置位,第一字節(jié)就設(shè)立一標(biāo)志。若條件標(biāo)志置位,第二字節(jié)是轉(zhuǎn)移偏移(這里R15等于R15加上該指令)。若不是,R15不被替換而程序繼續(xù)正常進(jìn)行。
執(zhí)行“INCRLEN”指令以使線長度寄存器加1以確保至少標(biāo)繪一個(gè)像素?!癓OOP”指令用于進(jìn)行R12=R12-1的計(jì)算。若R12不是零,則R15(程序計(jì)數(shù)器)裝上13的內(nèi)容藉此實(shí)行轉(zhuǎn)移。
若此刻的程序在超高速緩存RAM94的范圍內(nèi),則超高速緩存裝載電路400將檢測出該轉(zhuǎn)移,并繼續(xù)加載超高速緩存RAM94,而在這樣做時(shí)暫停執(zhí)行程序。結(jié)束時(shí),程序計(jì)數(shù)器加上其新值而從超高速緩存RAM94讀取下面的指令。
為執(zhí)行“標(biāo)繪”指令,循環(huán)/標(biāo)繪指令配對形成水平線繪制的算法。標(biāo)繪指令將使由R1、R2(作為X和Y坐標(biāo))編址的屏面像素設(shè)定為圖4A中示出的“COLOR寄存器”54中所設(shè)定的彩色。含有該像素的字符的地址是由標(biāo)繪硬件52計(jì)算的。該新像素?cái)?shù)據(jù)保存在字符線緩沖器(彩色矩陣),直到Mario芯片移到一不同的字符位置進(jìn)行標(biāo)繪。當(dāng)所有彩色信息都已復(fù)制到彩色矩陣中的雙緩沖機(jī)構(gòu)的第二級,就將該信息寫入到外部RAM。
執(zhí)行“WITHRX1”的“ADDRX1INC”指令以更新該梯形的左側(cè)X坐標(biāo)。類似地“WITHRX2”和“ADDRX2INC”用來更新梯形的右側(cè)。“DECRDY”,“BNEHlines1”和“INCRY”指令用來移到下一個(gè)Y位置(下一掃描行)直到梯形完成。
下面的程序列表說明可如何對Mario芯片編程以使8位X,Y和Z點(diǎn)的陣列旋轉(zhuǎn)。該程序說明根據(jù)本發(fā)明的例示性實(shí)施例對圖形協(xié)處理器編程以執(zhí)行旋轉(zhuǎn)操作。下面給出該程序的列表LISTINGROTATE;由寄存器rmat1211,rmat2133,rmat2322,ramt3231,rmat0033中的旋轉(zhuǎn)矩陣旋轉(zhuǎn)8位X,Y,Z點(diǎn)的矩陣;矩陣元是8位帶符號小數(shù);即127=127/128=接近1;-128=-128/128=-1;這些均被壓縮存儲(chǔ)在每個(gè)寄存器內(nèi)作為2個(gè)8位單元
rx=1;xry=2;yrz=3;zrt=4;temprmat1211=5;矩陣元11和12rmat2113=6;矩陣元13和21rmat2322=7;矩陣元22和23rmat3231=8;矩陣元31和32rmat0033=9;矩陣元33routptr=10;至旋轉(zhuǎn)點(diǎn)緩沖器指針(ptr)msh-rotpoints8miwtr14,pointsaddr;指向所要旋轉(zhuǎn)點(diǎn)的ROM指針miwtr12,numpoints;所要旋轉(zhuǎn)的點(diǎn)的數(shù)目miwtroutptr,m-rotp-;指向旋轉(zhuǎn)點(diǎn)緩沖器的RAMnts指針mcache;設(shè)定超高速緩存地址mmover13,pc;初始循環(huán)地址mmatrotploopmtorx;取xmgetbmincr14mfromrmat1211;11mtortmmultrx;m11*xmtory;取ymgetbmincr14mfromrmat2113;21mhib
mmultry;m21*ymtortmaddrtmtorz;取zmgetbmincr14mfromrmat3231;31mmultrz;m31*zmaddrtmaddr0mhibmstb(routptr);存儲(chǔ)旋轉(zhuǎn)后的xmincroutptrmfromrmat1211;12mhibmtortmmultrx;m12*xmfromrmat2322;22mmultry;m22*ymtortmaddrtmfromrmat3231;32mhibmmultrz;m32*zmaddrtmaddr0mhibmstb(routptr);存儲(chǔ)旋轉(zhuǎn)后的ymincroutptrmfromrmat2113;13mtortmmultrx;m13*x
mfromrmat2322;23mhibmmultry;m23*ymtortmaddrtmfromrmat0033;33mmultrz;m33*zmaddrtmaddr0mhibmstb(routptr);存儲(chǔ)旋轉(zhuǎn)后的zmloopmincroutptr圖19、20和21說明當(dāng)結(jié)合主計(jì)算機(jī)系統(tǒng)例如SuperNES使用本發(fā)明的可編程圖形協(xié)處理器時(shí)可產(chǎn)生的某些特殊效果。如圖19所示,描繪出一個(gè)目標(biāo)即直升機(jī)的側(cè)視圖。該圖并不意圖準(zhǔn)確地反映使用Mario芯片所能產(chǎn)生的高品質(zhì)顯示。圖20和21則示出圖19給出的直升機(jī)的放大的和旋轉(zhuǎn)的圖像。本發(fā)明的圖形協(xié)處理器可用來產(chǎn)生包括涉及高速旋轉(zhuǎn)和縮放的基于多邊形的目標(biāo)在內(nèi)的3D型(和其他的)特殊效果,而僅最低限度地加重電視游視主處理系統(tǒng)的負(fù)擔(dān)。
本發(fā)明已經(jīng)詳細(xì)地說明和圖釋了,應(yīng)該理解詳盡的揭示僅是用作說明和解釋。雖然上述實(shí)施例被視作較佳實(shí)施例,應(yīng)該理解該領(lǐng)域技術(shù)人員可以作出多種變化和改動(dòng),而下面的權(quán)利要求正是用來覆蓋這類在本發(fā)明實(shí)質(zhì)和保護(hù)范圍之內(nèi)的變化和改動(dòng)的。
權(quán)利要求
1.一種信息處理系統(tǒng)(20,19)中的外部存儲(chǔ)系統(tǒng)(19),該信息處理系統(tǒng)與顯示屏(36)一起使用,并具有執(zhí)行電視圖形程序的微處理器(22)和存儲(chǔ)組合時(shí)確定一顯示幀的多個(gè)字符的字符數(shù)據(jù)的圖像存儲(chǔ)器(30),該外部存儲(chǔ)系統(tǒng)(19)的特征在于它包括程序存儲(chǔ)器(10),可至少存儲(chǔ)所述電視圖形程序的某些指令;變換電路(2,52),與所述程序存儲(chǔ)器相連,接收按照像素規(guī)格表示的顯示數(shù)據(jù)以處理所述像素規(guī)格并且將所述像素規(guī)格數(shù)據(jù)變換成所述圖像存儲(chǔ)器(30)所采用的形式的字符數(shù)據(jù)。
2.如權(quán)利要求1所述的外部存儲(chǔ)系統(tǒng),其特征在于所述像素規(guī)格包括在顯示屏(36)上確定像素位置的坐標(biāo)數(shù)據(jù),所述變換電路(2,52)接收從所述程序存儲(chǔ)器來的所述像素規(guī)格。
3.如權(quán)利要求2所述的外部存儲(chǔ)系統(tǒng),其特征在于所述變換電路(52)包括地址變換器電路(202,204,HA,F(xiàn)A,214,216)以接收像素坐標(biāo)數(shù)據(jù)并產(chǎn)生指定字符的地址。
4.如權(quán)利要求1所述的外部存儲(chǔ)系統(tǒng),其特征在于還包括隨機(jī)存取存儲(chǔ)器(RAM)(6,8),臨時(shí)存儲(chǔ)所述變換電路所產(chǎn)生的字符數(shù)據(jù)的緩沖存儲(chǔ)器裝置(206),和將存儲(chǔ)在所述緩沖存儲(chǔ)器中的字符數(shù)據(jù)送給所述RAM的裝置(206,228,88)。
5.如權(quán)利要求2所述的外部存儲(chǔ)系統(tǒng),其特征在于還包括臨時(shí)存儲(chǔ)來自所述程序存儲(chǔ)器的像素坐標(biāo)數(shù)據(jù)的寄存器裝置(202,204)。
6.如權(quán)利要求1所述的外部存儲(chǔ)系統(tǒng),其特征在于還包括與所述程序存儲(chǔ)器相連的可編程圖形處理器(2),而所述變換電路(52)配置在所述圖形處理器中。
7.如權(quán)利要求6所述的外部存儲(chǔ)系統(tǒng),其特征在于所述可編程圖形處理器包括第一源端公共總線(X),第二源端公共總線(Y)和目的端公共總線(Z),所述變換電路接收來自所述第一源端總線(X)和所述第二源端總線(Y)的數(shù)據(jù)并將數(shù)據(jù)送到所述目的端總線。
8.如權(quán)利要求1所述的外部存儲(chǔ)系統(tǒng),其特征在于所述像素規(guī)格包括像素的顯示坐標(biāo)和與所述顯示坐標(biāo)相關(guān)的彩色信息,還包括接收并臨時(shí)存儲(chǔ)所述彩色信息的彩色寄存器裝置(54)。
9.如權(quán)利要求8所述的外部存儲(chǔ)系統(tǒng),其特征在于還包括接收從所述彩色寄存器裝置來的像素彩色信息的寄存器矩陣(206)。
10.如權(quán)利要求1所述的外部存儲(chǔ)系統(tǒng),其特征在于還包括隨機(jī)存取存儲(chǔ)器(RAM)(6,8)和控制對所述RAM存取的RAM控制器(88),所述變換電路包括產(chǎn)生字符地址的地址變換裝置(202,204,HA,F(xiàn)A,214,216),和產(chǎn)生包括與所述像素規(guī)格對應(yīng)的數(shù)據(jù)在內(nèi)的字符數(shù)據(jù)的字符數(shù)據(jù)產(chǎn)生裝置(202,206),和將由所述變換電路所產(chǎn)生的字符地址和字符數(shù)據(jù)傳送給所述RAM控制器(88)的裝置(206,216)。
11.如權(quán)利要求1所述的外部存儲(chǔ)系統(tǒng),其特征在于還包括隨機(jī)存取存儲(chǔ)器(RAM)(6,8),和將字符信息從所述RAM送給所述變換電路以便與由該變換電路處理的字符規(guī)格并聯(lián)起來的裝置(82,206)。
12.如權(quán)利要求1所述的外部存儲(chǔ)系統(tǒng),其特征在于還包括存儲(chǔ)字符數(shù)據(jù)的裝置,所述變換電路(52)包括從所述存儲(chǔ)裝置接收目前處理的像素附近的待顯示的其他像素的字符數(shù)據(jù)信息的裝置。
13.如權(quán)利要求1所述的外部存儲(chǔ)系統(tǒng),其特征在于程序存儲(chǔ)器(10)和所述變換電路(2,52)配置在電視游戲卡(19)中。
14.如權(quán)利要求1所述的外部存儲(chǔ)系統(tǒng),其特征在于所述變換電路包括存儲(chǔ)與指定像素和包含有該指定像素的字符中的其他像素有關(guān)的數(shù)據(jù)的彩色矩陣(206)。
15.如權(quán)利要求14所述的外部存儲(chǔ)系統(tǒng),其特征在于所述彩色矩陣(206)包括多個(gè)行和列,該彩色矩陣是按行裝載按列讀出的。
16.如權(quán)利要求15所述的外部存儲(chǔ)系統(tǒng),其特征在于還包括臨時(shí)存儲(chǔ)包括像素坐標(biāo)數(shù)據(jù)在內(nèi)的像素規(guī)格的寄存器裝置(202),所述彩色矩陣(206)是部分地由所述寄存器裝置的至少一部分內(nèi)容尋址的。
17.如權(quán)利要求1所述的外部存儲(chǔ)系統(tǒng),其特征在于還包括記錄正被處理的像素是不是正被處理的當(dāng)前字符的一部分的位未決裝置(210)。
18.如權(quán)利要求17所述的外部存儲(chǔ)系統(tǒng),其特征在于還包括隨機(jī)存取存儲(chǔ)器(RAM)(6,8),和將所述變換電路(52)產(chǎn)生的字符數(shù)據(jù)根據(jù)所述位未決裝置(210)的狀態(tài)傳送到所述RAM的裝置。
19.如權(quán)利要求1所述的外部存儲(chǔ)系統(tǒng),其特征在于還包括表示無需更新的,與正被處理的像素規(guī)格有關(guān)字符的各位的裝置(210)。
20.如權(quán)利要求19所述的外部存儲(chǔ)系統(tǒng),其特征在于所述變換電路(52)包括響應(yīng)所述表示裝置(210)的規(guī)定狀態(tài)產(chǎn)生字符地址的裝置。
21.如權(quán)利要求1所述的外部存儲(chǔ)系統(tǒng),其特征在于還包括存儲(chǔ)所述變換電路產(chǎn)生的字符地址的地址寄存器裝置(216),和與地址寄存器裝置相連、將所述變換電路所產(chǎn)生的當(dāng)前字符地址與以前產(chǎn)生的地址進(jìn)行比較的地址比較器(218)。
22.如權(quán)利要求21所述的外部存儲(chǔ)系統(tǒng),其特征在于還包括存儲(chǔ)字符數(shù)據(jù)的字符存儲(chǔ)器裝置(6,8),和響應(yīng)所述地址比較器以便將存儲(chǔ)在所述地址寄存器裝置中的地址寫出至所述字符存儲(chǔ)裝置的控制裝置(200)。
23.一種與一顯示屏一起使用的圖形處理器(2),其特征在于包括接收像素規(guī)格的裝置(56,58);處理所述像素規(guī)格并產(chǎn)生對包括該指定像素在內(nèi)的字符進(jìn)行規(guī)定的字符規(guī)格的變換電路(52)。
24.如權(quán)利要求23所述的圖形處理器,其特征在于所述像素規(guī)格包括像素的顯示坐標(biāo)和與所述顯示坐標(biāo)相關(guān)的彩色信息,而且該處理器還包括接收和臨時(shí)存儲(chǔ)所述彩色信息的彩色寄存器裝置(54)。
25.如權(quán)利要求23所述的圖形處理器,其特征在于還包括接收從所述彩色寄存器裝置(54)來的像素彩色信息的寄存器矩陣(206)。
26.如權(quán)利要求23所述的圖形處理器,其特征在于還包括隨機(jī)存取存儲(chǔ)器(RAM)(6,8),和將字符信息從所述RAM送給所述變換電路以便與由變換電路處理的像素規(guī)格關(guān)聯(lián)起來的裝置(82,206)。
27.一種圖形處理器(2),用于具有執(zhí)行存儲(chǔ)在至少一種存儲(chǔ)設(shè)備(10)中的電視圖形程序的主處理單元(20)的信息處理系統(tǒng)(20,19)中,所述圖形處理器(2)的特征在于接收從所述至少一存儲(chǔ)器來的程序指令的裝置(INSTR,62,60);響應(yīng)至少一規(guī)定的程序指令以便將與所述至少一規(guī)定的程序指令相關(guān)的基于像素的格式的數(shù)據(jù)變換成基于字符的數(shù)據(jù)格式的裝置(52)。
28.如權(quán)利要求27所述的圖形處理器,其特征在于還包括第一源端公共總線(X),第二源端公共總線(Y)和目的端公共總線(Z),變換裝置(52)接收從所述第一源端總線和所述第二源端總線來的數(shù)據(jù)并向所述目的端總線送去數(shù)據(jù)。
29.如權(quán)利要求27所述的圖形處理器,其特征在于所述圖形處理器在使用中與隨機(jī)存取存儲(chǔ)器(RAM)(6,8)相連,還包括控制對所述RAM存取的RAM控制器(88),所述變換裝置(52)包括產(chǎn)生字符地址的地址變換裝置(202,204,HA,F(xiàn)A,214,216),產(chǎn)生包括與所述基于像素的數(shù)據(jù)相對應(yīng)的數(shù)據(jù)在內(nèi)的字符數(shù)據(jù)的字符數(shù)據(jù)產(chǎn)生裝置(202,206),和將所述變換裝置所產(chǎn)生的字符地址和字符數(shù)據(jù)傳送給所述RAM控制器的裝置(88)。
全文摘要
本發(fā)明公開了一種全編程圖形微處理器,它配置在外部存儲(chǔ)單元(例如插入式電視游戲卡)中,與配置于游戲卡上的三總線結(jié)構(gòu)結(jié)合使用。該圖形協(xié)處理器可執(zhí)行來自程序ROM,外部RAM或其本身內(nèi)部的超高速緩存RAM的程序,具有實(shí)現(xiàn)有關(guān)3-D圖形算術(shù)運(yùn)算的指令集,例如包括由專用硬件執(zhí)行將單個(gè)像素標(biāo)繪在主系統(tǒng)字符映像顯示中的指令,建立“虛擬的”位映像,并與主處理器交互作用使其16個(gè)通用寄存器都可由主處理器存取。
文檔編號G06T13/00GK1080200SQ9211279
公開日1994年1月5日 申請日期1992年10月31日 優(yōu)先權(quán)日1992年1月30日
發(fā)明者杰里米E·桑, 本·奇斯, 卡爾N·格雷漢姆, 彼特R·沃內(nèi)斯 申請人:A/N股份有限公司