[comp.sys.tandy] ST251-1 disk in Tandy 6000

fox@zbrka.alphacdc.com (David Fox) (02/23/90)

I finally have my Segate ST251-1 disk drive working with my Tandy 6000.
I want to thank everyone who responded to my earlier posting, especially
those I was not able to reach by mail.  Although no one was able to
pinpoint the cause of the failure I did receive a lot of valuable 
information. 

The symptom was that any attempt to format or access the drive resulted
in a complaint that the drive was not ready, or a hung system.  A little
probing revealed that at some time during boot up the drive got into a
state with -Seek Complete high and stayed that way.

The source of the problem turned out to be series of step pulses with 
out of spec timing. (Too fast for track at a time seek and too slow for
buffered seek.)  Shortly after that discovery, Monty Schmidt 
(monty@larry.sal.wisc.edu) kindly sent me a copy of his disassembly 
of the 6000's Z80 boot ROM, which was a great help in locating the 
exact cause of the problem.

Here is the relevant bit of code:

   address     Z80 code
	 104     ld   a,05h       ; set up for seek to track 5
	 106     out  (cch),a     ; write to WD1010's LSB cylinder register
	 108     ld   a,73h       ; seek command with 1.5 ms between step pulses
	 10a     out  (cfh),a     ; write to WD1010's command register

The 1.5 ms step pulse timing is out of spec for the ST251-1, the ST251,
and even the original equipment TM503.  Nevertheless many drives seem
to tolerate it.  My bad luck that I bought one that did not.  In any 
case, the fix is easy (if you have access to an EPROM burner).  The boot
ROM is a 2716 (U54) on the main board and is accessible by removing the
back panel containing the fan from the 6000. Change the byte at 109h 
from 73h to 70h so that the code reads
   108      ld   a,70h          ; 3e 70
   10a      out  (cfh),a		; d3 cf
This will use the fastest (~35 us) step rate.

Possible gotchas: 
There may be different versions of the ROM so the above addresses may 
differ between systems.  My ROM had no version number or date either
programmed in it or attached to the package.

The 6000 service manual says that one of the self tests done at boot up
is a checksum on the ROM code.  If this were true the checksum would have 
to be patched to avoid a nasty boot error.  My ROM did not do this test.

I have been up and running for about a week with the patched ROM.  The
only possible problem is that I occasionally see a message like the
following on the console:

Bugchk:  UnkInt Code  ....4...

Bugchk:  HdTimeOut
Hard disk 0: hard error 005A while Writing Cylinder xxx Head y Sector zz

The values xxx y and zz are always different and I have not been able to
detect any corruption of data or damage to the file system.  I would
like to understand what is causing this message to know if it is safe 
to ignore it.  I have not been able to find any mention of anything like
it in the FM.

There remains the question of which drives work with an unmodified 6000
and which ones don't.  Unless the manufacturer says the 1.5 ms between
step pulses is OK there seems to be no easy way to predict.  My
experience is that Tandon TM502 and TM503 (original) drives work while a
TM262 and the ST251-1 do not.  I received several reports that the ST225
works and Jay Rouman (jsr@sharkey.cc.umich.edu) had experience with a
couple of other Segate drives:

	Anyhow, although attempts to get the ST251-1 to work were totally 
	unsuccessful, I have had good results with an ST125 (3.5" 20Meg) as
	primary and an ST251-0 (the slow version) as secondary drive. 
	I have also used the ST125 as a secondary (and the old internal
	Tandon as primary).  I have never tried to make the ST251-0 into
	the boot drive (the ST125 is a lot faster so I thought it should
	be providing root and swap).
---
David Fox   fox@zbrka.alphacdc.com    {isis|ncar|boulder}!scicom!zbrka!fox