有没有办法删除“getKey”的输入滞后?

时间:2014-12-19 03:51:40

标签: ti-basic

我最近决定尝试使用基本编程,而我正在玩getKey;我注意到它在第一次输入后有1s~输入滞后。这是内置在计算器中,还是可以更改?

4 个答案:

答案 0 :(得分:4)

我认识到上面的“快捷键”代码;)(我是原作者,非常高兴看到它传播开来!)。

无论如何,这是我对该主题的低级知识:

操作系统使用所谓的中断来处理读取键盘,链接端口,USB端口和运行指示器等。中断只是软件代码,没有硬件实现。所以它是硬连线到操作系统而不是计算器。

TI使用的代码的要点是,一旦它读取按键发生,它会将计数器重置为50,并且只要用户按下该键,它就会减少。一旦计数器达到零,它就会告诉getKey将其识别为新的按键,然后将计数器重置为10.这会导致初始延迟比后续延迟更长。

TI-OS允许第三方“钩子”跳入并修改getkey进程,我在另一个更复杂的程序(Speedy Keys)中使用了这样的钩子。但是,在BASIC程序执行期间永远不会调用此挂钩,除非在暂停或菜单(命令,它没有太大帮助。

相反,我们可以做的是设置一个修改getkey计数器的解析器钩子。或者,您可以使用上面的QuickKey代码,也可以使用要求您下载第三方应用程序的Hybrid BASIC。其中一些应用程序(BatLib [由我],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文件,展示了如何制作这样的程序:

Visual example of inputting assembly code onto a TI calculator

您需要在主屏幕上或主程序的开头运行一次程序。在此之后,所有getKeys都没有延迟。

答案 1 :(得分:1)

我在夏天尝试使用Ti-84时也自己弄明白了。这种滞后不能改变。这是内置于计算器中的。我认为这是因为ti-84中使用的微芯片是1984年制造的Intel Zilog Z80微处理器。

答案 2 :(得分:1)

遗憾的是,这只是计算器的低效率。 TI-basic是一种相当高级的语言,易于使用,因此不是非常高效或快速。特别是在输入和输出方面,即打印消息和获取输入。

答案 3 :(得分:1)

快捷键

:AsmPrgm3A3F84EF8C47EFBF4AC9

这是一个getKey例程,它使所有键重复,而不仅仅是箭头和重复之间没有延迟。密钥代码不同,因此您可能需要进行试验。