64K BASIC aims for compatibility with a time when BASIC usually came on ROM. There was an attempt to standardize BASIC in 1978 but it wouldn't succeed until ten years later. The lack of an accepted standard and the challenge of upgrading created many dialects of BASIC.
There's a lot of programs which will run without modification because 64K BASIC has all the quirks of the most popular ROM BASICs. This appendix covers the most common problems you may come across when running an old program. Mostly, there were multiple ways to do the same things. 64 BASIC always implements the method that uses the least keywords.
Old computers often didn't have useful entropy, not even a real-time clock.
Many implementations would reset the random number generator to the same state
on ever run, but almost all would reset to the same state every boot.
RANDOMIZE was used to get around this by asking the user for a seed.
64K BASIC reseeds the random number generator with good entropy on every run,
so in most cases you simply delete the unneeded code.
RANDOMIZE without an X will prompt the user for a seed value.
This allowed someone to replay the same game if they wanted.
To emulate this behavior, here's a replacement.
INPUT "Random Number Seed";A:RND=RND(-ABS(A))
Probably the most common way to seed the random number generator is to time how long it takes the user to respond to a prompt. This is not necessary in 64K BASIC so if you see something similar to the following, you can delete it.
PRINT "Press any key to continue":WHILE INKEY$="":RND=RND():WEND
To get a single keypress and store it in A$, 64K BASIC uses the newer style:
A$ = INKEY$
Some versions of BASIC didn't support floating point types. Use
to change the default variable type to integer. The RND function needed
to work without floats so we'll
DEF FN a new one. Replace every
10 DEFINT A-Z:DEF FNRND(X)=INT(RND()*X+1)
This is probably a GW-BASIC program so it might use graphics and sound.
However, in many cases it is simply used to center text on the screen.
STRING$ to get a bunch of newlines and
SPC(X) to move to the column.
REM CLS:LOCATE 5,20:PRINT "TITLE" CLS:PRINT STRING$(5,10)SPC(20)"TITLE"
This controls display of the status line in GW-BASIC. Usually a program turns it off at the start and back on at the end. You can delete these.
64K BASIC does not support sound. Your terminal might beep with:
This selects if arrays start at 0 or 1. This isn't needed since memory isn't scarce. Also, 64K BASIC arrays are sparse so by simply not using 0 it won't be allocated.