Memory Test
Ed Stewart
All machines sometimes break and must then be fixed. My Atari computer is no exception to this rule. The difficulty lies in determining what went wrong. As you probably know, it's sometimes difficult to ascertain the cause of an error. The first question that should be asked is this:
Is The Problem Hardware Or Software?
This is sometimes very difficult to answer, but should be done before you shell out fifty bucks for someone to look at your Atari. In this article I will provide you with one helpful tool that you can use to help answer this question if your Atari goes off the deep end some day.
One of the most critical resources in any computer system is the dynamic memory known as RAM. This memory, unlike disk or tape memory, is operated upon directly by your Atari CPU, the 6502. Information on disk or tape memory devices must be first placed into RAM memory before it can be used either as a program or by a program. If an error were to occur at any RAM location where you have a program or data stored, the program would probably not function correctly. The error encountered could result in "lock up" or practically any other conceivable symptom. It could even make you think that the program is at fault if other programs appear to function normally. The reason some programs may function o.k. is that they do not reference the particular RAM location that is in error. Only one faulty bit in one byte may be bad, but this would be enough to do the trick. Computers are generally not tolerant of data errors, especially in their RAMs. Most large scale computers have error checking circuitry built into RAM memory, but this has not been done for our Atari friend. The new IBM personal computer has such RAM checking circuitry, so it is probably only a matter of time until this becomes commonplace for all our microcomputers. For now, though, the question must be:
How Can I Check My RAM?
I'm glad you asked that question, because it just so happens that I have a program to do just that. Of course, if you wish to buy a RAM test program you may still do that, but you should find this program as helpful as any available for most of your needs.
About The Program
This program consists of a BASIC program that has the assistance of a little machine language program. The BASIC program determines the amount of free RAM that can be used for testing purposes and asks you how much of that RAM you wish to actually test. It then proceeds to test that memory range you specify by repetitively invoking the Machine Language Program (MLP). The MLP tests every bit in every byte of the requested range by testing every number capable of being represented in the RAM area. After the area is tested, and if there are no errors, return is made to the BASIC program, with a successful completion indicated. If an error is encountered in RAM by the MLP, then return is made to the BASIC program, indicating the particular problem found. The BASIC program will stop execution if an error is found and will display error information on the display screen. To continue execution after an error is found, you must depress any key on the keyboard. The testing will then continue with all subsequent bytes in the RAM area found to be defective.
During normal execution of this program the display screen will appear blank. This is done to speed the resting process. The program will provide an audio signal after each testing pass is completed, but the screen will still remain blank. If you wish to see what pass the test is on, just depress any key and the program will pause with a good display turned on after the current pass is completed. Depressing a key again will cause the program to continue. If you wish to test a different RAM area, you can press BREAK or SYSTEM RESET at any time, followed by RUN. To improve the speed of this program requires that the amount of memory to test must be at least 256 bytes.
The BASIC program is fairly easy to follow and is documented with REM statements. You may remove all REM statements to get back a little more RAM. The MLP is included as DATA statements in the BASIC program.
No Errors Found
If the program finds no errors in the RAM you are testing, this does not mean that RAM is necessarily free of all errors, as some RAM will not be tested. RAM in locations HEX 0-6FF cannot be tested, and neither can display list RAM or the RAM occupied by this program, because this testing program only tests "unused" RAM. If your machine is 8K or 16K, or if you have a 400, then you cannot do what I am about to recommend, although you can rest assured that you have been able to test most of your RAM memory. For all you lucky 800 owners with more than one memory board, it is now time to rearrange your RAM boards if you have that ability. By changing the position of your RAM boards you will be able to test a greater portion of RAM memory. If, for instance, you have three 16K boards, you can be assured that the entire 16K will be tested for the middle board, although the first and third boards will contain some RAM that can't be tested until it is placed in the middle slot. If you still find no errors after testing all of RAM, then your problem is not with the RAM. Great, huh?
An Error Found
If the program stops with an error encountered in RAM, then you have probably found the source of the error. Usually through rearranging the RAM boards the characteristics of the problem will change, but the RAM will still be faulty. You now have a decision to make. You can either remove the faulty board and fix it yourself, or you can have someone do it for you. If someone does it for you, give them the results of your RAM test. The repair should be much easier for them and, possibly, somewhat less costly. You may even luck out and catch a RAM board still on warranty.
PROGRAM. Memory Test.
51 REM ATARI RAM TEST PROGRAM 52 REM BY ED STEWART 03/82 53 REM 11025 SAGEBRUSH AVE 54 REM UNIONTOWN OHIO 44685 99 REM SETUP SOME REQUIRED CONSTANTS 100 N1 = 1 : N2 = N1 + N1 : N255 = 255 : N256 = N255 + N1 200 DIM S$(N2) : S$(N1, N1) = CHR$(157) : S$(N2, N2) = CHR$(159) 299 REM READ IN THE MACHINE LANGUAGE PROGRAM 300 GOSUB 2900 399 REM GET LOW AND HIGH MEMORY BOUNDS 400 L = PEEK(15) * N256 : H = PEEK(742) * N256 : IF PEEK(14)< >NO THEN L = L + N256 499 REM DISPLAY BOUNDS AND GET REPLY 500 ? CHR$(125); S$; "ATARI MEMORY TEST PROGRAM"; CHR$(155); S$; "MEMORY BOUNDS ARE" 600 ? S$; "LOW = "; L : ? S$; "HIGH = "; H 700 ? S$; "GIVE TEST BOUNDS"; CHR$(155) 800 TRAP 800 : ? S$; "LOW = "; : INPUT LOW : IF LOW < L OR LOW > H THEN 800 900 TRAP 900 : ? S$; "HIGH = "; : INPUT HIGH : IF HIGH > H OR HIGH < L OR HIGH-LOW < N256 THEN 900 999 REM SETUP BOUNDS FOR THE MLP 1000 POKE 205, NO : POKE 206, INT(HIGH/N256) 1100 TRAP 32767 : POKE 203, NO : POKE 204, INT(LOW/N256) 1200 POKE 764, N255 1299 REM INVOKE THE MLP TO DO THE TEST 1300 POKE 559, NO : POKE 764, N255 : X = USR(1536) 1399 REM CHECK RETURN FROM MLP 1400 IF PEEK(208) = NO THEN 2200 1499 REM SHOW MEMORY ERROR ON SCREEN 1500 ? " ERROR AT "; (PEEK(203) + PEEK(204) * N256); " EXP = "; PEEK(207); " ACT = "; PEEK(209) 1600 SOUND NO, PASS, 6, 8 : FOR I = N1 TO 5 : NEXT I : SOUND NO, NO, NO, NO 1699 REM SETUP NEXT BYTE TO TEST SO WE DONT STOP WITH FIRST ERROR 1700 IF PEEK(203) = N255 THEN POKE 204, (PEEK(204) + N1) : POKE 203, NO : GOTO 1900 1800 POKE 203, (PEEK(203) + N1) 1900 POKE 764, N255 : POKE 559, 34 1999 REM CONTINUE ONLY IF KEY PRESSED 2000 IF PEEK(764) = N255 THEN 2000 2099 REM CONTINUE TESTING BAD RANGE 2100 GOTO 1300 2199 REM GOOD TEST PASS SO SAY SO 2200 PASS = PASS + N1 : ? " GOOD PASS NUMBER "; PASS : SOUND NO, PASS, 10, 8 2300 FOR I = N1 TO 5 : NEXT I : SOUND NO, NO, NO, NO 2399 REM STOP AND DISPLAY STUFF IF KEY IS PRESSED 2400 IF PEEK(764)< >N255 THEN 2600 2499 REM CONTINUE WITH NEXT PASS 2500 GOTO 1100 2600 POKE 764, N255 2699 REM WAIT HERE UNTIL A KEY IS PRESSED 2700 POKE 559, 34 : IF PEEK(764) = N255 THEN 2700 2799 REM CONTINUE WITH NEXT PASS 2800 GOTO 1100 2899 REM READ IN MACHINE LANGUAGE PROGRAM 2900 FOR L = 1536 TO 1576 : READ H : POKE L, H : NEXT L : RETURN 3000 DATA 104, 169, 0, 160, 0, 24, 145, 203, 209, 203, 208, 18, 105, 1, 208, 246, 200, 208, 242, 230, 204, 166, 204, 228, 206 3100 DATA 208, 234, 133, 208, 96, 133, 207, 177, 203, 133, 209, 169, 1, 133, 208, 96
Return to Table of Contents | Previous Section | Next Section