If you are like most Atari BASIC programmers, you
have 'discovered' the infamous keyboard lock-up bug the hard way, by
losing a program you were editing. The bug, which strikes at
essentially random times during program editing, causes the machine
to completely lock-up, with control only being regained after
turning the machine off, erasing any program in memory in the
process. The bug first appeared in revision A of Atari BASIC, which
was the official BASIC for the 400/800 machines.
When the XL machines were released, Atari attempted
to cure this and other minor bugs with revision B BASIC.
Unfortunately, the cure proved worse than the cough! Not only did
the keyboard lock-up bug remain, but new bugs were introduced which
mangled strings, shuffled program lines, and added 16 bytes to a
program every time it was SAVEd. Atari has finally cured all of
these bugs with revision C of BASIC that was built into the last
batch of 800XL machines and is standard on the XE machines.
However, that leaves tens of thousands of us with
buggy-BASIC! While the only long term cure is a hardware fix via a
revision C BASIC ROM purchased from Atari, a software alternative is
provided here. This program creates a second short program that can
be quickly run each time you power on your machine or return to
BASIC from DOS. This second program copies ROM BASIC into underlying
RAM, and then patches the bytes required to upgrade revision B to C.
Since a machine language routine is used, the entire process is
finished in seconds.
Under normal circumstances, pressing RESET would turn
ROM BASIC back on. To prevent this, the second program also includes
a routine that turns RAM (version C) BASIC back on at the end of the
To determine which version of BASIC you have, PEEK at
43234. If you get 162, you have revision A, and this program is not
appropriate. If you get 234, count your blessings because you
already have revision C. If you get 96, you have revision B, and the
first step to kissing the bugs goodbye is to type in and save the
program given below. When the program is run, it will create and
write a BASIC program called BASICC to disk.
Running BASICC will install revision C BASIC in RAM
and install the RESET handling routine in the last 17 bytes of page
6 memory. Note that with the exception of these 17 bytes, no memory
is lost, because BASIC now resides in previously unused (in BASIC)
RAM underlying ROM BASIC. As long as you do not exit to DOS or power
off your machine, revision C BASIC will remain installed.
The RESET routine, while handy in reinitialising RAM
BASIC, does have a few side effects. The first is that the MEMSAVE
feature will not work when exiting to DOS. The second (but minor)
effect is that to exit to DOS you must type DOS (and RETURN), press
the RESET key, and then type DOS again. These two extra steps are
only necessary if you used the RESET key at least once in BASIC. If
you desire, you can eliminate the RESET feature by deleting lines
140-160, and 180-220 in the first program. Under this condition, RAM
BASIC can be re-installed after RESET by simply poking location
54017 with 255.