本教程是关于使用NESASM汇编器为任天堂娱乐系统(NES, Nintendo Entertainment System)编程的。该教程由浅入深,简化了NES汇编学习过程。在进一步尝试前你几乎必须了解另一种汇编语言,因为本文假设你(哪怕一丁点)基本汇编常识是具备的。例如了解GBA或者Intel x86汇编将对理解基础有很大帮助。祝你在学习NES汇编编程的旅途中一切顺利!
第一天——开始NES汇编
第二天——源代码文件结构
第三天——关于NES编程
第四天——制作并载入调色板
第五天——显示主角
第六天——跳转和按键处理
第七天——使用内存
第八天——比较
第九天——运动主角程序
第十天——主角DMA
第十一天——JSR指令
第十二天——VBlank和终端
第十三天——背景
第十四天——声道1-3
第十五天——噪声声道
第十六天——位掩码/位翻转
第十七天——主角属性字节
第十八天——背景滚动
第十九天——简化大的载入
第二十天——使用SRAM
第二十一天——堆栈
第二十二天——映射器2
第二十三天——属性
第二十四天——按键的完整字节
第二十五天——其他指令
以下内容为译者所述。
首先讨论下为什么要学习NES编程?这样一个过时的技术,学会了又不能升职加薪,何必浪费时间去研究呢?
我认为学习的动机有以下三种:
1. FC游戏记载了太多儿时乐趣,学习也是重温的过程(这对80后很有号召力);
2. 通过了解FC设计,可以更好地将软硬件知识结合在一起。我们的专业课都是分立的几个点,数字电路、单片机、汇编语言、体系结构、图像处理、音频处理、编译原理、高级程序设计语言、数据结构、算法……只有通过这样一个完整的项目我们才能知道扎实的专业知识能创造多么经典又好玩的游戏产品;
3. 对于一些游戏,如果能利用已有知识,Hack得到一个新版本(无限生命、强攻击力、隐藏角色、隐藏物品……甚至可以自己编写机器人实现通关),多有成就感!如果你对原始的NES游戏不满,比如分辨率低、色彩单一、卡通造型丑陋,完全可以利用自己的双手创造一个更好的版本;
接下来讨论学习的方向。我认为宏观上可分为两个方向:自底向上和自顶向下。这符合软件工程学。
自底向上,即先学习硬件基础,摸清基本原理如程序装载,PPU,手柄,音频,自己编写相应的库作为基础模块,再设计图形资源、音乐资源,整合在一起形成新的应用层,接着开发游戏场景、情节,逐渐形成新的游戏。这个难度会比较大,周期也很长,而且程序需要反复测试,debug会比较痛苦。
自顶向下,即从一个现有的游戏入手,通过反汇编、解析资源、分析算法,学习内在的各种库(不用自己写),获取大量游戏素材(不用自己设计),学习程序流程结构和游戏的规则(对于设计新游戏会有启发),逐步细化,得到自己想要的东西。这个难度较小,可以满足不同品味的人。