十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
Java基礎(chǔ)知識(shí),核心api,數(shù)據(jù)結(jié)構(gòu),面向?qū)ο蟮闹R(shí)
創(chuàng)新互聯(lián)專注于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務(wù)”的宗旨,從客戶的利益和觀點(diǎn)出發(fā),讓客戶在網(wǎng)絡(luò)營(yíng)銷中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴(yán)謹(jǐn)?shù)膽B(tài)度對(duì)待客戶,用專業(yè)的服務(wù)創(chuàng)造價(jià)值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。
圖形界面編程的知識(shí),比如awt, swing, javaFX
多線程編程知識(shí)
上面就是主要用到的知識(shí),基本都在JavaSE范圍內(nèi).
當(dāng)時(shí)貌似是用6502匯編語言編寫的(不敢保證一定是),現(xiàn)在當(dāng)然很多種語言都能做到。
可以,由于魂斗羅或街霸,拳皇之類的東西對(duì)網(wǎng)速要求很高, 一般都只用在局域網(wǎng)內(nèi),我知道有一個(gè)開源的fc模擬器使用java寫的,并且支持聲音,不過就是速度太慢了
求采納
你說的插卡游戲機(jī)在電視上玩的。
魂斗羅和超級(jí)瑪麗只要有連接好游戲機(jī)插上卡就能玩
匯編和c都可以,這里有個(gè)編程器
任夭堂游戲編程探密(文字版)
第一章 任天堂游戲結(jié)構(gòu)概論
長(zhǎng)期以來,由于任天堂公司在技術(shù)上的封鎖和國(guó)內(nèi)游戲開發(fā)工具的久缺.任天堂游戲
蒙上了一層神密的面紗,中國(guó)人只能玩任天堂游戲.而不能象蘋果機(jī)、中華學(xué)習(xí)機(jī)那樣了解
游戲程序、自己動(dòng)手編寫游戲。近年來,隨著任夭堂系列游戲機(jī)配套鍵盤的問世,逐步創(chuàng)造了
揭開這層面紗的條件.特別是配有打印機(jī)接口的“裕興”、“金字塔”等高檔游戲機(jī)鍵盤的陸續(xù)
推出,用戶僅僅編寫一個(gè)簡(jiǎn)單的反匯編程序就可打印出系統(tǒng)軟件的源程序,從而為探索任天
堂游戲軟件的奧秘提供了有效的手段。
有人疑問任夭堂游戲機(jī)的中央處理器同中華學(xué)習(xí)機(jī)一樣也是八位的CPU.但為什么
它能夠產(chǎn)生出如此絢麗多彩的動(dòng)畫、美妙動(dòng)聽的音響、栩栩如生的角色,其效果遠(yuǎn)遠(yuǎn)勝過美
國(guó)的“雅達(dá)利“,更強(qiáng)過中華學(xué)習(xí)機(jī)的游戲呢?究其原因,關(guān)鍵在于任天堂游戲機(jī)的設(shè)計(jì)者們
在傳統(tǒng)的八位機(jī)上獨(dú)具匠心、另辟蹊徑,從硬件上進(jìn)行了獨(dú)創(chuàng)的改造,在軟件上進(jìn)行了大膽
的嘗試,使一個(gè)CPU發(fā)揮了兩個(gè)CPU的功效,產(chǎn)生了絕妙非凡的藝術(shù)效果.從而以物美價(jià)
廉的絕對(duì)優(yōu)勢(shì)迅速占領(lǐng)了游戲機(jī)市場(chǎng),掀起了家庭娛樂領(lǐng)域的第三次浪潮。本文擬從分析任
天堂游戲的軟、硬件特點(diǎn)出發(fā),揭開任天堂游戲編程的秘密.以一與廣大同好切磋。
1·1 任天堂游戲機(jī)的硬件特點(diǎn)
1·1·1電路原理框圖
任天堂游戲機(jī)的硬件共分兩部分:主要部分是游戲機(jī).從屬部分是游戲卡。游戲機(jī)提供
游戲的運(yùn)行環(huán)境,游戲卡提供支持游戲的軟件,其電路原理框圖如圖1一1。
上圖中6527 CPU為中央處理器,田于它的任務(wù)是處理程序,所以一般把與它相連的部
件加以前綴"P".故CPU的地址總線表示為PADD,數(shù)據(jù)總線表示為PDATA,CPU管理的
存儲(chǔ)器表示為PRAM,PROM等。同樣.6528 PPU的任務(wù)是處理圖像,所以凡與它相關(guān)的部
件均加以前綴“V”。
1·1·2 中央處理器6527 CPU
1.CPU的內(nèi)部結(jié)構(gòu)
6527 CPU是一個(gè)八位單片機(jī),在它的內(nèi)部除固化有6502系列的CPU外,還有一個(gè)
可編程音響發(fā)生器PSG(Programable Sound Generator)和24個(gè)八位只寫寄存器,其地址空
間分配為$4000-$4017.主要用于CPU的I/O操作,PSG音響發(fā)生器的工作就是由這些
寄存器控制完成的.
1·1·4 游戲卡
1、游戲卡的基本組成
普通的單節(jié)目游戲卡一般由兩片ROM或EPROM組成,ROM的容量由游戲程序量的
大小決定.最簡(jiǎn)單的任天堂游戲?yàn)?4K,故這種卡內(nèi)有塊16K的ROM存放程序,一塊
8K的ROM存圖形字模(目前有軟封裝的IC,它把兩塊ROM封在一起)。典型的任天堂
游戲程序量為40K,它使用一塊32K的ROM存程序、一塊8K的ROM存字模。當(dāng)程序量大
于40K時(shí)則要對(duì)ROM進(jìn)行容量擴(kuò)充.
2、游戲卡各腳的功能
游戲卡是一60腳的接插件,各腳功能見圖1一4。
3、常用 ROM引腳功能簡(jiǎn)介
游戲卡中常用ROM或EPROM的型號(hào)有27C64(8 X 8K)、27C128(8X l6K)、27C256(8
X 32K), 27C512 (8 X 64 K ), 27C1000 (8 X 128K),或后綴數(shù)字相同而前綴不同的其它公
司產(chǎn)品,盒卡中還有2兆位(8 x 256K)至8兆位(8X 1000K)的芯片。其中27C64~27C512為28
腳的芯片,27C1000或更大容量的芯片為32腳(個(gè)別的27C1000仍為28腳,它使用了OE.
CE中的一個(gè)腳作為地址線).
1·2 任夭堂游戲軟件的特點(diǎn)
目前流行的任夭堂游戲軟件有數(shù)百種,內(nèi)容已涉及及到政治、經(jīng)濟(jì)、軍事、戰(zhàn)爭(zhēng)、教育、管
理、體育、娛樂等各個(gè)領(lǐng)域.可以說任天堂游戲已兼顧了男、女、老、中、青、少、幼各個(gè)年齡階
層,深受世界各國(guó)人民所喜愛。也許這就是它迅速普及的主要原因。但是,任天堂游戲盡管
內(nèi)容千變?nèi)f化、情節(jié)各異,其軟件結(jié)構(gòu)和處理方法則是基本相同的,它們有著共同的特點(diǎn)。
1·2·1 任天堂游戲的軟件結(jié)構(gòu)
歸納起來,任天堂游戲軟件結(jié)構(gòu)可分為兩大類:基本結(jié)構(gòu)和擴(kuò)展結(jié)構(gòu).
一、基本結(jié)構(gòu)
基本的任夭堂游戲軟件容分為40K字節(jié)(標(biāo)準(zhǔn)卡標(biāo)注為L(zhǎng)B)。典型游戲如,《1942》、《超
級(jí)瑪麗》、《拆屋工》等.其中32k為游戲控制程序,供CPU執(zhí)行;8K為圖形字模,由PPU處
理。另外還有一種低配置結(jié)構(gòu),軟件容量為24K{標(biāo)注為L(zhǎng)A),這是一種早期軟件。其中控制
程序?yàn)?6K;字模為8K。典型游戲有《火箭車》、《馬戲團(tuán)》、《金塊Ⅰ、Ⅱ》等。
40K軟件的控制程序存放地址在CPU管理的$8000一$FFFF空間;字模地址在PPU
管理的$0000-$1FFF空間。16K軟件的控制程序存放地址為$C000-$FFFF;字模地
址也是$0000一$1FFF。
二、擴(kuò)展結(jié)構(gòu)
容量在40K以上的軟件均為擴(kuò)展結(jié)構(gòu)。它們?cè)诨窘Y(jié)構(gòu)的基礎(chǔ)上或者擴(kuò)展控制程序
區(qū)、或者擴(kuò)展字模區(qū)。擴(kuò)展方法是在某段地址范圍進(jìn)行空間存儲(chǔ)體切換。一般程序區(qū)在
$8000-$BFFF空間切換;字模區(qū)在$0000-$1FFF空間切換。切換種類以軟件容量的
大小略有不同:
對(duì)于48K卡(標(biāo)注為L(zhǎng)C〕,其程序部分為32K;宇模部分為16K,分兩個(gè)8K存儲(chǔ)體.
典型游戲有《七寶奇謀》、《影子傳說》等。
通常把24k-48K容量的游戲卡稱為低檔卡或低檔游戲。
對(duì)于64K卡(標(biāo)注為L(zhǎng)D)有兩種結(jié)構(gòu):一種是其程序部分為32K;字模部分為32x,分
為四個(gè)8K存儲(chǔ)體.典型游戲有《迷宮組曲》,《智慧城》、《沙羅曼蛇一代》、《北斗神拳一代》
等;第二種則是程序與字模共用64k,分為四個(gè)存儲(chǔ)體.典型游戲有《米老鼠大冒險(xiǎn)》、《冒險(xiǎn)
島》、《俄羅斯方塊1、2》等。
80K的游戲不多(標(biāo)注為L(zhǎng)E),常見的有《中國(guó)拳》、《金牌瑪麗》等。其程序部分為48K,
前32K分為兩個(gè)16k存儲(chǔ)體;字模部分為32k,分為四個(gè)8k存儲(chǔ)體。
通常稱64k、80K的游戲?yàn)橹袡n卡。
對(duì)于128K卡(標(biāo)注為L(zhǎng)F),其程序部分與字模部分棍合共用128k,分為八個(gè)16K存儲(chǔ)
體,其中前七個(gè)存儲(chǔ)體地址映射于$8000-$BFFF:最后一個(gè)存儲(chǔ)體(稱為HOME BANK)
映射于$0000一$FFFF,典型游戲有《魔界村》、《怒》、《火之鳥方》、《未來戰(zhàn)士》、《洛克人》、
《1943》 《1944 》《嵌特殊部隊(duì)》、《沖撞霹靂機(jī)車》等。
這類游戲卡中一般都配有一塊8K的RAM(動(dòng)態(tài)隨機(jī)存儲(chǔ)器〕存儲(chǔ)當(dāng)前使用的字模。
對(duì)于160k卡(標(biāo)注為L(zhǎng)G),其程序部分為128K;字模部分為32K。典型游戲有《倚天屠
龍記》、《立體大賽車》、《歡樂叮當(dāng)》等。
對(duì)于256K卡(標(biāo)注為L(zhǎng)H),其程序部分為128K;字模部分為128K。典型游戲有《柯拉
米世界》、《惡魔城》、《雙截龍》、《松鼠歷險(xiǎn)記》《人間兵器》、《聯(lián)合大作戰(zhàn))等。另外,還有《魂
斗羅》、《赤色要塞》、《綠色兵團(tuán)》、《立體籃球》《荒野大鏢客》等256K游戲被壓縮為128K游
戲,目前這類游戲的256K版已不多見,常見的均為128K的壓縮版;
通常稱128K一256K容量的游戲?yàn)楦邫n卡或強(qiáng)卡。
對(duì)于高于256K容是的游戲則稱為特卡,如《不動(dòng)明王傳》,《戰(zhàn)斧》、《孔雀王》,《大旋風(fēng)》
等游戲容量已達(dá)2M-4M。但由于任天堂系列游戲機(jī)的CPU的處理速度、畫面的解析度、音
域音色等方面的限制,即使軟件容量再增大,游戲效果也不會(huì)提高多少.總達(dá)不到街機(jī)的水
平,故目前單個(gè)游戲的容量大于256K的尚不多見。
1·3 任天堂游戲的圖像處理方法
本節(jié)簡(jiǎn)要介紹任天堂游戲的圖像處理方法。
1·3·1屏幕顯示原理
任天堂游戲機(jī)中的CPU雖然仍屬65系列的CPU,但它的顯示方式與中華學(xué)習(xí)機(jī)截然
不同。其顯示屏幕由三類四層顯示頁面鉤成。三類顯示頁依次為:卡通(角色或動(dòng)畫)頁、背
景頁、底背景頁??ㄍ撚糜陲@示游戲中的角色,它有兩個(gè)頁面:卡通零頁——使角色顯示于
背景之前;卡通一頁——使角色顯示于背景之后??ㄍ▎T的顯示分辨率為256x240點(diǎn),卡通
可以點(diǎn)為單位移動(dòng)。背景頁主要用于游戲畫面的顯示,它共有四個(gè)顯示頁面,每頁的兩邊互
相相連并排成“田”字,采取字符顯示方式,顯示分辨率為32列* 30行,每幅畫面由$60個(gè)
圖形塊構(gòu)成,游戲中可任取一個(gè)頁面顯示。底背景頁主要用于大面積的單色顯示,以襯托出
蘭天、草地、沙漠、大海等效果,顯示分辨率為1x1。 四層顯示頁的排列由前向后依次為:卡
通零頁、背景頁、卡通一頁、底背景頁(見圖1一6)。系統(tǒng)默認(rèn)的排列方式為背景00頁與卡通
賈、底背景頁四層頁面重疊,前面顯示頁的內(nèi)容可以遮住后面顯示頁的內(nèi)容,因而很容易構(gòu)
成具有一定景深次序的立體畫面。
1·3·2背景處理技術(shù)
任天堂游戲中的背景畫面顯示采用字符方式,每個(gè)字符通常稱為背景圖形塊。每個(gè)圖
形塊為8*8點(diǎn)陣,其字模數(shù)據(jù)存放在由PPU管理的一段內(nèi)存中,稱為背景字庫,一般使用
$1000一$1FFF地址,共4K字節(jié).每個(gè)字模由連續(xù)的16個(gè)單元組成,故一次最多可定義
256個(gè)字符,序號(hào)依次為0~255.顯示字符時(shí),只要把字符序號(hào)置入屏幕對(duì)應(yīng)的顯示單元中
即可。
任關(guān)堂游戲中的背景處理由PPU獨(dú)立完成,每一個(gè)背景頁面對(duì)應(yīng)PPU的1024個(gè)單
元,為順序?qū)?yīng)關(guān)系。背景00頁對(duì)應(yīng)PPU地址為$2000--$23FF,其中$2000一$23BF
對(duì)應(yīng)于960個(gè)圖形顯示單元,$23C0--23FF為該顯示頁的配色單元;背景10頁對(duì)應(yīng)的
PPU地址為$2400一$27FF;同樣,后面的兩頁依次對(duì)應(yīng)$2800---$2BFF、$2C00
$2FFF。由于游戲機(jī)中只有一塊2K的VRAM(PPU使用的RAM),故一般只使用前兩個(gè)
頁面,通常稱其為背景零頁和背景一頁。游戲中可通過設(shè)置軟開關(guān)的方法控制畫面的橫、縱
向,以使兩幅面面橫向并列或縱向銜接。
在實(shí)際游戲中,要經(jīng)常用到背景畫面的橫向卷動(dòng)和縱向滾動(dòng)。如(魂斗羅,游戲中的卻
一、五、六、七、八關(guān)是橫向卷動(dòng),第三關(guān)則是縱向滾動(dòng)。這些畫面位移效果是如何實(shí)現(xiàn)的呢?
我們知道,中華學(xué)習(xí)機(jī)中的畫面位移是通過反復(fù)改寫顯示映射單元的內(nèi)容而實(shí)現(xiàn)的,這種方
法處理速度慢、控制程序冗長(zhǎng)。任天堂則采取了截然不同的方法。它通過硬件的待殊處理,
引入了顯示窗口的概念。畫面位移時(shí),每個(gè)顯示單元的內(nèi)容不變,而令顯示窗口向相反的方
向移動(dòng),從而實(shí)現(xiàn)了畫面的橫向卷動(dòng)和縱向滾動(dòng)。如《魂斗羅》中第一關(guān)橫向卷動(dòng)的控制方法
是.令兩個(gè)背景頁橫向銜接,游戲開始時(shí),背景零頁繪滿32列,而背景一頁僅繪制12列,令
顯示窗口對(duì)正零頁,當(dāng)游戲中的角色前進(jìn)到畫面右邊的一定位置時(shí),則令顯示窗口右移一
格,同時(shí)繪制一頁的第13列;這樣,顯示窗口每右移一格,畫面繪制一列,從而使游戲畫面連
綿不絕,每移出一頁畫面(32列)令頁數(shù)計(jì)數(shù)器加一,當(dāng)累計(jì)到一定頁數(shù)時(shí)則令窗口不再移
動(dòng),進(jìn)行關(guān)底處理。這一畫面的位移控制極為簡(jiǎn)單,僅通過向位移軟開關(guān)$2005置入移位數(shù)
據(jù)就可實(shí)現(xiàn)。F BASIC的控制程序?yàn)?
POKE H2005,x:POKE H2005,0
x為位移參數(shù)。其機(jī)器語言的控制程序?yàn)?
LDA x
STA $ 2005
LDA #$00
STA $ 2005
畫面的縱向位移則更為簡(jiǎn)單,如《魂斗羅》的第三關(guān)——瀑布天險(xiǎn)是一個(gè)縱版畫面,角色要從
最底層跳升到最頂層與關(guān)底魔頭決斗,游戲進(jìn)程中畫面隨看角色的跳躍不停的上滾。實(shí)際--
這一位移過程是在一頁面面中進(jìn)行的,控制方法是,每當(dāng)角色前進(jìn)到畫面上方某一位置時(shí),
改寫畫面最底行的圖形數(shù)據(jù),使其為即將移入畫面的一行.然后令顯示窗口向上移一格,由
于窗口是在一個(gè)顯示頁上移動(dòng),故最底行即是最頂行(這時(shí)可把一頁面面理解為上、下邊連
接的圓筒,顯示窗口是套在畫面圓筒外面稍大的一個(gè)圓筒,窗口移動(dòng)一格就是向上旋轉(zhuǎn)一
格)。F BASIC控制程序?yàn)椋?/p>
POKE H2005,0:POKE H2005,Y
Y為位移參數(shù)。相應(yīng)的機(jī)器語言程序?yàn)椋?/p>
LDA #$00
STA $2005
LDA Y
STA $2005
以上畫面的送效、位移操作都是在CPU響應(yīng)非屏蔽中斷期間完成的(非屏蔽中斷是在
電視機(jī)的場(chǎng)回掃期間發(fā)出和響應(yīng)的,這時(shí)的電視屏是黑的),所以我們感覺布道位移的痕跡。
關(guān)于任天堂游戲中背景畫面的繪制 移動(dòng)及畫面的分裂位移和扭曲等效果的實(shí)現(xiàn),將在第六章詳細(xì)討論。
1·3·3動(dòng)畫處理技術(shù)
組成任天堂游戲中動(dòng)畫的最小單位是卡通塊,每個(gè)卡通塊為8X8點(diǎn)陣.與一個(gè)字符同
樣大小??ㄍ▔K也有一個(gè)圖形字庫,對(duì)應(yīng)的PPU地址為$0000-$OFFF。每個(gè)個(gè)卡通塊的字
模數(shù)據(jù)也由連續(xù)的16個(gè)單元組成,故一次最多可定義256個(gè)卡通塊,序號(hào)依次為0-255
6527CPU規(guī)定.在一幅畫面上只允許同時(shí)顯示64個(gè)8x8點(diǎn)陣的卡通塊〔這是由PPU
內(nèi)卡通定義區(qū)的RAM分配決定的〕,如《超級(jí)瑪麗》中,瑪麗在吃紅蘑菇之前為16x16點(diǎn)
陣大小(即由4個(gè)卡通塊組成),當(dāng)吃了紅蘑菇之后身體長(zhǎng)大一倍,變?yōu)?2X 32點(diǎn)陣(即由
16個(gè)卡通塊組成〕的卡通。但實(shí)際游戲中要求顯示的卡通塊數(shù)往往遠(yuǎn)遠(yuǎn)超過這一限制,如目
前較流行的打斗游戲《街霸》中,一個(gè)卡通即為128*64點(diǎn)陣(由128個(gè)卡通塊組成)有時(shí)還
更大,這是怎么實(shí)現(xiàn)的呢?
原來在實(shí)際游戲中,對(duì)卡通進(jìn)行了分時(shí)控制。所謂分時(shí)控制就是在不同的時(shí)間里顯示半
通的不同部分,依靠人眼的視覺惰性產(chǎn)生連續(xù)的感覺。如《魂斗羅》游戲中的卡通顯示(兩個(gè)
正面角色、敵人、發(fā)射的子彈、暗堡的閉合與開啟都是卡通)就是每一次中斷顯示卡通的二分
之一實(shí)現(xiàn)的。
卡通的定義操作極其簡(jiǎn)單,系統(tǒng)規(guī)定一個(gè)卡通塊由連續(xù)的四個(gè)內(nèi)存單元定義,第一寸
單元指定卡通顯示的Y坐標(biāo)、第二個(gè)為卡通塊在字庫中的序號(hào)、第三個(gè)為卡通塊的顯示狀
態(tài)〔配色組合、左右翻轉(zhuǎn)、上下顛倒以及顯示于那個(gè)卡通頁面,,第四個(gè)為顯示的X坐標(biāo)。編
程中可任意指定定義卡通的內(nèi)存頁面(一般選二頁或三頁,即$200一$2FF, $300
$3FF)。
關(guān)于任天堂游戲中的卡通的定義及運(yùn)動(dòng)控制將在第七章討論。
1·4 任天堂游戲的音響處理
在大部分任天堂游戲的過程始、終,一直伴奏著和諧動(dòng)聽的背景音樂;隨巖游戲的進(jìn)行
和角色的動(dòng)作還不時(shí)發(fā)出逼真的效果音響,而且這些音響的發(fā)出與背景的移動(dòng)、角色的運(yùn)動(dòng)
三者并行工作,互不干擾,許多朋友玩過中華機(jī)上的游戲,如《警察抓小偷》《富士山?jīng)Q戰(zhàn)》
等,這些游戲中的音響發(fā)出與角色的動(dòng)作是不能同時(shí)進(jìn)行的,即角色動(dòng)作時(shí)沒有音響;發(fā)出
音響時(shí)角色的動(dòng)作要停下來.任天堂游戲中的音響處理確有獨(dú)到之處.由于在6527 CPU內(nèi)
固化有可編程音響發(fā)生器,所以音響控制程序特別簡(jiǎn)潔,任天堂游戲的發(fā)聲系統(tǒng)由五個(gè)聲部
組成,對(duì)應(yīng)于CPU管理的$40DO——$4013二十個(gè)單元,每個(gè)聲部使用四個(gè)單元,它們的作
用依次為音色音量、音形包絡(luò)、音調(diào)細(xì)調(diào)、音調(diào)粗調(diào)。第一、二、三聲部可進(jìn)行和聲旋律演奏,
也可以選取任一聲部發(fā)出效果音,如執(zhí)行F BASIC程序
POKE H4015,1:POKE H4000. 255,255,255,255
就可發(fā)出長(zhǎng)達(dá)三分鐘的頻率由低到高的警報(bào)聲。第四聲部可以模仿連續(xù)不斷的噪聲,如風(fēng)
聲 雨聲 鐘生 腳步聲 火車聲等等 第五聲部則可模仿出人的講話聲。任天堂游戲中
背景音樂一般都是使用前三個(gè)聲部演奏的,演奏程序也是放在中斷中處理的.五個(gè)聲部的發(fā)
聲總開關(guān)由$4015控制,$4015的D0——D4位依次控制翻第一至第五聲部的工作狀態(tài),置
0關(guān)閉、置1開啟。