1

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

4

4 回答 4

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,展示了如何制作这样的程序:

将汇编代码输入到 TI 计算器的可视化示例

您将需要在主屏幕上或在主程序开始时运行该程序一次。在此之后,所有 getKeys 将没有延迟。

于 2015-03-31T15:35:56.880 回答
1

我自己也在夏天试验我的 Ti-84 时发现了这一点。这种滞后是无法改变的。这是内置在计算器中的。我认为这是因为 ti-84 中使用的微芯片是 1984 年制造的 Intel Zilog Z80 微处理器。

于 2014-12-19T04:28:17.307 回答
1

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

于 2014-12-20T02:42:23.410 回答
1

快捷键

:AsmPrgm3A3F84EF8C47EFBF4AC9

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

于 2015-03-03T13:26:50.390 回答