My “big maze” program printed 2×2 character blocks along the bottom of the screen until it got to the bottom right of the screen, then the screen will scroll (and an extra PRINT is added to add a second line) and the process resets and repeats.
After William Astle provided some optimizations, it dawns on me that there was another thing we could try. Here is the code in question (removing unneeded lines and adjusting the GOTO as appropriate):
70 P=448 100 P=P+2:IF P>479 THEN PRINT:GOTO 70 110 GOTO 100
Then William suggested changing the logic it as follows:
70 PRINT:P=448 ... 100 P=P+2:IF P>479 THEN 70 110 GOTO 100
That was a very subtle change that could double (or more, or less) the speed just by not needing to parse over “PRINT:GOTO 70” every time P was NOT greater than 479 (which is most of the time in that loop).
This made me think that perhaps instead of checking for greater than 479 we could adjust the logic and check for less than 480. Something like this, perhaps:
70 PRINT:P=448 ... 100 P=P+2:IF P<480 THEN 100 110 GOTO 70
There’s really no reason for this to be any different speed, is there? GOTO (“THEN”) 100 still has to start at the top and move forward, the same as GOTO (“THEN”) 70 would.
But, in the first case, it quickly skips “THEN 70” to hit the “GOTO 100” below, every time the value is not greater than 479. That
In the second, every time the value is LESS than 480 it returns to 100 (go to top of program and search forward).
Should it matter?
Here is the logic isolated.
5 TIMER=0 10 PRINT:P=0 20 P=P+1:IF P<1001 THEN 20 30 GOTO 50 50 PRINT TIMER
And here is the other version:
5 TIMER=0 10 PRINT:P=0 20 P=P+1:IF P>1000 THEN 50 30 GOTO 20 50 PRINT TIMER
I have adjusted it to reset the TIMER at the start, and count from 0 to 1000. In each case, instead of repeating forever, it ends, printing the TIMER.
The first version looks odd because in the real version, line 30 would be “GOTO 10” to reset P and continue.
The second version would have line 20 end with “THEN 10” to reset and continue.
I just wanted to make them as close as possible.
Which one is faster?
Until next time…