96 lines
6.4 KiB
Plaintext
96 lines
6.4 KiB
Plaintext
|
|
A treatise on the efficient and elegant use of Basic on the TRS-80 MOD-100
|
|
|
|
by Richard Horowitz [75735,677]
|
|
|
|
_____________________________________________________________________________________________________________________
|
|
|
|
One of the greatest computers ever created is the one that I am using now to write this essay. Of course, it is our
|
|
favorite baby, the MOD-100. It has a number of features that I have been used to for the past several years on larger
|
|
commercial computers, i.e. a real-time interrupt driven clock, the interrupt structure itself, a typeahead buffer, a
|
|
device structured I/O, etc.
|
|
|
|
I could rhapsodize a great deal more, but all of us know what a great machine this is. Withall, there are a number of
|
|
shortcomings that exist as a result of creating a totally portable machine. The most aggravating of these is the shortage
|
|
of memory. For the last five years, I have been programming on a DEC PDP-11/03, which also suffers the same deficiency. As
|
|
a consequence, I deve-loped a number of strategies to cope with too much program in too little memory. In the process I
|
|
also discovered methods of speeding things up a bit.
|
|
|
|
Finally, I have uncovered a number of "features" unique to our own favorite that can be useful in programming this
|
|
machine.
|
|
|
|
Speed & Conservation of Memory
|
|
|
|
Every KEYWORD, quoted literal, punctutation mark, occupies a byte in memory. Every line number uses two bytes for the
|
|
number and a "Null" byte that terminates each line. Each space takes a byte. Variables use a two-byte pointer to the area
|
|
in memory that the variable is stored in. In addition, each type of variable uses different amounts of storage space.
|
|
Integers -require 2 bytes, reals - four bytes and double precision - eight bytes. Strings take one byte for each character
|
|
and they are allocated dynamically. This is all background for the following space & time saving tips:
|
|
|
|
1: All variables should be typed at the beginning of each program. Use DEFINT, DEFSNG, etc. Even string variables should
|
|
be typed because the "$" used with each such variable takes a byte of storage.
|
|
|
|
2: Use integers wherever possible, especially in counting loops. The time savings is dramatic. Integers are 2 1/2 times
|
|
faster than the default of double-precision. Reals are only 25% faster than D.P.
|
|
|
|
3: Eliminate the variable argument on the NEXT portion of FOR/NEXT loops.
|
|
|
|
Here is a real kicker - besides the saving of one byte of storage for each such occurence, integers are 60% slower, reals
|
|
are 50% slower and D.P. is 80% slower when you specify the variable than when you simply specify NEXT.
|
|
|
|
4: Eliminate final quote marks on all literals that appear at the ends of lines. A byte is saved for each.
|
|
|
|
5: Another surprise that violates all that I knew of previous Microsoft Basics is that semi-colons are NOT routinely
|
|
needed as variable punctuation. They only seem to be required after PRINT USING or if you want to keep the cursor from
|
|
advancing to a new line or in an INPUT statement. All other uses are gratuitous and can be left out to save one byte per
|
|
occurence.
|
|
|
|
6: Use as many multiple statements per line as you can since for each line number eliminated, you have a net savings of
|
|
two bytes (the three needed for each separate line less the one byte used for each ":".
|
|
|
|
7: Eliminate ALL spaces. Your archival copy should have them for intelligibility, but your running copy will save one byte
|
|
for each space that is removed.
|
|
|
|
8: Put all initialization code at the end of your program and do a GOTO or a GOSUB. Little used routines at the end make
|
|
for a dramatic improv-ment in speed since MSBasic must search from the beginning of the file for each line referenced.
|
|
|
|
9: Put all time critical code at the beginning of the program for the same reason as 8: above.
|
|
|
|
10: Initialize all variables before you start the main body of code. This creates a stable, linear table of variables that
|
|
are accessed more rapidly.
|
|
|
|
11: DO NOT use the supposed shortcut of raising a number to the .5 power to save some time over the SQR routine.
|
|
Inaccuracies in the 11th and 12th decimal place might tend to screw up any further calculations in which you might use
|
|
this result.
|
|
|
|
12: Assign literals that are used more than once in a program to a vari-able. Do this in your initialization code. Almost
|
|
one byte per character is saved for each such duplication eliminated.
|
|
|
|
13: Use SPACE$(X) to assign X number of spaces rather than STRING$(X,32).
|
|
|
|
14: Another surprise: use REM instead of "'". This save two bytes per occurence. Of course, you should remove all REM
|
|
statements of both types from your running copy.
|
|
|
|
I hope that these random ramblings of mine will prove useful and will pro-voke other users to add to this document to the
|
|
benefit of us all.
|
|
|
|
_____________________________________________________________________________________________________________________
|
|
|
|
One of the serious deficiencies of the built-in Basic interpreter is the lack of user-defined functions. I hope the RS
|
|
will include them in any disk extended basic that they come up with, when they come up with one, when and if they come up
|
|
with disk drives and an operating system. At the same time, perhaps they will implement the type of extended RAM
|
|
addressing ala the NEC MEWS. Radio Shack, are you listening? With the DEFFN a great many subroutines could be turned into
|
|
callable functions A Trace feature as well as Random file I/O would also be welcome. Let's hope!
|
|
|
|
_____________________________________________________________________________________________________________________
|
|
|
|
Lewis Rosenfelder's book "Basic Faster and Better & Other Mysteries" has a wealth of information on sophisticated
|
|
programming techniques. Unfortunately many of them require user defined functions. It is, nonetheless worth buying and
|
|
reading.
|
|
|
|
_____________________________________________________________________________________________________________________
|
|
|
|
Good luck with all this.
|
|
|
|
Richard Horowitz [75735,677]
|