2024年5月28日发(作者:)

上一节说的这一节要说一下NES相关的函数,由于CC65不只是为NES游戏开发

提供编译,他还为其他的一些连我也不知道(孤陋寡闻了。。。)的程序提供编译

服务,所以你在安装文件下include目录下看到的.h文件中的所有函数并不是都

可以调用。

常用的头文件

1.< nes.h>

次头文件里面定义了一些常量如颜色值,还有两个函数:

waitvblank() 用于等待垂直中断,向当于让屏幕完成此次刷新,我们可以用它

来做延时函数

get_tv() 由于得到电视的制式,一般用不到

2.< conio.h>

简单说一下里面的函数:

clrscr() 清屏

gotoxy(x,y) 将光标定位于座标(x,y)处,还有gotox(x)和gotoy(y)两个单独改

变的函数

wherex() 返回当前光标的x座标

wherey() 返回当前光标的y座标

cputc(c) 向屏幕输出字符

cputcxy(x,y,c) 向屏幕座标(x,y)处输出字符

cputs(s) 向屏幕输出字符

cputsxy(x,y,s) 向屏幕座标(x,y)处输出字符串s

cprintf const char* format, ...) 和C语言中的printf()貌似

textcolor(c) 设置文本颜色,好像不成功。。

bgcolor(c) 设置背景颜色

以上就是常用的,其他的还有几个,提醒和输入相关的函数大部分都不可用

3.< stdio.h>

只发现sscanf()有点作用,其他的和文件相关的都不可用。

在include目录下还有好多头文件,但大部分对NES都是不可用的,有兴趣的可

以自己打开看看,以上就是常用到的了。其它的如果以后用到了,我会在补充。

CC65的语法补充,CC65基本上符合C语言的规范,我目前发现的不符合之处就

是不支持位段结构体的定义,当然这不影响其他地方的使用。。

补充,颜色值:

#define COLOR_BLACK 0x00

#define COLOR_WHITE 0x01

#define COLOR_RED 0x02

#define COLOR_CYAN 0x03

#define COLOR_VIOLET 0x04

#define COLOR_GREEN 0x05

#define COLOR_BLUE 0x06

#define COLOR_YELLOW 0x07

#define COLOR_ORANGE 0x08

#define COLOR_BROWN 0x09

#define COLOR_LIGHTRED 0x0A

#define COLOR_GRAY1 0x0B

#define COLOR_GRAY2 0x0C

#define COLOR_LIGHTGREEN 0x0D

#define COLOR_LIGHTBLUE 0x0E

#define COLOR_GRAY3 0x0F

下面就来一次整体的测试吧。。。。。

修改上一篇所建立的文件为一下内容:

#include "conio.h"

#include "nes.h"

#include "stdio.h"

void delay(int i) //延时函数,传入延时参数i

{

while(i--){

waitvblank(); //等待垂直中断

}

}

void main() //主函数

{

char y=8,oy=8,i=0;

const char s[][24]={"My First NES Program"," I love NES!"," Do

you love NES?"," Yes!"}; //NES的可用RAM很有限,所以固定不变的

数据就使用const来声明吧

bgcolor(COLOR_GREEN); //设置背景颜色为绿色

while(1){ //无限循环

delay(20); //延时

gotoxy(6,oy); ///跳到上一次的位置

cprintf(" "); //清除上一次的文本

y++;

gotoxy(6,y); //跳到指定的位置

cprintf("%s",s[i]); //输出文本

oy=y; //记录当前的行

i++;

if(i>3){ //当四句话都循环完了就重新开始

i=0; //i复位

y=8; //行复位

}

}

}