编译器:CC65
下载地址:https://cc65.github.io/
这次的代码来自cc65的samples目录下的hello.c 并做了修改和注释
通过查看源码可以看到里面支持的机器类型
1
2
|
#if defined(__NES__) || defined(__PCE__) || defined(__GAMATE__)
NES PCE GAMATE
|
通过 cmd 命令将 c 编译成 nes 文件
1
|
cl65 -t nes -o demo.nes demo.c
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <joystick.h>
static const char Text [] = "Hello world!";
// 2个临时变量,防止按住了按键频繁输出造成的闪烁
unsigned int p1,pt1;
// 屏幕四边划线,原始代码暂时没处理
void drawline(void){
unsigned char XSize, YSize;
// 清屏,光标移到左上角
clrscr ();
// 获取屏幕尺寸,传入地址相当于让函数给这2个地址赋值
screensize (&XSize, &YSize);
/* Draw a border around the screen */
//顶端线
cputc (CH_ULCORNER);
chline (XSize - 2);
cputc (CH_URCORNER);
/* Vertical line, left side */
cvlinexy (0, 1, YSize - 2);
//底端线
cputc (CH_LLCORNER);
chline (XSize - 2);
cputc (CH_LRCORNER);
/* Vertical line, right side */
cvlinexy (XSize - 1, 1, YSize - 2);
// 屏幕正中间显示 hello world 文字
// 就是将光标移到
gotoxy ((XSize - strlen (Text)) / 2, YSize / 2);
cprintf ("%s", Text);
}
void main (void)
{
// 屏幕颜色,黑底白字
(void) textcolor (COLOR_WHITE);
(void) bordercolor (COLOR_BLACK);
(void) bgcolor (COLOR_BLACK);
// 屏幕四边划线(前面的方法)
drawline();
// 初始化手柄
joy_install (joy_static_stddrv);
while (1){
p1 = joy_read (JOY_1);
// start 和 select 一起按的时候跳出循环,相当于重启
if(p1==12){break;}
// p1的案件一直没变的情况不做响应
if(p1==pt1){continue;}
pt1=p1;
// 输出按键对应的数值,因为长短不同需要空格覆盖原有位置的字符
gotoxy(1,1);
cprintf(" ");
gotoxy(1,1);
cprintf("%d",p1);
}
// 前面使用break 跳出循环会走到这里
gotoxy(0,0);
cprintf("over");
}
|
通过这个demo我们可以获取到按键对应的数值
按键 |
二进制 |
十进制 |
16进制 |
A |
00000001 |
1 |
0x01 |
B |
00000010 2 |
0x02 |
|
select |
00000100 |
4 |
0x04 |
start |
00001000 |
8 |
0x08 |
上 |
00010000 |
16 |
0x10 |
下 |
00100000 |
32 |
0x20 |
左 |
01000000 |
64 |
0x40 |
右 |
10000000 |
128 |
0x80 |
连发 A 和 B 就是这个数字频闪 0和对应的1,2两个数字
解释:
其实这个按键的取值是从默认的地址获取一个 16进制的值
比如右这个值最大对应的
十进制 128
16进制 80
二进制 10000000
同理左的二进制 是 01000000
如果全按了就会显示 11111111
当多个按键一起按的时候相当于累加 比如 AB一起按输出的就是 3
截图是我用qq的 ctrl+alt+a 同时按着下(s) 相当于同时按了 左和下 显示的就是 96
![](/images/2022/01/3addfd4c1a9a71233d174c82697264b1.png)