Documented Atari Bugs
Although Atari has on the whole done an admirable job in getting out a bug-free computer system (at least compared to most of the other machines), there are a few bugs in the Atari computer software. This article is simply intended to be a list of bugs in operating system and BASIC software. It is intended mainly to be a guide to help you understand what is going on when unexplained things happen in your computer. Atari is aware of all of these bugs, and they will be corrected in the future.
Bugs In Atari BASIC
The Atari BASIC cartridge has a few problems. The currently known bugs include the following:
- An input statement with no variable is not flagged as an error when input.
- LPRINT loops cannot be stopped by hitting BREAK (This is not actually a bug in BASIC, but a bug in the OS cartridge.)
- PRINT A = NOT B locks up the keyboard.
- DIM L (10) generates DIM L10) as code.
You must not leave a blank between a variable and its dimension or it will be interpreted incorrectly.
- The following functions have wrong values:
LOG(0) CLOG(0) LOG(1) CLOG(1)
MOST EXPONENTS (as an example, try to evaluate 2↑3. This problem is inherent in the polynomial expansion algorithm used. It is not likely to cause problems as the errors are very small, but will be noticeable when the expected value is something which is known. This is a simple rounding error, and can be handled by rounding the result when a non-integer result would be bothersome.)
- Problems with BASIC boundary routine. This manifests itself in two bugs on the machine. Sometimes when doing line editing the machine will lock up. This usually occurs when deleting multiple lines from a program. The other problem is that any string which is an exact multiple of 256 bytes long will end up in the wrong place if moved in memory. This causes some very weird inexplicable errors in programs. It is hard to catch because it occurs when a string is a multiple of 256 bytes long, and only then. Please notice that it does not depend on the dimensioned length of a string, but on its actual length. Therefore, it cannot be avoided by never dimensioning strings to these values. Fortunately it rarely shows up since most strings are shorter than 256 characters.
- A printed Control-R or Control-U is treated as a semicolon. I'm glad I finally found out about this as it was the cause of a great deal of trouble in a graphics dump routine I wrote.
- You cannot use a function within a USR call line. That is, you cannot use a function to define an address for a user call or any of its parameters. You can do this if you evaluate them in a separate line, however.
- You can dimension arrays larger than the available memory size without creating an error. Of course, there will be problems galore and error messages when you try to run the program.
These errors should mainly be corrected when the next revision of the BASIC cartridge is released. Errors caused in the operating system will be fixed with a new release of the operating system cartridge. Atari has no defiite plans as to when these will come out.
Errors In OS Cartridge
There are a few errors on the OS cartridge ROM in the Atari computer. These are the ones I know about:
As mentioned above, there is a bug in the OS which prevents the break key from interrupting LPRINT loops in BASIC.
There is another bug which you disk users have almost certainly noticed. A problem in the OS makes your disk drive "go to sleep" for a few seconds occasionally. Yes, there is a reason for this strange behavior. The same bug in the operating system is also the culprit responsible for the system occasionally retransmitting a block to the printer. Have you ever gotten a duplicate line or part of a duplicate line out to your printer (using the 850 interface.)? This is due to a bug in the OS cartridge and, at the moment, there isn't much you can do about it. However, Atari will have a fix for this eventually.