混世魔头
原帖由 @SONIC3D 于 2017-10-25 01:18 发表 首先从扩展芯片如何扩容说起: FC是8位机,CPU6502,但地址总线是16位,所以ROM的寻址范围是0x00000xFFFF,别以为16位地址空间就很多了,这加起来也就是64k字节,并且实际上之后0x80000xFFFF这后一半才是留给卡带内游戏程序的,也就是只有32k字节,这种容量是很难做大容量的游戏程序的。 那么一种最典型的扩容思路,就是把这32K分成两半,指向2个不同的16K的ROM数据,分别从0x8000和0xC000处开始。当执行前半个ROM数据中的程序时,通过程序中的逻辑,可以在需要的时刻,把另一半16K的数据换成他想要的,这个更换操作其实就是卡带内的一个硬件芯片来完成,程序员只要通过编程接口告诉它“请帮我把卡带ROM内的第n片区块映射到0xC000去”,这样,主机再访问0xC0000xFFFF内的数据时,内容实际已经是变化过的了,变为了卡带内真正大容量ROM芯片中的第n片区块内的内容。 通过这样用主机外部的硬件(在卡带内)去不断地更换本来应该永远不会变的ROM数据,曲线救国,FC游戏就不再仅限于32k了。而这种卡带内专门负责切换的ROM片区的芯片,因为本质上只是完成把某某地址映射到某某地址这样的工作,所以就统称为Mapper,也就是映射器。 然后是图形硬件的扩展: 知道了ROM程序部分如何实现大容量,怎样作图像上的扩展也就很好理解了,因为用的也是映射器的思路。 FC的PPU也就是俗称的显卡,是一块2D显卡,软件通过程序设置特定的参数表,让这块显卡去直接访问特定地址范围中的美术数据块(俗称的Character ROM区域),最后将画面以一行行像素阵列形式输出到主机内的视频信号编码器,然后编码成模拟的视频信号给电视。 这就使某些机能局限,限制了画面表现,比如硬件实现的卷轴背景层中的内容不能变化。那如果要变呢,按通常方式那就在那个位置放一个精灵(Sprite)咯,但因为是2D图形加速硬件,精灵也是通过对显卡的精灵属性表进行设置,才能画到画面上,你多占用一个,游戏中真正需要精灵角色的地方可能就会受到影响,比如魂斗罗,你的第一关背景会动的树叶如果都用Sprite实现可以么?可以,但画面内的子弹、敌人、炮台的同屏总数可能就要减少。另一个问题是,FC的2D显卡,同一个扫描行上只能画有限个Sprite,如果多了,就会部分不可见,也就是那种常见的闪烁情况,用来做魂斗罗的动态树叶不合适。 但是如果卡带内有一个硬件,专门定时把树叶的美术数据地址内的数据不断几个不同的美术数据间循环替换,就可以完成这个动画序列帧的工作,并 ...
查看详细资料
TOP