亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

在電視機頂盒上使用的nes模擬器的設(shè)計方法

文檔序號:7895411閱讀:405來源:國知局

專利名稱::在電視機頂盒上使用的nes模擬器的設(shè)計方法在電視機頂盒上使用的NES模擬器的設(shè)計方法
技術(shù)領(lǐng)域
:本發(fā)明是關(guān)于一種數(shù)字電視機頂盒的應(yīng)用軟件,特別是指一種在電視機頂盒上使用的NES模擬器的設(shè)計方法。
背景技術(shù)
:傳統(tǒng)的數(shù)字電視機頂盒只有一些簡單的游戲功能,比如俄羅斯方塊,推箱子,貪吃蛇等,內(nèi)容簡單,功能單一。越來越無法滿足廣大的人民群眾對游戲的需要。而NES游戲從80年代進入中國后,就廣受大家的好評。NES是NintendoEntertainmentSystem的縮寫,是Nintendo在20世紀80年代和20世紀90年代發(fā)售的一種用于游戲的主機,使用大型拔插式卡帶進行NES游戲。由于硬件的不同,目前NES游戲只能在專用的NES主機上使用,而且一個游戲一般需要一個卡帶,如果需要玩多種游戲的話就需要大量的卡帶支持,為游戲愛好者帶來諸多的不便。
發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問題在于提供一種可以在電視機頂盒上使用的NES模擬器的設(shè)計方法。本發(fā)明是通過以下技術(shù)方案解決上述技術(shù)問題的一種在電視機頂盒上使用的NES模擬器的設(shè)計方法,包括下述內(nèi)容一、對6502cpu的指令的模擬;二、對NES核心部件PPU圖形處理器的模擬;三、對圖形緩沖機制的優(yōu)化處理;四、對聲音處理器的模擬;五、對手柄控制器的模擬;以及六、對NES游戲文件格式的解析。所述對6502cpu的模擬包括下述步驟步驟1獲得6502ROM的操作碼;步驟2解碼和執(zhí)行操作碼;步驟3執(zhí)行中斷當程序中特定的指令執(zhí)行時,軟件中斷就發(fā)生;步驟4:讀寫內(nèi)存;步驟5完成對指令的連續(xù)讀取。所述對6502cpu的模擬使用純C語言編寫來模擬6502cpu的131條不同的指令。所述步驟4中模擬器中對讀寫內(nèi)存的操作有兩種方法一種是得到操作碼和操作碼的操作數(shù);另一種方法是當指令執(zhí)行的時候讀寫內(nèi)存。所述對PPU圖形處理器的模擬,包括對PPU時序的模擬,包括基頻、CPU主頻、總掃描線數(shù)、掃描線總周期、水平掃描周期、水平空白周期、結(jié)束周期、幀周期、幀IRQ周期、幀率、幀時間的模擬;對存儲圖案表的實際讀取方式的模擬;對命名表和命名表影象的讀取方式的模擬;對屬性表的讀取方式的模擬;對調(diào)色板,調(diào)色板鏡像,背景滾動,屏幕和動畫分層操作方式的模擬;對動畫和動畫RAM讀取和操作方式的模擬;在屏幕刷新的時候訪問VRAM的操作方式和訪問PPURAM的操作方式的模擬。所述對圖形緩沖機制的優(yōu)化處理,是將NES游戲運行中所輸入的圖像數(shù)據(jù)轉(zhuǎn)換為一種通用的格式,然后在機頂盒的屏幕上表現(xiàn)出來,當PPU圖形處理器在刷新屏幕圖像時,并不是每次都從NES游戲的視頻VROM中讀取數(shù)據(jù),而是在NES模擬器將NES格式的圖像數(shù)據(jù)寫入NES視頻內(nèi)存時就一次性地將數(shù)據(jù)轉(zhuǎn)換成機頂盒能夠識別的格式并存儲在緩沖里面,這樣在刷新屏幕圖像時,就直接在緩沖中讀取已經(jīng)轉(zhuǎn)換為機頂盒可以識別格式的圖像數(shù)據(jù),而緩沖數(shù)據(jù)的修改僅僅發(fā)生在NES模擬器修改視頻VROM的時候。NES模擬器的集成CPU里包含了一個4聲道的聲音處理器,包括4個聲道為2個方波,一個三角波和一個噪聲發(fā)生通道,所述NES模擬器主要針對其中的方波和三角波的數(shù)據(jù)進行提取,通過波的疊加原理,將所有聲道的波形樣本數(shù)據(jù),混合成一段波,然后通過機頂盒的音頻輸入驅(qū)動把相應(yīng)的音頻數(shù)據(jù)播放出去,所述對聲音處理器的模擬的具體實現(xiàn)步驟為步驟1、首先從聲音寄存器讀出方波和三角波的特征值,然后通過特征值計算波的波長;步驟2、計算波的工作循環(huán),這就是應(yīng)當重復波長多少次直至波結(jié)束,同樣,這也是從聲音寄存器讀出;步驟3、計算輸出音量,這是從聲音寄存器讀出;步驟4、沿著波向前移動并把數(shù)據(jù)寫到緩沖,樣本的比率決定了寫入緩沖的字節(jié)數(shù)目,將CPU框架中同樣數(shù)目的樣本寫入緩沖,在下一個框架,繼續(xù)寫入剩下的數(shù)據(jù),直到完成寫入所有計算的波的數(shù)據(jù)。所述對手柄控制器的模擬是將機頂盒的遙控器的部分鍵值映射為NES模擬器的手柄控制器上的按鍵,通過模擬器把輸入的遙控器碼值轉(zhuǎn)換為NES可以識別的格式進行處理。所述對NES游戲文件格式的解析由2種方式構(gòu)成一種是機頂盒支持文件系統(tǒng),則對NES游戲文件的讀取使用文件系統(tǒng)的方式讀取,并按照相應(yīng)NES格式解析;第二種是在不支持文件系統(tǒng)的機頂盒上,把NES文件模擬成一個數(shù)組數(shù)據(jù),并按照相應(yīng)的NES格式解析。本發(fā)明在電視機頂盒上使用的NES模擬器的設(shè)計方法的優(yōu)點在于通過普通的機頂盒來實現(xiàn)對NES游戲的支持,使的不同的機頂盒,只要使用本發(fā)明設(shè)計方法設(shè)計的NES模擬器,就能直接升級為一臺NES游戲機,且NES模擬器移植方便,執(zhí)行效率高,對機頂盒的硬件配置要求低。能夠有效的提高用戶對各種類型游戲的需求。具體實施方式本發(fā)明在電視機頂盒上使用的NES模擬器的設(shè)計方法包括一、對6502cpu的指令的模擬;二、對NES核心部件PPU圖形處理器的模擬;三、對圖形緩沖機制的優(yōu)化處理;四、對聲音處理器的模擬;五、對手柄控制器的模擬;以及,六、對NES游戲文件格式的解析。一、對6502cpu的模擬在這一部分使用純C語言編寫來模擬6502的131條不同的指令,沒有使用和機頂盒處理芯片相關(guān)的匯編語言來描寫是為了進一步提高整個模擬器的可移植性。雖然在運行速度上純C語言比用匯編語言編寫的6502模擬器來的慢,但是可以有效快速的移植在不同的機頂盒平臺(不同的機頂盒平臺的Cpu類型都不相同,指令集也不相同)。同時為了彌補速度上的不足,加速指令模擬的速度,大量使用了inline函數(shù),Sdefine宏定義,使得其的運行速度基本達到了使用匯編語言編寫效率的80%左右。具體方式包括下述步驟步驟1獲得6502R0M的操作碼執(zhí)行ROM的第一件事就是獲得操作碼。獲得CPU的指令指針(IP)指向的字節(jié),這個字節(jié)就是操作碼),依賴于操作碼,可能需要獲得操作數(shù)(operands)或者需要為了執(zhí)行部分來保存這部分。對于6502CPU這種8位處理器(8-bitprocesser),獲取操作碼代碼格式如下。needOpcode=pProgramROMBank[wInstructionPointer];pProgramROMBank指向的內(nèi)存段就是在一開始被讀入的ENSROM,wlnstructionPointer就是說明指針(目前執(zhí)行的指令的地方)。在上述的執(zhí)行后,needOpcode將會以數(shù)字的方式(numericvalue)保存這次的操作碼。步驟2解碼和執(zhí)行操作碼在獲得了操作碼byte后,需要對它解碼和執(zhí)行。由于要模擬的系統(tǒng)NES是8位的處理器,操作碼中的“字”(word)只是一個指令,解碼的過程只需要按字節(jié)考慮(8位bit)。例如,對于6502Cpu中值29h是一個AND指令的表格。這樣,它就立即執(zhí)行AND,這也就意味著它將在操作碼byte之后累加器(Accumulatorregister)與immediatevalue(立即值)作and運算。由于這個6502CPU的模擬器,需要在AND操作碼byte之后在累加器上執(zhí)行一個AND。然后需要增加IP,還有加或者減去執(zhí)行那個特別指令所花去的時鐘周期的數(shù)目。下面是AND操作的代碼,其他的操作和它的操作方式相同。switch(needOpcode){case0x29byOperandl=pProgramROMBank[wlnstructionPointer+l];A&=byOperandl;以上是對于6502CPU中AND指令的模擬break;οcasexxxx在其他分支中,是其他操作碼的處理程序,和上述方式相同,按照標準6205的指令集定義的執(zhí)行命令來處理break;。。}wlnstructionPointer+=wNumBytesForOpcode;以上這行程序?qū)?502的PC指針進行模擬。dwCPUCycles-=dwNumCycIesForOpcode;以上這行程序?qū)?502的CPU的clock時鐘周期進行模擬。以此方式可以模擬整個6502CPU131指令。步驟3:執(zhí)行中斷當程序中特定的指令執(zhí)行時,軟件中斷就發(fā)生。在NES模擬器的6502CPU中使用BRK指令執(zhí)行中斷。當中斷發(fā)生時,NES模擬器保存指令指針和標志寄存器(Flagregister),然后在特定的內(nèi)存區(qū)域內(nèi)查找一個新的值賦給指令指針。每個終端都有它們被指派的地址,所以NES模擬器從那個位置獲得值然后賦給指令指針。然后程序從這個點繼續(xù)執(zhí)行。NES模擬器的6502CPU有三種中斷。指令指針的新的值依賴于中斷發(fā)生的內(nèi)存地址。FFFAh=匪I(VBlank)FFFCh=RESETFFFEh=IRQ/BRK(software)因此在模擬NES中斷是當VBlakn發(fā)生時,CPU將1)將指令指針當前值推入棧。2)將標志寄存器當前值推入棧。3)獲得位于FFFAh字的值然后拷貝到指令指針。具體如下所示++PC;PUSHW(PC);SETF(FLAG_B);PUSH(F);SETF(FLAG_I);其中PUSHW,PUSH是值推入棧的操作,SETF為設(shè)置Cpu的寄存器標志位,PC為CPU的指令計數(shù)器。步驟4:讀寫內(nèi)存關(guān)于模擬器中對讀寫內(nèi)存的操作有兩種方法。一種是得到操作碼和操作碼的操作數(shù)(讀內(nèi)存的簡單方法,在這個過程中沒有什么模擬行為)。另一種方法是當指令執(zhí)行的時候讀寫內(nèi)存(這個是模擬器模擬的重點),在NES的6502CPU中能夠讀寫的指令為LDA(讀)和STA(寫)。對于這些指令在模擬的過程中主要注重于讀或?qū)懙牡刂罚囟ǖ陌l(fā)生時間(讀寫的時序)。特定的內(nèi)存地址(也許是一個寄存器,內(nèi)存鏡像,或者其他任何系統(tǒng)擁有的地址)。下面舉例說明讀內(nèi)存一個流程的方法。寫內(nèi)存和讀內(nèi)存用類似的方法。BYTEReadMemory(WORDwAddress){switch(wAddress){case0x2002以上是對于6502CPU中對PPU狀態(tài)寄存器的讀操作break;case0x2004以上是對于6502CPU中對sprite內(nèi)存讀取一個字節(jié)break;casexxxx以上是對于6502CPU中其他寄存器,內(nèi)存鏡像,或者其他任何系統(tǒng)擁有的地址的讀取操作。break;。}}步驟5完成對指令的連續(xù)讀取本模擬器通過選擇執(zhí)行循環(huán)任務(wù)的時間和位置來指定整個模擬器的運行效率和速度,在繪制一個掃描線之后,在繪制一整個屏幕之后,或者即便是任何指令之后,循環(huán)任務(wù)越多,性能損失也就越多,但是準確性就會越高。如果減少循環(huán)任務(wù),模擬器的速度就會加快但是會損失一些準確性。其中每條掃描線需要的時鐘周期由如下函數(shù)表達NumCyclesPerScanline=(CPUFrequency/RefreshRate)/NumScanlinePerFrameNumCyclesPerScanlineCPUFrequency為機頂盒芯片的頻率。RefreshRate為模擬器刷新的數(shù)率。NumScanlinePerFrame為模擬器中每幀畫面的掃描線數(shù)。NumCyclesPerScanline為每條掃描線需要的時鐘周期。二、對PPU圖形處理器的模擬,包括對PPU時序的模擬,包括基頻、CPU主頻、總掃描線數(shù)、掃描線總周期、水平掃描周期、水平空白周期、結(jié)束周期、幀周期、幀IRQ周期、幀率、幀時間的模擬;對存儲圖案表的實際讀取方式的模擬;對命名表和命名表影象的讀取方式的模擬;對屬性表的讀取方式的模擬;對調(diào)色板,調(diào)色板鏡像,背景滾動,屏幕和動畫分層操作方式的模擬;對動畫和動畫RAM讀取和操作方式的模擬;在屏幕刷新的時候訪問VRAM的操作方式和訪問PPURAM的操作方式的模擬。三、對圖形緩沖機制的優(yōu)化處理,由于NES的圖像格式比較特殊,不能直接使用,因此模擬器的一個重要部分就是將NES游戲運行中所輸入的圖像數(shù)據(jù)轉(zhuǎn)換為一種通用的格式,然后在機頂盒的屏幕上表現(xiàn)出來。圖形緩沖機制的原理就在于當PPU圖形處理器在刷新屏幕圖像時,并不是每次都從NES的視頻VROM中讀取數(shù)據(jù),而是在NES模擬器將NES格式的圖像數(shù)據(jù)寫入NES視頻內(nèi)存時就一次性地將數(shù)據(jù)轉(zhuǎn)換成機頂盒能夠識別的格式并存儲在緩沖里面,這樣在刷新屏幕圖像時,就可以直接在緩沖中讀取已經(jīng)轉(zhuǎn)換為機頂盒可以識別格式的圖像數(shù)據(jù),而緩沖數(shù)據(jù)的修改僅僅發(fā)生在NES模擬器修改視頻VROM的時候,這種操作方式的頻率遠遠低于屏幕刷新的頻率,以及大大提高整個圖像繪制的效率。四、聲音處理器的模擬NES模擬器的集成CPU里包含了一個4聲道的聲音處理器(2A03),為播放音樂提供準模擬的聲音。包括4個聲道為2個方波,一個三角波和一個噪聲發(fā)生通道,本模擬器主要針對其中的方波和三角波的數(shù)據(jù)進行提取,通過波的疊加原理,將所有聲道的波形樣本數(shù)據(jù),混合成一段波,然后通過機頂盒的音頻輸入驅(qū)動把相應(yīng)的音頻數(shù)據(jù)播放出去。這個過程中具體實現(xiàn)步驟為步驟1、首先從聲音寄存器讀出方波和三角波的特征值,然后通過特征值計算波的波長;步驟2、計算波的工作循環(huán),這就是應(yīng)當重復波長多少次直至波結(jié)束,同樣,這也是從聲音寄存器讀出;步驟3、計算輸出音量,這是從聲音寄存器讀出,可以認為這是波的振幅;步驟4、沿著波向前移動并把數(shù)據(jù)寫到Buffer(緩沖),樣本的比率決定了寫入緩沖的字節(jié)數(shù)目,將CPU框架中同樣數(shù)目的樣本寫入緩沖,在下一個框架,繼續(xù)寫入剩下的數(shù)據(jù),直到完成寫入所有計算的波的數(shù)據(jù)。五、對手柄控制器的模擬NES支持很多種輸入設(shè)備,主要有手柄,光槍、4適配器和搖桿。該NES模擬器主要針對手柄控制器的模擬,對手柄控制器的模擬,將機頂盒的遙控器的部分鍵值映射為NES模擬器的手柄控制器上的按鍵(分別為上,下,左,右,a鍵,b鍵,開始,選擇等按鍵),通過模擬器把輸入的遙控器碼值轉(zhuǎn)換為NES可以識別的格式進行處理,格式如下表所示。<table>tableseeoriginaldocumentpage9</column></row><table>六、對NES游戲文件格式的解析在這方面主要由2種方式構(gòu)成,一種是機頂盒支持文件系統(tǒng),則對NES游戲文件的讀取使用文件系統(tǒng)的方式讀取,并按照相應(yīng)NES格式解析;第二種是在不支持文件系統(tǒng)的機頂盒上,把NES文件模擬成一個數(shù)組數(shù)據(jù),并按照相應(yīng)的NES格式解析。NES文件為模擬用來儲存NES卡帶的映像。下面是一個。NES文件的結(jié)構(gòu)。<table>tableseeoriginaldocumentpage9</column></row><table><table>tableseeoriginaldocumentpage10</column></row><table><table>tableseeoriginaldocumentpage11</column></row><table>權(quán)利要求一種在電視機頂盒上使用的NES模擬器的設(shè)計方法,其特征在于包括下述內(nèi)容一、對6502cpu的指令的模擬;二、對NES核心部件PPU圖形處理器的模擬;三、對圖形緩沖機制的優(yōu)化處理;四、對聲音處理器的模擬;五、對手柄控制器的模擬;以及六、對NES游戲文件格式的解析。2.如權(quán)利要求1所述的在電視機頂盒上使用的NES模擬器的設(shè)計方法,其特征在于所述對6502cpu的模擬包括下述步驟步驟1獲得6502R0M的操作碼;步驟2解碼和執(zhí)行操作碼;步驟3執(zhí)行中斷當程序中特定的指令執(zhí)行時,軟件中斷就發(fā)生;步驟4:讀寫內(nèi)存;步驟5完成對指令的連續(xù)讀取。3.如權(quán)利要求2所述的在電視機頂盒上使用的NES模擬器的設(shè)計方法,其特征在于所述對6502cpu的模擬使用純C語言編寫來模擬6502cpu的131條不同的指令。4.如權(quán)利要求2所述的在電視機頂盒上使用的NES模擬器的設(shè)計方法,其特征在于所述步驟4中模擬器中對讀寫內(nèi)存的操作有兩種方法一種是得到操作碼和操作碼的操作數(shù);另一種方法是當指令執(zhí)行的時候讀寫內(nèi)存。5.如權(quán)利要求1所述的在電視機頂盒上使用的NES模擬器的設(shè)計方法,其特征在于所述對PPU圖形處理器的模擬,包括對PPU時序的模擬,包括基頻、CPU主頻、總掃描線數(shù)、掃描線總周期、水平掃描周期、水平空白周期、結(jié)束周期、幀周期、幀IRQ周期、幀率、幀時間的模擬;對存儲圖案表的實際讀取方式的模擬;對命名表和命名表影象的讀取方式的模擬;對屬性表的讀取方式的模擬;對調(diào)色板,調(diào)色板鏡像,背景滾動,屏幕和動畫分層操作方式的模擬;對動畫和動畫RAM讀取和操作方式的模擬;在屏幕刷新的時候訪問VRAM的操作方式和訪問PPURAM的操作方式的模擬。6.如權(quán)利要求1所述的在電視機頂盒上使用的NES模擬器的設(shè)計方法,其特征在于所述對圖形緩沖機制的優(yōu)化處理,是將NES游戲運行中所輸入的圖像數(shù)據(jù)轉(zhuǎn)換為一種通用的格式,然后在機頂盒的屏幕上表現(xiàn)出來,當PPU圖形處理器在刷新屏幕圖像時,并不是每次都從NES游戲的視頻VR0M中讀取數(shù)據(jù),而是在NES模擬器將NES格式的圖像數(shù)據(jù)寫入NES視頻內(nèi)存時就一次性地將數(shù)據(jù)轉(zhuǎn)換成機頂盒能夠識別的格式并存儲在緩沖里面,這樣在刷新屏幕圖像時,就直接在緩沖中讀取已經(jīng)轉(zhuǎn)換為機頂盒可以識別格式的圖像數(shù)據(jù),而緩沖數(shù)據(jù)的修改僅僅發(fā)生在NES模擬器修改視頻VR0M的時候。7.如權(quán)利要求1所述的在電視機頂盒上使用的NES模擬器的設(shè)計方法,其特征在于NES模擬器的集成CPU里包含了一個4聲道的聲音處理器,包括4個聲道為2個方波,一個三角波和一個噪聲發(fā)生通道,所述NES模擬器主要針對其中的方波和三角波的數(shù)據(jù)進行提取,通過波的疊加原理,將所有聲道的波形樣本數(shù)據(jù),混合成一段波,然后通過機頂盒的音頻輸入驅(qū)動把相應(yīng)的音頻數(shù)據(jù)播放出去,所述對聲音處理器的模擬的具體實現(xiàn)步驟為步驟1、首先從聲音寄存器讀出方波和三角波的特征值,然后通過特征值計算波的波長;步驟2、計算波的工作循環(huán),這就是應(yīng)當重復波長多少次直至波結(jié)束,同樣,這也是從聲音寄存器讀出;步驟3、計算輸出音量,這是從聲音寄存器讀出;步驟4、沿著波向前移動并把數(shù)據(jù)寫到緩沖,樣本的比率決定了寫入緩沖的字節(jié)數(shù)目,將CPU框架中同樣數(shù)目的樣本寫入緩沖,在下一個框架,繼續(xù)寫入剩下的數(shù)據(jù),直到完成寫入所有計算的波的數(shù)據(jù)。8.如權(quán)利要求1所述的在電視機頂盒上使用的NES模擬器的設(shè)計方法,其特征在于所述對手柄控制器的模擬是將機頂盒的遙控器的部分鍵值映射為NES模擬器的手柄控制器上的按鍵,通過模擬器把輸入的遙控器碼值轉(zhuǎn)換為NES可以識別的格式進行處理。9.如權(quán)利要求1所述的在電視機頂盒上使用的NES模擬器的設(shè)計方法,其特征在于所述對NES游戲文件格式的解析由2種方式構(gòu)成一種是機頂盒支持文件系統(tǒng),則對NES游戲文件的讀取使用文件系統(tǒng)的方式讀取,并按照相應(yīng)NES格式解析;第二種是在不支持文件系統(tǒng)的機頂盒上,把NES文件模擬成一個數(shù)組數(shù)據(jù),并按照相應(yīng)的NES格式解析。全文摘要一種在電視機頂盒上使用的NES模擬器的設(shè)計方法,包括一、對6502cpu的指令的模擬;二、對NES核心部件PPU圖形處理器的模擬;三、對圖形緩沖機制的優(yōu)化處理;四、對聲音處理器的模擬;五、對手柄控制器的模擬;六、對NES游戲文件格式的解析。本發(fā)明的優(yōu)點在于通過普通的機頂盒來實現(xiàn)對NES游戲的支持,使得不同的機頂盒,只要使用本發(fā)明設(shè)計方法設(shè)計的NES模擬器,就能直接升級為一臺NES游戲機,能夠有效的提高用戶對各種類型游戲的需求。文檔編號H04N5/00GK101834977SQ200910112960公開日2010年9月15日申請日期2009年12月14日優(yōu)先權(quán)日2009年12月14日發(fā)明者方立申請人:福建新大陸通信科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1