» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


发新话题
打印

呵呵

引用:
原帖由 燕山隐士 于 2017-10-24 23:00 发表
posted by wap, platform: Android
学习机最后的魔改版本 裕兴学习机 把显存给加到了1m 直接实现了同屏16色 fc卡带有很多接口可以实现扩展功能 虽然只有一条pcm通道 但是卡带如果愿意 可以不计容量的输出复杂音乐  总 ...
首先从扩展芯片如何扩容说起:
  FC是8位机,CPU6502,但地址总线是16位,所以ROM的寻址范围是0x0000-0xFFFF,别以为16位地址空间就很多了,这加起来也就是64k字节,并且实际上之后0x8000-0xFFFF这后一半才是留给卡带内游戏程序的,也就是只有32k字节,这种容量是很难做大容量的游戏程序的。
  那么一种最典型的扩容思路,就是把这32K分成两半,指向2个不同的16K的ROM数据,分别从0x8000和0xC000处开始。当执行前半个ROM数据中的程序时,通过程序中的逻辑,可以在需要的时刻,把另一半16K的数据换成他想要的,这个更换操作其实就是卡带内的一个硬件芯片来完成,程序员只要通过编程接口告诉它“请帮我把卡带ROM内的第n片区块映射到0xC000去”,这样,主机再访问0xC000-0xFFFF内的数据时,内容实际已经是变化过的了,变为了卡带内真正大容量ROM芯片中的第n片区块内的内容。
  通过这样用主机外部的硬件(在卡带内)去不断地更换本来应该永远不会变的ROM数据,曲线救国,FC游戏就不再仅限于32k了。而这种卡带内专门负责切换的ROM片区的芯片,因为本质上只是完成把某某地址映射到某某地址这样的工作,所以就统称为Mapper,也就是映射器。


然后是图形硬件的扩展:
  知道了ROM程序部分如何实现大容量,怎样作图像上的扩展也就很好理解了,因为用的也是映射器的思路。
  FC的PPU也就是俗称的显卡,是一块2D显卡,软件通过程序设置特定的参数表,让这块显卡去直接访问特定地址范围中的美术数据块(俗称的Character ROM区域),最后将画面以一行行像素阵列形式输出到主机内的视频信号编码器,然后编码成模拟的视频信号给电视。

  这就使某些硬件机能上的固有特性,限制了画面表现,比如硬件实现的卷轴背景层中的内容不能变化。那如果要变呢,按通常方式那就在那个位置放一个精灵(Sprite)咯,但因为是2D图形加速硬件,精灵也是通过对显卡的精灵属性表进行设置,才能画到画面上,你多占用一个,游戏中真正需要精灵角色的地方可能就会受到影响,比如魂斗罗,你的第一关背景会动的树叶如果都用Sprite实现可以么?可以,但画面内的子弹、敌人、炮台的同屏总数可能就要减少。另一个问题是,FC的2D显卡,同一个扫描行上只能画有限个Sprite,如果多了,就会部分不可见,也就是那种常见的闪烁情况,用来做魂斗罗的动态树叶不合适。
  但是如果卡带内有一个硬件,专门定时把树叶的美术数据地址内的内容不断在几个不同的美术数据间循环替换,就可以间接地完成这个动画序列帧的工作,并且对FC图形硬件来说完全透明,每次画到这个树叶的时候,它并不知道那块地址的美术数据已经变了,只是按照其本职工作将其不断作为背景像素输出而已。
  可以看出原理上,这和扩充卡带程序容量的Mapper并没有区别。游戏程序只是通过这块Mapper芯片的编程接口告诉它"请帮我把某某某某4块图,按每N秒换一次的频率,置换到XXXX地址上去",那么PPU下次再引用到XXXX地址开始的数据时,就会是那4块图中的一块。
  能理解这点的话,也就能明白,从画面上说不可以达到现有游戏的画面,因为PPU没有变,所以输出分辨率永远还是FC的320x240,并且同屏发色数依然有限。但是确实是可以做出让FC播放320x240全屏视频作为背景画面这样原本机能完全不允许的事的。

  最后是声音硬件的扩展:
  这部分比较特殊,我对FC/NES不是很熟,可能下面说的不完全对。但如果我没记错,日版FC(注意是日版,美欧的不算),是把主机的声音输出数据,优先传输到了卡带插槽的一个声音信号输入引脚上,而卡带另外有一个声音信号的输出引脚,连通到主机的射频编码模块,它会作最终的音频信号编码以输出到电视。
  这样,如果一个游戏没有额外的声音处理需求,卡带直接将这根声音输入引脚和输出引脚一根线联通,主机内置声卡的声音就无改变地传送出主机了。但如果一个游戏想在音频上玩出点花来,那么就可以在卡带内搞额外的声音硬件,自己作声音的合成器,然后作可编程接口给游戏程序用,最后在这部分扩展声音输出的时候,混合上从主机内送来的那部分基础声音数据,再从声音信号的输出引脚传出去,这样玩家听到的就可以是完全超越FC本身机能的声音。
  所以理论上卡带内可以用硬件实现一个MP3播放器,当然播放出的声音还是单声道的。

[ 本帖最后由 SONIC3D 于 2017-10-25 16:10 编辑 ]


本帖最近评分记录
  • CoolingFC 激骚 +3 最骚 Rated by wap 2017-10-25 12:49
  • alexey 激骚 +1 精品文章 2017-10-25 10:40
  • dtxyy 激骚 +1 最骚 Rated by wap 2017-10-25 09:42
  • 咖啡殉 激骚 +2 恭喜发财 2017-10-25 08:28
  • coldiori 激骚 +1 最骚 Rated by wap 2017-10-25 06:18

TOP

引用:
原帖由 俄罗斯酒 于 2017-10-25 07:21 发表
posted by wap, platform: iPhone
感谢!!!
牛逼!!!


小问题:但地址总线是16位,所以ROM的寻址范围是0x0000-0xFFFF

0xFFFF这是多少?为什么是16位?
1个16进制数位正好就是4个二进制数位。所以4个16进制的数位0xFFFF,就是二进制的16位1111-1111-1111-1111,自己开windows的计算器切到程序员模式自己按几下看看就是了。



TOP

发新话题
     
官方公众号及微博