IBM PCjr程序如何实现指定时长的暂停?
在IBM PCjr BASIC中实现指定时长暂停的替代方案
问题背景
你编写的PCjr BASIC动画代码中,WAIT 1和SLEEP 1均触发语法错误,这是因为PCjr的BASIC版本不支持这两种简化的延迟用法:
- PCjr BASIC的
WAIT命令是硬件端口检测命令,语法为WAIT port[,mask],用于等待指定硬件端口的某一位状态变化,无法直接传入数字实现延迟。 SLEEP命令是后续QBASIC/MS-DOS BASIC新增的功能,PCjr BASIC不兼容该命令。
你的原代码:
10 CLS 20 PRINT "|" 30 WAIT 1 40 CURSOR 1,1 50 PRINT "/" 60 WAIT 1 70 CURSOR 1,1 80 PRINT "-" 90 WAIT 1 100 CURSOR 1,1 110 PRINT "\" 120 WAIT 1 130 CURSOR 1,1 140 GOTO 20
运行时的错误提示:
|
Syntax error in 30
Ok
30 WAIT 1
替换SLEEP 1后的错误提示:
|
Syntax error in 30
Ok
30 SLEEP 1
两种可行的替代方案
方案1:循环计数模拟延迟(简单易实现)
通过FOR-NEXT循环的空操作消耗CPU时间来模拟延迟,循环次数需要根据PCjr的运行速度调整,以下是修改后的代码:
10 CLS 20 PRINT "|" 30 GOSUB 2000 ' 调用1秒延迟子程序 40 CURSOR 1,1 50 PRINT "/" 60 GOSUB 2000 70 CURSOR 1,1 80 PRINT "-" 90 GOSUB 2000 100 CURSOR 1,1 110 PRINT "\" 120 GOSUB 2000 130 CURSOR 1,1 140 GOTO 20 ' 延迟子程序:调整循环次数可改变延迟时长 2000 FOR I = 1 TO 3000 : NEXT I 2010 RETURN
- 如果你需要不同时长的延迟,可以修改循环上限,比如
TO 1500对应约0.5秒,TO 6000对应约2秒。
方案2:基于TIMER函数的精准延迟(支持变量指定时长)
PCjr BASIC支持TIMER函数,它返回从午夜开始的累计秒数(带小数),利用这个特性可以实现精准的指定时长延迟,还支持用变量控制时长:
10 CLS 20 PRINT "|" 30 DELAY = 1 : GOSUB 2000 ' 延迟1秒 40 CURSOR 1,1 50 PRINT "/" 60 DELAY = 1 : GOSUB 2000 70 CURSOR 1,1 80 PRINT "-" 90 DELAY = 1 : GOSUB 2000 100 CURSOR 1,1 110 PRINT "\" 120 DELAY = 1 : GOSUB 2000 130 CURSOR 1,1 140 GOTO 20 ' 精准延迟子程序:DELAY变量指定延迟秒数(支持小数,比如0.5=半秒) 2000 START_TIME = TIMER 2010 DO WHILE TIMER < START_TIME + DELAY : LOOP 2020 RETURN
- 这种方法不受CPU速度波动影响,延迟时长更准确,还可以通过修改
DELAY变量的值来灵活调整暂停时间。
内容的提问来源于stack exchange,提问作者Mrredstone333
相关产品推荐
相关产品推荐

