【原创】NES第七波:制作NES的具体流程和学习大纲
有网友看了前面六波教程,还是要跟我说一句:“不名所以,寸步难移。”
我打坐想了整整五分钟,还是问了问群友。得到一个结论,“我将NES的战场藏起来了!”
原来是我的不对,那么接下来,我就为大家打开战场之门。
。。。
一、制作NES的具体流程:七步
第1步:设计画面,【还有别的,例如BGM、人物。。。这些对于初学者不重要。初学者就整个HELLO WORLD。那么你倒是要想想这串写在哪个位置。找个方格本画一画,定个坐标系。】
第2步:准备素材,【我们只说HELLO WORLD用的素材吧,说多了也是白说。你会问这是字母呀,怎么要素材。呀!NES不是电脑,不自带字体呀。】
第3步:选一款编译工具,学会用法。【后面写代码也是按对应的编译工具去写,总是会有区别的,不怎么通用。只有百晓生明白每个编译工具的区别,初学者还是只学一种。我推荐学两种(互补长短)。】
第4步:撸代码。【呀!你不会,那学呀,我下面会注解一下HELLO WORLD代码。】
第5步:测试代码。【天下最无趣的事儿。】
【你又要跳出来问我,说好的BGM呢,能不能用mp3或wav。素材是不是用jpg或bmp。我说你想多了。NES那个年代,MP3的爹妈还没认识呢。同理jpg也是想多了。等搞明白了显示的办法,我再说说音乐的事。音乐只能第3方软件造NSF,而用作NES的BGM,要学会看代码才行。而且代码庞大。音乐是以数据的方式存在的。】
第6步:编译与文件合并。【代码编译之后只不过是PRG【程序BIN】,还要合并NES的文件头和素材。初学者对"NES文件头"的认识不需要太多。】
第7步:测试测试,上模拟器!【有任何不满意或者意外,或者失败。回到第4步。】
二、学习大纲:下面是战场地图(必须依着大纲次序学习,不要跳级。心急也要学半桶水才行。)
1 学习二进制。有人学会二进制对十进制的转换就叫唤着自己学会了二进制。无语。你感授到二进制的力量没有?你见识过图灵机的代码没有?你知道图灵机是怎么工作的?二进制是与逻辑运算有等效关系的。那就是说,也要学一学逻辑运算。对于逻辑简化的过程还是要学一学。
2 学习逻辑门电路。停停,学编NES游戏与门电路有什么关系?有两重关系,一是程序的算法,有很多灵感来自门电路,门电路与程序是同源的。二是NES程序是无API的、是无系统的,所以是最底层,必然与硬件有接触,而且必须写驱动硬件的代码。(害怕了吗?)
3 学习6502汇编的寻址和指令。呀!我们的C语言呢?谁谁谁不是说好了可以用C语言的。那你去找那个谁。我在NES上还玩不转C语言。怎感觉绕着圈写汇编。还不如我的C#。等学会了可以跟我去用C#玩转NES。
4 学习iNES结构和文件头。学会怎么拼接各个数据块。PRG(程序BIN)也可以看作一个数据块。文件头是模拟器用来解读NES的数据包。包含NES文件的一些特征和数据块信息。
5 学习PPU。这是一个硬件。你要学会驱动它。去实现显示一个画面或大标题。如果说CPU和它的总线组成一个小电脑,那么PPU和它的从属总线也组成一个小电脑。显示的方法全都在于如何驱动PPU。你要问我要驱程,还要问问能为能升级?说笑了。得你自己去写呀。要深入的话要从NES的电路图中的总线分配芯片的接线方法。我自己编了一个软件来分析。。。PPU的显示数据怎么编的?
6 学习手柄的驱动代码。呀手柄就一个4021门电路。是类似SPI的传送方式。要理解的话要依靠NES的电路图才能明白。
7 学习6502CPU的内部运行,还有中断。主要学NMI。WHAT什么什么英文。这个在学6502汇编时,从6502CPU的资料中有说过其运行过程。
7 学习APU,这是音乐生成器。你也要学会驱动它。哈哈,没听说过音乐要生成的,不是录录录的吗?呀!MIDI与电脑声卡怎么工作的?弱弱的说,不是调音的吗?嘻嘻。算了。
8 学习切页和Mapper,这又是什么。6502只有8位,它的地址总线是16位,那么总容量(RAM+ROM)=64KB。就这么点儿,切页是替换的意思,换一页新的来,以空间就大了,就好比一眼只能同时看一本书的两页,如果翻页来看就可以看完整本书了。Mapper是文件头的一个参数,它指定了切页的类型。还有一些别的扩展功能。其实Mapper是指代卡带的类型。
9 学习游戏的组织,上面说的只是硬件驱动的基本知识,让你能够玩得转NES。但是编一个游戏,那就是游戏在玩转你了。例如,怎么让一个主角站地图的地面上,不是站在空中,而不是一下跌穿地板,再从上面跌下来。怎么判断遇怪,怎么处理弓箭、子弹或炮弹。
到这里,一个基本的游戏就出现了。例如:贪吃蛇。
10 滚屏、四向无穷迷宫、分裂屏幕显示、超过固有颜色限制、背景后面的鬼影、汉字制作与显示、字库、汉字输入、动力音乐等怎么做到的?呵呵,是不是想得太远。从未入坑到弃坑。
看到这里,我确定有90%以上的人要弃坑了。这个数字我觉得写小了。
这就是战场。看一眼就会吓跑的战场。
。。。
我本想慢慢将NES的点滴写出来,不过我写得太慢,又没有太多时间。我想着我网盘有那么多资料。就算不等我的教程,也可以从我的网盘找到足够自学的东西。。。
写教程已不是第一次了,我写过好几次了,都是写前几篇就没有了。。没写完的原因很简单,一桶水是倒不出完整一桶水的。我只有半桶,那只能倒出1/3就很好了。有时想着码字,想着想着就想远了,最后得一结论:还没学深入。
维京猎人 2021-7-20