FC游戏机的工作原理是怎样的
发布日期:2022-03-08 21:57 点击次数:147
扼要的写一下显示部分的技术原理,尤其是设计缘由和精妙之处,尽量使外行人也能看懂:(一开始是预备知识,我至少假设读者理解二进制,二进制位bit,字节byte,十六进制表示等)显示的基本单元是像素(Pixel),我们看到的几乎所有显示器显示的东西都是许多像素组成的,可以把它们想象成一个个小方格,整齐的排列在显示器上:比如这幅Lena局部经过放大后,可以看出每个像素就是显示一个色彩的方块。当今我们常见的显示调色有256色,或者真彩(True src="/uploads/allimg/220408/22441R236-1.png"/>按照今天的显示技术来看,FC的彩色技术简直就是奇技淫巧大集合。只有2KB的显存和2KB的主存,基本完全无可能装下彩色图像。(NES src="/uploads/allimg/220408/22441T414-3.png"/>图中最小的格子(所有明暗线分割出的)即一个cell或tile,四个tile组成一个block(仅亮线分割出的)。图中一共用了10种颜色。你绝对找不出用了超过4种颜色的cell。再看一个我顶我顶:编码后的cell表将存储在显存所谓name src="/uploads/allimg/220408/22441QS0-5.png"/>FC第二个高明的地方在于领先时代的滚屏技术,由于PPU内部有两个(镜像后是四个)name table来存储cell表信息,我们可以一直预先存储着超过显示部分的内容,在玩家或者程序触发滚屏操作后,通过向两个寄存器PPUSCROLL和PPUCTRL写相关信息,即可移动游戏镜头。在FC之前的主机,滚屏操作几乎都要覆写整块屏幕,代价高昂。FC的出现同时使得动作、射击型游戏得到极大发展。最后一个部分是游戏中运动的Sprite,存储于显卡的特定内置存储区域,通常单个大小为8x8或8x16,我们看到的主角们大都是多个Sprite拼到一起的,比如Mario实际上是4个Sprite拼出来的,只是在程序中保证不会散架。Sprite的显示是覆盖背景的,无论背景如何设置,在PPU进行Sprite探测后都会将对应位设置成Sprite的色彩。最后,btw,基本上所有的FC/NES开发资料都能在NES dev和其附属wiki上找到,只是没有相关专业知识可能比较难啃。国人的《任天堂游戏编程探秘》一书总的来说还是比较详细的,然而很多关键之处却语焉不详,且花了很多篇幅教怎么写代码。对于外行来说还好,对于专业人士就基本无用了。更重要的是,这本书几乎没有讲任何Rationale的东西,对于真正的学习是灾难性的。