專利名稱:用于電視游戲系統(tǒng)等具有可編程圖形處理器的外部存儲系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明概括地說涉及一種包括其中配備有可編程處理器的獨特外部存儲單元的信息處理裝置。本發(fā)明具體地說涉及一種具有程序存儲器的可拆卸的外部存儲單元,程序存儲器存儲的程序一部分由主處理系統(tǒng)如電視游戲系統(tǒng)執(zhí)行,一部分由為增強主系統(tǒng)的高速圖形處理能力而設(shè)計的可編程微處理器執(zhí)行。
本專利申請與同時由桑等人提交的申請順序號為_,_題為“用于電視游戲系統(tǒng)等具有像素至字符變換硬件的可編程圖形處理器”的專利申請(代理人案卷號為1248-4),和同時由桑等人提交的申請順序號為_,_題為“用于電視游戲系統(tǒng)等具有增強的存儲器控制電路的圖形處理器”的專利申請(代理人案卷號為1248-5)有關(guān)。
在電視游戲控制臺中配備有8位微處理器和相應(yīng)的顯示處理子系統(tǒng)的已有技術(shù)的電視游戲機。一般通過在游戲卡中以8位乘8位方陣形式預(yù)先存儲字符,并利用這些預(yù)先存儲的字符的各種可編程組合建立起屏面顯示來產(chǎn)生圖形。這類已有技術(shù)的電視游戲系統(tǒng)一般具有使整個顯示背景和游戲者控制的若干“活動目標”或“子畫面”移動的能力。
這類已有技術(shù)的系統(tǒng)不能實現(xiàn)這樣的電視游戲在這些游戲中包含由多邊形組合構(gòu)成的活動目標,而且這些目標必須能被操縱(如旋轉(zhuǎn))并在每幀“重新繪制”。例如,這類系統(tǒng)中的已有技術(shù)的8位處理器和相關(guān)的顯示處理電路無法進行所需的運算來使三維的、基于多邊形的目標有效地旋轉(zhuǎn)或使這類旋轉(zhuǎn)的目標合適地縮放以產(chǎn)生3-D型特殊效果。本申請發(fā)明人認識到精致的圖形需要逐個像素地更新屏面和在實時基礎(chǔ)上完成復(fù)雜的數(shù)學(xué)運算。這類已有技術(shù)的基于字符的電視游戲機是無法完成這些任務(wù)的。
已有技術(shù)的8位電視游戲機也不能有效地完成需要逐個像素地迅速更新屏面的其他圖形技術(shù)。例如,這類系統(tǒng)無法有效地在三維空間使一個目標映像到作為另一個顯示目標一部分顯示的多邊形上(此后稱為質(zhì)地映像(texture mapping))。
為了超過已有技術(shù)的8位機器的圖形能力,電視游戲系統(tǒng)已被設(shè)計成采用功能更強的16位處理器。這類16位處理器可為電視游戲系統(tǒng)提供處理更精致的圖形所需的數(shù)學(xué)機能。例如,這些系統(tǒng)可生成更高級的彩色和得到更好的圖形分辨率。這類16位電視游戲機是基于字符的系統(tǒng),能夠?qū)崿F(xiàn)可預(yù)先繪制成基于字符或子畫面的圖形的多種電視游戲。這類16位電視游戲機還能使具有多種色彩的背景平面高速移動并在這些平面的后面或前面配置有活動目標。
然而,這類已有技術(shù)的16位電視游戲機實現(xiàn)不了具有3-D型特殊效果的高級電視游戲,這些游戲要顯示由多邊形所組成并需每幀變化的復(fù)雜目標。例如,這類已有技術(shù)的基于字符的16位機器無法實現(xiàn)需要許多須逐幀地放大或縮小的全方位旋轉(zhuǎn)的目標或子畫面的游戲。本申請發(fā)明人認識到要有效地實現(xiàn)涉及全方位旋轉(zhuǎn)和縮放的基于多邊形的目標的這類游戲,必需繪制多邊形的邊界并逐個像素地將合適數(shù)據(jù)填入這類基于多邊形的目標。這類任務(wù)必須逐個像素地進行,故要花去大量的時間處理。
在已有技術(shù)中,已對可拆卸的游戲卡作了改進,使現(xiàn)行處理器可訪問比與主微處理器相聯(lián)的現(xiàn)有地址線數(shù)目所允許的范圍更大的程序存儲器地址空間,從而得到更高級的游戲。例如,這類已有技術(shù)的8位系統(tǒng)采用了包括可執(zhí)行存儲體切換和其他附加功能的多存儲器控制器芯片的游戲卡。然而這類涉及存儲體切換的芯片無法使電視游戲系統(tǒng)勝任上述性質(zhì)的高速圖形處理。
本發(fā)明針對已有技術(shù)的上述問題,提供一種獨特的、全編程的、設(shè)計成配備在與主信息處理系統(tǒng)連接的可拆卸的外部存儲單元中的圖形微處理器。在這里所述的示范性實施例中,本發(fā)明是在一包括主電視游戲系統(tǒng)和裝有圖形微處理器的電視游戲卡的電視游戲系統(tǒng)中實現(xiàn)的。
這里所述的圖形微處理器和電視游戲系統(tǒng)具有許多獨特的、優(yōu)異的特征,下面綜述這些特征。
按照本發(fā)明,獨特的圖形處理器以插件方式與主微處理器連接。為使處理速度最大,圖形處理器可以與主微處理器以并行方式工作。在一個示范性實施例中,裝有圖形協(xié)處理器的游戲卡還包括只讀存儲器(ROM)和隨機存取存儲器(RAM)。
本發(fā)明的圖形協(xié)處理器對存儲事務(wù)在本身需要與從主微處理器讀取數(shù)據(jù)這兩者之間作出仲裁。該處理器能與主微處理器同時執(zhí)行程序以允許高速處理,在此之前已有技術(shù)的電視游戲系統(tǒng)是無法達到的。
本發(fā)明的圖形協(xié)處理器與配置在游戲卡上的三總線結(jié)構(gòu)結(jié)合在一起工作,從而通過優(yōu)化主處理器和游戲卡處理器有效使用卡內(nèi)RAM和ROM存儲設(shè)備的能力以使這些存儲器得到有效利用。
本發(fā)明的全用戶編程圖形協(xié)處理器包括一設(shè)計成允許高速處理的獨特指令集。該指令集能有效地實施與3-D圖形相關(guān)的運算操作,例如擁有由專用硬件執(zhí)行的用以在主電視游戲系統(tǒng)的字符映像的顯示中標繪單個像素的專用指令。
該指令集中的許多指令能夠在一個機器周期中執(zhí)行,并設(shè)計成存儲在程序ROM的一個字節(jié)中。當然,這些指令通過采用專用的前綴指令可以具有更強的功能。
該指令集擁有獨特的基于像素的指令,按程序員的觀點來看,即使主系統(tǒng)是基于字符的,這些指令也能通過允許對單個像素的編址來建立一“虛擬的”位映像。該像素數(shù)據(jù)在掃描時由圖形處理器轉(zhuǎn)換為主系統(tǒng)基于字符的16位機器一般所采用的形式的字符數(shù)據(jù)。這樣,例如程序員雖然使用獨特的“標繪(PLOT)”指令來標繪像素,但當有關(guān)數(shù)據(jù)讀到RAM時,該數(shù)據(jù)轉(zhuǎn)換為16位主機器所能采用的基于字符的格式。專用像素標繪硬件執(zhí)行該指令以有效地使高速3-D型圖形得以實施。
本發(fā)明的圖形協(xié)處理器還具有獨特的“超高速緩存(CACHE)”指令和超高速緩沖存儲機能以允許存儲在程序ROM的程序指令由圖形協(xié)處理器高速地從超高速緩存RAM取出執(zhí)行。該高速緩存指令允許程序員通過指出所要高速執(zhí)行的那部分程序就可自動地開始從圖形協(xié)處理器內(nèi)部的高速緩沖存儲器執(zhí)行程序。
該指令集還具有用來輔助對具有高品質(zhì)3-D型特征的電視游戲所需的圖形技術(shù)進行編程的專用指令。這類指令包括上述的像素標繪指令和合并(MERGE)指令,用來使存儲在不同的寄存器中的子畫面數(shù)據(jù)并接,以更有效地滿足顯示目標的旋轉(zhuǎn)或/和質(zhì)地映像。
專用指令可緩沖數(shù)據(jù),以允許本發(fā)明的主微處理器和圖形協(xié)處理器并行處理。例如,采用一專用指令來提高運行速度,以補償在游戲卡中采用存取時間相對慢的ROM。在這種情況下,圖形處理器使用一種只要引用預(yù)定的通用寄存器(例如,示范性實施例中寄存器R14)就會自動開始從ROM讀取數(shù)據(jù)的指令。當發(fā)生這類ROM存取時,也可以執(zhí)行別的代碼。一些周期之后,讀取的數(shù)據(jù)就可供使用了。當然,與此同時處理器無需等候此數(shù)據(jù),而能夠完成其他任務(wù),因此可以寫入執(zhí)行很快的代碼。
為有效地處理子程序連接,本發(fā)明的圖形協(xié)處理器還包括連接(LINK)指令,用以將子程序結(jié)束后所要執(zhí)行的指令的地址在這結(jié)束時刻裝入程序計數(shù)器R15。
指令集具有RAM回存(store-back)指令。按照該指令,在數(shù)據(jù)從RAM讀出并用該數(shù)據(jù)進行操作后,在圖形協(xié)處理器中的RAM控制器在相應(yīng)的上次使用的RAM地址開始已更新數(shù)據(jù)的回存操作。這一個周期的回存指令可以方便地用于有效地更新數(shù)據(jù)塊。
本發(fā)明的圖形協(xié)處理器還擁有能利用最低有效字節(jié)后跟著最高有效字節(jié)而自動地從RAM讀出或?qū)懭氲闹噶?。該機能可有助于在編程時為以不同格式存儲的數(shù)據(jù)提供兼容而無需進行任何數(shù)據(jù)轉(zhuǎn)置。
本發(fā)明的圖形處理器可以通過修改內(nèi)部處理器狀態(tài)寄存器而設(shè)定為各種不同的標繪方式。這些方式包括每個交替的像素具有不同顏色的能產(chǎn)生可編程明暗效果的晃動方式。另一可選擇方式允許對顏色進行高半字節(jié)和低半字節(jié)選擇,使兩個子畫面能夠存儲在存儲器中某一原來由一個子畫面占據(jù)的空間。
本發(fā)明擁有許多獨特的硬件特征。例如,圖形協(xié)處理器具有專用標繪電路,它通過利用單片RAM擁有增強的像素數(shù)據(jù)緩沖。這種數(shù)據(jù)緩沖可使對外部數(shù)據(jù)RAM讀出或?qū)懭胩幚砹繙p至最小,并提高將顯示的多邊形填以合適數(shù)據(jù)的速度。
除了如上所述一旦有對寄存器R14的任何訪問就起動的讀出緩沖特征外,本發(fā)明的圖形協(xié)處理器還具有寫入緩沖特征,可緩沖想要寫到游戲卡RAM的數(shù)據(jù),以使馬里奧芯片(Mario chip)的中央處理器盡快地執(zhí)行別的指令。
本發(fā)明的圖形協(xié)處理器還包括圖形處理器和主處理系統(tǒng)均可存取的16個寄存器,R0-R15。寄存器R0是無需在指令中特地注明和起累加器作用的缺省寄存器。R15作為程序計數(shù)器。寄存器R14是上面提及的,若被訪問便自動開始從ROM讀取數(shù)據(jù)的寄存器。專用前綴指令可用來定義源和/或目的寄存器。本發(fā)明的圖形協(xié)處理器與主協(xié)處理器的交互作用使得圖形協(xié)處理器的寄存器可由主處理器存取。
與圖形協(xié)處理器相關(guān)聯(lián)的獨特的三條總線結(jié)構(gòu)允許較高的并行度。這3條總線包括主處理器總線,ROM總線和RAM總線。這些總線在物理上是分開的并可以同時使用。每條總線包括地址線、數(shù)據(jù)線和控制線。主處理器總線包括地址線、數(shù)據(jù)線和控制線,提供圖形協(xié)處理器中所需的較寬范圍的信號。采用該總線結(jié)構(gòu)的本發(fā)明的圖形處理器可以執(zhí)行來自程序ROM,外部RAM或它本身內(nèi)部的高速緩存RAM的程序。
圖形協(xié)處理器與主微處理器用種種仲裁方式進行接口。在這方面,通過在一預(yù)定的圖形處理器狀態(tài)寄存器位置上裝入邏輯“1”,就由主處理器設(shè)定一種仲裁方式,表明主處理器放棄了對游戲卡的ROM和RAM進行訪問。
本申請發(fā)明人認識到,盡管在主處理器因相應(yīng)地對狀態(tài)寄存器置位而放棄了對ROM和RAM訪問這種場合下,中斷還是可以發(fā)生,主處理器可以開始對ROM的訪問以讀取處理這一中斷的程序的地址。在這種情況下,圖形處理器提供給主微處理器的不是程序ROM的地址而是工作RAM的地址,讓主處理器訪問它本身內(nèi)部的工作RAM。該頂技術(shù)阻止主處理器在圖形協(xié)處理器正執(zhí)行來自程序ROM的程序時對該程序ROM進行尋址。
當主處理器需對游戲卡RAM訪問時,使圖形協(xié)處理器狀態(tài)寄存器置位使得圖形協(xié)處理器不能訪問RAM,藉此使主處理器從RAM存取任何所需要的信息,之后再將圖形協(xié)處理器切換到可對RAM訪問的狀態(tài)。然而,因其處理速度更快故希望協(xié)處理器最大限度地利用卡上的ROM和RAM。
本發(fā)明的圖形協(xié)處理器設(shè)計為將裝載于字符數(shù)據(jù)RAM中的像素信息有效地轉(zhuǎn)送到主處理器圖像RAM供顯示。但圖像RAM不能通過任何游戲卡總線由圖形協(xié)處理器直接存取。必須利用主處理器的存儲器直接存取(DMA)電路進行這種轉(zhuǎn)送。
本發(fā)明的圖形協(xié)處理器接收來自主信息處理系統(tǒng)的若干時鐘信號。圖形協(xié)處理器中的定時由這些時鐘中的一個驅(qū)動。
作為本發(fā)明的可選配特征,圖形協(xié)處理器中的電路允許處理器重新配置,以考慮到將來的變動,而這些變動取決于通過輸出地址線(它們在緊接著加電復(fù)位之后用作配置設(shè)定輸入線)收到的信號狀態(tài)。與這些地址線連接的選配項設(shè)定電阻的值由圖形協(xié)處理器讀出。這些信號可用來定義例如與圖形處理器一起使用的RAM芯片的種類,如靜態(tài)RAM或動態(tài)RAM。
結(jié)合附圖對下面的本發(fā)明示范性實施例的詳細說明會使本發(fā)明的所有形式和優(yōu)點更易于理解。
圖1是根據(jù)本發(fā)明示范性實施例的示范性外部存儲系統(tǒng)的方框圖;
圖2是與目前較佳的示范性實施例的圖形協(xié)處理器一起使用的示范性主處理系統(tǒng)的方框圖;
圖3是內(nèi)置圖形協(xié)處理器的游戲卡和內(nèi)置主處理系統(tǒng)的底座部件的示范性物理配置的透視圖;
圖4A和圖4B是根據(jù)目前較佳示范性實施例的圖形協(xié)處理器的方框圖;
圖5是敘述為起動圖形協(xié)處理器操作而由主處理系統(tǒng)執(zhí)行的操作序列的流程圖;
圖6是圖4A所示的算術(shù)邏輯單元的更詳細方框圖;
圖7是圖4A所示類型的示范性像素標繪電路的更詳細方框圖;
圖8A是示出標繪控制器接收的輸入信號和標繪控制器產(chǎn)生的輸出信號的方框圖;
圖8B是像素標繪電路的彩色矩陣中的彩色矩陣單元;
圖8C描述有關(guān)像素標繪電路的定時、控制和數(shù)據(jù)信號;
圖9是圖4A所示的RAM控制器的更詳細方框圖;
圖9A示出有關(guān)圖9所示的RAM控制器的示范性定時、控制和數(shù)據(jù)信號;
圖10是圖9所示的仲裁邏輯的電路圖;
圖11是本發(fā)明圖形協(xié)處理器的示范性實施例中的再同步電路圖;
圖12是有關(guān)圖11的再同步電路的定時信號;
圖13是本發(fā)明圖形協(xié)處理器的ROM控制器的更詳細的方框圖;
圖14是根據(jù)本發(fā)明示范性實施例的圖形協(xié)處理器的超高速緩存控制器的方框圖;
圖15A是本發(fā)明圖形協(xié)處理器中與指令譯碼有關(guān)的電路的方框圖;
圖15B示出說明圖15A中的先行邏輯的工作用的示范性定時信號;
圖16和17是示出根據(jù)本發(fā)明示范性實施例的圖形協(xié)處理器的寄存器控制邏輯的方框圖;
圖18是敘述在完成多邊形生成任務(wù)中圖形協(xié)處理器的操作程序的流程圖;
圖19、20和21是用來說明按照本發(fā)明示范性實施例可以生成的基于多邊形的目標的縮放和旋轉(zhuǎn)特征的示范性顯示。
根據(jù)本發(fā)明的示范性實施例,本發(fā)明的圖形協(xié)處理器與任天堂(美國)股份有限公司在市場銷售的商品名為超級任天堂娛樂系統(tǒng)(Super NES)的16位電視游戲系統(tǒng)交互作用。該超級任天堂娛樂系統(tǒng)在1991年4月10日提交的申請?zhí)枮?7/651,265的題為“視頻處理裝置”的專利申請和1991年8月26日提交的申請?zhí)枮?7/749,530的題為“存儲器直接存取裝置和其所使用的外部存儲設(shè)備”中得到部分的說明。這些申請通過引用而明顯地歸并在本申請中。應(yīng)該理解本發(fā)明不僅僅限于與Super NES有關(guān)的應(yīng)用,還可以用于別的電視游戲系統(tǒng)或別的非電視游戲用的信息處理系統(tǒng)。
僅為了引用的方便,根據(jù)本示范性實施例的圖形處理器在此之后稱為“Mario芯片(Mario Chip)”。目前較佳的示范性實施例中所述的Mario芯片封裝在電視游戲卡中。應(yīng)該理解只要Mario芯片在使用時與程序存儲器和主處理單元連接,將Mario芯片與程序存儲器置于相同卡盒內(nèi)并不是本發(fā)明所必須的。
圖1示出根據(jù)本發(fā)明示范性實施例的示范性電視游戲卡/外部存儲系統(tǒng)。該游戲卡具有其上安裝有圖1全部元件的印刷電路板(圖上未畫出)。該卡具有排列在印刷電路板插入端的接插件電極陣列1以將信號傳送到或傳送出Super NES主控制臺。接插件電極陣列1由安裝在Super NES主控制臺內(nèi)的相配的接插件容納。
根據(jù)本示范性實施例,配備在游戲卡上的Mario芯片(圖形協(xié)處理器)2是100至128插腳的集成電路芯片。Mario芯片接收許多從主處理系統(tǒng)(例如Super NES)來的控制、地址和數(shù)據(jù)信號。例如,Mario芯片由插腳P112接收來自主處理系統(tǒng)的21MHz時鐘輸入,經(jīng)插腳P117接收可以為21MHz(或另一預(yù)定頻率)的系統(tǒng)時鐘輸入。該系統(tǒng)時鐘輸入例如可用來向Mario芯片提供用于主CPU存儲器存取的存儲器定時信息和提供為Mario芯片內(nèi)的操作定時的時鐘信息。Mario芯片2還包括可選配的外部時鐘輸入(插腳P110),將Mario芯片與外部晶振4連接起來,以比從主系統(tǒng)接收的21MHz更高的時鐘頻率驅(qū)動MarioCPU。
主CPU的地址輸入(HA)從主處理系統(tǒng)(例如Super NES/圖像處理單元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接收存儲器更新信號RFSH,經(jīng)插腳P118接收復(fù)位信號,經(jīng)插腳P104、P105接收讀出和寫入控制信號。該Mario芯片可產(chǎn)生中斷請求信號IRQ并將該信號IRQ經(jīng)插腳P120連接到Super NES。也可從Super NES接受其它控制信號,例如經(jīng)插腳P106接收可起動對主程序ROM10訪問的ROM SEL信號。另外該游戲卡擁有與Super NES的認證處理器在輸入線I、輸出線O和復(fù)位線R交換數(shù)據(jù)的認證處理器3。用來認證游戲卡的認證處理器3和安全系統(tǒng)可以為美國專利USP4,799,635示出的那種,該專利通過引用而歸并于此。
Mario芯片經(jīng)RAM地址總線(RAM A)、及RAM地址插腳P74-P91和RAM數(shù)據(jù)總線(RAM D)及數(shù)據(jù)插腳P93-P100與RAM6和RAM8連接。這些RAM可以是利用分別經(jīng)插腳P90-P91連接的行地址和列地址選通信號(RAS,CAS)進行部分控制的動態(tài)存儲器件。可采用一個或多個靜態(tài)RAM來取代動態(tài)RAM,這時插腳P90和P91將被用來在沒有行地址和列地址選通信號的情況下,將地址信號連接到它們各自的RAM。允許寫入控制信號WE可經(jīng)插腳P107相應(yīng)地送到RAM6和RAM8。
讀、寫控制信號(R,W)由主CPU產(chǎn)生并經(jīng)插腳P104和P105與Mario芯片連接。Mario芯片通過監(jiān)測這些讀出和寫入線能夠確定Super NES CPU所要執(zhí)行的存儲器存取操作的種類。實質(zhì)上來自主機的所有地址線和控制線都類似地由Mario芯片監(jiān)測,以掌握主CPU所要進行的操作。由Mario芯片接收的ROM和RAM尋址信號受到監(jiān)測,并將它們送到相應(yīng)的存儲裝置。在這方面,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)該認識到Mario芯片除了與這里所述的ROM和RAM外還可以與較寬度范圍的不同存儲設(shè)備結(jié)合一起使用。例如可以期待Mario芯片與采用CD ROM的電視游戲系統(tǒng)便利地結(jié)合一起使用。
例如在圖1中不是采用ROM10,而是使用CD ROM(未圖示)來存儲字符數(shù)據(jù),程序指令,圖像、圖形和聲音數(shù)據(jù)。將一種常規(guī)類型的CD機座(也未圖示)與Mario芯片2合適地連接起來,通過地址總線P2-P26為存取數(shù)據(jù)接收存儲器地址信號和/或通過數(shù)據(jù)總線P28-P35接收指令。至于CD機座和CD ROM存儲系統(tǒng)具體的結(jié)構(gòu)和操作細節(jié)是本技術(shù)領(lǐng)域的技術(shù)人員眾所周知的。CD ROM存儲帶來的優(yōu)點在于使每字節(jié)信息的存儲成本顯著地降低。存儲數(shù)據(jù)的成本可以比存儲在半導(dǎo)體ROM上低百分之一百到一千。不幸的是CD ROM存儲器存取/讀出時間比半導(dǎo)體ROM的還長。
Mario芯片采用在至少三條總線上的信息允許并行利用的三總線結(jié)構(gòu)。在這方面,在圖1所示的游戲卡中,Mario芯片同ROM總線(包括ROM數(shù)據(jù)線、ROM地址線和控制線),RAM總線(包括RAM地址線、數(shù)據(jù)線和控制線)和主處理器總線(包括主機地址線、數(shù)據(jù)線和控制線)相連。
Mario芯片結(jié)構(gòu)允許發(fā)生流水線操作以優(yōu)化吞吐量。在這方面,Mario芯片可以在從ROM讀取一個數(shù)據(jù)字節(jié)時,同時處理其它數(shù)據(jù),還同時向RAM寫入另外的數(shù)據(jù),因而能非常有效地處理有關(guān)3-D型的圖形。如下面進一步說明的那樣,Mario芯片2內(nèi)部采用16位結(jié)構(gòu),還設(shè)計為與8位的ROM10和RAM6、RAM8等芯片接口。在內(nèi)部,所有的內(nèi)部數(shù)據(jù)總線和內(nèi)部寄存器均為16位。從ROM10讀出和寫入RAM6、RAM8均被“緩沖”并且一般不會放慢程序執(zhí)行。
類似地,Mario芯片2可以從CD ROM存取指令和圖形數(shù)據(jù)并將該信息寫入RAM6、RAM8以便以后通過DMA(存儲器直接存取方法)轉(zhuǎn)送到主處理器(例如Super NES的圖像處理單元PPU)的圖像RAM中。本技術(shù)領(lǐng)域的技術(shù)人員會理解可以對Mario芯片2進行編程繞過RAM的存儲和存取操作而協(xié)調(diào)從CD ROM直接轉(zhuǎn)送數(shù)據(jù)給PPU的圖像RAM。
盡管CD ROM的讀出存取時間較長,但Mario芯片2極快的處理速度使CD ROM存儲可實際用于圖形應(yīng)用。視頻和音頻數(shù)據(jù)在存儲于CD ROM上之前采用常規(guī)的數(shù)據(jù)壓縮技術(shù)進行壓縮。數(shù)據(jù)壓擴技術(shù)對本領(lǐng)域技術(shù)人員是眾所周知的。在從CD ROM取出壓縮的數(shù)據(jù)之后,Mario芯片2運用常規(guī)的數(shù)據(jù)解除壓縮算法使數(shù)據(jù)擴展所需時間比常規(guī)圖形處理器所能達到的短得多。Mario芯片2用21MHz時鐘信號進行工作,故而Mario芯片2可在規(guī)定期間內(nèi)完成擴展以轉(zhuǎn)送給RAM6、RAM8。
這樣有大量的視頻和音頻數(shù)據(jù)(以壓縮形式)在典型的CD ROM存取周期內(nèi)存取。由于在Mario芯片2進行數(shù)據(jù)擴展后,每數(shù)據(jù)字節(jié)的實際存取時間顯著地減小,因而使其相對長的存取時間的影響減至最小。在Mario芯片2執(zhí)行擴展的同時,主圖形處理例如Super NES PPU可自由地進行其他處理任務(wù)。當然,對于某一特殊應(yīng)用,如果速度不成為其問題,Mario芯片2可以以不壓縮的形式從CD ROM存取數(shù)據(jù)。
當使用靜態(tài)RAM時該游戲卡還可以包括一后備電池。后備電池12經(jīng)電阻R連接到后備電池電路14以在電源失效時提供靜態(tài)RAM的后備電壓(VSRAM)和靜態(tài)RAM芯片選擇信號RAMCS以保全數(shù)據(jù)。
另外,在選配項設(shè)定電阻16與RAM地址總線連接。在平常操作中,Mario芯片地址線輸出到RAM6和RAM8。然而在復(fù)位或加電操作期間,這些地址線根據(jù)它們是連在預(yù)定的電壓Vcc還是接地而用作輸入線以產(chǎn)生高或者低信號。在這種方式下,“1”或“0”合適地讀進內(nèi)部的Mario芯片寄存器。在復(fù)位后,Mario芯片(在執(zhí)行程序期間)根據(jù)這些電阻的置值,例如可確定與Mario芯片關(guān)聯(lián)的乘法器時鐘頻率、RAM的存取時間、要用于Mario芯片內(nèi)的其他操作的時鐘頻率等。Mario芯片通過利用這些選配項設(shè)定電阻,例如,無需對Mario芯片的設(shè)計作任何改動,就可適合同若干不同類型的存儲設(shè)備一起使用。例如,如果檢測出動態(tài)RAM置值就要在各相應(yīng)時刻加上更新信號。另外,可選配設(shè)定可以用來控制例如處理器乘法器電路的運行速度,和允許圖形處理器以比所能執(zhí)行某些乘法指令還快的速率執(zhí)行到的指令。這樣,通過啟動延遲的乘法操作,能以比其它方法可用的頻率更快的時鐘頻率運行余下的指令(例如處理器時鐘為30MHz,而可選配設(shè)定會有效地以15MHz來執(zhí)行乘法指令)。
圖2是設(shè)計為與圖1中示出的示范性游戲卡相連的示范性主電視游戲系統(tǒng)的方框圖。圖2可以代表例如由美國任天堂目前銷售的Super NES。但本發(fā)明不限于與Super NES有關(guān)的應(yīng)用或具有圖2所示的這種方框圖的系統(tǒng)。
該Super NES在控制臺20內(nèi)包括例如可以是65816兼容型微處理器的16位主CPU。CPU22與例如可以包括存儲容量128K字節(jié)的工作RAM32相連。CPU22與圖像處理單元(PPU)24相連,PPU又與例如可包括存儲容量32K字的圖像RAM30相連。CPU22在垂直或水平回掃消隱間隔期間經(jīng)PPU24對圖像RAM進行存取。這樣,CPU22只能在PPU24對圖像RAM存取在進行線掃描期間以外的時間通過PPU24對圖像RAM30進行存取。PPU24從圖像RAM30產(chǎn)生在用戶電視36上的圖像顯示。CPU還與連接到工作RAM28上的音頻處理單元相連??梢园ㄊ惺鄣囊繇懶酒趦?nèi)的APU26產(chǎn)生與存儲在游戲卡上ROM10內(nèi)的電視游戲程序相關(guān)的聲音。CPU22只能經(jīng)APU26對工作RAM28進行存取。PPU24和APU26經(jīng)射頻調(diào)制器單元34與用戶家用電視36連接。
Super NES中的圖像RAM30必須裝載存儲在游戲卡中的程序ROM10(它不僅存儲游戲程序,還存儲玩游戲時所用到的字符數(shù)據(jù))內(nèi)的合適的字符數(shù)據(jù)。任何活動目標,譬如所要顯示的子畫面信息、或背景信息在使用前必須存入圖像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存儲單元從位置0開始并一般分成32K字節(jié)的各個區(qū)段。程序ROM使用近一半的CPU地址空間。每個CPU地址空間32K字節(jié)區(qū)段的頂端位置一般用來對工作RAM32和各種寄存器編址。程序ROM10一般是4兆字節(jié)。用在Super NES中的CPU22能夠?qū)Τ绦騌OM10的全體進行尋址。另一方面,Mario芯片2只包括一16位程序計數(shù)器,因而還包括用以選擇程序ROM10中的32K字節(jié)存儲區(qū)的存儲區(qū)寄存器。
在本示范性實施例中,Mario芯片具有與Super NES存儲器分配圖相對應(yīng)的全24位地址空間。在從位置$00∶8000開始的位置上含有ROM10,而游戲卡上的RAM芯片6、8則從位置$70∶0000開始。
既然游戲卡上的ROM10和RAM6,RAM8連在分開的總線上,他們就能由Mario芯片并行存取。而且對RAM6,RAM8的存取頻率比對ROM快,Mario芯片就是設(shè)計成利用這性能優(yōu)點的。Mario芯片無法對Super NES中的任何存儲器進行存取,即無法對工作RAM32或PPU圖像RAM30存取。
為使Mario芯片處理數(shù)據(jù)或繪入位映像中,數(shù)據(jù)必須存放在該Mario芯片的RAM芯片6、8內(nèi)。這樣,在NES CPU程序和馬里奧芯片程序間共用的任何變量一定要在Mario芯片的RAM芯片6、8內(nèi)。Mario芯片需要用的任何預(yù)先存儲的數(shù)據(jù)可以在ROM10中,任何變量則在RAM6、RAM8中。
僅僅是Super NES所需要的任何專用變量無需放在游戲卡RAM6、RAM8中。事實上,RAM6、8的存儲空間很寶貴,所以最好將最優(yōu)先需要的內(nèi)容分配給RAM6、RAM8。任何非必需的變量應(yīng)該存儲在Super NES的內(nèi)部RAM32中。
Mario芯片寫入的位映像是Mario游戲卡RAM6、RAM8中,并當每一幀位映像已被全部提供時,在Super NES的控制下,通過DMA轉(zhuǎn)送到PPU的圖像RAM30中。
Super NES的CPU22對Super NES控制臺內(nèi)的所有內(nèi)部RAM進行存取,就象沒有Mario芯片。Mario芯片無法對這RAM進行存取,故而必須由CPU本身引入MarioROM/RAM芯片和內(nèi)部Super NES RAM間轉(zhuǎn)送的所有數(shù)據(jù)。通過CPU22編程就可傳送數(shù)據(jù),或通過DMA傳送來移動數(shù)據(jù)塊。對于所有的游戲程序,Mario卡ROM10和RAM6、RAM8都以慣用的方式映入。
CPU22控制哪一個CPU可臨時對游戲卡ROM和RAM芯片進行存取。在加電或復(fù)位的情況下,Mario芯片被關(guān)斷,完全由CPU22對游戲卡ROM和RAM芯片進行存取。為使Mario芯片運行程序,有必要使CPU22程序放棄對ROM或RAM芯片,最好是對兩者的存取,而等待Mario芯片完成其所交給的任務(wù),或者CPU22可將某一程序復(fù)制進內(nèi)部的工作RAM32并在那兒執(zhí)行它。
Mario芯片有若干可從Super NES CPU側(cè)編程和讀出的寄存器。這些均被映入從位置$00∶3000開始的CPU22存儲器分配圖。
如圖2所示,Super NES產(chǎn)生和接收種種控制信號。當Super NES CPU22需對程序ROM10進行存取時,它產(chǎn)生一控制信號ROM SEL。要開始存儲器更新,該Super NES產(chǎn)生一更新信號RFSH。當Mario結(jié)束某一操作時,它發(fā)送一中斷信號到與Super NES CPU相聯(lián)的中斷請求線上。CPU22另外還產(chǎn)生讀出和寫入信號。
系統(tǒng)定時信號是從控制臺20中的定時連鎖電路21產(chǎn)生出的。加電/復(fù)位信號也是在主控制臺20中產(chǎn)生并送到游戲卡。
Super NES還包括認證處理設(shè)備25,它按照上面提到的美國專利USP4,799,635同游戲卡上的認證處理設(shè)備3在輸入線I、輸出線O和復(fù)位線R上交換數(shù)據(jù)。美國專利USP4,799,635指出,該處理設(shè)備25使CPU22處于復(fù)位狀態(tài)直到認證被證實。
在圖2中用方框形式表示的Super NES電視游戲機在此只是總體上的描述。有關(guān)包括PPU24在內(nèi)的Super NES的進一步細節(jié),例如可以在1991年4月10日申請的申請順序號為07/651,265的題為“視頻處理裝置”的美國專利申請中找到,該申請通過引用而明顯地歸并在本申請中。諸如Super NES和游戲卡之間的信息如何傳送之類的再進一步細節(jié)可以在1991年8月26日申請的申請順序號為07/749,530的題為“圖像處理系統(tǒng)中的存儲器直接存取裝置和其所使用的外部存儲設(shè)備”的美國專利申請和1991年11月19日申請的申請順序號為07/793,735的題為“鑲嵌圖像顯示裝置及所用的外部存儲單元”的美國專利申請中找到,這些申請在此引用而歸并在本申請中。
本申請發(fā)明人認識到在一些應(yīng)用中,需要利用這種主處理器DMA電路在垂直回掃消隱期間傳送的信息比實際可能傳送的多。因而即使會導(dǎo)致畫面尺寸略有收縮,還是希望延長垂直回掃消隱時間。通過采用這一方法,在處理速度和畫面更新頻率方面就體現(xiàn)出顯著的優(yōu)點。
圖3示出容納圖1所示的Mario芯片和游戲卡上其它結(jié)構(gòu)的游戲卡盒的示范性機械外觀設(shè)計的透視圖。圖3類似地示出容納圖2示出的Super NES電視游戲硬件的電視游戲控制臺20的示范性外部機座的透視圖。這類電視游戲控制臺20和相關(guān)的可卸下的游戲卡19示于1991年8月23日申請的申請順序號為07/748,938題為“TV游戲機”的美國專利申請的圖2-9中,該申請在此引用而歸并在本申請中。
圖4A和4B是示于圖1中的Mario芯片2的方框圖。首先集中看示于圖4A和4B中的各種總線,指令總線INSTR是將指令代碼送到各種Mario芯片元件的8位總線。X、Y和Z總線是16位數(shù)據(jù)總線。HA總線是24位的主系統(tǒng)地址總線,在目前較佳實施例中,使用時與Super NES的地址總線相連。HD總線是使用時與Super NES的數(shù)據(jù)總線相連的8位的主系統(tǒng)數(shù)據(jù)總線。PC總線是將Mario芯片程序計數(shù)器(即通用寄存器塊76中的寄存器R15)的輸出送給各種系統(tǒng)元件的16位總線。ROMA總線是20位ROM地址總線。ROM D總線是8位ROM數(shù)據(jù)總線。RAM總線是16位RAM地址總線。RAMD IN總線是8位RAM讀出數(shù)據(jù)總線,RAMD OUT總線是8位寫入數(shù)據(jù)總線。
Mario芯片和Super NES共用游戲卡RAM6、RAM8,起到在Mario芯片和Super NES之間傳遞數(shù)據(jù)的主要機能。Super NES給地址總線HA和數(shù)據(jù)總線HD對Mario芯片進行存取。Mario芯片的寄存器76由Super NES經(jīng)Super NES的地址總線HA進行存取。
Super NES經(jīng)Mario芯片2對游戲卡上程序ROM10和RAM6、RAM8存取。ROM控制器104和RAM控制器88接收到由Super NES產(chǎn)生的有關(guān)存儲器存取的信號,就分別起到ROM和RAM的存儲器存取。順便解釋一下,RAM選擇信號RAMCS被Mario芯片用來確認Super NES正要對該RAM尋址。
示于圖4A和4B中的X、Y和Z總線是內(nèi)部的Mario芯片數(shù)據(jù)總線。X和Y總線是源數(shù)據(jù)總線而Z數(shù)據(jù)總線則是目的總線。這些總線載送16位并行數(shù)據(jù)。
當執(zhí)行指令時,Mario芯片2可以將指令用的源數(shù)據(jù)放在X和/或Y總線上面結(jié)果數(shù)據(jù)放在Z總線上。例如,在執(zhí)行將兩寄存器的內(nèi)容相加并將結(jié)果放在第三寄存器的指令時,算術(shù)邏輯單元(ALU)50經(jīng)X和Y總線接收到兩個源寄存器的內(nèi)容并將結(jié)果送到Z總線(轉(zhuǎn)而送到塊76中的指定寄存器)。由Mario芯片2的指令譯碼電路60對指令操作碼譯碼得出的控制信號被送到ALU50起動加法(ADD)操作。
正如針對圖1說明所注解的那樣,與Mario芯片相連接的ROM總線、RAM總線和Super NES主機總線能并行地進行信號通訊。Mario芯片2監(jiān)視經(jīng)過主機Super NES總線傳輸?shù)目刂?、地址和?shù)據(jù)信號以確定主系統(tǒng)正在執(zhí)行的操作。根據(jù)任何給定的時刻正在執(zhí)行的Super NES操作可以并行地對游戲卡ROM總線和游戲卡RAM總線進行存取。在通常的Super NES游戲卡中,主機CPU的地址線和數(shù)據(jù)線直接與ROM和RAM相連,這樣RAM和ROM就不能被并行地存取。
根據(jù)本發(fā)明的一個方面,Mario芯片2使圖1中所示的ROM總線和RAM總線與Super NES總線在物理上分開。Mario芯片2監(jiān)視在Super NES總線上傳輸?shù)男盘?,并確定什么信號需經(jīng)不是分時的兩條分開的ROM總線和RAM總線送到ROM芯片和RAM芯片。通過分開ROM總線RAM總線,Mario芯片能同時從ROM讀出和向RAM寫入。在這種方式下,Mario芯片可以用便宜的其存取時間比RAM存取時間慢得多的ROM芯片有效地工作而無需等到ROM存取結(jié)束后才對RAM存取。
回到圖4A,Mario芯片如前面所注明的那樣,是全編程處理器并包括ALU50。除了乘法操作由乘法器64執(zhí)行和某些像素標繪操作由標繪硬件52執(zhí)行外,ALU50執(zhí)行Mario芯片中所配備的所有算術(shù)功能。一收到出自指令譯碼器60的合適控制信號,ALU50就執(zhí)行加法、減法、異或、移位和其他操作。如圖4A所示,ALU50從X、Y總線上接收所要操作的信號,執(zhí)行從指令譯碼器60收到的控制信號所起動的操作,并將該操作的結(jié)果送到Z總線。下面將結(jié)合附圖6進一步詳細地說明ALU。
Mario芯片2另外包括專用硬件以便有效執(zhí)行3-D型特殊效果和其他圖形操作,使運用這些性能的電視游戲可以實現(xiàn)。在這方面,Mario芯片2包括標繪硬件52,它輔助將對像素坐標的編址實時地變換成Super NES所采用的那種對字符映像的編址。好處是可以通過指定定義各像素在顯示屏上的位置的X和Y坐標來對Mario芯片進行編程。
這樣,圖形操作是根據(jù)程序員指定像素來執(zhí)行的,標繪硬件電路52在掃描時將各像素指定值變換成正確格式化的字符數(shù)據(jù)。該字符數(shù)據(jù)隨后映入示于圖2中的Super NES圖像RAM30中供顯示用的符合要求的地方。在這種方式下,Mario芯片程序員只需將Super NES的圖像RAM30看作位映像,而實際上它是字符映像。
該標繪硬件52響應(yīng)種種有關(guān)標繪的指令,允許對一特定像素在顯示屏上的X和Y坐標和預(yù)定彩色進行可編程的選擇,和標繪相對應(yīng)的像素使X和Y坐標變換成與具有用來驅(qū)動Super NES圖像RAM30的形式的字符定義相對應(yīng)的地址。
標繪硬件52具有相關(guān)的數(shù)據(jù)鎖存器,允許在寫到游戲卡RAM前緩沖盡可能多的像素數(shù)據(jù),以使RAM數(shù)據(jù)事務(wù)盡量減少。在X和Y坐標數(shù)據(jù)在標繪硬件52中變換和緩沖之后,字符定義數(shù)據(jù)隨后傳送到游戲卡RAM。
該標繪硬件52分別經(jīng)PLOT X寄存器56和PLOT Y寄存器58接收X、Y坐標數(shù)據(jù)。在目前較佳實施例中,PLOT X和PLOT Y寄存器不是分開的寄存器(如圖4A所示)而是Mario芯片通用寄存器(即示于圖4B中的寄存器塊76中的寄存器R1和R2)。
該標繪硬件52還經(jīng)彩色寄存器54接收像素彩色信息。如下面將會進一步說明的那樣,所顯示的各像素的彩色存儲在8×8寄存器矩陣中,每個像素的彩色說明占據(jù)該矩陣的一列。
標繪硬件52處理字符號地址和與X、Y和色彩輸入有關(guān)的數(shù)據(jù)并將它們送到字符RAM6、RAM8。字符地址經(jīng)輸出線53送到RAM控制器88和RAM地址總線RAM A。字符數(shù)據(jù)經(jīng)輸出線55、多路轉(zhuǎn)換器93和RAM數(shù)據(jù)總線RAM D DUT送到字符RAM。該標繪硬件52在與Super NES字符格式保持兼容的同時允許字符中的像素單獨地編址,以藉此提供給程序員一“虛擬的”位映像顯示系統(tǒng)。“虛擬的”位映像保存在游戲卡RAM中并在每幀顯示結(jié)束時利用例如上面提到的申請順序號為07/749,530的美國專利申請中的DMA電路傳送到Super NES的圖像RAM30。該標繪硬件52能高速控制單個像素,使涉及到旋轉(zhuǎn)和縮放目標的某些3-D型圖形效果得以實現(xiàn)。
由于要把像素格式變換成字符格式,標繪硬件52還經(jīng)RAMD IN和數(shù)據(jù)鎖存器82和輸入線83從卡RAM6、RAM8接收與當前像素X、Y附近的其他像素有關(guān)的信息。通過使用從RAM6、RAM8檢索出的和暫時存儲在RAM數(shù)據(jù)鎖存器中的以前的像素數(shù)據(jù),可以使對RAM的寫入次數(shù)降為最小。示于圖4A中的RAM數(shù)據(jù)鎖存器80、84和86還用來緩沖收到的關(guān)于某一像素的彩色數(shù)據(jù)(它們已存儲于游戲卡RAM內(nèi)的多重位平面中),以將這些數(shù)據(jù)提供給標繪硬件52。
RAM數(shù)據(jù)鎖存器80與Super NES數(shù)據(jù)總線相連因而Super NES能讀出該數(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以便于裝載進寄存器塊76中的預(yù)定寄存器。另外與RAM控制器88相連的鎖存器90是緩沖RAM地址的。RAM控制器88利用存儲在鎖存器90中的地址經(jīng)RAM A總線對RAM6、RAM8尋址。RAM控制器88還可以由Super NES經(jīng)地址總線HA進行存取。
標繪硬件52還響應(yīng)讀出像素(READ PIXEL)指令,它讀取寄存器R1的內(nèi)容所定義的水平位置和寄存器R2的內(nèi)容所定義的垂直位置上的像素的彩色信息,并經(jīng)目的端總線Z和輸出線87將結(jié)果存儲在寄存器塊76中的預(yù)定寄存器中。將結(jié)合圖7、8A和8B和說明對PLOT硬件52作進一步說明。
流水線緩沖寄存器62和ALU控制指令譯碼器60與指令總線INSTR相連以產(chǎn)生控制信號(應(yīng)用于整個Mario芯片)來起動與置于指令總線的命令相應(yīng)的操作。Mario芯片2是在其執(zhí)行當前指令的同時就讀取所要執(zhí)行的下一個指令的流水線微處理器。流水線寄存器62存儲所要執(zhí)行的下一個指令,使得如果可能的話就在一個周期中執(zhí)行各指令。置于指令總線上的指令是按存儲于寄存器(例如可以是示于圖4B的寄存器塊76中的寄存器R15)中的程序計數(shù)器的內(nèi)容尋址的。
由Mario芯片2執(zhí)行的指令可以從示于圖1中的程序ROM10或Mario芯片的內(nèi)部超高速緩存器RAM94得到,或從游戲卡RAM6、RAM8得到。如果正從ROM10執(zhí)行程序,ROM控制器104(示于圖4B中)將讀取指令并將它置于Mario芯片指令總線INSTR。如果程序指令是存儲在超高速緩存RAM94中,則指令會經(jīng)超高速緩存RAM輸出總線95直接從超高速緩存輸出置于指令總線上。
對主CPU(即Super NES)的編程,是使程序ROM10部分分配給Mario芯片程序指令。Super NES程序命令Mario芯片執(zhí)行一規(guī)定的功能,然后將存取Mario芯片程序代碼的ROM10中的地址提供給Mario芯片。流水線寄存器62讀取正執(zhí)行著的指令的下一字節(jié)指令,以將有關(guān)指令的信息提供給指令譯碼器60,使譯碼器能在程序執(zhí)行當中先行了解即將發(fā)生的事件來預(yù)期有關(guān)處理。部件60中的譯碼和控制電路產(chǎn)生命令A(yù)LU50、標繪硬件52、超高速緩存控制裝置68等的控制信號,以完成由正執(zhí)行著的指令代碼所指示的操作。
Mario芯片還包括一個同ALU50分開的高速、并行乘法器64。乘法器64響應(yīng)規(guī)定的指令操作使從X和Y源端總線接收到的兩個8位數(shù)相乘并將16位結(jié)果裝上目的端總線Z。如果可能該乘法操作在一個周期內(nèi)完成。輸入到乘法器64的兩個數(shù)可以帶符號或不帶符號。乘法器還能完成長字乘法操作,使兩個16位數(shù)相乘而產(chǎn)生一個32位的結(jié)果。乘法器還包括相關(guān)聯(lián)的部分乘積寄存器66來存儲乘法操作期間產(chǎn)生的部分乘積。當譯出一個乘法操作代碼時,就由指令譯碼器60輸出的控制信號啟動乘法器64。乘法器64將在最小4個時鐘周期內(nèi)執(zhí)行涉及16位字的乘法的長字乘法指令。
長字乘法指令具有以下格式R4(低位字),DREG(高位字)=Sreg*R6執(zhí)行該指令就使源寄存器乘以寄存器R6的內(nèi)容并將32位結(jié)果存儲在寄存器R4/DREG(低/高位)。乘法是帶符號的并對32位結(jié)果設(shè)定零和符號標志。
該操作按照以下六個步驟進行步驟1不帶符號的乘法R4
=SREG
*R6
步驟2X帶有符號。R4
=R4
+256*SREG[8…15]*R6
。不管乘積的高8位,但保留加法的進位。
步驟3X帶有符號。R5
=CY+(R6[8…15]*SREG
)÷256;加上符號。
步驟4X不帶符號,Y帶有符號。
R4
=R4
+256*SREG
*R6[8…15]。不管乘積的高8位,但保留加法的進位。
步驟5Y帶有符號,R5
=R5
+CY+SREG
+R6[8…15])÷256;加上符號。
步驟6X、Y帶有符號,R5
=R5
+RY[8…15]*R6[8…15]。
用在本示范性實施例中的乘法器64例如可以是麥格勞-希爾1984年出版的由卡瓦諾著的《數(shù)字計算機算術(shù)》中所描述的那種。
參見圖4B,超高速緩存控制器68(在圖14中會進一步詳細圖示)允許程序員有效地起動裝載操作,將想要高速執(zhí)行的那部分程序裝入超高速緩存RAM94。這種“超高速緩存(CACHE)”通常應(yīng)用于在圖形處理中頻繁發(fā)生的小程序循環(huán)。Mario芯片指令集包括“CACHE”指令。緊接著該CACHE指令的任何指令被裝載進超高速緩存RAM,直到超高速緩存RAM滿載為止。當執(zhí)行CACHE指令時,當前程序計數(shù)器狀態(tài)被裝載進超高速緩存基址寄存器70。這樣,該超高速緩存基址寄存器的內(nèi)容規(guī)定了超高速緩存開始的起始位置。
大多數(shù)指令在一個周期內(nèi)執(zhí)行。來自相對慢的外部存儲器象ROM10和或RAM6、8的指令必須在執(zhí)行它們之前就取出。這將花費另外大約6個周期。為提高程序執(zhí)行速度,應(yīng)該利用在Mario芯片內(nèi)的“超高速緩存”RAM本身。
超高速緩存RAM可以是一512字節(jié)的指令超高速緩存器。這容量與平均程序的大小相比是比較小的,因而程序員必須對如何最大限定地利用超高速緩存RAM作出決定。能夠裝入512字節(jié)超高速緩存容量的任何程序循環(huán)均能以全速運行,使讀取和執(zhí)行均在一個周期內(nèi)進行。因為總線是分開的,故而在執(zhí)行來自內(nèi)部的超高速緩存94的代碼時能同時對ROM和RAM存取。
超高速緩存RAM92可以通過在它執(zhí)行旋轉(zhuǎn)和縮放計算時,在它利用PLOT指令(將在下面說明)將像素寫入RAM6、RAM8時,同時運行超高速緩存中會從ROM10讀出各像素色彩的循環(huán),來方便地使子畫面旋轉(zhuǎn)。所有這一切都是并行地發(fā)生的,盡管最慢的操作降低了速度但仍給出很快的吞吐率。最慢的操作通常是ROM數(shù)據(jù)的讀取,這就是Mario芯片為什么被設(shè)計成利用對ROM和RAM緩沖存取的原因。
與運行來自相對慢的ROM的程序相比,運行來自超高速緩存RAM94的程序速度可快約6倍,但它首先必須從ROM裝載到超高速緩存中。這是通過將指令置于所要超高速緩存的任何循環(huán)的起始部分來進行的。從CACHE指令地址起,將只超高速緩存循環(huán)的前512字節(jié)。在執(zhí)行循環(huán)第一次迭代的代碼時,程序就從ROM10出來并以60字節(jié)塊形式復(fù)制進超高速緩存RAM。該循環(huán)所有進一步迭代都將來自超高速緩存RAM而不是ROM10。
CACHE指令能隨意地用在任何重復(fù)的程序循環(huán)前面。只是循環(huán)的后續(xù)迭代能得益于其程序置在超高速緩存中。如果程序循環(huán)大于512字節(jié)并溢出超高速緩存94,它仍將正確地工作,只不過前512字節(jié)從超高速緩存94運行而剩下的照常將從ROM10運行。這部分地提高了速度但不夠理想。
在較佳實施例中作為超高速緩存控制器的一部分的超高速緩存標志位寄存器72對超高速緩存RAM94中已裝載的存儲器位置進行標識。該超高速緩存標志位允許Mario芯片迅速地判定某一程序指令是不是能從更快的超高速緩存RAM執(zhí)行而不是從程序ROM10執(zhí)行??梢杂沙咚倬彺婵刂破?8或Super NES經(jīng)Super NES地址總線HA經(jīng)多路轉(zhuǎn)換器96對超高速緩存RAM 94進行存取。
超高速緩存控制器68與程序計數(shù)器總線PC相連以裝載超高速緩存基址寄存器70并執(zhí)行超高速緩沖存儲器地址超出范圍的校驗操作。
與從ROM10讀出可達到的并行度相似,Mario芯片還提供并行地寫入到RAM6、RAM8的途徑。不管什么時候只要Mario寄存器被寫入到RAM6、RAM8,它就起動例如在RAM控制器88中的單獨的RAM寫入電路進行存儲事務(wù)。這一般將花去6個周期,但假使程序員避免在這樣做時進行另一個RAM的事務(wù),就不會使該處理器延遲。例如在兩個存儲指令之間插入別的處理就能進行得更迅速。那樣RAM寫入電路就有時間進行它的工作。如果連續(xù)用到兩個寫入,那么在進行第一個寫入時第二個會使處理器延遲。
例如(使用下面將要說明的指令集中的指令)FROM R8 ;將R8存入(R13)SM (R13)SM (R14) ;將R0存入(R14)TO R1FROM R2ADD R3 ;執(zhí)行:r1=r2+r3TO R4
FROM R5ADD R6 ;執(zhí)行:r4=r5+r6注意這兩個存儲指令互相太接近了。由于RAM總線正忙于試圖完成第一存儲指令因而第二個將多花去6個周期。
運行速度會更快的寫入代碼的較佳途徑是由其他有用的代碼間隔開這兩個存儲指令。例如FROM R8 ;將R8存入(R13)SM (R13)TO R1FROM R2ADD R3 ;執(zhí)行:r1=r2+r3TO R4FROM R5ADD R6 ;執(zhí)行:r4=r5+r6SM (R14) ;將R0存入(R14)在這種方式下,在第一存儲指令導(dǎo)致向RAM寫入的同時可并行執(zhí)行若干個指令,再在幾個周期之后進行第二個存儲操作。
下面說明的指令集包括一將寄存器寫回到最后所用的RAM地址的快速指令。這通過從RAM取出值,對它進行一些處理,隨后將它快速存回,故而允許“成批的”數(shù)據(jù)處理。
參見圖4B,一直接數(shù)據(jù)鎖存器74與指令總線相連。這一數(shù)據(jù)鎖存器允許指令本身提供數(shù)據(jù)源,這樣就不需要由指令指定源端寄存器。該直接數(shù)據(jù)鎖存器74的輸出與目的端總線Z相連。它轉(zhuǎn)而與寄存器塊76的一個規(guī)定的寄存器相連。指令譯碼電路60對“直接”數(shù)據(jù)指令譯碼并開始執(zhí)行相應(yīng)的向寄存器傳送的操作。
示于圖4B中的GET B(取字節(jié))寄存器98是與前面所述的延遲/緩沖讀出操作一起使用的。在這方面,已有技術(shù)的處理器由于廣泛地利用存取時間相對慢的ROM,只要執(zhí)行到ROM,一般就不得不等待它完成數(shù)據(jù)讀取。而利用下面說明的延遲/緩沖讀取機制,在完成數(shù)據(jù)讀取時還可執(zhí)行其他操作。按照該機制,不管以什么方法對寄存器塊76中的寄存器R14存取或修改,就自動地在R14內(nèi)容所標識的地址起動對ROM或RAM的讀取。
如圖4B所示,寄存器R14與ROM控制器104相連。不論何時,以任何方式修改寄存器R14的內(nèi)容,ROM控制器104就起動對ROM的存取。對ROM存取的結(jié)果經(jīng)與ROM數(shù)據(jù)總線ROMD相連的多路轉(zhuǎn)換器裝載到GET B寄存器98中。下面列出的指令允許對在GET B寄存器98中緩沖的信息進行存取。該信息經(jīng)多路轉(zhuǎn)換器100裝上目的端總線Z隨后進入到寄存器塊76中的某個寄存器。
在這種方式下,若已知從ROM讀取數(shù)據(jù)要花去一定個數(shù)的處理周期,就可起動那讀取操作并在起動了這數(shù)據(jù)讀取之后,Mario芯片不是等著不執(zhí)行其它操作,而是能執(zhí)行例如與數(shù)據(jù)讀取無關(guān)的代碼。GET B寄存器98還可以用來存儲經(jīng)如圖4B所示的多路轉(zhuǎn)換器102從RAM6、RAM8檢取出的信息。
在寄存器塊76中配備有十六個16位寄存器(R0-R15)。寄存器R0-R13是通用寄存器(盡管其中某些寄存器往往用于下面所說明的專用目的)。如上所述,寄存器R14被用作為讀出存儲器的指針,當被修改時,就起動從ROM(或RAM)的讀出周期。讀出的字節(jié)被存儲在臨時的緩沖器(GET B寄存器98)以便以后由GET L(取低字節(jié))或GET H(取高字節(jié))命令存取。寄存器R15是程序計數(shù)器。在每個指令開始執(zhí)行時它指向正要存取的下一個指令。
寄存器R0是一通用寄存器,一般用作累加器。對于大多數(shù)單個周期的指令它還是缺省的源端和目的端寄存器。例如,若想要使R0和R4的內(nèi)容相加在一起就只須明顯地指定寄存器R4。
當執(zhí)行循環(huán)指令時就專用寄存器R11、R12和R13。寄存器R13存儲循環(huán)頂端所要執(zhí)行的指令的地址,而寄存器R12存儲循環(huán)所要執(zhí)行的次數(shù)。若寄存器R12的內(nèi)容非零,則將在R13內(nèi)容所指定的地址的指令裝到程序計數(shù)器(R15)并且執(zhí)行。寄存器R11存儲循環(huán)完成后所要返回的地址。
寄存器控制邏輯78與寄存器塊76相連并控制對通用寄存器R0-R15的存取。根據(jù)正要執(zhí)行的特定指令的格式,指令譯碼邏輯60將指定一個或多個寄存器R0-R15。寄存器控制邏輯78指定哪個寄存器是所要執(zhí)行的下一條指令需要利用的。寄存器控制邏輯78將相應(yīng)的寄存器輸出送到X和Y總線。另外,如圖4B所示,在寄存器控制邏輯78的控制下,相應(yīng)的寄存器R0-R15從Z總線接收信息。
ROM控制器104一旦收到來自Super NES地址總線HA或來自Mario芯片的地址就對那地址進行存取。ROM控制器104將在圖13中更詳細地示出。從ROM10存取的信息可以裝到超高速緩存RAM 94以便快速地執(zhí)行指令。ROM控制器104和RAM控制器108都具有在Super NES的和Mario芯片的存取要求間進行仲裁的總線仲裁單元。
如后面會進一步說明的那樣,Mario芯片還利用狀態(tài)寄存器(例如在寄存器塊76中或在RAM6、RAM8中),這些寄存器可由Super NES CPU存取,可存儲用于標識狀態(tài)條件的標志,例如0標志、進位標志、正負符號標志、溢出標志、“運行(GO)”標志(1表示Mario芯片正在運行而0表示Mario芯片停止運行);ROM字節(jié)讀取正在進行標志(表示寄存器R14被存取過);各種方式指示標志包括ALT1標志、ALT2標志、直接低字節(jié)和直接高字節(jié)標志,和指示源寄存器和目的寄存器已由“WITH”前綴命令設(shè)定過的標志,和中斷標志。
以圖4A和圖4B中的方框圖形式表示的Mario芯片由Super NES調(diào)用,使Mario芯片每秒鐘多次接通和關(guān)斷來執(zhí)行任務(wù)。起初當Super NES開啟時,存儲在ROM10中游戲程序被引導(dǎo)。注意在由Super NES處理器和Mario芯片處理器執(zhí)行游戲程序之前,游戲卡首先被認證。順便解釋一下,按照美國專利USP4,799,635指出的方法,可先將Super NES CPU置于復(fù)位狀態(tài),執(zhí)行與游戲卡和Super NES主控制臺相關(guān)聯(lián)的認證處理器的認證程序來進行這類認證。
Mario芯片一開始處于關(guān)斷狀態(tài)。在這一時刻,Super NES可不受限制地對游戲卡程序ROM和游戲卡RAM存取。當Super NES需要利用Mario芯片的處理能力來執(zhí)行圖形操作或數(shù)學(xué)運算時,Super NES在游戲卡RAM(或在規(guī)定的Mario寄存器)中存儲它需要Mario芯片處理的相應(yīng)的數(shù)據(jù),并將所要執(zhí)行的Mario程序的地址裝入Mario芯片的程序計數(shù)器。要由Mario芯片處理的數(shù)據(jù)可以是必須旋轉(zhuǎn)和放大或縮小的目標的規(guī)定的X、Y坐標數(shù)據(jù)。Mario芯片能執(zhí)行會實施算法來控制具有不同個數(shù)的子畫面或活動目標的背景和前景的程序。利用Mario芯片的提高速度的增強硬件和軟件,可使這些操作獲得高速性能。
應(yīng)用Mario芯片來處理子畫面能相當大地擴展整個電視游戲系統(tǒng)的能力。例如,Super NES每幀只限顯示128個子畫面。隨著運用Super Mario芯片實際上可顯示數(shù)百個子畫面,并例如使它們旋轉(zhuǎn)。
當Mario芯片完成了由Super NES所請求的功能,就執(zhí)行STOP指令,產(chǎn)生一中斷信號并傳輸?shù)絊uper NES以表明Mario芯片已完成了它的操作-這轉(zhuǎn)而表明了它已準備好執(zhí)行下一個任務(wù)。
Mario芯片可用于執(zhí)行諸如高速乘法運算這類小任務(wù)或可用于畫一幅滿是子畫面的畫面。在任何一種情況,只要Super NES在RAM或ROM總線正由Mario芯片使用的時候不去占用這些總線,Super NES可自由地與Mario芯片并行地進行處理。注意即使Super NES交給Mario芯片對游戲卡上的RAM和ROM總線的控制,Super NES還是可以執(zhí)行從示于圖2中的其工作RAM32出來的程序。這樣,通過將所要執(zhí)行的Super NES程序從程序ROM復(fù)制到它的工作RAM,而與此同時由Mario芯片執(zhí)行程序,整個系統(tǒng)的吞吐量就可得到提高。
示于圖5中的流程圖表示出為起動Mario芯片從ROM在所要求的地址處讀取并執(zhí)行代碼而由主CPU(例如Super NES CPU)所執(zhí)行的“運行Mario(RUN MARIO)”程序的操作順序。由圖5代表的例行程序一般是在將該程序從程序ROM10復(fù)制到示于圖2中的工作RAM32之后由Super NES CPU執(zhí)行。每當要Mario芯片進行操作時,就由主CPU執(zhí)行這例行程序。
如方框125所示,當執(zhí)行主CPU例行程序RUN MARIO時,首先完成包括保留Super NES寄存器在內(nèi)的初始化操作。在初始化步驟期間,該例行程序從程序ROM10復(fù)制到主CPU的工作RAM32中。
如方框127所示,存儲著所要執(zhí)行的Mario程序代碼的ROM10代碼存儲區(qū)被裝進Mario芯片的某一寄存器。另外如方框129所示,在代碼存儲區(qū)中的實際地址被存儲在Mario芯片的屏面基址寄存器中。
此后,如方框131所示,通過指明將使用4種、16種還是256種彩色方式來設(shè)定I/O輸入/輸出方式。這些方式對應(yīng)于主CPU所運行的彩色方式。另外還設(shè)定按可顯示字符的個數(shù)來限定屏面高度的方式。
另外還設(shè)定將對ROM和RAM總線的控制交給Mario芯片的方式位。對ROM和RAM總線的控制可分開選定,因而Mario芯片可設(shè)定為它對ROM總線、對RAM總線或?qū)烧哌M行存取的方式。若對ROM和RAM均設(shè)定“Mario占用(Marioowner)”方式,則主CPU就不能從ROM或RAM讀出或向ROM或RAM寫入。注意若主CPU試圖在Mario芯片正使用程序ROM總線時對程序ROM存取,Mario芯片有一種向Super NES返回偽地址的機能。向該地址的轉(zhuǎn)移會使Super NES一直被占有直到Mario芯片不再需要對游戲卡ROM總線進行存取。
如方框133所示,在Mario芯片的程序計數(shù)器裝上存儲著Mario程序必須執(zhí)行的第一條指令的地址之后Mario芯片開始運行。
主CPU然后等待從Mario芯片來的中斷信號(方框135)。當接收到一中斷信號,Super NES被告知Mario芯片已完成了它的運行并已停止(方框137)。如果未收到這類中斷信號,則主CPU繼續(xù)等待中斷(方框135)。在這一期間,Super NES可以通過執(zhí)行出自示于圖2中的其工作RAM32的程序而與Mario芯片的運行相并行地執(zhí)行程序代碼。
Super NES隨后檢驗狀態(tài)寄存器(例如在Mario芯片寄存器塊76中)以確定表明Mario芯片正在運行的Mario芯片的“GO”標志是否已設(shè)定(137)。另外,Mario芯片的狀態(tài)寄存器中的中斷標志被設(shè)定以表明Mario芯片是主CPU所收到的中斷信號的源。這樣,在主CPU接收到中斷信號之后(135),對相應(yīng)的Mario狀態(tài)寄存器檢測以確定Mario芯片是否是中斷源(相對于例如是表明垂直回掃消隱間隔的中斷信號)。若Mario芯片已停止運行(137),則清除對于RAM和ROM的Mario占用方式位,完全由Super NES對ROM和RAM進行存取。Super NES從該例行程序(141)退出并返回在進入RUN Mario程序前它所執(zhí)行的程序點。
當CPU22游戲程序使Mario芯片進入ROM Mario占用方式,它必須主動地停止對ROM的存取。任何時候只要CPU22因某些原因需對ROM存取,它就簡單地關(guān)閉ROM Mario占用方式。當Mario芯片再一次需要對ROM存取時,Mario芯片會自動地在那里等待,直到ROM Mario占用方式再一次還給它。若它運行來自內(nèi)部超高速緩存RAM的程序就可完全不需要這樣做。
若Mario芯片處于對于ROM的Mario占用方式,CPU22游戲程序不要試圖從ROM讀出任何東西是重要的。當發(fā)生某個中斷是,例如因垂直回掃消隱,它引起不可屏蔽中斷(NMI),CPU22就自動地試圖從ROM讀取它的中斷向量。這是不希望的,因為CPU已明確地告知Mario芯片它會避開ROM,而后來發(fā)生中斷,它還是要從ROM讀取。在這種情況,即盡管處于Mario占用方式,但CPU22仍要對ROM存取的情況下,就會使Mario芯片假設(shè)這是中斷向量請求。
在ROM Mario占用方式下,讀取中斷向量期間,Mario芯片將把中斷向量重新定位到Super NES的內(nèi)部工作RAM32中棧區(qū)的底部。例如,如果通常中斷向量是$00∶ffec它就JUMP(轉(zhuǎn)移)至位置$00∶010c。類似地所有來自$00∶ffeX的中斷向量都使CPU22 JUMP到它們相應(yīng)的位置$00∶010X。這項技術(shù)在CPU22不該對ROM10存取時避免它存取ROM10,而是把它轉(zhuǎn)移到Super NES的機載RAM32中。注意基于RAM的中斷向量必須含有向中斷處理程序的轉(zhuǎn)移或分支轉(zhuǎn)移。即那里應(yīng)該存有實際代碼而不僅僅是向量地址。當Mario芯片不處于Mario占用ROM的方式時,則仍使用平常的ROM中斷向量,因而最好繼續(xù)在這些位置指向相同的地址,以運行到與基于RAM的中斷向量相同的地方。
指令集Mario芯片指令集為對高速圖形和其他處理算法的編程提供了有效的手段。下面對某些指令作簡明的說明之后,對不同指令所使用的某些寄存器作出說明。還包括指令集中的指令進行詳細的羅列。
指令是8位指令,一般在一個時鐘周期內(nèi)執(zhí)行。但這些指令可由8位前綴指令改動。Mario芯片指令集包括一獨特的寄存器優(yōu)先代用系統(tǒng),允許程序員在任何指令之前指定目的端寄存器和兩個源端寄存器。沒有這些“前綴”的優(yōu)先代用,指令將只在累加器上運行。這樣該指令集是具有無數(shù)組合的可變字長的指令集。這里有一些一個字節(jié)長、在一個周期內(nèi)運行的基本指令。通過加上前綴指令,程序員就能擴展這些指令的作用。指令可視程序員的需要為8、16或24位。
Mario處理器利用指令啟動執(zhí)行高速的、機載超高速緩存RAM的程序和對存儲器延遲/緩沖的I/O。利用單周期的像素標繪命令,啟動采用上述像素標繪硬件的操作,就能有效地進行圖形處理。
在列出Mario指令集之前,先在下面說明由處理器在執(zhí)行指令時設(shè)定或存取的各種存儲器變換的寄存器。首先列出狀態(tài)標志寄存器。狀態(tài)寄存器是16位寄存器,下面標明與該寄存器中16位的各位相關(guān)的標志。
狀態(tài)標志寄存器16位位 標志0 - 備用1 z 零標志2 c 進位標志3 s 符號標志4 v 溢出標志([位14向位15進位]XOR[位15向進位位進位])5 g 運行標志:1Mario芯片運行0停止
6 r (R14)ROM字節(jié)讀取正在進行7 - 備用“GO”標志(位5)設(shè)定為“1”狀態(tài)就表明Mario芯片正在運行,而設(shè)定為“0”狀態(tài)就表明Mario芯片已停止運行(其結(jié)果是產(chǎn)生一中斷信號送到Super NES)。該標志位由Super NES處理器檢驗。位6是設(shè)定來表明當前正在進行ROM字節(jié)的讀取。列在下面的取(GET)字節(jié)指令要等該標志清零表明已完成數(shù)據(jù)讀取后才得以執(zhí)行。狀態(tài)寄存器的這些最低有效位可以獨立地或與余下的8位一起由Mario芯片處理器或主CPU讀出。狀態(tài)標志寄存器的最高有效位由規(guī)定的前綴指令設(shè)定,定義指令解釋的各種方式。
位 方式8 alt1 變更(ADD→ADC,SUB→SBC等…)9 alt2 變更(ADD→ADD#,SUB→SUB#等…)10 il 立即字節(jié)低位(在ih前進行)11 ih 立即字節(jié)高位(緩沖低位字節(jié)直到高位字節(jié)就緒)12 b 設(shè)定SReg和DReg,由WITH設(shè)定13 - 備用14 - 備用15 irq 中斷標志在如上所述的ALT1方式時,ADD(加法)指令會解釋為ADD WITH CARRY(帶進位加法)指令,而SUB TRACT(減法)指令會解釋為SUBTRACT WITH CARRY(帶進位減法)指令。指令A(yù)LT1起動該方式。
ALT2指令將對ADD指令的解釋變更為ADD WITH IMMEDIATE DATA(用立即數(shù)據(jù)的加法),而對SUBTRACT則變更為SUBTRACT IMMEDIATE DATA(減去立即數(shù)據(jù))?!傲⒓础睌?shù)據(jù)是緊接著指令以字節(jié)給出的。注意指令A(yù)LT3會把位8和位9都設(shè)定為邏輯“1”電平。位10和位11根據(jù)該立即數(shù)據(jù)是立即高位字節(jié)還是立即低位字節(jié)來設(shè)定。狀態(tài)寄存器的位12定義“b”方式,這里通過利用前綴指令“WITH”設(shè)定源端寄存器和目的端寄存器。狀態(tài)寄存器的位15存儲有在Mario芯片已停止運行之后設(shè)定的Mario中斷信號。
除了上述的狀態(tài)寄存器以外,Mario芯片還包括許多寄存器。如上所述,Mario芯片包括16個如圖4A和4B的寄存器塊76的說明中所描述的16位寬的寄存器。這些寄存器大多數(shù)是通過用寄存器并能用作數(shù)據(jù)和地址的存儲。但是如上面所注明的,寄存器R15在所有時候卻總是用作程序計數(shù)器。一般來說寄存器起兩方面作用,用于同主CPU通信和控制執(zhí)行程序。另外Mario芯片還采用其他寄存器,其功能在下表中給出。
寄存器 專用功能r0 缺省的D Reg和S Regr1 PLOT指令用的X坐標r2 PLOT指令用的Y坐標r3 無r4 LMULT指令結(jié)果的低位字r5 無r6 FRMULT和LMULT指令用的乘數(shù)字r7 MERGE(合并)指令用的源1r8 MERGE(合并)指令用的源2r9 無r10 無r11 用于子程序調(diào)用的連接寄存器r12 用于LOOP(循環(huán))指令的計數(shù)r13 LOOP指令分支轉(zhuǎn)移的地址
r14 ROM地址,一經(jīng)改動就開始從ROM讀取字節(jié)r15 程序計數(shù)器其他寄存器8位PCBANK 程序代碼存儲區(qū)寄存器8位ROMBANK 程序數(shù)據(jù)ROM存儲區(qū)寄存器64K存儲區(qū)8位RAMBANK 程序數(shù)據(jù)RAM存儲區(qū)寄存器64K存儲區(qū)16位SCB 屏面基址8位NBP 位平面數(shù)8位SCS 屏面列尺寸選擇256、320、512、640、1024、1280(屏面16和20個字符高,在2、4和8個位平面中)Mario芯片還包括一彩色方式CMODE寄存器。在該寄存器中有4位在例示性實施例中用以產(chǎn)生下面所述的特殊效果。通過設(shè)定CMODE寄存器所建立的效果,如下面例子中所闡明的那樣,是按照所設(shè)定的是16還是256彩色分辨率方式而有所不同。
CMODE寄存器各位如下CMODE位0標繪彩色0位(非透明位)在16彩色方式時若位0=1和所選擇的彩色半字節(jié)=0則不作標繪在256彩色方式且位3=0時若位0=1和彩色字節(jié)=0則不作標繪在256彩色方式且位3=1時
若位0=1和彩色低半字節(jié)=0則不作標繪注意透明性有效ON=0透明性無效OFF=1透明性O(shè)FF的唯一用途是將一區(qū)域填以0(用來清屏)CMODE位1晃動位在16彩色方式時晃動(高/低半字節(jié)給出兩種彩色)若(xpos XOR ypos AND 1)=0選擇低半字節(jié)若(xpos XOR ypos AND 1)=1選擇高半字節(jié)若透明性有效且所選擇的彩色半字節(jié)為0則不作標繪在256色方式時晃動應(yīng)當沒有效果CMODE位2.
高半字節(jié)彩色位在16彩色方式或在256彩色方式且CMODE位3被置位時當本位被置位,COLOUR命令將彩色寄存器的低半字節(jié)設(shè)定為源字節(jié)的高半字節(jié)(用來析取作為另一子畫面的高半字節(jié)存儲的16彩色的子畫面)若彩色寄存器的低半字節(jié)為0則在透明性有效時不作標繪。
CMODE位3復(fù)雜位僅用于256彩色方式。該位被置位時,彩色高半字節(jié)就被鎖,COLOUR命令只改變低半字節(jié)。
僅從低半字節(jié)計算透明性。
在標準的256彩色方式,如果透明性有效,它是從所有位計算出的;16彩色方式例ibt r0,$C0colour ;置彩色$C0ibt r0,%0000 ;置0cmodeibt r0,$97colourplot ;標繪彩色$7ibt r0,$30colourplot ;不作標繪,因為彩色為$0;(透明性有效且低半字節(jié)=0)ibt r0,%0001 ;置位1cmodeibt r0,$40colourplot ;標繪彩色$0;(透明性無效);16彩色方式且置位2的例ibt r0,$C0colour ;置彩色$C0;256彩色方式且置位3的例ibt r0,$C0
colour ;置彩色$C0ibt r0,%1000 ;置位3cmodeibt r0,$47colourplot ;標繪彩色$C7ibt r0,$50colourplot ;不作標繪,因彩色為$C0;(透明性有效且低半字節(jié)=0)ibt r0,%1001 ;置位3和位1cmodeibt r0,$60colourplot ;標繪彩色$C0;(透明性無效)stop;256彩色方式且置位3和位2的例ibt r0,$C0colour ;置彩色$C0ibt r0,%1100 ;置位3和位2cmodeibt r0,$74colourplot ;標繪彩色$C7
ibt r0,$03colourplot ;不作標繪,因彩色為$C0;(透明性有效且低半字節(jié)=0)ibt r0,%1101 ;置位3、位2和位1cmodeibt r0,$08colourplot ;標繪彩色$C0;(透明性無效)stop許多Mario芯片寄存器與特殊功能有關(guān)聯(lián)。如上表中所表明的,若不另外指定,系統(tǒng)就將寄存器R0缺省為某一特殊指令所需的目的端寄存器或源端寄存器。寄存器R0還可用于ALU的累加器。如上所述乘法指令返回一個32位的結(jié)果。最低有效的16位存儲在寄存器R4中。而寄存器R6則結(jié)合有符號帶小數(shù)的乘法指令(FRMULT)和長字節(jié)乘法指令(LMULT)一起被采用。
寄存器R7和R8用于執(zhí)行合并指令。該指令取用兩個規(guī)定的寄存器(即寄存器R7、R8)并將它們合并在一起以形成子畫面的座標數(shù)據(jù)。這種座標數(shù)據(jù)是用于對ROM表尋址以便將規(guī)定的子畫面映像在規(guī)定的多邊形上。這指令通過組合兩寄存器的部分來定義包含在要映像在多邊形上的子畫面中的下一個像素的彩色的地址,從而有助于有效地執(zhí)行質(zhì)地映像操作。
寄存器R11和R13是用來控制子程序執(zhí)行的。寄存器R11用作子程序調(diào)用的連接寄存器并存儲程序計數(shù)器的內(nèi)容加1。寄存器11的內(nèi)容定義循環(huán)結(jié)束后須存取的地址。寄存器R12用來存儲規(guī)定所要執(zhí)行的循環(huán)次數(shù)的計數(shù)。循環(huán)的地址則存儲在寄存器R13中。
如上所述,只要寄存器R14的內(nèi)容被修改,就從ROM在寄存器R14中所存儲的地址處讀出一字節(jié)。在這種方式下,可結(jié)合下面提到的GET字節(jié)指令實現(xiàn)延遲或緩沖的READ操作。
回到上表中的“其他寄存器(Other Registors)”,程序從其開始執(zhí)行的程序ROM位置是采用24位地址進行編址。該地址最低有效的16位在程序計數(shù)器中得到。而確定程序存儲區(qū)的最高有效位則存儲在程序代碼存儲區(qū)(PC Bank)寄存器。
ROM存儲區(qū)寄存器(ROM BANK)存儲最高有效位,以允許Mario芯片處理器取得存儲在ROM 10中的程序數(shù)據(jù),這些最高有效位是被附加存儲在寄存器R14中的16位ROM地址上。類似地,RAM存儲區(qū)寄存器(RAMBANK)存儲高階地址位以允許Mario芯片處理器存取RAM中的程序數(shù)據(jù)。為有效地擴展Mario處理器的尋址范圍,可將RAM和ROM的存儲區(qū)寄存器的內(nèi)容與Mario芯片的ROM和RAM存取指令一起運用。
屏面基址寄存器(SCB)被用來存儲正被建立、旋轉(zhuǎn)、放大或縮小的子畫面或目標的虛擬位映像的地址。執(zhí)行PLOT像素指令時,屏面基址寄存器SCB存儲RAM中被存取和被寫入的地址。
寄存器NBP被用來存儲正在使用的位平面數(shù)。它一般表明利用2、4或8個位平面。另外,屏面列向尺寸寄存器SCS被用來按照每列中所包含的字符數(shù)確定關(guān)于虛擬的位映像的信息。
下面列出的Mario芯片指令集說明指令的助記符和在對相應(yīng)的指令譯碼時所執(zhí)行的相應(yīng)的功能。首先在下面對不是不言自明的有關(guān)指令的某些功能提出簡要的評述。
STOP指令是在Mario芯片已完成其操作時執(zhí)行的,并用以置“GO”標志為零,同時還產(chǎn)生中斷信號給主CPU。
CACHE指令用以定義要復(fù)制到Mario芯片超高速緩存RAM中并從該RAM執(zhí)行的那部分程序ROM。執(zhí)行CACHE指令時,程序計數(shù)器的內(nèi)容被裝到超高速緩存基址寄存器并使下面要說明的超高速緩存標記復(fù)位。
Mario芯片包括一系列延遲的分支轉(zhuǎn)移指令,其中接著該轉(zhuǎn)移的指令如下表所示的那樣執(zhí)行。轉(zhuǎn)移去的地址是相對于程序計數(shù)器的內(nèi)容的。指令集包括許多種基于下表中所列出條件的延遲轉(zhuǎn)移。
Mario芯片包括許多“前綴”指令,即至/由/自(to/with/from)。這些前綴指令涉及后續(xù)指令的數(shù)據(jù)往來。例如“T0”前綴為下一指令設(shè)定目的端寄存器(DReg)?!癋ROM”前綴為下一指令設(shè)定源端寄存器。而“WITH”前綴則兩者都設(shè)定。
許多指令在操作碼中指定第二源寄存器。若沒有前綴指令設(shè)定SReg和DReg它們就被缺省為R0。在不是前綴指令的各個指令后,SReg和DReg兩者均設(shè)定為R0。若Dreg被設(shè)定為R15(程序計數(shù)器),因而使下一指令在R15中存儲其內(nèi)容時,就會起動延遲一周期的轉(zhuǎn)移。
其它前綴指令在狀態(tài)寄存器的高字節(jié)中設(shè)定標志以改變后續(xù)指令的操作。所有無前綴指令都使狀態(tài)字的高字節(jié)清零。下面是有關(guān)后續(xù)指令可以怎樣通過前綴指令被修改的例子。
lsr ;r0=r0向右移1位to r4lsr ;r4=r0向右移1位from r4lsr ;r0=r4向右移1位alt1from r6to r5add r7 ;r5=r6+r7+進位
alt1with r3add r3 ;r3=r3+r3+進位(6502rol)若在狀態(tài)寄存器中量上“b”標志,“TO”指令就修改為象操作“MOVE”(賦值)指令一樣,TO指令確定信息傳送去的寄存器而FROM指令則確定信息源。
STW指令在緩沖器中存儲一特別的字,這樣就無須一直等到完成存儲操作后才執(zhí)行后邊的指令。在這種方式下,采用比處理器慢的RAM并不一定會使處理器速度減慢。
LOOP指令的執(zhí)行將使得通用寄存器R12內(nèi)容遞減1。若R12的內(nèi)容非零,則開始向R13中所確定的地址轉(zhuǎn)移。
Alt1、Alt2和Alt3是設(shè)置狀態(tài)寄存器中上面提到的標志以按下表中所示的不同的方式解釋所執(zhí)行的指令的前綴指令。
PLOT指令標識所要標繪的像素的X和Y屏面坐標,并在與X與Y坐標(如寄存器R1和R2中所表示的)相對應(yīng)的屏面位置上標繪由COLOR指令所確定的彩色。PLOT像素指令包括使R1內(nèi)容的自動遞增,以有助于高速標繪水平線而免除一額外的遞增指令。
若Alt1標志被置位則標繪指令被解釋為READ PIXEL(讀出像素)指令(RPIX)。通過執(zhí)行讀出像素指令,在指定屏面位置上的像素彩色被讀出,它還可用來將不想要的像素信息從標繪硬件沖掉。
讀出像素指令RPIX實質(zhì)上是反過來運用標繪硬件,從字符的矩陣讀出以確定在指令中所指定的某一特定像素的顏色。COLOR指令向彩色硬件提供可由指定的源端寄存器的內(nèi)容確定的下一個像素的彩色。
“CMODE”指令設(shè)定彩色方式并能用于產(chǎn)生如上面提供的例中所展示的不同特殊效果。例如,利用CMODE指令可使交替的像素以不同彩色交替變化,形成濃淡變化,從而產(chǎn)生晃動效果。該CMODE指令還能用來控制透明性從而使子畫面的顯示會勾劃出背景顯示。通過設(shè)定如上例子的有關(guān)彩色方式的標志來確定透明性。
指令集還包括在旋轉(zhuǎn)多邊形的計算中用來確定所要顯示的目標的梯度或斜率的小數(shù)帶符號乘法。
遞增指令若與寄存器R14一起使用就會起動從ROM的讀出。GETC指令會從ROM取出所存取的字節(jié)并將裝入彩色寄存器中。
下表說明按照目前較佳實施例的例示性Mario芯片的指令集(包括上面已討論過的那些指令)。
指令集十六進制代碼 助記符 功能$00 STOP 使Mario芯片停止運行并產(chǎn)生65816 IRQ g=0$01 NOP 不操作1周期$02 CACHE 將超高速緩存基址置為PC并且使超高速緩存標志復(fù)位(只要PC不等于當前超高速緩存基址)若超高速緩存基址<>r15則超高速緩存基址=r15,使超高速緩存標志復(fù)位$03 LSR 邏輯右移DReg=SReg LSR1$04 ROL 帶進位循環(huán)左移DReg=SReg ROL1$05 nn BRA sbyte 總是作延遲轉(zhuǎn)移r15=r15+帶符號字節(jié)偏移$06 nn BGE sbyte 若大于或等于則延遲轉(zhuǎn)移若(s XOR v)=1則r15=r15+帶符號字節(jié)偏移
$07 nn BLT sbyte 若小于則延遲轉(zhuǎn)移若(s XOR v)=0則r15=r15+帶符號字節(jié)偏移$08 nn BEQ sbyte 若等于則延遲轉(zhuǎn)移若z=1則r15=r15+帶符號字節(jié)偏移$09 nn BNE sbyte 若不等于則延遲轉(zhuǎn)移若z=0則r15=r15+帶符號字節(jié)偏移$0a nn BPL sbyte 若為正則延遲轉(zhuǎn)移若s=0則r15=r15+帶符號字節(jié)偏移$0b nn BMI sbyte 若為負則延遲轉(zhuǎn)移若s=1則r15=r15+帶符號字節(jié)偏移$0c nn BCC sbyte 若進位清零則延遲轉(zhuǎn)移若c=0則r15=r15+帶符號字節(jié)偏移$0d nn BCS sbyte 若進位置位則延遲轉(zhuǎn)移若c=1則r15=r15+帶符號字節(jié)偏移$0e nn BCC sbyte 若溢出清零則延遲轉(zhuǎn)移若v=0則r15=r15+帶符號字節(jié)偏移$0f nn BVC sbyte 若溢出置位則延遲轉(zhuǎn)移若v=1則r15=r15+帶符號字節(jié)偏移$10-$1f TO r0…r15 (前綴)設(shè)DReg為rn(下一操作碼的目的端寄存器)DReg=rn若b: MOVE rn=SReg(無標志置位)
$20-$2f WITH r0 … (前綴)設(shè)DReg和SReg為rnr15 (源和目的和b標志)DReg=rnSReg=rnb=1$30-$3b STW(rn) 在rn中的地址處存儲SRegRAM[rn]=SReg(字低/高被緩沖)(偶數(shù)地址上的字正常存儲)若alt1: STB(rn) 在rn中的地址處存儲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不起作用)$3d ALT1 (前綴)標志alt1置位alt1=1$3e ALT2 (前綴)標志alt2置位alt2=1$3f ALT3 (前綴)標志alt1 & alt2置位alt1=1alt2=1$40-$4b LDW(rn) 從rn中的地址處取出裝到DRegDReg=RAM[rn](字低/高等待)(偶數(shù)地址上的字正常裝入)若alt1: LDB(rn) 從rn中的地址處取出(無符號字節(jié))裝到DRegDReg.h=0DReg.l=RAM[rn](字節(jié)等待)
$4c PLOT 在r1,r2(X、Y)處標繪像素且使r1遞增(N.B.并未檢驗r1和r2是否在屏面上,但會在RAM的任何地方繪制)標繪(r1,r2)r1=r1+1若alt1: RPIX 讀出在r1、r2(x、y)處像素的彩色DReg=點(r1,r2)$4d SWAP 交換字節(jié)DReg.h=SReg.lDReg.l=SReg.h$4e COLOUR 設(shè)定PLOT彩色標繪彩色=SReg若alt1: CMODE 設(shè)定PLOT彩色方式標繪彩色方式=SReg$4f NOT DReg=對SReg取反(NOTSReg)$50-$5f ADD r0…r15 DReg=SReg+rn若alt1: ADC DReg=SReg+rn+c若alt2: ADD DReg=SReg+#n若alt1+alt2: ADC DReg=SReg+#n+c$60-$6f SUB r0…r15 DReg=SReg-rn若alt1: SBC DReg=Reg-rn-c若alt2: SUB DReg=SReg-#n若alt1+alt2: CMP SReg|rn(z,s,c,v)
$70 MERGE 將r7和r8的高字節(jié)合并到DReg中DReg.h=r7.hDReg.l=r8.h在該結(jié)果基礎(chǔ)上設(shè)定標志:
s=b15 OR b7v=b14 OR b6 OR sc=b 13 OR b5 OR vz=b 12 OR b4 OR c$71-$7f AND r1…r15 DReg=SReg AND rn若alt1: BIC DReg=SReg AND NOT rn若alt2: AND DReg=SReg AND #n若alt1+alt2: BIC DReg=SReg AND NOT # n$80-$8f MULT r0… DReg=SReg*Rn(帶符號的8×8r15 位)若alt1: UMULT DReg=SReg*Rn(不帶符號的8×8位)若alt2: MULT DReg=SReg*#n(帶符號的8×8位)若alt1+alt2: UMULT DReg=SReg*#n(不帶符號的8×8位)$90 SBK 將SReg存到上一次使用的RAM地址$91-$94 LINK1…4 將返回地址連接到r11r11=r15+1…4$95 SEX 符號從低字節(jié)擴展到字DReg.[b15-b7]=SReg.[b7]DReg.l=SReg.l$96 ASR 算術(shù)右移DReg=SReg ASR1
若alt1: DIV2 除以2(帶舍入)DReg=SReg ASR1若DReg=-1則DReg=0$97 ROR 帶進位循環(huán)右移DReg=SReg ROR 1$98-$9d JMP r8…r13 轉(zhuǎn)移到rn中的地址r15=rn(延遲轉(zhuǎn)移)if alt1: LJMP 長轉(zhuǎn)移到rn中的地址(ROM Bank來自SReg)并使超高速緩存復(fù)位r15=rn(延遲轉(zhuǎn)移)程序ROM存儲區(qū)寄存器=SReg$9e LOB 低字節(jié)DReg.h=0DReg.l=SReg.l$9f FMULT 小數(shù)帶符號乘法DReg=(SReg*r6).hw(帶符號的16×16位乘法)c=(SReg*r6).b15若alt1: LMULT 長字節(jié)帶符號乘法DReg=(SReg*r6).hw(帶符號的16×16位乘法)r4=(SReg*r6).lwc=(SReg*r6).b15
$a0-$af nn IBT r0…r15,sbyte 將符號擴展的字節(jié)裝到rn中rn=立即字節(jié)(符號擴展的)若alt1: LMS r0…r15,byte 從絕對的偏移字節(jié)地址取出裝到rn中rn=RAM[byte<<1](字數(shù)據(jù))若alt2: SMS r0…r15,byte 將rn存儲到絕對的偏移字節(jié)地址RAM-[byte<<
1]=rn(字數(shù)據(jù))$b0-$bf FROM r0…r15 (前綴)設(shè)SReg=rnSReg=rn若b: MOVES DReg=rn(z,s & v(符號低字節(jié))標志)$c0 HIB 高字節(jié)DReg.h=0DReg.l=SReg.h$cl-$cf OR r1…r15 DReg=SReg OR Rn若alt1: XOR DReg=SReg XOR Rn若alt2: OR DReg=SReg OR #n若alt1+alt2: XOR DReg=SRegXOR #n$do-$de INC r0…r14 使rn遞增rn=rn+1(TO/WITH/FROM不起作用)$df GETC 從ROM緩沖器取出字節(jié)來標繪彩色若alt2: RAMB RAM數(shù)據(jù)存儲區(qū)寄存器=SReg若alt1+alt12: ROMB ROM數(shù)據(jù)存儲區(qū)寄存器=SReg$e0…$ee DEC r0…r14 使rn遞減rn=rn-1(TO/WITH/FROM不起作用)$ef GETB 從ROM緩沖器取出不帶符號的字節(jié)送到DRegDReg=ROM緩沖器字節(jié).零擴展若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é)。符號擴展$f0-$ffnnnn LWT r0…r15,word 將立即字裝到rn中rn=立即字(經(jīng)緩沖的)
若alt1: LM r0…r15,word 從絕對的字地址取出裝到rn中rn=RAM[字地址](字數(shù)據(jù))若alt2: SM r0…r15,word 將rn存到絕對的字地址圖6至圖17更為詳細地示出圖4A和圖4B中用方框圖示出的各組成部分。為更清楚地展現(xiàn)本發(fā)明的獨到特征,那些對本技術(shù)領(lǐng)域的技術(shù)人員來說是常規(guī)或顯然的,以及會使這些獨到的特征不能被清楚看到的電路細節(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,和EXCLUSIVE OR(異或)”邏輯電路158。
ALU還包括常規(guī)的移位功能電路,其中任何進位位移位到最高有效位位置而結(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進1“出”的多路轉(zhuǎn)換器164相連。根據(jù)譯出的指令,向目的端總線Z輸出相應(yīng)的結(jié)果。
加法器/減法器152除了從X總線接收16位,還根據(jù)送到多路轉(zhuǎn)換器150的指令譯碼器輸入接收在總線Y送來的信息或指令本身的信息。
ALU50還包括CPU標志發(fā)生電路166。CPU標志電路166產(chǎn)生零,溢出,符號和進位信號以便于裝到電路166中的至少一個標志寄存器。CPU標志可由指令譯碼電路60置位,該電路對指令所產(chǎn)生的進位起動、零起動,符號起動和溢出起動信號進行譯碼,根據(jù)加法器/減法器152所確定的相應(yīng)條件來使標志置位。還可根據(jù)輸入標志電路166的目的端(或結(jié)果)總線Z的內(nèi)容使這些標志置位。標志例如可用來觸發(fā)基于較廣的條件范圍的條件轉(zhuǎn)移操作。
圖7、8A和8B更為詳細地示出圖4A中的像素標繪電路(52、54、56和58)。該電路執(zhí)行PLOT命令,它取出某一特定的X坐標和Y坐標,并在那些屏面坐標處以由COLOR命令裝載的彩色寄存器54的內(nèi)容所確定的彩色標繪像素。
Super NES如上面所注明的那樣采用字符映像的顯示屏面。標繪硬件用以將像素坐標地址數(shù)據(jù)變換為字符映像的地址數(shù)據(jù)。
Super NES的字符是定義在位平面中的。字符可有2、4或8位平面以確定4、16或256種彩色。字符定義的每個字節(jié)包括該字符的一個像素行的位平面。這些像素從左到右,從高位到低位被確定。對于256彩色方式操作,有8RAM位置需要更新。
像素標繪電路具有一個本地緩沖機構(gòu),它包括彩色矩陣206,該矩陣可存儲要顯示的某一特定字節(jié)的所有各位,因為這些位可能最終都需要更新。位平面計數(shù)器208與彩色矩陣電路206相連。像素坐標從X和Y總線裝載到像素X和像素Y寄存器202、204。在本例示性實施例,通用寄存器R1和R2用作圖7中示出的標繪X寄存器202和標繪Y寄存器。這些寄存器接收按PLOT命令規(guī)定要標繪的像素的X和Y座標。
標繪X和標繪Y寄存器202、204與基于全加器和半加器的字符地址計算電路相連,該電路按地址輸出到2位置滾桶式移位電路214,進而與標繪地址寄存器216和地址比較器218相連。標繪X寄存器的三個最低有效位與多路分解器212相連進而與位未決寄存器210相連。
示于圖8A中的標繪控制器200接收表明已對PLOT像素(PLOT)或READ像素(RPIX)命令譯碼的信號以及下述其他控制信號。標繪控制器200產(chǎn)生以下述方式使用的標繪電路控制信號。
如上所述,標繪控制電路200產(chǎn)生在像素標繪硬件52中使用的控制信號。如圖8A所示,像素控制電路200接收從位未決寄存器210的輸出,該輸出是經(jīng)AND門201與像素控制電路200相連的。若位未決寄存器210的所有8位都被置位,就通知像素控制邏輯200可跳過讀出周期并可將彩色矩陣206的信息寫到RAM。
像素控制電路200還響應(yīng)PLOT命令起動其操作。像素控制邏輯200也響應(yīng)READ像素命令RPIX起動基本相同的操作,不過新信息并不寫到彩色矩陣206以輸出到RAM。如上所述,若需要知道屏面上特定像素的彩色就執(zhí)行READ像素命令,該命令也可用來將彩色矩陣206的現(xiàn)存信息沖掉。
控制器200還接收RAM完成控制信號RAM DONE,它表明已完成RAM存取。如上所述,RAM完成信號還用來使標記彩色矩陣206的位平面的位平面計數(shù)器208遞增。標繪控制器200還接收從地址比較器218來的PLEQ信號,這表明地址匹配無需將彩色矩陣206的內(nèi)容寫到RAM,從而表明應(yīng)繼續(xù)對當前的彩色矩陣內(nèi)容更新。該標繪控制器200還接收告知標繪控制器200有關(guān)必須讀出和寫入多少字節(jié)的屏面方式(SCR.MD)控制信號。
標繪控制電路200產(chǎn)生使彩色矩陣206的內(nèi)容在它的第二緩沖級緩沖的轉(zhuǎn)儲控制信號DUMP(結(jié)合圖7和圖8B一起參考)??刂破?00另外產(chǎn)生使位未決寄存器清零信號CLRPND和裝載位未決寄存器控制信號LDPND并將這些信號送到位未決寄存器210。另外,控制器200產(chǎn)生與結(jié)合圖8B說明的彩色矩陣單元相關(guān)的LDPIX和BPR控制信號。
假定像素標繪硬件未被另外占用,指令譯碼器對PLOT命令的譯碼和輸入到標繪控制器200的PLOT信號就起動產(chǎn)生裝載未決(寄存器)信號LDPND。LDPND信號被送到位未決寄存器210而使數(shù)據(jù)得以從多路分解器212裝到位未決寄存器210中。清未決(寄存器)信號CLRPND是響應(yīng)表明未決數(shù)據(jù)已寫到RAM去的RAM完成信號RAMDONE而產(chǎn)生的。此后位未決寄存器閑置以供下一像素標繪信息使用。
圖8C中所示的是說明由標繪控制器200接收的信號,各種地址和數(shù)據(jù)信號,其他有關(guān)的控制信號和標繪控制器所產(chǎn)生的上述輸出控制信號之間的關(guān)系的時序圖。例示性的地址值、數(shù)據(jù)值等僅僅是用于說明而示出的。
標繪硬件52如下面那樣工作。當標繪控制器200確定標繪硬件52未被占用,示于圖4A中的彩色寄存器54的內(nèi)容被裝進8×8彩色矩陣電路206的水平行。彩色矩陣206按行裝載而按列讀出。彩色寄存器54的內(nèi)容由COLOR命令更新。任何后續(xù)PLOT命令將通過彩色寄存器54這個寄存器將彩色數(shù)據(jù)裝進彩色矩陣。
彩色矩陣中裝上彩色寄存器各位的垂直位置是由存儲在標繪X寄存器202中的3位最低有效位確定的。這樣這標繪地址的三位最低有效位就決定了彩色矩陣206中的所要更新的一行位。
位未決寄存器210是用來記錄屏面字符的分節(jié)的哪些特定位正被更新。寄存器210包括表明各位已被寫到屏面的相關(guān)部分的16個寄存器標志。該位未決寄存器210是響應(yīng)由標繪控制器200所產(chǎn)生的信號LDPND而被裝載的并由信號CLRPND清除。
若為更新在相同區(qū)域的屏面映像而要執(zhí)行后續(xù)的標繪命令,一給定位的操作就與裝入到8×8彩色矩陣206的對應(yīng)于像素的附加彩色數(shù)據(jù)一同重復(fù)。另一位則利用存于標繪X寄存器202中的標繪地址的最低有效位置設(shè)于位未決寄存器210中。特定位是經(jīng)與標繪X寄存器202相連的3路至8路多路分解器裝載到位未決寄存器210中。若所要更新的像素水平位置在8個像素以外,或它處在不同的垂直位置時,則已寫入矩陣206的數(shù)據(jù)必須讀出到RAM6(或RAM8)此后彩色矩陣206就可自由接收新的彩色數(shù)據(jù)。在接收到要求寫到RAM的后續(xù)標繪命令之前,彩色矩陣206的當前內(nèi)容一直在像素標繪硬件中例如在彩色矩陣206中被緩沖。
當來自彩色矩陣206的數(shù)據(jù)被寫到RAM6或RAM8就通過使用示于圖7中的邏輯門,半加器和全加器進行地址變換計算以將X、Y坐標變換成RAM地址。實際的地址計算是按照下面給出的注釋和例示性代碼進行的。這些計算會隨著所采用的是4、16還是256彩色方式有所不同。所給出的例示性計算是針對256彩色方式的。
這些256彩色字符具有16字節(jié)的4組,各自確定位平面對共有64字節(jié)。
位映像是通過將獨特的字符放在所需屏面區(qū)的每個位置上而建立的。當進行與Super NES相關(guān)的標繪時,最好以列組織字符。
例如(128個像素高的屏面)字符號0 16 32 … …1 17 33 …2 18 24 …· · ·· · ·15 31 47 …Super NES并不限于256個字符,故而位映像容量主要受到存儲器和DMA傳送時間的約束。例如Mario芯片能在128和160個像素高的屏面上標繪。最大屏面寬度是32個字符或256個像素。
下面的算法是舉例說明如何采用按列組織的虛擬位映像控制像素標繪。
先對所有的位平面從X坐標的三位最低有效位計算像素掩碼。
像素號 掩碼0 %100000001 %01000000· · ·7 %00000001接下來利用去除了低3位的Y座標計算沿著一列的下行偏移量,以給出沿一列的字符數(shù),然后乘上字符大小。
屏面彩色 以字節(jié)為單位的字符大小4 1616 32256 64接下來從X座標去除低3位計算字符到頂?shù)钠疲艘粤写笮?。列大小是列的字符?shù)乘以字符大小。
一般的列大小彩色 字符高16 204 256字節(jié) 320字節(jié)16 512字節(jié) 640字節(jié)256 1024字節(jié) 1280字節(jié)Y坐標的低3位給出沿字符向下的字節(jié)偏移。所有偏移與當前位映像指針之和給出含有像素第一位平面的字節(jié)的地址。隨后的位平面交替地從上一次平面移上1字節(jié)和移上15字節(jié)。然后,像素各位就可用像素掩碼置位或清零。各位平面的位被置位或清零呈該像素所需的存儲在彩色寄存器54中的彩色數(shù)中相應(yīng)位的狀態(tài)。
示范碼
;以65816代碼在4個位平面上標繪用于我們的游戲演示;程序基本上是表驅(qū)動的;寄存器A、X和Y是16位置彩色;取彩色并加倍lda Colourasl atax;設(shè)置位平面0和1的彩色掩碼ldamask1 tab,xstamask1;設(shè)置位平面2和3的彩色掩碼ldamask2 tab,xstamask 2rts標繪;取水平和垂直坐標;使兩者加倍并送到Y(jié)和Z寄存器ldaplot xlaslatay ;Y是X坐標*2ldaplot ylaslatax ;X是Y坐標*2;取沿列向下的偏移lda pyoftab,x;加列偏移初值
clcadc pxoftab,y;加兩倍的緩沖器指示(選擇位映像)clcadc drawmaptax;X是含有所需要的像素的字從位映象基址的偏移;Y是像素的X坐標*2;作位平面0和1lda.lbitmapbase,x ;取含有像素字and pbittabn,y ;掩去老像素彩色sta pmasklda maskl;將彩色和像素掩碼一起掩去and pbittab,yora pmask;加入其他像素sta.lbitmapbase,x ;存到位映像;作位平面2和3lda.l bitmapbase+16,xand pbittabn,ysta pmasklda mask2and pbittab,yora pmasksta.l bitmapbase+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)mask1 tabdw $0000,$00ff,$ff00,$ffff,$0000,$00ff,$ff00,$ffffdw $0000,$00ff,$ff00,$ffff,$0000,$00ff,$ff00,$ffff;對位平面2和3的彩色掩碼(彩色0至15)mask2 tabdw $0000,$0000,$0000,$0000,$00ff,$00ff,$00ff,$00ffdw $ff00,$ff00,$ff00,$ff00,$ffff,$ffff,$ffff,$ffffcol_size equ.Number_char_rows*8*Number_bit_planes(16) (4);對字符列表起始位置的偏移pxoftabtemp=0
rept32 ;字符列數(shù)dw temp,temp,temp,temp,temp,temp,temp,temptemp=temp+col_sizeendr;沿列表向下偏移pyoftabtemp=0rept 32dw tempdw temp+2dw temp+4dw temp+6dw temp+8dw temp+10dw temp+12dw temp+14temp=temp+32endr更為仔細地參看圖7,確定所要標繪的像素位置的屏面上的X和Y坐標被裝載到PLOT X和Y寄存器202和204(這些寄存器實質(zhì)上可以是寄存器塊76中的R1和R2寄存器)。裝入到PLOT X寄存器202的標繪地址的3位最低有效位按指定的X和Y坐標確定位平面字節(jié)中的哪一位將被寫入。累加器R0的內(nèi)容被裝入到由標繪X寄存器202的最低有效位所選定的彩色矩陣206的列。
若標繪X寄存器202是0,則定義該像素的8位的各位中將更新最低有效位。隨著標繪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,則計算像素的屏面地址,并將它裝到標繪地址寄存器216,該字節(jié)中的像素位置用來使BIT_PENDING寄存器210中的相同位置位。若BIT_PENDING寄存器210是非零,則使BUSY標志置位。
若新計算出的地址等于PLOT_ADDR寄存器216的內(nèi)容,則新的像素位位置在BIT_PENDING寄存器210中置位并使BUSY標志復(fù)位。
若新地址不同于PLOT_ADDR寄存器的內(nèi)容,則采取以下步驟。
步驟1若BIT_PENDING寄存器210包含F(xiàn)Fh則直接進行步驟3。
步驟2從RAM的PLOT_ADDR+屏面基址處讀取字節(jié)送到臨時的數(shù)據(jù)緩沖器PLOT_BUFF中。
步驟3若BIT_PEND寄存器210所屏蔽的數(shù)據(jù)緩沖器中的各位全部等于PLOT_COLOR寄存器矩陣的第0行,則直接進行步驟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ù)直到所有彩色位更新標繪X和標繪Y寄存器的內(nèi)容是圖7中所表示的全加器和半加器電路處理的。在圖7的方框圖中對全加器FA和半加器HA的配置和有關(guān)的邏輯電路進行了簡化。地址的計算可如下完成地址=屏面基址+2*y
+(y[3..7]+x[3..7]*16+(x[3..7]*4)&&scr_ht)*字符大小中間項為y7 y6 y5 y4 y3x7 x6 x5 x4 x3 0 0x7 x6 x5 x4 x3 0 0 0 0因而例如用6個全加器和1個半加器產(chǎn)生一10位的中間結(jié)果px
。
為使中間結(jié)果移位成為所選定的彩色方式用的正確精度,該結(jié)果送到由字符大小值所控制的12×3多路轉(zhuǎn)換器。這與y的較低位y
結(jié)合形成16位屏面地址。要完成該地址計算,這再與允許將屏面置于1K邊界上的屏面基址值scr[9..22]相加。
這地址隨后送到根據(jù)所選擇的4、16或256彩色分辨率用來將所送到的地址信息輸入乘以1或2或4的雙位置滾桶式移位器214。
移位電路214的輸出被送到起到RAM地址的緩沖存儲器作用的標繪地址寄存器216。由于在執(zhí)行標繪命令之后,寄存器R1和R2即標繪X和標繪Y寄存器的內(nèi)容會改變,因而該地址需緩沖。
地址比較器218對作為從移位電路214的輸出由標繪硬件確定的新地址與存儲在標繪地址寄存器216的舊地址進行比較。若地址不同則該地址必須寫到RAM。若存儲于地址寄存器216的標繪地址與移位電路214的輸出相同,地址比較器218就產(chǎn)生(送到標繪控制器200的)控制信號PLEQ。
回到彩色矩陣206,上面已說明過彩色矩陣206是按列讀出的。位平面計數(shù)器208與彩色矩陣206相連以確定要讀出哪一列。位平面計數(shù)器208與RAM控制器88相連,當完成RAM操作,RAM控制器88產(chǎn)生使位平面計數(shù)器遞增的信號。
彩色矩陣206包括諸如圖8B所示的這類單元的陣列。在8×8矩陣206的一個矩陣元中有64個這類單元。當對標繪命令譯碼時,控制器200將指令控制信號LDPIX送到鎖存器220,使該鎖存器裝有來自彩色寄存器54的彩色數(shù)據(jù)COL。由控制器200產(chǎn)生控制信號DUMP表明彩色矩陣206中的第一級緩沖已完成和數(shù)據(jù)需輸出給屏面。一旦產(chǎn)生DUMP信號,鎖存在鎖存器220中的數(shù)據(jù)就送給門電路226和鎖存器228。當DUMP信號被有效地送到門電路226,門電路則將數(shù)據(jù)送到鎖存器228。同時,門224關(guān)閉進而阻止來自鎖存器228的同相輸出端的反饋回路使它保持以前所存儲的數(shù)據(jù)。
當數(shù)據(jù)從RAM讀進來并填到數(shù)據(jù)間隔時,控制信號BPR就向門222提供零輸入且LDRAM信號將處于零狀態(tài)。在這類情況下,來自RAMD輸入的數(shù)據(jù)輸入將經(jīng)過門電路226送進鎖存器228。鎖存器228中的數(shù)據(jù)隨后可讀出如圖7所示經(jīng)RAM控制器送到RAM數(shù)據(jù)總線。其他這類單元組合在一起將由X,Y像素標識所表示的像素數(shù)據(jù)轉(zhuǎn)換成同Super NES字符格式相兼容的字符數(shù)據(jù)。
在圖9中詳細示出的RAM控制器88產(chǎn)生有關(guān)存取游戲卡RAM(s)的各種控制信號。游戲卡RAM(s)必須在Super NES、Mario芯片的標繪硬件,和從所執(zhí)行的Mario芯片程序取數(shù)據(jù)過程之間共用。RAM控制器88的作用在于確保在相應(yīng)的時刻將相應(yīng)的地址送給RAM地址總線。相應(yīng)時刻的RAM存取信號的產(chǎn)生是由圖10中更詳細示出的仲裁邏輯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所收到信號的控制下保留來存儲從16位X總線或16位Y總線來的向RAM寫入的數(shù)據(jù)。裝進數(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)生的代碼確認CACK,數(shù)據(jù)確認DACK,或標繪確認PACK信號獲得的信號),選擇其一地址輸入。來自Super NES地址總線HA的地址信號由多路轉(zhuǎn)換器308接收,只要Mario“占用”狀態(tài)位置為零就經(jīng)存儲器定時信號發(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ù)存儲區(qū)寄存器314的輸出和圖9中所示的程序計數(shù)器PC的內(nèi)容。屏面存儲區(qū)寄存器316的輸出用于形成輸入到多路轉(zhuǎn)換器308的標繪地址的最高有效位,而從圖7的標繪電路輸入最低有效位。屏面存儲區(qū)寄存器316和數(shù)據(jù)存儲區(qū)寄存器314均裝上了主數(shù)據(jù)總線HD來的數(shù)據(jù)并且可由主CPU尋址。這些寄存器示于圖9中,但本身不是一定得配置于RAM控制器88中,而是將它們的內(nèi)容送給RAM控制器。例如數(shù)據(jù)存儲區(qū)寄存器314可以在下述ROM控制器104中而屏面存儲區(qū)寄存器可以配置在標繪硬件52中。
所要輸出的多路轉(zhuǎn)換器308輸入信號是如下選擇的。若發(fā)生代碼確認信號CACK,則選擇代碼存儲區(qū)和程序計數(shù)器PC輸入。若發(fā)生數(shù)據(jù)確認信號DACK,則選擇數(shù)據(jù)存儲區(qū)加多路轉(zhuǎn)換器寄存器輸入。若出現(xiàn)標繪確認信號PACK,則選擇標繪地址。最后若既無CACK、DACK也無PACK信號出現(xiàn),就選擇主機(即SNES)地址輸入。
多路轉(zhuǎn)換器308的20位地址輸出送到存儲器定時信號發(fā)生器312,它則在合適的時刻將這些地址信號送給RAM6、RAM8。存儲器定時信號發(fā)生器312接收仲裁塊310中葛萊計數(shù)器(graycounter)來的輸出。存儲器定時信號發(fā)生器312對葛萊計數(shù)器來的輸出譯碼,并產(chǎn)生經(jīng)RAM地址總線RAMA對圖1中的RAM6、RAM8尋址的輸出信號。另外一種方式是,定時信號發(fā)生器312如圖1所示產(chǎn)生包括行地址選通信號RAS,列地址選通信號CAS和寫入允許信號WE在內(nèi)的用于存取RAM6、RAM8的控制信號。
存儲器定時信號發(fā)生器312產(chǎn)生一反饋給仲裁邏輯310表明RAM周期結(jié)束的DONE信號。存儲器定時信號發(fā)生器312還產(chǎn)生一用來將外部RAM來的數(shù)據(jù)鎖存進RAM控制器中的數(shù)據(jù)鎖存器(未示出)的數(shù)據(jù)鎖存信號DATLAT。RAM來的數(shù)據(jù)隨后例如是經(jīng)RAM數(shù)據(jù)總線RAMD_IN送給Mario芯片電路。定時信號發(fā)生器312來的RAM A地址信號輸出可送給游戲卡上的任一靜態(tài)RAM。若游戲卡中用的是動態(tài)RAM則產(chǎn)生控制信號CAS、RAS和WE。如上面說明的選配項電阻的設(shè)定所表明的,靜態(tài)或動態(tài)RAM信號是根據(jù)Mario芯片的配置而相應(yīng)地產(chǎn)生的。圖9A中示出定時信號發(fā)生器312產(chǎn)生的示范性定時信號和其他有關(guān)信號。所示出的示范性地址和數(shù)據(jù)值僅用于說明。RAM DONE信號則示于圖8C中。
在合適的時刻存取RAM的信號產(chǎn)生是部分地由仲裁邏輯310控制的。如圖10所示,仲裁邏輯310接收有關(guān)存儲器存取輸入的信號CACHE(超高速緩存)請求CACHERQ,數(shù)據(jù)請求DATRQ和標繪請求PLTRQ。這些輸入信號每一個分別臨時地存儲在鎖存器325,327,329中。若所要執(zhí)行的Mario指令出自RAM或ROM,則通過接收到CACHE請求信號CAC HERQ來起動處理,該信號就圖10而言是用來確認正執(zhí)行的指令不是來自超高速緩存RAM因而一定是來自RAM或ROM的。這樣CACHE請求信號CACHERQ表明不能從CACHE(超高速緩存)94取出指令執(zhí)行。數(shù)據(jù)請求信號DATARQ是作為對需對RAM存取的指令(例如裝字節(jié)、裝字指令)譯碼的結(jié)果產(chǎn)生的。另外,仲裁邏輯310接收響應(yīng)標繪命令的譯碼而由標繪控制器200產(chǎn)生的標繪請求信號PLTRQ。
當Mario芯片正在運行和Mario占用位被置位時仲裁邏輯310才起動(如狀態(tài)寄存器SUSPEND(暫停)方式位處于“0”狀態(tài)所表明的)。在收到和存儲CACHE請求,數(shù)據(jù)請求,和標繪請求信號后,鎖存器325,327和329分別產(chǎn)生CRQ,DRQ和PRQ信號。門331,333和335接收各自鎖存器的同相輸出端來的這些信號并為這些信號建立優(yōu)先級。在這方面,CACHE請求信號具有最高的優(yōu)先級,數(shù)據(jù)具有第二位高的優(yōu)先級而標繪請求則具有最低的優(yōu)先級。CACHE請求信號被給予最高優(yōu)先級是因為它表明已試圖執(zhí)行來自CACHE指令,但必須從RAM存取指令。若較高優(yōu)先級請求已經(jīng)使其各自的鎖存器置位,則門電路333和335用以確保較低優(yōu)先級的請求無法使鎖存器339和341置位。只有系統(tǒng)不是處于暫停狀態(tài),鎖存器337,339,341才能置位,因為SUSPEND(暫停)方式信號被輸入到門331,333和335中的各個門。當Mario芯片占用即可自由地存取RAM時SUSPEND方式信號會處于低邏輯電平狀態(tài)。若SUSPEND被置為1鎖存器337,339和341不能被置位,當確認鎖存器337,339和341中的任一個已經(jīng)為“1”(即一個周期已經(jīng)在進行)時也不能被置位。門331、333和335建立RAM的優(yōu)先級。若CACHE REQUEST(超高速緩存請求)鎖存器337被置位則數(shù)據(jù)確認鎖存器339就不會被置位,若CACHE或DATA請求鎖存器被置位則標繪確認鎖存器341也不會被置位。
鎖存器337一由超高速緩存請求信號置位就產(chǎn)生超高速緩存確認信號CACK,而它一由圖10中的邏輯電路確立,CACHE94(或RAM)就可供使用。若圖10中的邏輯電路確定RAM未被其它方式占用,就會同樣地產(chǎn)生數(shù)據(jù)確認信號DACK和標繪請求確認信號PACK,以確認數(shù)據(jù)請求和標繪請求。
鎖存器337,339和341的同相輸出送到門電路343,進而經(jīng)NOR門344使產(chǎn)生RAM存取的定時信號的葛萊計數(shù)器345復(fù)位。本技術(shù)領(lǐng)域的技術(shù)人員會理解葛萊計數(shù)器是每次僅有一個輸出位改變的計數(shù)器,這可方便地用來控制RAM存取時間。
由定時信號發(fā)生器312產(chǎn)生的DONE(完成)信號由NOR門344和鎖存器337,339,341接收。DONE信號表明一個RAM周期已結(jié)束。DONE信號的產(chǎn)生觸發(fā)仲裁邏輯310中的相應(yīng)鎖存器的清零,使已鎖存的請求取消。DONE信號還送到始發(fā)電路例如超高速緩存控制器68或標繪控制器52,以表明RAM存取結(jié)束。
按照本發(fā)明的另一實施例,Mario芯片可采用雙時鐘系統(tǒng)。這樣Mario芯片處理器無需由例如驅(qū)動上面提到的RAM控制器電路的相同時鐘來驅(qū)動。例如RAM控制器88可由Super NES來的21MHz時鐘信號來驅(qū)動而Mario芯片處理器可由另一個可變頻時鐘驅(qū)動。在此方式下Mario芯片處理器可不限定工作于21MHz時鐘頻率。
按照這示范性實施例的Mario芯片可采用異步態(tài)機器控制電路;諸如示于圖11的執(zhí)行再同步雙時鐘接口功能的那種電路。若采用不同的時鐘系統(tǒng)而不是工作在另一時鐘頻率的存儲器控制器來實施,則圖11電路可以用來與Mario芯片處理器接口。
示于圖11中的再同步電路接收與時鐘信號CK不同步的外來的時鐘信號DIN。不論DIN的頻率是高于還是低于時鐘頻率CK,再同步電路都會由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這類接收雙時鐘信號的任何接口電路。
圖11所示的電路因由門F對鎖存器A置位故而通過將從其閑置或復(fù)位態(tài)“010”切換成狀態(tài)“110”而響應(yīng)外來的信號DIN。再同步時鐘CK一旦變低(也許已經(jīng)為真),鎖存器B由門E復(fù)位形成狀態(tài)“100”,當時鐘再次變高時,由門A使鎖存器C置位形成狀態(tài)“101”。
鎖存器C在圖11中的Q從所示的該電路產(chǎn)生輸出。當輸入信號再次變低,鎖存器就再次由門C置位形成狀態(tài)“111”。當時鐘信號CK在到達狀態(tài)“111”之后又變低時,鎖存器A由門G復(fù)位形成狀態(tài)011。此后時鐘CK再變高并且由門B使鎖存器C復(fù)位,回到狀態(tài)機器閑置態(tài),其輸出就不起作用。
圖13更為詳細地示出圖4B的ROM控制器104。ROM控制器104包括超高速緩存加載器400,它可部分地控制將存儲在ROM10或游戲卡RAM中的當前執(zhí)行的程序指令載入芯片超高速緩存RAM94。指令是以16字節(jié)的組加載進超高速緩存RAM94的。當在16字節(jié)段當中遇到轉(zhuǎn)移指令,在執(zhí)行轉(zhuǎn)移之前還是必須繼續(xù)地填滿一完整的16字節(jié)段。CACHE加載電路400包括一2位狀態(tài)機,它通過確保16字節(jié)CACHE段的剩下的字節(jié)加載進超高速緩存RAM94來響應(yīng)對轉(zhuǎn)移指令的譯碼。超高速緩存加載邏輯狀態(tài)機的第一狀態(tài)是閑置狀態(tài),若程序執(zhí)行超出超高速緩存器的范圍或程序數(shù)據(jù)已被加載進超高速緩存,則該閑置狀態(tài)為真。第二狀態(tài)表明超高速緩存的加載和從游戲卡ROM或RAM來的指令的執(zhí)行是同時發(fā)生的。第三狀態(tài)是由對轉(zhuǎn)移指令的譯碼觸發(fā)的,該狀態(tài)處于有效直到16字節(jié)的超高速緩存段中的所有字節(jié)均已被加載。當執(zhí)行轉(zhuǎn)移而該轉(zhuǎn)移落到與超高速緩存16字節(jié)邊界不精確對應(yīng)的地址時就遇到第四狀態(tài),在這種情況下,超高速緩存從該邊界的開始位置被填充到16字節(jié)段中對應(yīng)于程序所轉(zhuǎn)移的地址的那部分。
圖4B中示出的超高速緩存控制器68產(chǎn)生輸入到超高速緩存加載器400的CACHE信號,它表明目前在超高速緩存RAM94中無法提供所需要的指令。因而必須從ROM讀取指令。代碼存儲區(qū)信號標識所要存取的地址的三位最高有效位并且表明所要存取的是程序ROM還是RAM。超高速緩存加載器400還包括在程序執(zhí)行期間保持與程序計數(shù)器PC的各最低有效位相應(yīng)計數(shù)的計數(shù)器。該計數(shù)器是經(jīng)超高速緩存加載器的PC輸入端加載的。
ROM控制器104中的超高速緩存加載電路400還接收WAIT(等待)和GO控制信號,它們表明Mario處理器因某些原因而處于WAIT狀態(tài)和Mario芯片在“工作”或“運行”方式。在這種情況下超高速緩存加載電路400產(chǎn)生一CODEFEFCH(代碼讀取)控制信號,送給示于圖13中的NOR門408,進而送給ROM定時計數(shù)器406的清零輸入。當超高速緩存加載電路400產(chǎn)生代碼讀取信號CODE FETCH,就優(yōu)先于數(shù)據(jù)讀取而啟動代碼讀取,因為在數(shù)據(jù)讀取前必須開始代碼讀取。圖10所示的包括優(yōu)先級邏輯在內(nèi)的仲裁電路可用來使所產(chǎn)生的信號被給予比數(shù)據(jù)讀取高的優(yōu)先級。
當清零信號從ROM定時計數(shù)器406取消,就起動一計數(shù)周期。ROM定時計數(shù)器406用來產(chǎn)生ROM RDY定時信號,它表明在ROM數(shù)據(jù)插腳可獲得ROM數(shù)據(jù),該信號是從門電路410輸出的。
ROM數(shù)據(jù)就緒信號ROM RDY門與再同步電路402相連,而該電路例如可包括圖11中所說明的再同步電路。在達到與處理器時鐘同步之后,產(chǎn)生信號ROM DCK使鎖存器404復(fù)位和產(chǎn)生DATAFETCH信號表示對寄存器R14的存取觸發(fā)了數(shù)據(jù)讀取,而這又導(dǎo)致發(fā)出EN_R14信號。當ROM定時計數(shù)器406已達到一規(guī)定計數(shù),確保在ROM數(shù)據(jù)插腳上可獲得數(shù)據(jù)時就產(chǎn)生DATAFETCH信號。
圖13中所示的ROM控制器從下述的輸入中的任意一個選擇出地址信號的多路轉(zhuǎn)換器414的輸出端產(chǎn)生ROM地址。代碼存儲區(qū)寄存器412是從Super NES數(shù)據(jù)總線HD加載的,以確定從哪一個ROM程序存儲區(qū)取出并執(zhí)行該Mario代碼。代碼存儲區(qū)寄存器412向多路轉(zhuǎn)換器414提供具有23位的ROM地址的8位。該ROM地址的最低有效位是從程序計數(shù)器PC的內(nèi)容得到的。當正向超高速緩存RAM寫入數(shù)據(jù)時,4位最低有效位是來自于由超高速緩存加載器400所產(chǎn)生的CACHE LOAD信號。另外的多路轉(zhuǎn)換器414地址輸入是每當存取寄存器R14時,從Mario通用寄存器R14的內(nèi)容產(chǎn)生的。
對R14的存取致使數(shù)據(jù)讀取鎖存器404產(chǎn)生DATAFETCH信號,該信號用作控制信號使多路轉(zhuǎn)換器414選擇其R14輸入(和從Super NES數(shù)據(jù)總線HD加載的數(shù)據(jù)存儲區(qū)寄存器416的內(nèi)容)。該數(shù)據(jù)存儲區(qū)寄存器416包含有與R14讀取操作有關(guān)的數(shù)據(jù)存儲區(qū)的最高有效位。
數(shù)據(jù)讀取信號另外送給門408,它將起動由ROM定時計數(shù)器406進行的計數(shù),進而經(jīng)門410產(chǎn)生ROM就緒信號ROM RDY,當ROM RDY信號產(chǎn)生時,就可從ROM數(shù)據(jù)總線ROM D[70]獲得數(shù)據(jù)。
地址多路轉(zhuǎn)換器414還接收從Super NES地址總線HA來的ROM地址。根據(jù)送給多路轉(zhuǎn)換器414控制輸入端的信號“ROM”的狀態(tài)將選擇Super NES地址總線?!癛OM”控制信號向Mario ROM控制器表明Super NES擁有對ROM地址總線的控制。
對轉(zhuǎn)移指令譯碼后,程序計數(shù)器的內(nèi)容加上由超高速緩存加載器的計數(shù)器所產(chǎn)生的四位最低有效位被輸入地址多路轉(zhuǎn)換器414。這允許向超高速緩存段加載上在轉(zhuǎn)移被譯碼前正在加載的16字節(jié)的剩余部分。
多路轉(zhuǎn)換器422提供ROM控制器104中從ROM數(shù)據(jù)插腳ROM D至Mario芯片的目的端總線Z的數(shù)據(jù)通路。已經(jīng)由鎖存器404產(chǎn)生的DATAFETCH信號和由ROM定時計數(shù)器406產(chǎn)生的ROM RDY信號被送給門418而使ROM緩沖器420的加載得以進行。ROM數(shù)據(jù)總線ROM D[7…0]來的ROM數(shù)據(jù)被裝進ROM緩沖器420。
多路轉(zhuǎn)換器422響應(yīng)指令代碼(諸如通過存取寄存器R14觸發(fā)的自動進行數(shù)據(jù)讀取的GET B這類指令代碼)的譯碼選取一輸入。若對代碼讀取操作譯碼,ROM控制器104就會將指令送到圖15A中所示的Mario芯片中的指令總線。若對GET B指令譯碼,存儲在寄存器420中被緩沖的字節(jié)就被置于Z總線上。某些GET B指令操作涉及X總線上經(jīng)圖13中所示的多路轉(zhuǎn)換器的相對應(yīng)的輸入端輸入的數(shù)據(jù),送給目的端總線Z的數(shù)據(jù)可隨后裝進Mario通用寄存器76中的一個。
在圖14中更為詳細地示出超高速緩存控制器68。超高速緩存控制器68包括一標記鎖存器506。標記鎖存器506包括例如表明指令是否已存儲在超高速緩存RAM94(為便于說明將它配置于超高速緩存控制器中示出)中的64個鎖存器。
標記鎖存器506中的64個標志中的每一個都對應(yīng)于存儲在超高速緩存RAM94中的16位信息。在從ROM或RAM取出指令執(zhí)行的同時超高速緩存RAM94被載上指令。在如上說明的那樣執(zhí)行轉(zhuǎn)移指令時,RAM94經(jīng)與圖13中示出的ROM控制器104一起說明的超高速緩存加載器400被加上16字節(jié)段的剩下字節(jié)。在加載上這些剩余的字節(jié)之前,該整個字節(jié)段不能經(jīng)標記鎖存器506標志為已加載。
參見門電路510,當程序計數(shù)器已從0計數(shù)到15,14位減法器502輸出一超出范圍的信號(它被反轉(zhuǎn))當ROM控制器輸出其ROM數(shù)據(jù)就緒信號ROMRDY(表明將要輸出一字節(jié)),門電路510就使標記鎖存器506在由多路分解器504尋址的位置上置位。
當對超高速緩存指令譯碼;在總線501上產(chǎn)生一表明后續(xù)指令將從超高速緩存RAM存儲器94執(zhí)行的控制信號??偩€501上的控制信號被送給超高速緩存基址寄存器500的加載輸入端,并用于向超高速緩存基址寄存器500裝入程序計數(shù)器PC的13位最高有效位。同時如圖14所示,標記鎖存器506被清零。
超高速緩存基址寄存器500的輸出和程序計數(shù)器的最高有效位(例如第3-15位)被送給減法器502,它確定程序計數(shù)器PC來的地址輸入是否在超高速緩存RAM94的范圍內(nèi)。減法器502例如輸出其六位最低有效位作為超高速緩存RAM地址的最高有效位,而地址的三位最低有效位則從程序計數(shù)器PC送來。
超出范圍信號O/RANGE是從減法器502來的進位輸出信號而產(chǎn)生的,并被翻轉(zhuǎn)。該翻轉(zhuǎn)的超范圍信號高時用來起動對鎖存器矩陣506中的一個鎖存器的置位。該鎖存器置位將取決于經(jīng)多路分解器504從減法器502來的超高速緩存地址輸出,并與超高速緩存RAM94的16字節(jié)段相對應(yīng),以表明指令是存儲在超高速緩存中與輸出的超高速緩存RAM地址相應(yīng)的地方。標記鎖存器506的輸出被送給多路轉(zhuǎn)換器512,它將64個標記鎖存信號中的一個送到NOR門514,這個鎖存信號是根據(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的指令,取決于代碼存儲區(qū)寄存器的規(guī)定位例如位4的狀態(tài)。這樣根據(jù)一裝入代碼存儲區(qū)寄存器的地址信息,將對ROM或RAM來的指令進行譯碼。另外多路轉(zhuǎn)換器525也可根據(jù)由超高速緩存器68送來的控制信號CACHE CTL的狀態(tài)而從超高速緩存RAM94選擇指令,該信號表明所要執(zhí)行的指令是在超高速緩存RAM94范圍內(nèi),而且某一相應(yīng)的標記位已如超高速緩存控制器68的說明中那樣被置位。
當被程序計數(shù)器起動信號PCEN.IL.IH啟動時,流水線鎖存器527接收多路轉(zhuǎn)換器來的8位指令,而這起動信號例如當正由ROM(或RAM)讀取指令時,是由ROM控制器104(或RAM控制器88)產(chǎn)生的。由于從RAM或ROM讀取指令需花一個處理周期還多,因而指令譯碼器操作是由各自的ROM或RAM控制器104,88所產(chǎn)生的程序計數(shù)器起動信號PCEN觸發(fā)的。
另一方面,若從超高速緩存RAM取出指令執(zhí)行,程序計數(shù)器起動信號PCEN在所有時刻都是起作用的,并且指令執(zhí)行是以處理器時鐘頻率全速執(zhí)行的。由于ROM10的存取時間比超高速緩存RAM94或游戲卡RAM的存取時間慢許多,因而對ROM存取時,產(chǎn)生PCEN信號的間隔,必須不如相應(yīng)的超高速緩存RAM的,或動態(tài)或靜態(tài)RAM的譯碼起動信號那樣頻繁。
暫時存在流水線鎖存器527的指令被輸出給圖示性地由門電路537,539和541所代表的常規(guī)的指令譯碼電路,以產(chǎn)生表示操作代碼1,2,…N的信號。
加載進流水線鎖存器527的指令還被送給先行控制邏輯551。先行控制邏輯551用于提供操作代碼的譯碼預(yù)告,它將用來從Mario芯片寄存器塊76中選取合適的寄存器。這樣,為了在對操作碼進行譯碼之前優(yōu)化執(zhí)行的速度,迅速地確定了需被存取的寄存器,以便對該指令所需的數(shù)據(jù)進行高速存取。
先行控制邏輯響應(yīng)指令操作碼以及各種程序譯碼控制標志。指令譯碼電路60包括程序控制標志檢測器邏輯543,它響應(yīng)以前已譯碼的操作代碼而產(chǎn)生ALT1和ALT2信號,以表明如上所述的相應(yīng)的前綴指令已經(jīng)被譯碼。下面說明的與此有關(guān)的ALT1 PRE信號也是由標志檢測器邏輯543產(chǎn)生的。另外產(chǎn)生IL和IH信號以表明已對需要立即數(shù)的指令進行譯碼(這里L(fēng)和H分別指低字節(jié)和高字節(jié))。IH和IL標志用來阻止涉及立即數(shù)的指令被當作操作碼譯碼。因而也需要非IL信號(IL)和非IH信號(IH)來起動流水線鎖存器527。ALT1和ALT2信號如前面說明的那樣用來修改后續(xù)產(chǎn)生的操作碼,并輸入到例如在門電路541所示的譯碼邏輯537,539,541等,按照前面對這些信號的討論來修改輸出操作碼。
先行控制邏輯551根據(jù)預(yù)譯碼的操作代碼和對先前的操作代碼(例如前綴代碼ALT1或ALT2)譯碼時所產(chǎn)生的信號而產(chǎn)生寄存器選擇信號。例如如程序控制標志檢測邏輯543中所示,若ALT1信號由譯碼邏輯545譯碼,則產(chǎn)生ALT1 PRE信號,該信號由程序控制標志檢測邏輯543輸出,并進而經(jīng)OR門549送給先行邏輯531。該ALT1 PRE信號還使ALT1鎖存器547置位。OR門549還將鎖存器547來的ALT1信號輸出,并將ALT1信號送給譯碼邏輯537,539,541等。
在圖15中示意地表示先行控制邏輯如何產(chǎn)生4個寄存器選擇控制位XSEL0,XSEL1,XSEL2和XSEL3。這四個控制位隨后送給在圖17中結(jié)合寄存器控制邏輯76一起說明的多路轉(zhuǎn)換器620和622,該控制邏輯選取16個寄存器中一個的內(nèi)容輸出給X總線供正執(zhí)行的指令使用。
這樣,指令在裝進流水線鎖存器527前被送給先行譯碼邏輯單元529,它產(chǎn)生一寄存器選擇位XSEL_U0,進而鎖存進鎖存器535然后作為信號XSEL0輸出。鎖存器535由程序計數(shù)器信號PCEN起動。類似地邏輯電路531產(chǎn)生鎖存進鎖存器533作為信號XSEL1輸出的XSEL_U1。ALT1 PRE信號被送給先行邏輯551中的各種譯碼邏輯電路529,531等,并被用于確定由寄存器控制邏輯76所選定的合適的寄存器。例如在先行控制電路551中所示,ALT1 PRE信號是送給邏輯電路531的信號之一它產(chǎn)生鎖存在鎖存器533中進而輸出信號USEL1的USEL_U1。
圖15B示出用于說明先行邏輯551操作的示范性定時信號。圖15B示出時鐘信號CK,和有關(guān)超高速緩存RAM數(shù)據(jù)存取的示范性指令操作碼。還示出表明流水線鎖存器被加載時,將執(zhí)行指令譯碼操作時,產(chǎn)生寄存器選擇信號時和將寄存器來的信息加載在目的端Z總線上時的定時信號。
如圖15B所示,超高速緩存RAM數(shù)據(jù)操作碼(操作碼1)將在時鐘脈沖CK上升沿之后的某一時刻變?yōu)橛行?。操作碼存儲在流水線鎖存器527中直到例如第二個時鐘脈沖的上升沿,這時操作碼2被鎖存進鎖存器527。緊接著收到鎖存器227來的輸出之后,在圖18中示意地畫出的某個時刻指令譯碼器60開始對與操作碼1相應(yīng)的指令進行譯碼。該指令譯碼的結(jié)果,如上所述相應(yīng)地將控制信號送給諸如ALU50,超高速緩存控制器68和標繪硬件52等這類Mario芯片元件。
示于圖15中的先行電路551通過在對操作碼2譯碼前的某一時刻產(chǎn)生信號XSEL_U開始寄存器選擇譯碼過程。該XSEL_U0信號代表被鎖存進鎖存器535之前的譯碼邏輯529的輸出。例如在某一時刻由鎖存器535輸出XSEL-0信號,使得該指令所需的數(shù)據(jù)會在指令執(zhí)行周期中盡早地被存取,以便于盡快地送給相應(yīng)的總線。
圖16中示出用來產(chǎn)生有關(guān)Y和Z總線的寄存器選擇信號的寄存器控制邏輯78的一部分。多路轉(zhuǎn)換器604選取16個寄存器的哪一個將從Z總線被寫入,而多路轉(zhuǎn)換器606則選取送給Y總線的那個寄存器。
多路轉(zhuǎn)換器604和606分別接收來自4位寄存器600和602的輸入。寄存器600和602用來完成上述的“FROM”和“TO”前綴指令。寄存器600和602分別由“TO”和“FROM”前綴的譯碼來起動,它們將指令總線的最低有效位送給寄存器600和602。寄存器600和602響應(yīng)用來使上述的控制標志復(fù)位的指令而被清零。
多路轉(zhuǎn)換器604和606另外接收從寄存器塊76中的各種寄存器來的輸入。另外,多路轉(zhuǎn)換器604,606接收從指令總線上的最低有效位來的輸入來執(zhí)行其四個最低有效位確定指令的目的端或源端寄存器的指令。另外為使Super NES可對該寄存器存取,將Super NES地址總線來的規(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)容就被加載進寄存器618。裝進寄存器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接收程序計數(shù)器(即寄存器R15)的內(nèi)容、在執(zhí)行MERGE指令時所用的寄存器、和寄存器R1(例如在執(zhí)行標繪指令中所用的)來的輸入作為輸入。多路轉(zhuǎn)換器620根據(jù)由圖15A中示出的先行邏輯551所產(chǎn)生的XSEL2和XSEL3位的狀態(tài)選取這些輸入的一個輸入。
多路轉(zhuǎn)換器622的另一個輸入與Y總線上的內(nèi)容相接,以將與Y總線上相同數(shù)據(jù)放在X總線上。如前所述,多路轉(zhuǎn)換器622的另一輸入是上述FROM X寄存器618的輸出。多路轉(zhuǎn)換器622的輸出是根據(jù)圖15A中所產(chǎn)生的XSEL0和XSEL1位的狀態(tài)選取的,并送給X總線。
與寄存器R0-R15中的許多寄存器有關(guān)的專用功能在上面已詳細說明,這里將不重復(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各自的四個輸入中的一個均是由YSEL1和YSEL0選取的,這些是從圖16中所示的多路轉(zhuǎn)換器606輸出的。多路轉(zhuǎn)換器608,610,612和614的輸出進而輸入到多路轉(zhuǎn)換器616。多路轉(zhuǎn)換器616根據(jù)圖16中的多路轉(zhuǎn)換器606輸出的YSEL2和YSEL3的狀態(tài)選取四個輸入中的一個。多路轉(zhuǎn)換器616使其輸出送到緩沖寄存器617,其輸出進而送到Y(jié)總線。
回到寄存器R0-R15的輸入,每個寄存器有一個由如上結(jié)合圖16所示而產(chǎn)生的ZSEL位0至位3所選取的起動輸入。每個寄存器還具有一時鐘輸入CK和一數(shù)據(jù)輸入DATA-IN,在相應(yīng)地緩沖之后經(jīng)該數(shù)據(jù)輸入端從Z總線接收數(shù)據(jù)。
結(jié)合各種乘法操作使用的寄存器R4還包括停用低位和停用高位輸入以及允許低位和允許高位輸入。寄存器R15即程序計數(shù)器PC,它可接收從圖13的ROM控制器中的超高速緩存加載器400來的信號CCHLD,在當前的超高速緩存16字節(jié)段被裝進超高速緩存RAM之前禁止轉(zhuǎn)移操作。程序計數(shù)器另外從指令譯碼器接收一程序循環(huán)暫停信號LOOPEN,這表明得進行分支轉(zhuǎn)移并允許向PC加上寄存器R13的內(nèi)容。寄存器R15另外接收加電復(fù)位信號RESET和執(zhí)行循環(huán)指令時將寄存器R13的內(nèi)容裝入程序計數(shù)器的輸入RN。
如上所述,本發(fā)明的圖形協(xié)處理器結(jié)合主電視游戲系統(tǒng)可以方便地用來產(chǎn)生涉及例如基于多邊形目標的旋轉(zhuǎn)、放大和/或縮小的各種特殊效果。圖18是畫出梯形用的示范性Mario芯片程序的流程圖,說明可如何對Mario芯片編程以產(chǎn)生所要顯示的基于多邊形的目標的一部分。下面提出一種用于產(chǎn)生這類多邊形的Mario程序同時對Mario硬件如何執(zhí)行程序加以詳盡的解釋。
首先參見圖18中示出的高層流程圖,最初將寄存器塊R1至R15的某些寄存器與梯形的產(chǎn)生中所用的變量關(guān)聯(lián)起來(例如寄存器R1存儲像素X位置,寄存器R2存儲像素Y位置線,寄存器R7存儲梯形高度等)。此后,如方框650所示建立循環(huán)計數(shù)器和計算初始像素值。
如方框652所示,隨后進行查詢以確定梯形水平線之一的長度。若從該線的終點減去該線的起點的結(jié)果是負值(-VE),則該程序分支轉(zhuǎn)移至方框660。若從該線的終點減去該線的起點的結(jié)果是正值表明還未超出該線的長度,則使循環(huán)計數(shù)器遞減(654)并執(zhí)行標繪像素指令而畫出合適的像素(656)。
如方框658所示,隨后進行查詢以確定循環(huán)計數(shù)器的內(nèi)容是否為零。若循環(huán)計數(shù)器不為零則進行轉(zhuǎn)移以分支轉(zhuǎn)移回方框654以使循環(huán)計數(shù)器(654)遞減并標繪另一個像素(656)。
若循環(huán)計數(shù)器等于零,則多邊形左側(cè)的X坐標和多邊形右側(cè)的X坐標被更新(660)。此后使梯形Y HEIGHT(Y高度)遞減(622),若結(jié)果不為零則程序?qū)⑼ㄟ^分支轉(zhuǎn)移回方框650重新執(zhí)行(664),使Y坐標遞增以移到下一掃描線(665)。若Y HEIGHT等于零,則程序?qū)⑷繄?zhí)行好,梯形就完成(666)。
為說明產(chǎn)生圖形的Mario芯片指令集的運用,下面給出實施例圖18流程圖繪制梯形的示范性程序。
;繪制梯形循環(huán)rx=1;標繪x位置ry=2;標繪y位置rx1=3;頂線左側(cè)x位置rxlinc=4;頂線左側(cè)x位置遞增rx2=5;頂線右側(cè)x位置
rx2inc=6;頂線右側(cè)x位置遞增rdy=7;梯形y高度rlen=12;循環(huán)計數(shù),水平線(hline)長度rloop=13;循環(huán)標記hlinesmiwt rloop,hlines2;設(shè)定hline循環(huán)的起始hlines1mfrom rx1 ;x=(rx1)>>8mto rxmhibmfrom rx2mhibmto rlenmsub rx ;長度,rlen=(rx2>>8)-(rx1>>8)mbmi hlines 3 ;若rlen<0則跳過hlinemnopminc rlen ;總是繪制一個像素hlines2mloopmplot ;繪制水平線hlines3mwith rx1 ;rx1+=rxlincmadd rxlincmwith rx2 ;rx2+=rx2 incmadd rx2 incmdec rdy ;rdy-=1
mbne hlines ;重復(fù)rdy次數(shù)1minc ry ;和下行的下一個y為說明Mario芯片硬件如何用來執(zhí)行程序,以下的說明是針對上面給出的梯形生成程序的。在執(zhí)行梯形生成程序前,主計算機系統(tǒng)例如Super NES如上面結(jié)合圖5流程圖的說明所解釋的那樣直接向代碼存儲區(qū)寄存器和屏面基址寄存器寫入。另外,Super NES將從Super NES地址總線HA譯碼得出的XEQ地址的低字節(jié)寫入ROM控制器104中的局域寄存器。Super NES隨后將高字節(jié)寫到ROM控制器104,它與該局域寄存器的內(nèi)容組合并送到Z總線。此后啟動寄存器R15用作Mario芯片的程序計數(shù)器。
一檢測到上面Super NES向ROM控制器104寫入操作的后沿就使Mario的“GO”標志置位。若程序計數(shù)器減超高速緩存基址寄存器大于超高速緩存容量,或超高速緩存標志與程序計數(shù)器的積減去超高速緩存基址寄存器除以16等于零,就將程序計數(shù)器的內(nèi)容送給ROM10而起動ROM定時計數(shù)器(圖13方框406)。
一開始,在執(zhí)行繪制梯形子程序之前,用于梯形循環(huán)程序的變量與Super Mario寄存器是相關(guān)聯(lián)的,如梯形程序列的初始部分中所示,例如,作為“標繪X位置”的“rx”與寄存器R1是相關(guān)聯(lián)的,而變量“rloop”則與寄存器R13相關(guān)聯(lián)。
分配好這些寄存器之后,梯形程序開始如下執(zhí)行。當ROM控制器104中的ROM定時計數(shù)器達到5的計數(shù)(近200納秒),就將所要執(zhí)行的第一條指令“IWT rloop,hlines2”從ROM數(shù)據(jù)總線鎖存進圖4A中的流水線寄存器62。數(shù)據(jù)同時被寫入超高速緩存RAM94。在執(zhí)行指令“IWT rloop,hlines”時,使程序計數(shù)器遞增。設(shè)置“IL”和“IH”標志以表明指令流的下面兩字節(jié)是立即數(shù)據(jù)。當ROM定時計數(shù)器406達到5,就將立即數(shù)據(jù)(低字節(jié))寫入超高速緩沖RAM94,并保存在ROM控制器104中的暫時寄存器。重復(fù)ROM讀取機能,該立即數(shù)的高字節(jié)與低字節(jié)結(jié)合并送到Z總線。為設(shè)置循環(huán)計數(shù)器,起動寄存器R13并在那兒存儲Z總線的內(nèi)容。在該例行程序的這一時刻開始,就從存儲器讀出每條指令直到遇到循環(huán)指令為止。
在執(zhí)行指令“FROM RX1”時,指令代碼的最低四位被裝進寄存器控制器中的四位“FROM Y”寄存器602(見圖16)。另外允許RX1(寄存器R3)來的數(shù)據(jù)上Y總線并將它存進16位“FROM X”寄存器618。在執(zhí)行“TO RX”指令時,指令代碼的最低四位被裝進寄存器控制器中的四位“起動Z”寄存器600(見圖16)。
“HIB”指令是通過將“FROM X”寄存器的十六位內(nèi)容裝入X總線而執(zhí)行的。ALU將X總線的高字節(jié)放到Z總線的低字節(jié)上并使Z總線上的高字節(jié)設(shè)為零。這去除X位置的小數(shù)部分并在寄存器RX(寄存器R1)留下第一水平線的起點。
在執(zhí)行指令“FROM RX2”時,執(zhí)行如上所述執(zhí)行“FROM RX1”中相似的操作。該“HIB”指令導(dǎo)致對梯形的頂線右側(cè)X坐標進行操作(類似于上面所說的那些)從而將第一水平線的終點留在寄存器R0(用作累加器的缺省寄存器)。
“RLEN”指令和“SUB RX”指令是通過從線的終點減去該線的起點而被執(zhí)行的RLEN(12)=R0-Rx。若結(jié)果為負,符號標志將被置位,表明條件假。
“BMI HLINES3”指令是兩字節(jié)指令,若符號標志置位,第一字節(jié)就設(shè)立一標志。若條件標志置位,第二字節(jié)是轉(zhuǎn)移偏移(這里R15等于R15加上該指令)。若不是,R15不被替換而程序繼續(xù)正常進行。
執(zhí)行“INC RLEN”指令以使線長度寄存器加1以確保至少標繪一個像素?!癓OOP”指令用于進行R12=R12-1的計算。若R12不是零,則R15(程序計數(shù)器)裝上13的內(nèi)容藉此實行轉(zhuǎn)移。
若此刻的程序在超高速緩存RAM94的范圍內(nèi),則超高速緩存裝載電路400將檢測出該轉(zhuǎn)移,并繼續(xù)加載超高速緩存RAM94,而在這樣做時暫停執(zhí)行程序。結(jié)束時,程序計數(shù)器加上其新值而從超高速緩存RAM94讀取下面的指令。
為執(zhí)行“標繪”指令,循環(huán)/標繪指令配對形成水平線繪制的算法。標繪指令將使由R1、R2(作為X和Y坐標)編址的屏面像素設(shè)定為圖4A中示出的“COLOR寄存器”54中所設(shè)定的彩色。含有該像素的字符的地址是由標繪硬件52計算的。該新像素數(shù)據(jù)保存在字符線緩沖器(彩色矩陣),直到Mario芯片移到一不同的字符位置進行標繪。當所有彩色信息都已復(fù)制到彩色矩陣中的雙緩沖機構(gòu)的第二級,就將該信息寫入到外部RAM。
執(zhí)行“WITH RX1”的“ADD RX1 INC”指令以更新該梯形的左側(cè)X坐標。類似地“WITH RX2”和“ADD RX2 INC”用來更新梯形的右側(cè)?!癉EC RDY”,“BNE Hlines1”和“INC RY”指令用來移到下一個Y位置(下一掃描行)直到梯形完成。
下面的程序列表說明可如何對Mario芯片編程以使8位X,Y和Z點的陣列旋轉(zhuǎn)。該程序說明根據(jù)本發(fā)明的例示性實施例對圖形協(xié)處理器編程以執(zhí)行旋轉(zhuǎn)操作。下面給出該程序的列表LISTING ROTATE;由寄存器rmat 1211,rmat 2133,rmat 2322,ramt3231,rmat0033中的旋轉(zhuǎn)矩陣旋轉(zhuǎn)8位X,Y,Z點的矩陣;矩陣元是8位帶符號小數(shù);即127=127/128=接近1;-128=-128/128=-1;這些均被壓縮存儲在每個寄存器內(nèi)作為2個8位單元
rx =1 ;xry =2 ;yrz =3 ;zrt =4 ;temprmat 1211 =5 ;矩陣元11和12rmat 2113 =6 ;矩陣元13和21rmat 2322 =7 ;矩陣元22和23rmat 3231 =8 ;矩陣元31和32rmat 0033 =9 ;矩陣元33routptr =10 ;至旋轉(zhuǎn)點緩沖器指針(ptr)
msh-rotpoints8miwt r14,pointsaddr ;指向所要旋轉(zhuǎn)點的ROM指針miwt r12,numpoints ;所要旋轉(zhuǎn)的點的數(shù)目miwt routptr,m-rotp- ;指向旋轉(zhuǎn)點緩沖器的RAMnts 指針mcache ;設(shè)定超高速緩存地址mmove r13,pc ;初始循環(huán)地址
mmatrotploopmto rx ;取xmgetbminc r14mfrom rmat 1211 ;11mto rtmmult rx ;m11*xmto ry ;取ymgetbminc r14mfrom rmat 2113 ;21mhib
mmult ry ;m21*ymto rtmadd rtmto rz ;取zmgetbminc r14mfrom rmat 3231 ;31mmult rz ;m31*zmadd rtmadd r0mhibmstb (routptr) ;存儲旋轉(zhuǎn)后的xminc routptrmfrom rmat 1211 ;12mhibmto rtmmult rx ;m12*xmfrom rmat 2322 ;22mmult ry ;m22*ymto rtmadd rtmfrom rmat 3231 ;32mhibmmult rz ;m32*zmadd rtmadd r0mhibmstb (rout ptr) ;存儲旋轉(zhuǎn)后的yminc routptrmfrom rmat 2113 ;13mto rtmmult rx ;m13*x
mfrom rmat 2322 ;23mhibmmult ry ;m23*ymto rtmadd rtmfrom rmat 0033 ;33mmult rz ;m33*zmadd rtmadd r0mhibmstb (routptr) ;存儲旋轉(zhuǎn)后的zmloopminc routptr圖19、20和21說明當結(jié)合主計算機系統(tǒng)例如Super NES使用本發(fā)明的可編程圖形協(xié)處理器時可產(chǎn)生的某些特殊效果。如圖19所示,描繪出一個目標即直升機的側(cè)視圖。該圖并不意圖準確地反映使用Mario芯片所能產(chǎn)生的高品質(zhì)顯示。圖20和21則示出圖19給出的直升機的放大的和旋轉(zhuǎn)的圖像。本發(fā)明的圖形協(xié)處理器可用來產(chǎn)生包括涉及高速旋轉(zhuǎn)和縮放的基于多邊形的目標在內(nèi)的3D型(和其他的)特殊效果,而僅最低限度地加重電視游視主處理系統(tǒng)的負擔。
本發(fā)明已經(jīng)詳細地說明和圖釋了,應(yīng)該理解詳盡的揭示僅是用作說明和解釋。雖然上述實施例被視作較佳實施例,應(yīng)該理解該領(lǐng)域技術(shù)人員可以作出多種變化和改動,而下面的權(quán)利要求正是用來覆蓋這類在本發(fā)明實質(zhì)和保護范圍之內(nèi)的變化和改動的。
權(quán)利要求
1.一種信息處理系統(tǒng)(19,20)中的外部存儲系統(tǒng)(19),該信息處理系統(tǒng)具有執(zhí)行至少部分地存儲在外部存儲系統(tǒng)(19)中的外部存儲器(10)中的電視圖形程序的主處理單元(20),所述外部存儲系統(tǒng)其特征在于至少有一接插件(1)用來將所述外部存儲系統(tǒng)與所述主處理系統(tǒng)相連;一外部存儲器(10),用于存儲由所述主處理單元執(zhí)行的所述電視圖形程序的第一組程序指令和用于存儲所述電視圖形程序的第二組指令;一圖形處理器(2)與所述外部存儲器(10)相連,并在使用時經(jīng)所述至少一接插件(1)與所述主處理單元(20)相連,以執(zhí)行所述第二組指令。
2.如權(quán)利要求1所述的外部存儲系統(tǒng),其特征在于所述主處理單元(20)是電視游戲系統(tǒng)的主處理單元而所述外部存儲系統(tǒng)是配置在電視游戲卡(19)中的。
3.如權(quán)利要求1所述的外部存儲系統(tǒng),其特征在于還包括與所述外部存儲器(10)和所述圖形處理器(2)相連用來傳送地址,數(shù)據(jù)和控制信息的外部存儲器總線;隨機存取存儲器單元(6,8);與所述隨機存取存儲器單元(6,8)和所述圖形處理器(2)相連用來傳送地址,數(shù)據(jù)和控制信息的隨機存取存儲器單元總線;用于在所述圖形處理器和所述主處理單元之間傳送地址,數(shù)據(jù)和控制信息的主處理單元總線。
4.如權(quán)利要求3所述的外部存儲系統(tǒng),其特征在于所述圖形處理器包括對所述外部存儲器總線和所述隨機存取存儲器單元總線中的至少一個存取進行的裝置(131)。
5.如權(quán)利要求1所述的外部存儲系統(tǒng),其特征在于所述圖形處理器(2)包括接收從所述主處理單元來的地址信息的裝置(HA,133)以便識別存有將由圖形處理器執(zhí)行的指令的外部存儲器位置。
6.如權(quán)利要求1所述的外部存儲系統(tǒng),其特征在于所述圖形處理器包括執(zhí)行存儲在所述外部存儲器中的所述第二組指令中至少某些指令的算術(shù)邏輯單元(50)和執(zhí)行存儲在所述外部存儲器中的至少一個有關(guān)顯示的指令的標繪電路(52)。
7.如權(quán)利要求6所述的外部存儲系統(tǒng),其特征在于還包括第一數(shù)據(jù)源端總線(X),第二數(shù)據(jù)源端總線(Y)和一數(shù)據(jù)目的端總線(Z),每個所述總線均與所述算術(shù)邏輯單元(50)和所述標繪電路(52)相連。
8.如權(quán)利要求1所述的外部存儲系統(tǒng),其特征在于所述圖形處理器還包括超高速緩存控制器(68)和與所述超高速緩存控制器(68)相連的超高速緩沖存儲器(94),所述圖形處理器包括執(zhí)行存儲在所述超高速緩沖存儲器中指令的裝置(95,60,50)。
9.如權(quán)利要求1所述的外部存儲系統(tǒng),其特征在于所述圖形處理器包括多個寄存器(76),所述圖形處理器還包括響應(yīng)對所述多個寄存器(76)中規(guī)定的寄存器(R14)的存取而自動地起動對外部存儲器讀取操作的裝置(104)。
10.如權(quán)利要求1所述的外部存儲系統(tǒng),其特征在于所述外部存儲器是程序只讀存儲器(ROM)并進而包括一與所述圖形處理器相連的隨機存取存儲器(RAM)。
11.如權(quán)利要求1所述的外部存儲系統(tǒng),其特征在于所述圖形處理器和所述主處理單元可并行地運行執(zhí)行指令。
12.如權(quán)利要求1所述的外部存儲系統(tǒng),其特征在于所述圖形處理器包括將執(zhí)行的各指令組成流水線的裝置(62,60)。
13.如權(quán)利要求1所述的外部存儲系統(tǒng),其特征在于所述圖形處理器包括對所述第二組指令譯碼的裝置(60),和在相關(guān)指令譯碼前預(yù)先處理操作代碼的先行裝置(551)。
14.如權(quán)利要求1所述的外部存儲系統(tǒng),其特征在于所述信息處理系統(tǒng)(20)包括顯示目標的顯示器(36),而所述第二組指令包括使所述目標旋轉(zhuǎn)的指令,所述圖形處理器包括執(zhí)行用于旋轉(zhuǎn)所述目標的所述指令的裝置。
15.一種與電視類顯示器(36)一起使用的電視游戲系統(tǒng)(19,20),其特征在于游戲微處理器(22),用來執(zhí)行電視游戲程序的指令,和與所述游戲微處理器相連的畫面處理單元(24)以便在所述游戲微處理器(22)的控制下執(zhí)行畫面處理任務(wù);程序存儲器(10),用來存儲所述電視游戲的程序;可編程圖形處理器(2),與所述程序存儲器相連并在使用中與所述游戲微處理器(22)連接以執(zhí)行至少某些所述電視游戲的程序指令。
16.如權(quán)利要求15所述的電視游戲系統(tǒng),其特征在于還包括與所述程序存儲器(10)和所述可編程圖形處理器(2)相連,用來傳送地址、數(shù)據(jù)和控制信息的程序存儲器總線;隨機存取存儲器單元,與所述隨機存取存儲器單元(6,8)和所述可編程圖形處理器(2)相連用來傳送地址、數(shù)據(jù)和控制信息的隨信存取存儲器單元總線;在所述可編程圖形處理器(2)和所述游戲處理器(22)之間傳送地址,數(shù)據(jù)和控制信息的游戲處理器總線。
17.如權(quán)利要求15所述的電視游戲系統(tǒng),其特征在于所述可編程圖形處理器(2)包括執(zhí)行存儲在所述程序存儲器中所述第二部分指令中至少某些指令的算術(shù)邏輯單元(50)和執(zhí)行存儲在所述程序存儲器中至少一個有關(guān)顯示的指令的標繪電路(52)。
18.如權(quán)利要求15所述的電視游戲系統(tǒng),其特征在于所述可編程圖形處理器(2)還包括超高速緩存控制器(68)和與所述超高速緩存控制器(68)相連的超高速緩沖存儲器(94),所述可編程圖形處理器包括執(zhí)行存儲在所述超高速緩沖存儲器中指令的裝置(95,60,50),藉此所述圖形處理器和所述游戲微處理器能夠并行地執(zhí)行指令。
19.如權(quán)利要求15所述的電視游戲系統(tǒng),其特征在于所述游戲微處理器(22)和畫面處理單元(24)配置在電視游戲系統(tǒng)主處理單元(20)中而所述程序存儲器(10)和圖形處理器(2)配置在電視游戲卡(19)中。
20.一種可編程圖形處理器,用于具有至少可執(zhí)行存儲在外部存儲器(10)中的電視圖形程序的第一部分的第一處理單元(20)的信息處理系統(tǒng),其特征在于,從所述外部存儲器(10)接收來自所述電視圖形程序第二部分的指令的裝置;至少可執(zhí)行所述電視圖形的所述第二部分的裝置(60,50,52)。
21.如權(quán)利要求20所述的可編程圖形處理器,其特征在于還包括接收從所述第一處理單元來的地址信息以識別存有將由圖形處理器執(zhí)行的指令的外部存儲器位置的裝置。
22.如權(quán)利要求21所述的可編程圖形處理器,其特征在于所述接收地址信息的裝置包括接收標識外部存儲器存儲區(qū)地址信息的外部存儲器存儲區(qū)寄存器和標識在所述存儲器存儲區(qū)內(nèi)位置的程序計數(shù)器。
23.如權(quán)利要求20所述的可編程圖形處理器,其特征在于所述圖形處理器包括用來存儲包括圖形處理器當前正在運行的標志、圖形處理器已將中斷信號送給第一處理單元的標志在內(nèi)的多種圖形處理器狀態(tài)標志的狀態(tài)寄存器裝置。
24.如權(quán)利要求20所述的可編程圖形處理器,其特征在于所述圖形處理器包括至少可執(zhí)行存儲在存儲在所述外部存儲器中所述電視圖形程序的第二部分中的某些指令的算術(shù)邏輯單元(50)和執(zhí)行存儲在所述外部存儲器中至少一個有關(guān)顯示的指令的標繪電路(52)。
25.如權(quán)利要求24所述的可編程圖形處理器,其特征在于還包括第一數(shù)據(jù)源端總線(X),第二數(shù)據(jù)源端總線(Y)和數(shù)據(jù)目的端總數(shù)(Z),所述每一總線均與所述算術(shù)邏輯單元和所述標繪電路相連。
26.如權(quán)利要求20所述的可編程圖形處理器,其特征在于還包括超高速緩存控制器(68)和與所述超高速緩存控制器相連的超高速緩沖存儲器(94),和執(zhí)行存儲在所述超高速緩沖存儲器中的指令的裝置(95,60,50)。
27.如權(quán)利要求20所述的可編程圖形處理器,其特征在于還包括至少執(zhí)行一條指令的裝置(50);存儲著多種狀態(tài)條件的狀態(tài)寄存器;指令譯碼器(62),響應(yīng)所述狀態(tài)條件中至少一個狀態(tài),使所述至少一規(guī)定的指令當所述狀態(tài)寄存器在某個狀況下就控制所述裝置執(zhí)行起動第一操作,而當所述狀態(tài)寄存器在第二狀況下就使所述裝置執(zhí)行起動第二操作。
28.如權(quán)利要求20所述的可編程圖形處理器,其特征在于所述信息處理系統(tǒng)與顯示器相聯(lián)并且所述圖形處理器與所述第一處理單元協(xié)力控制所顯示的目標旋轉(zhuǎn)。
29.如權(quán)利要求28所述的可編程圖形處理器,其特征在于所述執(zhí)行裝置包括將基于像素格式的數(shù)據(jù)變換成基于字符格式的數(shù)據(jù)的標繪電路(52)。
30.一種圖形處理器(2),它與主處理系統(tǒng)(20)和存儲著電視圖形程序的程序存儲器一起使用,所述圖形處理器的特征在于一算術(shù)邏輯單元(50),用來執(zhí)行存儲在所述程序存儲器中的指令;一程序存儲器控制器(104),控制對所述程序存儲器的存取并有選擇地使所述主處理系統(tǒng)(10)和所述圖形處理器兩者的至少一個啟動對所述程序存儲器的存取。
31.如權(quán)利要求30所述的圖形處理器,其特征在于還包括超高速緩沖存儲器(94),所述程序存儲器控制器(104)包括將程序指令裝入所述超高速緩沖存儲器的裝置。
32.如權(quán)利要求30所述的圖形處理器,其特征在于所述圖形處理器(2)與程序存儲器地址總線相連,而所述程序存儲器控制器包括選出一地址將其置于所述程序存儲器地址總線上的多路轉(zhuǎn)換器(414)。
33.如權(quán)利要求30所述的圖形處理器,其特征在于還包括多個寄存器(76),所述程序存儲器控制器(106)包括響應(yīng)所述多個寄存器中的一個被存取而自動地起動程序存儲器數(shù)據(jù)讀取的裝置。
34.如權(quán)利要求30所述的圖形處理器,其特征在于所述圖形處理器(2)與隨機存取存儲器(RAM)(6,8)相連,并進而包括一控制對所述RAM存取的RAM控制器(88)。
35.一種圖形處理器(2),它與主處理系統(tǒng)(20),存儲電視圖形程序的程序存儲器(10),和隨機存取存儲器(RAM)(6,8)一起使用,所述圖形處理器的特征在于,從所述主處理系統(tǒng)接收RAM地址的裝置(HA);產(chǎn)生RAM地址的圖形處理裝置;一RAM控制器(88),它在主處理系統(tǒng)的RAM地址和圖形處理裝置產(chǎn)生的地址之間選擇,并將它送給所述RAM。
36.如權(quán)利要求35所述的圖形處理器,其特征在于還包括至少一個狀態(tài)寄存器,而所述RAM控制器包括接收主處理系統(tǒng)產(chǎn)生的地址(HA)和圖形處理裝置產(chǎn)生的地址(DEOTADOR)并根據(jù)存儲在所述狀態(tài)寄存器的至少一個狀態(tài)位的狀況將所述地址的一個送給所述RAM的多路轉(zhuǎn)換器裝置(308)。
37.一種信息處理系統(tǒng)中的外部存儲系統(tǒng),所述信息處理系統(tǒng)(19,20)中具有主處理系統(tǒng)(20)和與所述主系統(tǒng)相連的外部存儲系統(tǒng)(19),所述外部存儲系統(tǒng)的特征在于程序存儲器(10);附加存儲器(6,8);與所述程序存儲器(10)和所述附加存儲器(6,8)相連的圖形處理器(2);所述圖形處理器包括控制對所述程序存儲器存取的程序存儲器控制器(104);控制對所述附加存儲器存取的附加存儲器控制器(88)。
38.如權(quán)利要求37所述的外部存儲系統(tǒng),其特征在于所述附加控制器(88)包括在收到的多個對于所述附加存儲器的存取請求間確定優(yōu)先級的裝置。
39.如權(quán)利要求38所述的外部存儲系統(tǒng),其特征在于還包括標繪電路(52),所述附加存儲器控制器(88)接收表明需對存儲器存取以便執(zhí)行標繪操作的標繪請求信號。
全文摘要
本發(fā)明公開了一種全編程圖形微處理器,它配置在外部存儲單元(例如插入式電視游戲卡)中,與配置于游戲卡上的三總線結(jié)構(gòu)結(jié)合使用。該圖形協(xié)處理器可執(zhí)行來自程序ROM,外部RAM或其本身內(nèi)部的超高速緩存RAM的程序,具有實現(xiàn)有關(guān)3—D圖形算術(shù)運算的指令集,例如包括由專用硬件執(zhí)行將單個像素標繪在主系統(tǒng)字符映像顯示中的指令,建立“虛擬的”位映像,并與主處理器交互作用使其16個通用寄存器都可由主處理器存取。
文檔編號G06F19/00GK1076378SQ9211279
公開日1993年9月22日 申請日期1992年10月31日 優(yōu)先權(quán)日1992年1月30日
發(fā)明者杰里米E·桑, 本·奇斯, 卡爾N·格雷漢姆, 彼特R·沃內(nèi)斯 申請人:A/N股份有限公司