[net.micro.atari16] Upgrade help needed

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.