+OLD CS1 Posted February 18, 2018 Share Posted February 18, 2018 The speed of TI BASIC can sometimes lend itself to a timing loop. Say you need to reduce a score every second, depending upon what needs to be done the loop can amount to a second: check for a key-press or joystick motion, decrement the timer, play a short tone, check the timer has not reached zero, jump back to the top of the loop (for a FOR/NEXT, however you want to do it.) Compiled BASIC is far too fast for this to work unless you can figure out how many times the loop can run within the required time, or maybe a CALL SOUND as a NOP to take up the extra time. Has anyone yet developed a sure-fire way to keep time in compiled BASIC or Extended BASIC? I just did a quick search of topics with a few keywords and did not turn up anything. Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted February 18, 2018 Share Posted February 18, 2018 (edited) From the compiler manual: One frustration in developing an XB program intended for compilation is that is can be rather tedious to adjust the speed of the gameplay. You try a value in a FOR/NEXT loop, save the program, compile, assemble, load, only to find that it is too fast. Then you go back to XB, try a larger value, repeat the process; find that it is still too fast, try another value, etc, etc. If you are using XB256 to develop the game there is an easy way to streamline the process. Let's say you are working in screen2. All you have to do is set up a “hot key” to go to a diagnostic menu in screen1, where variables can be modified without disturbing screen2. When done simply return to screen2 and resume where you left off. In the simple demo program below, lines 100-200 define a ball and put it on the screen. The ball can be moved with the ESDX keys. If you press <Fctn 1> line 160 will go to line 210 where the delay value can be modified. After pressing <Enter> control returns to the main program loop with the modified delay value. 100 CALL LINK("CHAR2",65,"3C7EFFFFFFFF7E3C"):: R=12 :: C=16 :: DLY=1 110 CALL LINK("SCRN2") 120 CALL HCHAR(R,C,65) 130 FOR I=1 TO DLY 140 CALL KEY(0,K,S):: IF S=1 THEN 160 150 NEXT I 160 IF K=3 THEN 210 170 RN=R-(K=69)*(R>1)+(K=88)*(R<24):: CN=C-(K=83)*(C>1)+(K=68)*(C<32) 190 IF RN=R AND CN=C THEN 130 200 CALL HCHAR(R,C,32):: R=RN :: C=CN :: GOTO 120 210 CALL LINK("SCRN1"):: CALL CLEAR :: INPUT "DELAY VALUE? ":DLY :: GOTO 110 ********************************************************************************************** Another way to fine tune a timing loop is to add line 1 to the XB loader program: 1 CALL HCHAR(1,1,20). If the compiled program has a line with CALL GCHAR(1,1,DLY) then you can retrieve a delay value to try out. If you are scanning the keyboard you will have much better keyboard response if you set up a loop to scan the keyboard repeatedly rather than scanning it just once and then using DELAY or CALL SOUND to slow things down. After scanning, say 50 times then you go on if there is a new key or keep scanning if there isn't. I will be adding a routine to XB256 and the compiler called SYNC which will let you determine how many 1/60 second ticks of the clock to use before repeating a loop. You would set it up with CALL LOAD(-1,3) for 3/60 second and then program a loop with CALL LINK("SYNC") at the end of the loop. SYNC takes into account the length of the loop so you can take 3/60 of a second per loop which is different from DELAY which adds a delay of known time after the loop. Since I have to repost the package to fix the IF THEN ELSE bug I will include this as well. Should be before the end of the week, and probably sooner. Edited February 18, 2018 by senior_falcon 2 Quote Link to comment Share on other sites More sharing options...
kl99 Posted February 20, 2018 Share Posted February 20, 2018 I don't have the code infront of me but there is the VDP interrupt and a timer that count downs. If it is 0, VDP interrupt is executed. This you can use for timing things. This will stay true after compilation. Just peek for the value of this timer and wait with any Basic execution unless it has a certain value. If it has the value then you continue your Basic code. 2 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.