我最近决定尝试 ti-basic 编程,而我正在玩 getKey;我注意到它在第一次输入后有 1s~ 的输入延迟。这是内置在计算器中的,还是可以更改?
4 回答
我认识上面的“快速键”代码;)(我是原作者,很高兴看到它传播开来!)。
无论如何,这是我对该主题的低级知识:
操作系统使用所谓的中断来处理读取键盘、链接端口、USB 端口和运行指示器等内容。中断只是软件代码,没有硬件实现。所以它是硬连线到操作系统而不是计算器中。
TI 使用的代码的要点是,一旦读取到发生了按键操作,它就会将计数器重置为 50,并在用户按住按键时将其递减。一旦计数器达到零,它会告诉 getKey 将其识别为新的按键,然后将计数器重置为 10。这会导致初始延迟比后续延迟更长。
TI-OS 允许第三方“钩子”进入并修改 getkey 过程,我在另一个更复杂的程序(Speedy Keys)中使用了这样的钩子。然而,这个钩子在 BASIC 程序执行期间永远不会被调用,除非在 Pause 或 Menu( 命令中,它不是很有帮助。
相反,我们可以做的是设置一个解析器钩子来修改 getkey 计数器。或者,您可以使用上面的 QuickKey 代码,或者您可以使用需要下载第三方 App 的 Hybrid BASIC。其中一些应用程序(BatLib [by me]、Celtic 3、DoorsCS7 和 xLIB)提供了非常快速的 getKey 替代方案以及许多其他强大的功能。
以下是设置解析器挂钩的代码。它在我的测试中效果很好!请参阅以下注释:
#include "ti83plus.inc" ; ~~This column is the stuff for manually
_EnableParserHook = 5026h ; creating the code on calc. ~~
.db $BB,$6D ;AsmPrgm
.org $9D95 ;
ld hl,hookcode ;21A89D
ld de,appbackupscreen ;117298
ld bc,hookend-hookcode ;010A00
ldir ;EDB0
ld hl,appbackupscreen ;217298
ld a,l ;7D
bcall(_EnableParserHook);EF2650
ret ;C9
hookcode: ;
.db 83h ;83
push af ;F5
ld a,1 ;3E01
ld (8442h),a ;324284
pop af ;F1
cp a ;BF
ret ;C9
hookend: ;
注意:其他应用程序或程序可能会使用解析器挂钩。使用此程序将禁用这些挂钩,您将需要重新安装它们。这很容易。
最后,如果您手动将其放在计算器上,请使用正确的列代码。这是一个动画 .gif,展示了如何制作这样的程序:
您将需要在主屏幕上或在主程序开始时运行该程序一次。在此之后,所有 getKeys 将没有延迟。
我自己也在夏天试验我的 Ti-84 时发现了这一点。这种滞后是无法改变的。这是内置在计算器中的。我认为这是因为 ti-84 中使用的微芯片是 1984 年制造的 Intel Zilog Z80 微处理器。
不幸的是,这只是计算器的低效率。TI-basic 是一种相当高级的语言,并且易于使用,因此不是非常高效或快速。特别是关于输入和输出,即打印消息和获取输入。
快捷键
:AsmPrgm3A3F84EF8C47EFBF4AC9
这是一个 getKey 例程,它使所有键重复,而不仅仅是箭头,并且重复之间没有延迟。关键代码不同,因此您可能需要进行试验。