红白机(又叫FC,美国叫NES)
开发语言,早期的码农们用的是6502的CPU上的汇编语言ASM
cc65 是 65(C)02 系统的完整交叉开发包,包括功能强大的宏汇编程序、C 编译器、链接器、库管理员和其他几个工具。

cc65 对许多旧的 6502 计算机(包括

以下 Commodore 机器:
VIC20
C16/C116 和加/4
C63
C127
煤层气 510 (又名 P500)
600/700 系列
较新的PET机器(不是2001年)。
苹果][+和继任者。
雅达利8位机器。
雅达利 2600 控制台。
雅达利5200控制台。
适用于 C64、C128 和 Apple //e 的 GEOS。
Bit Corporation Gamate 控制台。
NEC PC-Engine(又名TurboGrafx-16)控制台。
任天堂娱乐系统(NES)控制台。
Watara Supervision Console。
伟易达创意控制台。
奥利克阿莫斯。
Oric Telestrat。
山猫控制台。
俄亥俄州科学挑战者1P。
指挥官X16。
新能泰系统Sym-1。
这些库相当可移植,因此为其他6502创建版本应该不会有太多的工作。

开发工具:

CC65编译器

CC65网站

https://cc65.github.io

项目源码

https://github.com/cc65/cc65

文档地址

https://cc65.github.io/doc/

nes相关文档地址

https://cc65.github.io/doc/nes.html

win环境的CC65安装包

https://sourceforge.net/projects/cc65/files/cc65-snapshot-win32.zip

特别注意:

网上很多资料都是 cc65-2.13.x
目前github上的版本是 cc65-2.17.x 区别还是有些的
也就是说你网上看到的很多资料都只能用 2.13才能编译通过,我目前用的是 2.17
目前看到github网站最新的版本是 2.19
实际使用 cc65 -V 显示的还是 2.18,github里面有提示这个
我使用的环境是win7 x64所以后面的图片都是基于win7的截图

首先是环境的搭建

1.下载win环境的cc65an压缩包
2.解压缩到c盘
c:\cc65\
3.修改环境变量

CC65_HOME=c:\cc65
CC65_INC=c:\cc65\include
CC65_LIB=c:\cc65\lib

编辑PATH环境变量,增加一条记录
%CC65_HOME%\bin

4.测试

开始-运行 打开cmd

输入 cc65 -V 就是查看当前版本
2018-10-24的时候版本号是 cc65 V2.17 – Git f11ae87
cc65 -h 查看帮助命令

注意:
有些东西在默默的改变着
比如:waitvblank() 改名为 waitvsync() 等待到消隐,对于老电视来说电子管扫描枪是逐行逐点扫描,一个画面绘制完成之后需要回到屏幕左上角从新绘制,这个扫描从右下角回到左上角的时间就是 v-blank,在这个时间屏幕已经绘制完一帧画面,要开始绘制新的一帧画面,这时候对显示内容进行更新,我们就能看到一帧完整的画面。如果绘制一半就更新就会出现画面显示腰斩等问题。

单行:电子扫描枪从最右边回到下一行的最左边叫行消隐或水平消隐。

一屏:扫描从右下角回到左上角叫场消隐或垂直消隐。

但是git上对这个改变很奇怪,明明是没有合并进来,最后又改了,我也就没细看这部分代码何时改变的

另外一个更新是,代码中加入了 joystick 库调用手柄按键,这样就不需要我们再为了fc按键去写函数读取按键,但是判断按键还需要我们自己写。
对应的使用方法后面的文章中已经写了。

再就是 get_tv 的函数来判断 N P制式,N是一秒60帧,P是50帧
https://happysoul.github.io/nes/