master memory map



As has been mentioned throughout the book, there are currently two versions of the OS (three, actually, if you count the 1200XL). The reason for this is the fact that the original version of the OS, which we'll call version "A," had some bugs, or problems that caused it not to work properly sometimes. Version "B" was developed to take care of these bugs, but in the process a lot of the routines got moved. As a result, some of the OS locations listed in this book will only be correct for the version "A" OS. This will only affect you, however, if you are using the OS incorrectly. What do I mean by incorrectly? When the Atari computers first came out, Atari warned that programmers should not rely on the OS locations staying the way they were. If you wanted to use the OS in your own programs, said Atari, make sure you only use locations that are safe, mainly the vectors. As a matter of fact, the whole purpose of OS vectors is to let you use routines that might shift around. Anyway, my point here is that you should not try and use an OS routine if it doesn't have a vector. If you do, then don't expect your program to run on every Atari. If you absolutely must use a nonvectored OS routine, look it up in the OS listing and copy it into your program. The only problem with this method is that it may create legal problems if you decide to sell your program commercially. Check with Atari in such cases.

If you're stubborn, and insist on making "illegal entries" into the OS, here's a list of the locations that are already unsafe (i.e., they've been changed):

58460 through 58466 ($E45C through $E462)
59126 through 60905 ($E6F6 through $EDE9)
62015 through 62158 ($F23F through $F2CE)

This represents a little less than a fifth of the OS. You should be aware, however, that not all the locations in the given ranges have been changed, and some of the routines have just been moved. Since it is highly recommended that you not enter the OS illegally, however, I'm not going to go into any more depth.


In case you were wondering about the bugs that version "B" fixed, here's a list:

1. Sometimes, during I/O to the disk drive, the disk drive would "fall asleep" (timeout) for a few seconds.

2. Sometimes the screen display would disappear.

3. Sometimes you would get an incorrect "ERROR 138" message during I/O (ERROR 138 is a device timeout error).

4. POKEY timer four did not work properly.

5. Sending SIO a buffer address with a low byte of 255 ($FF) caused SIO to loop forever.

6. There was no vector for the BREAK key.

Return to Table of Contents | Previous Chapter | Next Chapter