㈠ 当年的Fc《魂斗罗》《玛丽》是用什么工具做的。如何反编译。
汇编和c都可以,这里有个编程器http://pocket.92wy.com/fc_info_33534.html
任夭堂游戏编程探密(文字版)
第一章 任天堂游戏结构概论
长期以来,由于任天堂公司在技术上的封锁和国内游戏开发工具的久缺.任天堂游戏
蒙上了一层神密的面纱,中国人只能玩任天堂游戏.而不能象苹果机、中华学习机那样了解
游戏程序、自己动手编写游戏。近年来,随着任夭堂系列游戏机配套键盘的问世,逐步创造了
揭开这层面纱的条件.特别是配有打印机接口的“裕兴”、“金字塔”等高档游戏机键盘的陆续
推出,用户仅仅编写一个简单的反汇编程序就可打印出系统软件的源程序,从而为探索任天
堂游戏软件的奥秘提供了有效的手段。
有人疑问任夭堂游戏机的中央处理器同中华学习机一样也是八位的CPU.但为什么
它能够产生出如此绚丽多彩的动画、美妙动听的音响、栩栩如生的角色,其效果远远胜过美
国的“雅达利“,更强过中华学习机的游戏呢?究其原因,关键在于任天堂游戏机的设计者们
在传统的八位机上独具匠心、另辟蹊径,从硬件上进行了独创的改造,在软件上进行了大胆
的尝试,使一个CPU发挥了两个CPU的功效,产生了绝妙非凡的艺术效果.从而以物美价
廉的绝对优势迅速占领了游戏机市场,掀起了家庭娱乐领域的第三次浪潮。本文拟从分析任
天堂游戏的软、硬件特点出发,揭开任天堂游戏编程的秘密.以一与广大同好切磋。
1·1 任天堂游戏机的硬件特点
1·1·1电路原理框图
任天堂游戏机的硬件共分两部分:主要部分是游戏机.从属部分是游戏卡。游戏机提供
游戏的运行环境,游戏卡提供支持游戏的软件,其电路原理框图如图1一1。
上图中6527 CPU为中央处理器,田于它的任务是处理程序,所以一般把与它相连的部
件加以前缀"P".故CPU的地址总线表示为PADD,数据总线表示为PDATA,CPU管理的
存储器表示为PRAM,PROM等。同样.6528 PPU的任务是处理图像,所以凡与它相关的部
件均加以前缀“V”。
1·1·2 中央处理器6527 CPU
1.CPU的内部结构
6527 CPU是一个八位单片机,在它的内部除固化有6502系列的CPU外,还有一个
可编程音响发生器PSG(Programable Sound Generator)和24个八位只写寄存器,其地址空
间分配为$4000-$4017.主要用于CPU的I/O操作,PSG音响发生器的工作就是由这些
寄存器控制完成的.
1·1·4 游戏卡
1、游戏卡的基本组成
普通的单节目游戏卡一般由两片ROM或EPROM组成,ROM的容量由游戏程序量的
大小决定.最简单的任天堂游戏为24K,故这种卡内有块16K的ROM存放程序,一块
8K的ROM存图形字模(目前有软封装的IC,它把两块ROM封在一起)。典型的任天堂
游戏程序量为40K,它使用一块32K的ROM存程序、一块8K的ROM存字模。当程序量大
于40K时则要对ROM进行容量扩充.
2、游戏卡各脚的功能
游戏卡是一60脚的接插件,各脚功能见图1一4。
3、常用 ROM引脚功能简介
游戏卡中常用ROM或EPROM的型号有27C64(8 X 8K)、27C128(8X l6K)、27C256(8
X 32K), 27C512 (8 X 64 K ), 27C1000 (8 X 128K),或后缀数字相同而前缀不同的其它公
司产品,盒卡中还有2兆位(8 x 256K)至8兆位(8X 1000K)的芯片。其中27C64~27C512为28
脚的芯片,27C1000或更大容量的芯片为32脚(个别的27C1000仍为28脚,它使用了OE.
CE中的一个脚作为地址线).
1·2 任夭堂游戏软件的特点
目前流行的任夭堂游戏软件有数百种,内容已涉及及到政治、经济、军事、战争、教育、管
理、体育、娱乐等各个领域.可以说任天堂游戏已兼顾了男、女、老、中、青、少、幼各个年龄阶
层,深受世界各国人民所喜爱。也许这就是它迅速普及的主要原因。但是,任天堂游戏尽管
内容千变万化、情节各异,其软件结构和处理方法则是基本相同的,它们有着共同的特点。
1·2·1 任天堂游戏的软件结构
归纳起来,任天堂游戏软件结构可分为两大类:基本结构和扩展结构.
一、基本结构
基本的任夭堂游戏软件容分为40K字节(标准卡标注为LB)。典型游戏如,《1942》、《超
级玛丽》、《拆屋工》等.其中32k为游戏控制程序,供CPU执行;8K为图形字模,由PPU处
理。另外还有一种低配置结构,软件容量为24K{标注为LA),这是一种早期软件。其中控制
程序为16K;字模为8K。典型游戏有《火箭车》、《马戏团》、《金块Ⅰ、Ⅱ》等。
40K软件的控制程序存放地址在CPU管理的$8000一$FFFF空间;字模地址在PPU
管理的$0000-$1FFF空间。16K软件的控制程序存放地址为$C000-$FFFF;字模地
址也是$0000一$1FFF。
二、扩展结构
容量在40K以上的软件均为扩展结构。它们在基本结构的基础上或者扩展控制程序
区、或者扩展字模区。扩展方法是在某段地址范围进行空间存储体切换。一般程序区在
$8000-$BFFF空间切换;字模区在$0000-$1FFF空间切换。切换种类以软件容量的
大小略有不同:
对于48K卡(标注为LC〕,其程序部分为32K;宇模部分为16K,分两个8K存储体.
典型游戏有《七宝奇谋》、《影子传说》等。
通常把24k-48K容量的游戏卡称为低档卡或低档游戏。
对于64K卡(标注为LD)有两种结构:一种是其程序部分为32K;字模部分为32x,分
为四个8K存储体.典型游戏有《迷宫组曲》,《智慧城》、《沙罗曼蛇一代》、《北斗神拳一代》
等;第二种则是程序与字模共用64k,分为四个存储体.典型游戏有《米老鼠大冒险》、《冒险
岛》、《俄罗斯方块1、2》等。
80K的游戏不多(标注为LE),常见的有《中国拳》、《金牌玛丽》等。其程序部分为48K,
前32K分为两个16k存储体;字模部分为32k,分为四个8k存储体。
通常称64k、80K的游戏为中档卡。
对于128K卡(标注为LF),其程序部分与字模部分棍合共用128k,分为八个16K存储
体,其中前七个存储体地址映射于$8000-$BFFF:最后一个存储体(称为HOME BANK)
映射于$0000一$FFFF,典型游戏有《魔界村》、《怒》、《火之鸟方》、《未来战士》、《洛克人》、
《1943》 《1944 》《嵌特殊部队》、《冲撞霹雳机车》等。
这类游戏卡中一般都配有一块8K的RAM(动态随机存储器〕存储当前使用的字模。
对于160k卡(标注为LG),其程序部分为128K;字模部分为32K。典型游戏有《倚天屠
龙记》、《立体大赛车》、《欢乐叮当》等。
对于256K卡(标注为LH),其程序部分为128K;字模部分为128K。典型游戏有《柯拉
米世界》、《恶魔城》、《双截龙》、《松鼠历险记》《人间兵器》、《联合大作战)等。另外,还有《魂
斗罗》、《赤色要塞》、《绿色兵团》、《立体篮球》《荒野大镖客》等256K游戏被压缩为128K游
戏,目前这类游戏的256K版已不多见,常见的均为128K的压缩版;
通常称128K一256K容量的游戏为高档卡或强卡。
对于高于256K容是的游戏则称为特卡,如《不动明王传》,《战斧》、《孔雀王》,《大旋风》
等游戏容量已达2M-4M。但由于任天堂系列游戏机的CPU的处理速度、画面的分辨率、音
域音色等方面的限制,即使软件容量再增大,游戏效果也不会提高多少.总达不到街机的水
平,故目前单个游戏的容量大于256K的尚不多见。
1·3 任天堂游戏的图像处理方法
本节简要介绍任天堂游戏的图像处理方法。
1·3·1屏幕显示原理
任天堂游戏机中的CPU虽然仍属65系列的CPU,但它的显示方式与中华学习机截然
不同。其显示屏幕由三类四层显示页面钩成。三类显示页依次为:卡通(角色或动画)页、背
景页、底背景页。卡通页用于显示游戏中的角色,它有两个页面:卡通零页——使角色显示于
背景之前;卡通一页——使角色显示于背景之后。卡通员的显示分辨率为256x240点,卡通
可以点为单位移动。背景页主要用于游戏画面的显示,它共有四个显示页面,每页的两边互
相相连并排成“田”字,采取字符显示方式,显示分辨率为32列* 30行,每幅画面由$60个
图形块构成,游戏中可任取一个页面显示。底背景页主要用于大面积的单色显示,以衬托出
兰天、草地、沙漠、大海等效果,显示分辨率为1x1。 四层显示页的排列由前向后依次为:卡
通零页、背景页、卡通一页、底背景页(见图1一6)。系统默认的排列方式为背景00页与卡通
贾、底背景页四层页面重叠,前面显示页的内容可以遮住后面显示页的内容,因而很容易构
成具有一定景深次序的立体画面。
1·3·2背景处理技术
任天堂游戏中的背景画面显示采用字符方式,每个字符通常称为背景图形块。每个图
形块为8*8点阵,其字模数据存放在由PPU管理的一段内存中,称为背景字库,一般使用
$1000一$1FFF地址,共4K字节.每个字模由连续的16个单元组成,故一次最多可定义
256个字符,序号依次为0~255.显示字符时,只要把字符序号置入屏幕对应的显示单元中
即可。
任关堂游戏中的背景处理由PPU独立完成,每一个背景页面对应PPU的1024个单
元,为顺序对应关系。背景00页对应PPU地址为$2000--$23FF,其中$2000一$23BF
对应于960个图形显示单元,$23C0--23FF为该显示页的配色单元;背景10页对应的
PPU地址为$2400一$27FF;同样,后面的两页依次对应$2800---$2BFF、$2C00
$2FFF。由于游戏机中只有一块2K的VRAM(PPU使用的RAM),故一般只使用前两个
页面,通常称其为背景零页和背景一页。游戏中可通过设置软开关的方法控制画面的横、纵
向,以使两幅面面横向并列或纵向衔接。
在实际游戏中,要经常用到背景画面的横向卷动和纵向滚动。如(魂斗罗,游戏中的却
一、五、六、七、八关是横向卷动,第三关则是纵向滚动。这些画面位移效果是如何实现的呢?
我们知道,中华学习机中的画面位移是通过反复改写显示映射单元的内容而实现的,这种方
法处理速度慢、控制程序冗长。任天堂则采取了截然不同的方法。它通过硬件的待殊处理,
引入了显示窗口的概念。画面位移时,每个显示单元的内容不变,而令显示窗口向相反的方
向移动,从而实现了画面的横向卷动和纵向滚动。如《魂斗罗》中第一关横向卷动的控制方法
是.令两个背景页横向衔接,游戏开始时,背景零页绘满32列,而背景一页仅绘制12列,令
显示窗口对正零页,当游戏中的角色前进到画面右边的一定位置时,则令显示窗口右移一
格,同时绘制一页的第13列;这样,显示窗口每右移一格,画面绘制一列,从而使游戏画面连
绵不绝,每移出一页画面(32列)令页数计数器加一,当累计到一定页数时则令窗口不再移
动,进行关底处理。这一画面的位移控制极为简单,仅通过向位移软开关$2005置入移位数
据就可实现。F BASIC的控制程序为:
POKE &H2005,x:POKE &H2005,0
x为位移参数。其机器语言的控制程序为:
LDA x
STA $ 2005
LDA #$00
STA $ 2005
画面的纵向位移则更为简单,如《魂斗罗》的第三关——瀑布天险是一个纵版画面,角色要从
最底层跳升到最顶层与关底魔头决斗,游戏进程中画面随看角色的跳跃不停的上滚。实际--
这一位移过程是在一页面面中进行的,控制方法是,每当角色前进到画面上方某一位置时,
改写画面最底行的图形数据,使其为即将移入画面的一行.然后令显示窗口向上移一格,由
于窗口是在一个显示页上移动,故最底行即是最顶行(这时可把一页面面理解为上、下边连
接的圆筒,显示窗口是套在画面圆筒外面稍大的一个圆筒,窗口移动一格就是向上旋转一
格)。F BASIC控制程序为,
POKE &H2005,0:POKE &H2005,Y
Y为位移参数。相应的机器语言程序为,
LDA #$00
STA $2005
LDA Y
STA $2005
以上画面的送效、位移操作都是在CPU响应非屏蔽中断期间完成的(非屏蔽中断是在
电视机的场回扫期间发出和响应的,这时的电视屏是黑的),所以我们感觉布道位移的痕迹。
关于任天堂游戏中背景画面的绘制 移动及画面的分裂位移和扭曲等效果的实现,将在第六章详细讨论。
1·3·3动画处理技术
组成任天堂游戏中动画的最小单位是卡通块,每个卡通块为8X8点阵.与一个字符同
样大小。卡通块也有一个图形字库,对应的PPU地址为$0000-$OFFF。每个个卡通块的字
模数据也由连续的16个单元组成,故一次最多可定义256个卡通块,序号依次为0-255
6527CPU规定.在一幅画面上只允许同时显示64个8x8点阵的卡通块〔这是由PPU
内卡通定义区的RAM分配决定的〕,如《超级玛丽》中,玛丽在吃红蘑菇之前为16x16点
阵大小(即由4个卡通块组成),当吃了红蘑菇之后身体长大一倍,变为32X 32点阵(即由
16个卡通块组成〕的卡通。但实际游戏中要求显示的卡通块数往往远远超过这一限制,如目
前较流行的打斗游戏《街霸》中,一个卡通即为128*64点阵(由128个卡通块组成)有时还
更大,这是怎么实现的呢?
原来在实际游戏中,对卡通进行了分时控制。所谓分时控制就是在不同的时间里显示半
通的不同部分,依靠人眼的视觉惰性产生连续的感觉。如《魂斗罗》游戏中的卡通显示(两个
正面角色、敌人、发射的子弹、暗堡的闭合与开启都是卡通)就是每一次中断显示卡通的二分
之一实现的。
卡通的定义操作极其简单,系统规定一个卡通块由连续的四个内存单元定义,第一寸
单元指定卡通显示的Y坐标、第二个为卡通块在字库中的序号、第三个为卡通块的显示状
态〔配色组合、左右翻转、上下颠倒以及显示于那个卡通页面,,第四个为显示的X坐标。编
程中可任意指定定义卡通的内存页面(一般选二页或三页,即$200一$2FF, $300
$3FF)。
关于任天堂游戏中的卡通的定义及运动控制将在第七章讨论。
1·4 任天堂游戏的音响处理
在大部分任天堂游戏的过程始、终,一直伴奏着和谐动听的背景音乐;随岩游戏的进行
和角色的动作还不时发出逼真的效果音响,而且这些音响的发出与背景的移动、角色的运动
三者并行工作,互不干扰,许多朋友玩过中华机上的游戏,如《警察抓小偷》《富士山决战》
等,这些游戏中的音响发出与角色的动作是不能同时进行的,即角色动作时没有音响;发出
音响时角色的动作要停下来.任天堂游戏中的音响处理确有独到之处.由于在6527 CPU内
固化有可编程音响发生器,所以音响控制程序特别简洁,任天堂游戏的发声系统由五个声部
组成,对应于CPU管理的$40DO——$4013二十个单元,每个声部使用四个单元,它们的作
用依次为音色音量、音形包络、音调细调、音调粗调。第一、二、三声部可进行和声旋律演奏,
也可以选取任一声部发出效果音,如执行F BASIC程序
POKE &H4015,1:POKE &H4000. 255,255,255,255
就可发出长达三分钟的频率由低到高的警报声。第四声部可以模仿连续不断的噪声,如风
声 雨声 钟生 脚步声 火车声等等 第五声部则可模仿出人的讲话声。任天堂游戏中
背景音乐一般都是使用前三个声部演奏的,演奏程序也是放在中断中处理的.五个声部的发
声总开关由$4015控制,$4015的D0——D4位依次控制翻第一至第五声部的工作状态,置
0关闭、置1开启。
㈡ 浪潮的倚天 桌面超级计算机,支持什么操作系统,价格多少支持哪些编译器
它使用特定CPU,需要专门的操作系统(就算是用linux,也不会是随便拿个Linux都能安装上;Windows不兼容超级计算机,估计微软也不愿特意为它作移植,NVIDIA也不会专门开发一个操作系统,还是开源的Linux/UNIX把握大点),价格约5万,跟NVIDIA自己做的HPC“特斯拉”相差不是太多(“特斯拉”的价格是1万美元)。
现有编译器大多是没法在这个电脑上用的,想先作了解的话,可以看看开源的gcc套件和NVIDIA的Cuda。
㈢ 如何快速系统的学习java
Java - 近10年来计算机软件发展过程中的传奇,其在众多开发者心中的地位就如“屠龙刀”、“倚天剑”。
Java是个平台,我只想说说我对学好Java的一点看法,希望对初学者有所帮助。
1. 思考一下
学习Java之前,先别急,静下心来好好想想:
1)你对学习Java是否有兴趣?
2)你是否能静下心来坚持不懈地学习?
嗯,这是个容易但又绝对不应该忽略的问题,你确信自己对Java感兴趣、而且又有吃苦的准备,那你才可能学好Java!如果具备这两点条件,就请继续往下看……
2. 准备一下
请不要把你的学习Java之路和其它计算机技术分开看待,技术的联系往往是千丝万缕的,你应该掌握一些学习Java所涉及的基础知识,对于 “CLASSPATH要怎么设置啊”、“跪求JDK下载地址”等等问题,你不该问,因为Internet上太多答案了,甚至换个角度说,你是不是还不适合直接学习编程?
1)买本Java学习用书。
JDK 6正式版刚刚推出,市面上你暂时买不到JDK 6的书籍,但我仍推荐你买一本适合入门的、较新JDK版本的Java书籍,那么,你现在选择一本讲述JDK 5的入门书籍还是有条件的。我可以推荐一些入门书,但是我不打算这么做,因为合我口味的,不一定适合你。但无论如何,《Thing In Java》绝对不应该作为你入门Java的第一本书籍!
记住,网络上学习Java的资源很多,但基本不够系统,拥有一本Java入门书籍,是你系统学习Java的基础。
2)准备Java学习环境。
准备你的学习环境,很简单,安装JDK 6,然后用类似UltraEdit、EditPlus的文本编辑器配置你的学习环境,Internet上有很多关于如何配置的文章。初学Java,不建议用IDE工具,通过一行行的敲代码,你会碰到很多问题,只有这样,你才能学会怎样解决问题,并加深自己对Java的理解。
准备好后,开始进入激动人心的Java学习里程吧!
3. Java基础学习之路
学习Java的过程虽然辛苦些,但又是处处有精彩!学习过程中的心态一定要保持专一,网上关于语言间的“PK”到处都是,别被浮躁影响!认准了Java,你就坚持!克服心魔,恒心最终会给你回报的。
Java的体系分为Java SE、Java EE和Java ME(JDK 5.0以前分别叫J2SE、J2EE和J2ME),Java的敲门砖就是Java SE了,也就是你要入门学习的内容,不论你日后是选择哪个体系领域作为发展方向,你都得从Java SE起步。
学习Java SE,打好Java基础;如果想学Java EE(对不起,我不了解Java ME,所以我无法涉及Java ME的相关内容),对于AWT、Swing是否要学习呢,我个人是觉得还是要知道其所以然的,特别是其事件处理模式,我强烈建议初学者一定要弄清楚,其他具体的开发就不一定要全面掌握了,毕竟AWT、Swing方面的内容足够用几本大部头的书才能描述详尽;当然,如果你的工作就是做 AWT、Swing开发,那就另当别论了。
I/O、Thread都是基础之一。
4. Java EE学习之路
学习了Java SE,还只是完成“万里长征”的第一步。
接下来选择学习Java EE或是Java ME(或者你还想不断深入学习Java SE,只要你喜欢,你可以一直深入下去,就像前面所说的,我不会讲到Java ME的学习);估计选择Java EE方面的学习者会多一些,Java EE所涉及技术非常多,考虑到初学者的接受程度,我会尽量从最常用的角度来介绍。
学习Java EE,在开发环境上不建议再用文本编辑器,我感觉NetBeans 5.5(目前最高正式版本)很适合初学者,我个人也很喜欢NetBeans,如果你喜欢用别的IDE如Eclipse,都没问题,看自己喜欢吧。
4.1 学习JSP/Servlet
Java EE最高版本目前是5.0版本。
在Java EE中,首先要学习JSP/Servlet(结合Tomcat、MySQL)技术,建议JSP1.2/2.X的知识都要掌握,毕竟现在很多的在用系统都还是基于JSP1.2,学习JSP,还必须掌握一些外延技术,如:你还得掌握HTML基础知识,最好再掌握些JavaScript(目前正火的AJAX技术之一)、CSS的技术,而了解XML是必不可少的(至少描述性配置信息是通过XML来描述的)。在学习JSP/Servlet过程中,应该结合学习 JDBC、数据库开发技术,毕竟绝大多数Java Web项目都是和数据库紧密结合的。
4.2 学习数据库开发技术
这里我想重点说一下数据库开发技术,数据库技术是做业务系统必备技能,Java Web开发人员最低程度都应该掌握SQL语句的使用!数据库技术大体可分为DBA技术和数据库开发技术,对于开发而言,应侧重数据库开发技术,而数据库基本操作,也是要掌握的。常用数据库有DB2、Oracle、SQL Server、MySQL等,你可以结合实际需要,选择一种数据库,并花大力气掌握其开发技术。
记住,学习数据库开发技术和学习Java EE,是相对独立的,你可以在学习JSP/Servlet的同时,学习数据库开发技术(如SQL语句等),或者先学数据库开发技术,之后再学习JSP/Servlet。
4.3 学习Java EE其它开发技术
再往后,可以学习一些EJB的知识,目前EJB最新版本是3.0,其和前面的2.X版本相比,有较大不同,考虑到目前EJB 2.X还有很大的应用市场,建议结合学习EJB 2.X/3.0。在学习EJB过程中,应同时掌握一种企业级应用服务器的使用(如 WebSphere、Weblogic、Sun Applcation Server或JBOSS等,目前Sun Applcation Server 9.X和JBOSS都可支持EJB 3.0)。
之后的学习中,再逐渐扩展到其他Java EE技术。
5. 之后
等你对Java EE有些感悟的时候,你自然就会想不断扩展你的知识面,这时候你可以学习Spring、Hibernate,以及各种Web框架(如Struts、JSF、Webwork或是Tapestry等)。
随着技术、经验的不断积累,你会逐步关注分析、设计等更高层次的知识,这时候,你可进一步学习相关的UML、模式等知识(积累了一定经验,你就可以安排自己学习这些知识了)。
6. 小结
永远记住:自始至终,实践是学习Java技术历程中极其重要的一环。脱离了实践,是学不好技术的!
Java学习、实践之路依然没有银弹,况且一步步走来,要学的东西很多,勤奋是金!
善于利用Internet上众多的资源,多吸取些别人的经验。
目前关于Java的争论很多,如“Java正走下坡路”、“Ruby必将取代Java”等论点甚嚣尘上,但正如我前面所言,这是一种浮躁的表现,Java的前景非常好,特别是Java开源以后!就让他们去吵去吧,掌握了Java,你就掌握了当前最火的技术。
“梅花香自苦寒来”,当你掌握了扎实的Java开发基础,你就能把手中的这把“屠龙刀”、“倚天剑”舞得风声水起!那时,你一定会有一种成就感。
以上,你大概了解应当如何学习Java了么?
㈣ linux中常用编译器是什么
Linux 下可用的编译器有 GCC、EGCS 和 PGCC,其中最常用的编译器便是 GCC。
GCC 起初是 GNU 推出的 C语言编
译器,用于类 Unix 系统下的编程,所以名为 GNU C Compiler 。随着众多自由开发者的加入,GCC
发展迅速,如今已成为一个支持众多语言的编译器了,其中包括 C、C++、Ada、Object C 和 Java 等,以至于 GCC 开始被扩展为
GNU Compiler Collection ,也就是“GNU 编译器集合”的意思。
GCC用法:
1、GCC基本用法及其选项
gcc 或 g++ 的用法跟参数含义几乎一样,他们最基本的用法是:
2、只编译子程序(-c)
3、产生目标文件(-o)
4、附加调试信息(-g)
5、多文件编译
6、连接库文件。