mdf@trwrba.UUCP (Mark D. Falleroni) (04/08/86)
Help! The local electronics store just finished installing the second upgrade in my ST. On boot-up, a ram-size program shows about 901-902K available. Using MDISK, I allocate a 720K ram disk and place the development C compiler (all 3 programs) and a source file in the ram disk. I start compiling and when the second pass of the compiler is to be loaded, anywhere from 2-4 bombs consistently appear. If I reboot, and allocate a ram disk < 300 K, the source compiles without error. The upgrade was installed with resisters and 150 ns. rams. It appears that the larger ram disk forces the compiler to be loaded in the upper 512K of ram. Does the above description indicate an addressing error? Is the MMU chip bad? I noticed that when pin 18 of the MMU chip (RAS) is touched with an oscilloscope probe, the screen goes bananas. The same thing happens when the RAS pins of the upgrade are touched. I sure would appreciate any help on this one. thanks, Mark Falleroni TRW Ogden Engineering Office Ogden, Utah 84401 <mdf>
oscar@oakhill.UUCP (Oscar Strohacker) (04/14/86)
Several letters recently have discussed problems with the upper bank of ram being "available" but not working properly. A few weeks before that, several letters here have referenced mysteries about the ST not recognizing new ram after a ram upgrade. One referred to it as due to an intentional change of the hardware by atari to prevent the upgrades on new ST's. I have the developers kit (including schematics and listings). I did an upgrade from inspection of the schematics and at first I had some errors due to bad solder connections. In the developers kit is a utility called SID, a debugger, which allows you to look at memory. With it I determined that only the lower 1/4 of the new memory was responding, the upper 3/4 was behaving just like memory addresses above 1 Meg (nonexistent memory). (Since then I have seen situations where none of the upper bank responds). The dynamic memory controller is reponsible for ram refresh and maybe dtack generation. It has to be programmed by the CPU for how much memory is there. The dram controller is initially set at powerup for 4 Meg. then the machine does a simpleminded memory check on each bank. First it tries 128k, then 512k, then 2 Meg. After it has sized memory for each bank it writes a new memory size initialization byte to the memory controller. It also saves this value in address 424. When you expand the St memory, if you make one bad solder connection, the memory check will probably fail and the dram controller will be reinitialized so as not to refresh or respond to the upper bank at all. So, you won't be able to troubleshoot it until you reinitialize the memory controller. But if it is failing the memory test you want to KEEP the OS in low memory. So first boot the machine, then reinitialize the dram controller by writing a 5 to the dram controller port at 0xffff8001. SID will buserror, but when you restart SID you will suddenly be able to access the upper memory bank. Now you can diagnose the memory. First, to look for bad data/ras/cas lines on the new rams, write all ones (0xffff) and all 0's to a location in upper memory (0x80000 say), read it back, and look for stuck data bits. Visually inspect and physically try to move the pins on the data in/out & ras/cas lines on the memory chip which corresponds to the particular data bit. Resolder the pin. To look for bad (stuck at one) address lines, write a program to zero out all of upper memory, and then write ones to the first word (0x80000) and have the program search the upper bank for a nonzero word anywhere but the first word, and if you find one print its value and address. Again, the nonzero data bit of the value tells you which chip. The nonzero bits of the address correspond to address lines of the chip which are stuck at one. Inspect and repair (resolder) the pin. To look for bad (stuck at zero) address lines, write a program to zero out all of upper memory, and then write ones to the last word (0xffffe) and have the program search the upper bank for a nonzero word anywhere but the last word, and if you find one print its value and address. Again, the nonzero data bit of the value tells you which chip. The nonzero bits of the address correspond to address lines of the chip which are stuck at zero. Inspect and repair (resolder) the pin. In all three cases if you make the repairs dictated by a particular diagnostic and afterwards the diagnostic does the same thing, you should change out the memory chip. What's worse is when you made a mistake on the upgrade and the particular problem is NOT discovered by the boot's simpleminded memory check. It goes ahead and tries to use upper memory, which is corrupting itself. Therefore it dies while it is booting. To get around this, pull off ras from the upper memory and clip the pin high, to force the diagnostic on the high bank to fail. Boot the machine on the lower bank. Now remove the clip pulling ras high and clip ras on (while the machine still has power of course). From this state you can troubleshoot the memory as described above: initialize the DRAM controller and run the diagnostics.