snakegtx901 发表于 2008-9-4 09:13:47

一个关于TC808系统中断的问题

帖子发错地方了...唉,一不小心发到程序语言综合版了...有人吗?

POTO 发表于 2008-9-4 09:32:23

也就是说,当你在程序中调用int$c006,或者int$c00a时,程式执行到此会检测键盘上的按键是否被按下,如果你按了某一个键,它就会把这个按键所对应的asc码存到A寄存器中。

dragon_ 发表于 2008-9-4 10:06:32

它们的区别是不是:在使用前者时程序暂停等按键,而使用后者时则程序继续运行(读键在后台)
基本是这样。使用后者时程序只检测一次当前按键,若按下,则将键值存入寄存器A中。若没有,则中断直接返回,执行下面的指令。

键值在A中就是指寄存器A了。

snakegtx901 发表于 2008-9-4 11:06:37

帖子发错地方了...唉,一不小心发到程序语言综合版了...有人吗?

snakegtx901 发表于 2008-9-4 11:13:55

哦.那像俄罗斯方块或贪吃蛇就用的是这个中断喽(我只是对这个原理不是很清楚)? 如果在BASIC中用这个中断,那寄存器A中的键值怎么读?

snakegtx901 发表于 2008-9-4 11:15:16

比如地址是多少

POTO 发表于 2008-9-4 11:59:13

basic要想实现int$c006,直接用inkey$语句就行,要不想进行按键停顿,用判断199这个地址的值就行,199是按键asc码的映射地址,比如
if peek(199)=27 then .....

dragon_ 发表于 2008-9-4 12:03:09

用BASIC的话c00a这个中断不好使哦。
检测按键可以有多种方式的。去找个BASIC程序看一看就行了。

snakegtx901 发表于 2008-9-4 12:13:10

哦,对了,是读上次按键的值!谢谢6楼提醒!

snakegtx901 发表于 2008-9-4 12:24:08

7楼,我来试试. 可我确实不知道有哪些basic程序是边运行边检测按键(除了我上面说的两个).bas不比lav.能否提供个例子程序的名字?

dragon_ 发表于 2008-9-4 13:00:46

去GGV的下载专区找以前的BAS游戏,贪食蛇就行。

snakegtx901 发表于 2008-9-4 14:14:38

哦,好的.不过6楼,你说的有问题.PEEK(199)后跟的值应该是键盘的映射值,而不是按键的ASC值.

snakegtx901 发表于 2008-9-4 14:15:55

另外,谢谢两位的点拨.

snakegtx901 发表于 2008-9-4 15:18:04

我试了一下.用input读按键ASC码与用peek(199)读上回按键的值是不一样的.

POTO 发表于 2008-9-4 16:39:50

用input读按键?输入的是大写字母还是小写字母?

dragon_ 发表于 2008-9-4 16:55:16

二者之差为128.不过用input读键实在不是什么好方法。

snakegtx901 发表于 2008-9-5 07:46:30

对不起,打错了.是INKEY.哈哈

wehiue 发表于 2008-10-1 23:00:56

没注意,回错了区,我重回
在GVBASIC中不用调用中断,用peek就行
执行以下这段代码就明白了:
10 LOCATE 1,1: PRINT PEEK(191);" ";PEEK(192)
20 LOCATE 2,1: PRINT PEEK(193);" ";PEEK(194)
30 LOCATE 3,1: PRINT PEEK(195);" ";PEEK(196)
40 LOCATE 4,1: PRINT PEEK(197);" ";PEEK(198)
50 LOCATE 5,1: PRINT PEEK(199);
60 GOTO 10
191~198显示的是当前按下的键的扫描码
199显示的是最后按下的键扫描码
在BASIC中INKEY$相当于INT $C006
可以使某一变量等于INKEY$,如:W$=INKEY$、W=ASC(INKEY$)
W$、W中的值则为按键值

[ 本帖最后由 wehiue 于 2008-10-1 23:02 编辑 ]
页: [1]
查看完整版本: 一个关于TC808系统中断的问题