Compupro Disk 3 controlled Tandon TM602S

16 views
Skip to first unread message

Santo Nucifora

unread,
Jun 29, 2026, 7:06:17 PMJun 29
to MFM Discuss
Hello,

I have a computer with a Compupro Disk 3 S100 controller and a Tandon TM602S hard drive.  I am trying to read the hard drive but it's giving me issues.  I read the hard drive once but it gave me bad data.  It is likely the hard drive but I'd love to try to archive this drive if possible.

When I mfm_read --analyze I get an OMTI_5510 controller and a Morrow_MD11 format and it uses the OMTI_5510 format but it's not an OMTI controller, as far as I can tell.  I did see that Compupro Disk 3 was one of the working configs but it didn't show the format type.  Does anyone who might have a Compupro Disk 3 based system know what the "--format" should be?

PS: I did try to adjust the RPM to 3600 but it didn't make a difference.

Here is the log:
Board revision C detected
Found drive at select 1
Returning to track 0
Drive RPM 3579.4
Primary transition period 210 ns, should be around 200
Primary transition period 210 ns, should be around 200
Retrying on cylinder 0 head 1
Matches count 64 for controller OMTI_5510
Header CRC: Polynomial 0x104c981 length 32 initial value 0x2605fb9c
Sector length 256
Data CRC: Polynomial 0x104c981 length 32 initial value 0xe2277da8
Found multiple matching header parameters. Will use largest matches or last if identical
Matches count 41 for controller Morrow_MD11
Header CRC: Polynomial 0x104c981 length 32 initial value 0x2605fb9c
Sector length 256
Data CRC: Polynomial 0x104c981 length 32 initial value 0xe2277da8
Selected head 4 found 0, last good head found 3
Read errors trying to determine sector numbering, results may be in error
Number of heads 4 number of sectors 32 first sector 0
Interleave (not checked): 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Disk has recalibrated to track 0
Drive prematurely at track 0 after 1 of 30 steps testing fast ST412 seek
Drive doesn't support buffered seeks (ST506)
Disk has recalibrated to track 0
Stopping end of disk search due to recalibration
Number of cylinders 4, 0.1 MB

Command line to read disk:
--format OMTI_5510 --sectors 32,0 --heads 4 --cylinders 4 --header_crc 0x2605fb9c,0x104c981,32,6 --data_crc  0xe2277da8,0x104c981,32,6 --sector_length 256 --retries 200,8 --drive 1 --unbuffered_seek
Found cyl 0 to 152, head 0 to 3, sector 0 to 31
Expected 19584 sectors got 19584 good sectors, 0 bad header, 0 bad data
0 sectors marked bad or spare
0 sectors corrected with ECC. Max bits in burst corrected 0
Track read time in ms min 30.282750 max 65.776834 avg 38.044382

David Gesswein

unread,
Jun 29, 2026, 9:27:24 PMJun 29
to mfm-d...@googlegroups.com
On Mon, Jun 29, 2026 at 04:06:17PM -0700, Santo Nucifora wrote:
>
> When I mfm_read --analyze I get an OMTI_5510 controller and a Morrow_MD11
> format and it uses the OMTI_5510 format but it's not an OMTI controller, as
> far as I can tell.
>

Its actually saying it finds data that matches OMTI_5510 and Morrow_MD11
but OMTI_5510 was better match so it uses that. Picture I found of disk 3
doesn't have OMTI chip set on it so suprising. Unless the disk was reused
in a different system,

> Matches count 64 for controller OMTI_5510
> Matches count 41 for controller Morrow_MD11
>
It was able to decode 64 sectors with OMTI_5510 format but only 41 using
Morrow_MD11.

> Disk has recalibrated to track 0
> Drive prematurely at track 0 after 1 of 30 steps testing fast ST412 seek
> Drive doesn't support buffered seeks (ST506)
> Disk has recalibrated to track 0
> Stopping end of disk search due to recalibration
> Number of cylinders 4, 0.1 MB
>
There is something funny going on with reporting track zero and seeking.

> Command line to read disk:
> --format OMTI_5510 --sectors 32,0 --heads 4 --cylinders 4 --header_crc
> 0x2605fb9c,0x104c981,32,6 --data_crc 0xe2277da8,0x104c981,32,6
> --sector_length 256 --retries 200,8 --drive 1 --unbuffered_seek
>
This I don't understand. It says it found 4 cylinders.

> Found cyl 0 to 152, head 0 to 3, sector 0 to 31
> Expected 19584 sectors got 19584 good sectors, 0 bad header, 0 bad data
> 0 sectors marked bad or spare
> 0 sectors corrected with ECC. Max bits in burst corrected 0
> Track read time in ms min 30.282750 max 65.776834 avg 38.044382
>
But here it says it read 153 cylinders. Its not supposed to do that if
the command line says 4 cylinders. According to this it read all sectors
without error so what is the issue?

Santo Nucifora

unread,
Jun 29, 2026, 9:49:03 PMJun 29
to mfm-d...@googlegroups.com
Thanks for the reply David.

When I let the mfm_read -analyse without setting a format, it chose OMTI_5510 and I got a stream of errors that looked like the log below.  It did it for every cylinder and it just looked incorrect so I tried to set the format to Morrow_MD11 to see if I got the same thing and it actually completed without errors but with bad files (probably because it only read 4 cylinders but the extract file was a full 5MB).

The command line I ran was:
./mfm_read --analyze --heads 4 --cylinders 153 --drive 1 --format Morrow_MD11 --retries 200,8 --extracted_data_file exidy.bin --emulation_file exidy.emu --transitions_file exidy.tran

The system is an Exidy Sorcerer with an S100 backplane extension which holds the Compupro Disk 3 card.

I will do a little more testing tomorrow but that Compupro card definitely doesn't have any OMTI chips and any searches for Compupro Disk 3 and OMTI brought up nothing.  I don't know what the controller in the Morrow MD11 was so I thought I would give that a shot.

Anyway, here is the bottom portion of the log where I ran an --analyze without specifying a format.  It likely started at cylinder 0 or so but my screen buffer was not big enough to capture it all.
...
Bad sectors on cylinder 148 head 0: 0H 0 1H 1 2H 2 3H 3 4H 4 5H 5 6H 6 7H 7 8H 8 9H 9 10H 10 11H 11 12H 12 13H 13 14H 14 15H 15 16H 16 17H 17 18H 18 19H 19 20H 20 21H 21 22H 22 23H 23 24H 24 25H 25 26H 26 27H 27 28H 28 29H 29 30H 30 31H 31
Retries failed cyl 148 head 1
Mismatch cyl 148,152 head 2,2 index 0
Mismatch cyl 148,152 head 2,2 index 1
Mismatch cyl 148,152 head 2,2 index 2
Mismatch cyl 148,152 head 2,2 index 3
Mismatch cyl 148,152 head 2,2 index 4
Mismatch cyl 148,152 head 2,2 index 5
Mismatch cyl 148,152 head 2,2 index 6
Mismatch cyl 148,152 head 2,2 index 7
Mismatch cyl 148,152 head 2,2 index 8
Mismatch cyl 148,152 head 2,2 index 9
Mismatch cyl 148,152 head 2,2 index 10
Mismatch cyl 148,152 head 2,2 index 11
Mismatch cyl 148,152 head 2,2 index 12
Mismatch cyl 148,152 head 2,2 index 13
Mismatch cyl 148,152 head 2,2 index 14
Mismatch cyl 148,152 head 2,2 index 15
Mismatch cyl 148,152 head 2,2 index 16
Mismatch cyl 148,152 head 2,2 index 17
Mismatch cyl 148,152 head 2,2 index 18
Mismatch cyl 148,152 head 2,2 index 19
Mismatch cyl 148,152 head 2,2 index 20
Mismatch cyl 148,152 head 2,2 index 21
Mismatch cyl 148,152 head 2,2 index 22
Mismatch cyl 148,152 head 2,2 index 23
Mismatch cyl 148,152 head 2,2 index 24
Mismatch cyl 148,152 head 2,2 index 25
Mismatch cyl 148,152 head 2,2 index 26
Mismatch cyl 148,152 head 2,2 index 27
Mismatch cyl 148,152 head 2,2 index 28
Mismatch cyl 148,152 head 2,2 index 29
Mismatch cyl 148,152 head 2,2 index 30
Mismatch cyl 148,152 head 2,2 index 31
Bad sectors on cylinder 148 head 1: 0H 0 1H 1 2H 2 3H 3 4H 4 5H 5 6H 6 7H 7 8H 8 9H 9 10H 10 11H 11 12H 12 13H 13 14H 14 15H 15 16H 16 17H 17 18H 18 19H 19 20H 20 21H 21 22H 22 23H 23 24H 24 25H 25 26H 26 27H 27 28H 28 29H 29 30H 30 31H 31
Retries failed cyl 148 head 2
Mismatch cyl 148,152 head 3,3 index 0
Mismatch cyl 148,152 head 3,3 index 1
Mismatch cyl 148,152 head 3,3 index 2
Mismatch cyl 148,152 head 3,3 index 3
Mismatch cyl 148,152 head 3,3 index 4
Mismatch cyl 148,152 head 3,3 index 5
Mismatch cyl 148,152 head 3,3 index 6
Mismatch cyl 148,152 head 3,3 index 7
Mismatch cyl 148,152 head 3,3 index 8
Mismatch cyl 148,152 head 3,3 index 9
Mismatch cyl 148,152 head 3,3 index 10
Mismatch cyl 148,152 head 3,3 index 11
Mismatch cyl 148,152 head 3,3 index 12
Mismatch cyl 148,152 head 3,3 index 13
Mismatch cyl 148,152 head 3,3 index 14
Mismatch cyl 148,152 head 3,3 index 15
Mismatch cyl 148,152 head 3,3 index 16
Mismatch cyl 148,152 head 3,3 index 17
Mismatch cyl 148,152 head 3,3 index 18
Mismatch cyl 148,152 head 3,3 index 19
Mismatch cyl 148,152 head 3,3 index 20
Mismatch cyl 148,152 head 3,3 index 21
Mismatch cyl 148,152 head 3,3 index 22
Mismatch cyl 148,152 head 3,3 index 23
Mismatch cyl 148,152 head 3,3 index 24
Mismatch cyl 148,152 head 3,3 index 25
Mismatch cyl 148,152 head 3,3 index 26
Mismatch cyl 148,152 head 3,3 index 27
Mismatch cyl 148,152 head 3,3 index 28
Mismatch cyl 148,152 head 3,3 index 29
Mismatch cyl 148,152 head 3,3 index 30
Mismatch cyl 148,152 head 3,3 index 31
Bad sectors on cylinder 148 head 2: 0H 0 1H 1 2H 2 3H 3 4H 4 5H 5 6H 6 7H 7 8H 8 9H 9 10H 10 11H 11 12H 12 13H 13 14H 14 15H 15 16H 16 17H 17 18H 18 19H 19 20H 20 21H 21 22H 22 23H 23 24H 24 25H 25 26H 26 27H 27 28H 28 29H 29 30H 30 31H 31
Retries failed cyl 148 head 3
Bad sectors on cylinder 148 head 3: 0H 0 1H 1 2H 2 3H 3 4H 4 5H 5 6H 6 7H 7 8H 8 9H 9 10H 10 11H 11 12H 12 13H 13 14H 14 15H 15 16H 16 17H 17 18H 18 19H 19 20H 20 21H 21 22H 22 23H 23 24H 24 25H 25 26H 26 27H 27 28H 28 29H 29 30H 30 31H 31
Retries failed cyl 149 head 0
Bad sectors on cylinder 149 head 0: 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 20H 21H 22H 23H 24H 25H 26H 27H 28H 29H 30H 31H
Retries failed cyl 149 head 1
Bad sectors on cylinder 149 head 1: 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 20H 21H 22H 23H 24H 25H 26H 27H 28H 29H 30H 31H
Retries failed cyl 149 head 2
Ran out of data on sector index 0.
 Track short -2871 bits from expected length.
 Either deltas lost or index pulse early
Bad sectors on cylinder 149 head 2: 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 20H 21H 22H 23H 24H 25H 26H 27H 28H 29H 30H 31H
Retries failed cyl 149 head 3
Ran out of data on sector index 0.
 Track short -6966 bits from expected length.
 Either deltas lost or index pulse early
Bad sectors on cylinder 149 head 3: 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 20H 21H 22H 23H 24H 25H 26H 27H 28H 29H 30H 31H
Retries failed cyl 150 head 0
Bad sectors on cylinder 150 head 0: 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 20H 21H 22H 23H 24H 25H 26H 27H 28H 29H 30H 31H
Retries failed cyl 150 head 1
Ran out of data on sector index 0.
 Track short -5262 bits from expected length.
 Either deltas lost or index pulse early
Bad sectors on cylinder 150 head 1: 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 20H 21H 22H 23H 24H 25H 26H 27H 28H 29H 30H 31H
Retries failed cyl 150 head 2
Bad sectors on cylinder 150 head 2: 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 20H 21H 22H 23H 24H 25H 26H 27H 28H 29H 30H 31H
Retries failed cyl 150 head 3
Bad sectors on cylinder 150 head 3: 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 20H 21H 22H 23H 24H 25H 26H 27H 28H 29H 30H 31H
Retries failed cyl 151 head 0
Ran out of data on sector index 0.
 Track short -5213 bits from expected length.
 Either deltas lost or index pulse early
Bad sectors on cylinder 151 head 0: 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 20H 21H 22H 23H 24H 25H 26H 27H 28H 29H 30H 31H
Retries failed cyl 151 head 1
Ran out of data on sector index 0.
 Track short -2816 bits from expected length.
 Either deltas lost or index pulse early
Bad sectors on cylinder 151 head 1: 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 20H 21H 22H 23H 24H 25H 26H 27H 28H 29H 30H 31H
Retries failed cyl 151 head 2
Ran out of data on sector index 0.
 Track short -4565 bits from expected length.
 Either deltas lost or index pulse early
Bad sectors on cylinder 151 head 2: 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 20H 21H 22H 23H 24H 25H 26H 27H 28H 29H 30H 31H
Retries failed cyl 151 head 3
Ran out of data on sector index 0.
 Track short -5563 bits from expected length.
 Either deltas lost or index pulse early
Bad sectors on cylinder 151 head 3: 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 20H 21H 22H 23H 24H 25H 26H 27H 28H 29H 30H 31H
Retries failed cyl 152 head 0
Ran out of data on sector index 0.
 Track short -4763 bits from expected length.
 Either deltas lost or index pulse early
Bad sectors on cylinder 152 head 0: 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 20H 21H 22H 23H 24H 25H 26H 27H 28H 29H 30H 31H
Retries failed cyl 152 head 1
Ran out of data on sector index 0.
 Track short -5224 bits from expected length.
 Either deltas lost or index pulse early
Bad sectors on cylinder 152 head 1: 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 20H 21H 22H 23H 24H 25H 26H 27H 28H 29H 30H 31H
Retries failed cyl 152 head 2
Ran out of data on sector index 0.
 Track short -3506 bits from expected length.
 Either deltas lost or index pulse early
Bad sectors on cylinder 152 head 2: 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 20H 21H 22H 23H 24H 25H 26H 27H 28H 29H 30H 31H
Retries failed cyl 152 head 3
Bad sectors on cylinder 152 head 3: 0H 1H 2H 3H 4H 5H 6H 7H 8H 9H 10H 11H 12H 13H 14H 15H 16H 17H 18H 19H 20H 21H 22H 23H 24H 25H 26H 27H 28H 29H 30H 31H
Found cyl 0 to 4, head 0 to 3, sector 0 to 31
Expected cyls 153 doesn't match cyls found 5
Expected 19584 sectors got 544 good sectors, 19040 bad header, 0 bad data

0 sectors marked bad or spare
0 sectors corrected with ECC. Max bits in burst corrected 0
Track read time in ms min 33.270333 max 389.887959 avg 54.819470



--
You received this message because you are subscribed to the Google Groups "MFM Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mfm-discuss...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/mfm-discuss/akMbedNfIvKJPcY0%40hugin3.

Rasz

unread,
Jun 29, 2026, 11:21:07 PMJun 29
to mfm-d...@googlegroups.com
On Tue, Jun 30, 2026 at 3:49 AM Santo Nucifora <santo.n...@gmail.com> wrote:
> The system is an Exidy Sorcerer with an S100 backplane extension which holds the Compupro Disk 3 card.

so not the Morrow then

> I don't know what the controller in the Morrow MD11 was so I thought I would give that a shot.

https://retro.engineer/projects/2022-06-09_Morrow_Design_MD11/
pcb http://bitsavers.informatik.uni-stuttgart.de/pdf/morrow/artwork/Micro_Decision_HD_Rev1_1983.pdf
service manual with diagram
https://www.mrynet.com/morrow/ftp/Documentation/MDHardDiskServiceGuide.pdf
https://deramp.com/downloads/mfe_archive/010-S100%20Computers%20and%20Boards/00-Morrow%20-%20Thinker%20Toys%20-%20Microstuff/20-Morrow%20Systems/MD-5%20Hard%20Disk%20Micro%20Decision/MDHardDiskServiceGuide1984.pdf
The only big chips are
U2 Zilog Z8400 CPU
U6 D8253 PIT
U25 Zilog Z8470 DART
U27 Zilog Z8443 SIO
U29 SEEQ EPROM
U74 SIGNETICS N82S105 PLA, pretty slick for 1979
and 3 PALs
Disk controller is on page 46. It looks like MFM controller was
implemented with SIGNETICS PLA, and fully discrete data separator page
47.

if you have a logic analyser you can try
https://github.com/raszpl/sigrok-disk to sanity check the format.
--
Who logs in to gdm? Not I, said the duck.
Reply all
Reply to author
Forward
0 new messages