PDA

View Full Version : Hard drive formatting for S100 machines



RichCini
February 14th, 2018, 06:31 AM
Not sure this fits here, but it relates to my Gazelle so I figured the S100 section would be a good start.

I'm continuing on my work with the Gazelle replica I built and now I'm focusing on the hard drive subsystem which uses Morrow HDC-DMA controller. The system came with MS-DOS 2.0 and related source code (so like an early OEM adaptation kit). When looking at the code, it appears that it natively supported two hard drives -- an IMI 5018 (CHS=306/6/17) and a MiniScribe MS-4020 (CHS=480/4/17). What's interesting -- and what prompts my question -- is that the drive geometry in the source code doesn't match the native geometry of the drives. The SPT used in the code is 8 and the native SPT for each drive is 17; the cylinders and heads match.

Now, I *might* be able to locate a working IMI drive for the unit, so is there any issue with low-level formatting the drive with an SPT that doesn't match the native SPT?

As an alternative, I have a working Quantum Q540 drive, which is larger (CHS=512/8/17) than either of the original drives. Would there be any issue low-level formatting it to 480/4/8 to match the MiniScribe geometry? I would guess not, but it's been so long since I've worked with MFM drives and low-level formatting I thought I'd check.

Thanks!
Rich

Chuck(G)
February 15th, 2018, 09:34 AM
Rich, what sector size does the Morrow controller use? 8 sectors of 1024 bytes per track sounds quite reasonable.

RichCini
February 15th, 2018, 10:23 AM
Chuck -- the equates to the code don't have it, but searching for "1024" actually confirms that they are 1024-byte sectors (there's an "ADD DMADD,1024" in the code) . So, yes, it sounds reasonable :-). Coincidentally, the master MS-DOS 2 floppy disk for this system also uses 1024-byte sectors.

I'd have to look at the low-level formatter (I'm using a DTC 5150XL controller on a PC/AT to LL-format) but I think it allows you to define sector size. I'm not sure if MS-DOS 2.1 (the PC-bootable one that I'm using to high-level format the drive) allows 1024-byte sectors. If not, is there another formatter I should use? SpeedStor maybe?

Rich

Al Kossow
February 15th, 2018, 10:34 AM
the hard drive subsystem which uses Morrow HDC-DMA controller.

I beleive the HDC-DMA has its own unique sector format.
You aren't going to be able to LLF it on anything else, since it doesn't use a hard disk controller ASIC, they made their own.
Check the docs on bitsavers for more info.
I did a bunch of research on this when I started to put together a Decision system to run their version of 68K Unix

Chuck(G)
February 15th, 2018, 10:36 AM
Is the DTC controller compatible ID-header-wise with the Morrow? It seems unlikely to me--controllers back then were pretty much sui generis.

Are there some documents on the Morrow controller available? It would be useful to know the chipset and microcode used. Many 8-bit systems of the time used a Signetics 8x300-based design.

Al Kossow
February 15th, 2018, 10:45 AM
Is the DTC controller compatible ID-header-wise with the Morrow? It seems unlikely to me--controllers back then were pretty much sui generis.

Are there some documents on the Morrow controller available? It would be useful to know the chipset and microcode used. Many 8-bit systems of the time used a Signetics 8x300-based design.

It is 8X300 based, the sector format is described in the manual
CRC polynomial is a little different
Dave helped me read the Tricep disk, here is the info

Board revision B detected
Found drive at select 1
Drive RPM 3599.3
Matches count 18 for controller OMTI_5510
Header CRC: Polynomial 0x1021 length 16 initial value 0x0
Sector length 1024
Data CRC: Polynomial 0x1021 length 16 initial value 0x0
Found multiple matching header parameters. Will use largest matches or last if identical
Matches count 18 for controller Morrow_MD11
Header CRC: Polynomial 0x1021 length 16 initial value 0x0
Sector length 1024
Data CRC: Polynomial 0x1021 length 16 initial value 0x0
Retrying on cylinder 1 head 1
Matches count 18 for controller Morrow_MD11
Header CRC: Polynomial 0x1021 length 16 initial value 0x0
Sector length 1024
Data CRC: Polynomial 0x1021 length 16 initial value 0x0
Number of heads 6 number of sectors 9 first sector 0
Interleave (not checked): 0 7 5 3 1 8 6 4 2
Drive supports buffered seeks (ST412)

Command line to read disk:
--sectors 9,0 --heads 6 --cylinders 306 --header_crc 0x0,0x1021,16,0 --data_crc 0x0,0x1021,16,0 --format Morrow_MD11 --sector_length 1024 --retries 50,4 --drive 1

Chuck(G)
February 15th, 2018, 11:12 AM
Many 8x300 designs were based on the WD100x boards, as developing for this brain-dead bipolar "microcontroller" was expensive and challenging. I suspect that Morrow probably adapted his from the WD1002.

If the stuff in the OEM manual on bitsavers lines up with the BIOS code that you have, I think you have your answer.

FWIW, my first hard disk for the 5150 was a WD1001 with an SA1004 drive. Programming wasn't difficult.

RichCini
February 15th, 2018, 12:52 PM
OK, so at least I've verified that the drive (Q540) works on a PC using a standard type controller and PC/DOS 2.1. Now I guess I need to see if there is a low-level formatting tool somewhere on one of the Gazelle disks that's specific to the Morrow controller. I know that it has the standard DOS "format" program, but I don't recall seeing anything else.

I was hoping that I could low-level format it to the correct geometry using the DTC controller and then move it to the Gazelle/Morrow and then do the high-level format. I didn't realize that there were those differences. I'll also pull the Morrow manual and give it a re-read.

Al -- what program were you using to produce that output?

Thanks!

Al Kossow
February 15th, 2018, 02:03 PM
Al -- what program were you using to produce that output?
Thanks!

mfmread, part of Dave's tools on the beaglebone to analyze ST-506 drive data

Chuck(G)
February 15th, 2018, 03:09 PM
Is there a version that gives one raw data? That file you sent some time ago has a sector out of place every so often, making it very difficult to figure out what's what. I figure that if I had the raw ID headers as well, that it might be possible to make some sense out of it.

Dwight Elvey
February 15th, 2018, 04:31 PM
As I recall, the WD1000 and WD1001 used commands that looked like IDE controller commands
The PC WD1002, WD1003 and on used a different chip set.
If it uses the 8X300 as Chuck mentioned, you could look at code for the TRS80 5Meg disk. It would use
the same procedures.
Dwight

RichCini
February 15th, 2018, 05:08 PM
Guys --

I spent some time with SpeedStor and it won't low-level format anything other than 512b sectors -- same as the ROM on the DTC controller -- although I did format it for 480/4/17 (about 16mb). I also looked at the disks/files I have for MSDOS and there doesn't appear to be any low-level formatting utilities.

Dwight -- do you have and pointers to the TRS-80 code you mention? Or maybe DOS software that would do 1024b sectors?

Maybe I can re-use some of that to create a formatting utility, unless there's something for the Decision I. I checked Bitsavers and I couldn't find anything useful in that regard.

Thanks!

Rich

Dwight Elvey
February 15th, 2018, 05:42 PM
Guys --

I spent some time with SpeedStor and it won't low-level format anything other than 512b sectors -- same as the ROM on the DTC controller -- although I did format it for 480/4/17 (about 16mb). I also looked at the disks/files I have for MSDOS and there doesn't appear to be any low-level formatting utilities.

Dwight -- do you have and pointers to the TRS-80 code you mention? Or maybe DOS software that would do 1024b sectors?

Maybe I can re-use some of that to create a formatting utility, unless there's something for the Decision I. I checked Bitsavers and I couldn't find anything useful in that regard.

Thanks!

Rich

I don't have any specific pointers but formatting at a low level is not all that hard. The specs for the controllers are on the web. The coding is easy. I've written code to format drives using an XT controller on my NC4000 board ( may not help many that can't read that version of Forth ) I've also written code to format a M20 hard disk ( it uses a 8X300 type controller ). I don't have to code handy but with some digging I might be able to find it.
I still think the simplest thing is just to look up the information on the controllers. It is all on the web someplace. It is not rocket science.
If you can write to ports in what ever your favorite language is you can format a hard drive. It is much simpler than a floppy because the controller does most of the work for you. You don't have to know about gaps or headers or anything. As I recall, the commands were as simple as setting up sector size and issuing the track format command.
Dwight

RichCini
February 16th, 2018, 03:44 AM
Thanks Dwight. I'll proceed based on that and let you know how it goes.

While searching, I found this excellent (but hard to search) archive:

http://www.classiccmp.org/cpmarchives/cpm/Software/rlee/M/MORROW

If you look in http://www.classiccmp.org/cpmarchives/cpm/Software/rlee/M/MORROW/SOURCES/202/ there appears to be a formatting program, in C, for the HDC_DMA. I'll see if I can setup an old compiler.

And, you mentioned Forth. Oddly enough, I have several Forth compilers for the Gazelle -- the original owner was a Forth programmer.

Thanks.

Dwight Elvey
February 16th, 2018, 05:27 AM
Doing some of the original HDC's might be a little harder but it looks like you've found the right place to look. Later controllers relied less on the software for operations as they were based on simple uCs. If you were going to use one of these older controllers, it is best to use its formatter because the early controllers were no all cross compatible. An HD formatted with one controller might not work on one formatted with another.
If it is the WD1000 type ( with 8X300 ), they are almost all the same code as well.
If it is a WD1000 type,
http://www.bitsavers.org/pdf/westernDigital/WD100x/WD1000_OEM_Manual.pdf
is quite useful.
Dwight

RichCini
February 16th, 2018, 05:35 AM
I did pull the source to the program I mentioned above ("formatmw.c") and it looks like there are garbage characters in the code, maybe from a bad scan or something. I'm trying to find a clean copy (I asked on the VCF mailing list) or print-out before I try compiling it. I downloaded the WD manual and will take a look also.

Thanks.

djg
February 17th, 2018, 09:53 AM
It should have used the sector header information when creating the image file. Some systems do various rearrangement of the data that isn't marked in the headers. It can dump the sector headers with the sectors as hex dumps for people to look at but currently doesn't create a binary file with headers. Wouldn't be that hard to add. You would need the transition or emulation file to extract the header information.