当年的Fc《魂斗罗》《玛丽》是用什么工具做的。如何反编译。

当年的Fc《魂斗罗》《玛丽》是用什么工具做的。如何反编译。,第1张

汇编和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个卡通块组成)有时还

更大,这是怎么实现的呢?

原来在实际游戏中,对卡通进行了分时控制。所谓分时控制就是在不同的时间里显示半

通的不同部分,依靠人眼的视觉惰性产生连续的感觉。如《魂斗罗》游戏中的卡通显示(两个

正面角色、敌人、发射的子d、暗堡的闭合与开启都是卡通)就是每一次中断显示卡通的二分

之一实现的。

卡通的定义 *** 作极其简单,系统规定一个卡通块由连续的四个内存单元定义,第一寸

单元指定卡通显示的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开启。

看你的情况说学完了 c 语言,那我就以你知道 c 语言基本知识为前提回答这个问题。

肯定用过 printf 函数吧?你有没有想过如果让你自己写一个 printf 函数你能不能写出来呢?

如果让你用 c 语言写一个程序存储一态睁或些奇怪的东西,比如一个图形的结构,不是数字,你怎么解决呢?

如果有一个问题摆在面前,就是说你有几千万甚至几十亿条信息,如果快速的找出来你想要的信息,如何用 c 语言弄好呢?百度,Google不就是做这件事情的么?

其实这就是说

c 语言的语法可能你知道一些,但不是全部,就像那个 printf 的变帆伍长参数问题,你能写一个函数像 printf 一样接受很多个参数么,而且识别参数的格式?

很多东西不是靠数组和变量之类的东西就能解决的早陵,需要更高级的东西来实现,那就是数据结构。

有些问题可能很简单,但是如果有一些要求或者问题本事就很难,你怎么去解决?这就是算法。

其实后面需要学的东西挺多的,编写一个像魂斗罗之类的可能必须很了解数据结构,算法, *** 作系统。简单一点可能用 sdk 就能写出一个差不多的程序。

有人说算法+数据结构就是程序,其实就是说学好基础的吧,花里胡哨的都是骗人的,各种编程方法再牛,也离不开 int,char。我说的都是这些基础知识,这些学好什么都不怕,那些什么 mfc,qt 之类的就是以壳子。内涵不好,壳子再华丽也没用。

过来人给你讲一讲,c语言其实很简单,简单到就算你精通c语言本身,都找不到工作。

学习c语言的路径:

1.玩贪吃蛇,俄罗斯方块,坦克世界,魂斗罗。。。等等fc级的游戏。用c语言的话,一天做几款都冲升是没问题的。

2玩仙剑奇侠传1,然后边看c语言的书,边给sdlpal源码建立架构图。

大致框架就是这样的,先玩游戏,然后知道流程了,想想游戏里有多少元素。然后选择架构,选择分发架构对象,最后c语言就学成了,也能做项目了。

你没发现一件事吗?看中国历史慧判誉,有很多领导,不论去哪里都能够做的很好,对的,就是学会他们的管理方法,层层解包,分发,转发,最后运到各个叶节点,这个工程就完事了。

说白了,写程序,就是造一个树。上层和中层是枝干,都是解包和转发,分发。最后分解成了最小节点,由worker 去加工。然后再打包,封装,最后就成为前段了一个产品了。

建树!!!!

赶紧点赞啊,我把编程本质都告诉你了,一般的话,你得体验个20年,才会有这种感觉的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12429601.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存