Maxtor XT 2190 - From a Wang DS (Data Storage Cabinet)

32 views
Skip to first unread message

Alexey Pavlenko

unread,
Aug 7, 2025, 2:29:33 AMAug 7
to MFM Discuss
I've acquired a Wang Micro VP system (Wang 2200) with a Data Storage Peripheral 

Trying to get an image of the hard disk, but running into some issues so hoping to get some pointers.

The drive is a Maxtor XT 2190
From the docs online this has
15 heads
1224 sectors

When trying to image, I get a "Fault reading deltas cmd 400 status 40000028" error

The drive format is detected as Found matching format Intel_iSBC_214_256B - not sure if this is correct.
If I try without analyze, I get the same error.

Here's some outputs:

 mfm_read --analyze --transitions_file wang_mvp_images/wang_microvp_with_analyze.raw
Board revision C detected
Found drive at select 1
Returning to track 0
Drive RPM 3596.6
Found matching format Intel_iSBC_214_256B: good count difference -1
Selected head 8 found 0, last good head found 7
Read errors trying to determine sector numbering, results may be in error
Number of heads 8 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
Drive supports buffered seeks (ST412)
Fault reading deltas cmd 400 status 40000028 cyl 288 head 1
Not Write fault
Seek complete
Not Index
Ready
Drive selected
CMD_DATA 0 delta count 0



mfm_read --drive 1 -h 15 -c 1224 --transitions_file wang_mvp_images/wang_microvp_h_15.raw
Board revision C detected
Returning to track 0
Disk has recalibrated to track 0
Fault reading deltas cmd 400 status 40000028 cyl 470 head 0
Not Write fault
Seek complete
Not Index
Ready
Drive selected
CMD_DATA 0 delta count 0


mfm_read --drive 1 -h 15 -c 1224 --transitions_file wang_mvp_images/wang_microvp_h_15_v2.raw
Board revision C detected
Returning to track 0
Fault reading deltas cmd 400 status 40000028 cyl 288 head 0
Not Write fault
Seek complete
Not Index
Ready
Drive selected
CMD_DATA 0 delta count 0



mfm_read --drive 1 -h 15 -c 1224 --transitions_file wang_mvp_images/wang_microvp_h_15_v3.raw
Board revision C detected
Returning to track 0
Fault reading deltas cmd 400 status 40000028 cyl 505 head 0
Not Write fault
Seek complete
Not Index
Ready
Drive selected
CMD_DATA 0 delta count 0



mfm_read --drive 1 -h 15 -c 1224 --ignore_seek_errors --retries 50,51 --transitions_file wang_mvp_images/wang_microvp_h_15
_v4.raw
Board revision C detected
Returning to track 0
Fault reading deltas cmd 400 status 40000028 cyl 288 head 0
Not Write fault
Seek complete
Not Index
Ready
Drive selected
CMD_DATA 0 delta count 0



mfm_read --drive 1 -h 15 -c 1224 --ignore_seek_errors --retries 50,51 --sector_length 256 --transitions_file wang_mvp_images/wang_microvp_h_15_v5.raw
Board revision C detected
Returning to track 0
Fault reading deltas cmd 400 status 40000028 cyl 288 head 0
Not Write fault
Seek complete
Not Index
Ready
Drive selected
CMD_DATA 0 delta count 0


I think maybe the drive might be a bit stuffed, but hoping there might be some ways to work around this. My MFM knowledge isn't great so I'm sure I've missed some things to try/test.

Any help much appreciated!

Regards

Alexey Pavlenko

unread,
Aug 7, 2025, 4:50:33 AMAug 7
to MFM Discuss
Here's a link the the largest transition file that got to cyl 505 : https://drive.google.com/file/d/1Y_B-VYU0eiIA-GMH8RZ87KHzh7p_Alnw/view?usp=sharing

The controller chip appears to be a WD2010B-PL - if that helps

Alexey Pavlenko

unread,
Aug 7, 2025, 4:52:01 AMAug 7
to MFM Discuss
*Cylinders (not sectors): 1224

David Gesswein

unread,
Aug 7, 2025, 11:03:38 AMAug 7
to mfm-d...@googlegroups.com
The error is the code doesn't see an index pulse in 25 milliseconds.
Checking the transistions file you send a link to it shows the drive is
somewhat unhappy. Some bad sectors and ECC corrections but not that bad.

What we do see with mfm_util is this
Mismatch cyl 217,0 head 4,4 index 0
...
Mismatch cyl 218,1 head 0,0 index 0
etc

This indicates the drive recalibrated to cylinder 0 when I told it to
switch from head 3 to head 4. From then on its reading from beginning of
disk again.

Makes it further on the second pass. Likely recalibrated to 0 trying to go
to cyl 288. The recalibration likely stopped the index pulses for long enough
to cause the error.
Mismatch cyl 504,287 head 7,7 index 31

Have a couple options
First is to increase the timeout for missing index pulses.
Not sure which OS version you have. Don't have record of sale to you.
For what I'm currently shipping edit
/opt/mfm/mfm/prucode0.p and change this line to increase timeout. Try adding
another zero.
#define INDEX_TIMEOUT 5000000 // 25 milliseonds
After the code changes type make to rebuild.

If this get analyze to work it will handle the drive recalibrates by
seeking back to the cylinder that it was trying to read.

The other option is to read the drive in pieces without analyze.

Use mfm_util to see highest cylinder you were able to read. It will not be
the cylinder printed by mfm_read.
mfm_util --ana --tran /tmp/wang_microvp_h_15_v3.raw --ext /tmp/t --quiet 1

In
/opt/mfm/mfm/drive_read.c
drive_read_disk
change this line the 0 to the last cylinder you saw data from. If it always
recalibrates you can try a higher cylinder and see if it gets past the
problem area.
for (cyl = 0; cyl < drive_params->num_cyl; cyl++) {

The code doesn't handle the truncated files well. Would need to write some
code to merge the separate reads back together.

After the code changes type make to rebuild.

To verify what cylinders are in the file you will need to specify all
the parameters. Analyze will be confused by it not starting at cylinder 0.

mfm_util --format Intel_iSBC_214_256B --sectors 32,0 --heads 8 --cylinders 1224 --header_crc 0xffff,0x1021,16,0 --data_crc 0xffffffff,0x140a0445,32,6 --sector_length 256 --tran filename --ext /tmp/t
> --
> 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/51cbf81d-87c1-4f43-8171-8d05f1d02d38n%40googlegroups.com.

Alexey Pavlenko

unread,
Aug 8, 2025, 4:20:37 AMAug 8
to MFM Discuss

Thank you for the help David!

I've set the timeout  5000000 and also  50000000, unfortunately that hasn't helped

I've managed to get 4 parts for the drive with your 2nd suggestion by editing which cylinders the read starts from.

Pasting the output here:

mfm_read --drive 1 -h 15 -c 1224 --transitions_file wang_microvp_01.raw

Board revision C detected
Returning to track 0
Fault reading deltas cmd 400 status 28 cyl 288 head 0

Not Write fault
Seek complete
Not Index
Ready
Drive selected
CMD_DATA 0 delta count 0


 mfm_read --drive 1 -h 15 -c 1224 --transitions_file wang_microvp_02.raw

Board revision C detected
Returning to track 0
Fault reading deltas cmd 400 status 28 cyl 470 head 0

Not Write fault
Seek complete
Not Index
Ready
Drive selected
CMD_DATA 0 delta count 0

 mfm_read --drive 1 -h 15 -c 1224 --transitions_file wang_microvp_03.raw

Board revision C detected
Returning to track 0
Fault reading deltas cmd 400 status 28 cyl 957 head 0

Not Write fault
Seek complete
Not Index
Ready
Drive selected
CMD_DATA 0 delta count 0

mfm_read --drive 1 -h 15 -c 1224 --transitions_file wang_microvp_04.raw

 Board revision C detected
Returning to track 0
Track read time in ms min 29.182667 max 735.142083 avg 41.287581


mfm_until results

(tail)
mfm_util --analyze --transitions_file ./wang_microvp_01.raw  --ext /tmp/t --quiet 1
Got exp 287,7 cyl 287 head 7 sector 28,28 size 256 bad block 0
Got exp 287,7 cyl 287 head 7 sector 29,29 size 256 bad block 0
Got exp 287,7 cyl 287 head 7 sector 30,30 size 256 bad block 0
Got exp 287,7 cyl 287 head 7 sector 31,31 size 256 bad block 0
Failed to read word from transition file 0 4

mfm_util --analyze --transitions_file ./wang_microvp_02.raw  --ext /tmp/t --quiet 1
Original decode arguments: --heads 15 --cylinders 1224 --sector_length 512 --retries 50,4 --drive 1
Failed to read word from transition file 0 4

mfm_util --analyze --transitions_file ./wang_microvp_03.raw  --ext /tmp/t --quiet 1
Original decode arguments: --heads 15 --cylinders 1224 --sector_length 512 --retries 50,4 --drive 1
Failed to read word from transition file 0 4

(tail)
mfm_util --analyze --transitions_file ./wang_microvp_04.raw  --ext /tmp/t --quiet 1
Trying controller Vector4_ST506 Polynomial 0x10183031 length 32 initial value 0x920d65c0
Trying controller Vector4_ST506 Polynomial 0x10183031 length 32 initial value 0xef26129d
Trying controller Vector4_ST506 Polynomial 0x105187 length 32 initial value 0x0
Trying controller Vector4_ST506 Polynomial 0x105187 length 32 initial value 0xffffffff
Trying controller Vector4_ST506 Polynomial 0x105187 length 32 initial value 0x2605fb9c
Trying controller Vector4_ST506 Polynomial 0x105187 length 32 initial value 0xd4d7ca20
Trying controller Vector4_ST506 Polynomial 0x105187 length 32 initial value 0x409e10aa
Trying controller Vector4_ST506 Polynomial 0x105187 length 32 initial value 0xe2277da8
Trying controller Vector4_ST506 Polynomial 0x105187 length 32 initial value 0x84a36c27
Trying controller Vector4_ST506 Polynomial 0x105187 length 32 initial value 0xed800493
Trying controller Vector4_ST506 Polynomial 0x105187 length 32 initial value 0xec1f077f
Trying controller Vector4_ST506 Polynomial 0x105187 length 32 initial value 0xde60050c
Trying controller Vector4_ST506 Polynomial 0x105187 length 32 initial value 0x3affc1d
Trying controller Vector4_ST506 Polynomial 0x105187 length 32 initial value 0xbe87fbf4
Trying controller Vector4_ST506 Polynomial 0x105187 length 32 initial value 0x58e07342
Trying controller Vector4_ST506 Polynomial 0x105187 length 32 initial value 0xcf2105e0
Trying controller Vector4_ST506 Polynomial 0x105187 length 32 initial value 0x920d65c0
Trying controller Vector4_ST506 Polynomial 0x105187 length 32 initial value 0xef26129d
Trying controller Vector4_ST506 Polynomial 0x5140c101 length 32 initial value 0x0
Trying controller Vector4_ST506 Polynomial 0x5140c101 length 32 initial value 0xffffffff
Trying controller Vector4_ST506 Polynomial 0x5140c101 length 32 initial value 0x2605fb9c
Trying controller Vector4_ST506 Polynomial 0x5140c101 length 32 initial value 0xd4d7ca20
Trying controller Vector4_ST506 Polynomial 0x5140c101 length 32 initial value 0x409e10aa
Trying controller Vector4_ST506 Polynomial 0x5140c101 length 32 initial value 0xe2277da8
Trying controller Vector4_ST506 Polynomial 0x5140c101 length 32 initial value 0x84a36c27
Trying controller Vector4_ST506 Polynomial 0x5140c101 length 32 initial value 0xed800493
Trying controller Vector4_ST506 Polynomial 0x5140c101 length 32 initial value 0xec1f077f
Trying controller Vector4_ST506 Polynomial 0x5140c101 length 32 initial value 0xde60050c
Trying controller Vector4_ST506 Polynomial 0x5140c101 length 32 initial value 0x3affc1d
Trying controller Vector4_ST506 Polynomial 0x5140c101 length 32 initial value 0xbe87fbf4
Trying controller Vector4_ST506 Polynomial 0x5140c101 length 32 initial value 0x58e07342
Trying controller Vector4_ST506 Polynomial 0x5140c101 length 32 initial value 0xcf2105e0
Trying controller Vector4_ST506 Polynomial 0x5140c101 length 32 initial value 0x920d65c0
Trying controller Vector4_ST506 Polynomial 0x5140c101 length 32 initial value 0xef26129d
Trying controller Vector4_ST506 Polynomial 0x8222f0804bda23 length 56 initial value 0x0
Trying controller Vector4_ST506 Polynomial 0x8222f0804bda23 length 56 initial value 0xffffffffffffff
Drive not indicating track 0 when should be on cylinder 0
Unable to determine drive format



I've uploaded the 4 parts here:



Would you have any pointers on how to merge the files?

David Gesswein

unread,
Aug 8, 2025, 7:08:47 AMAug 8
to mfm-d...@googlegroups.com
In the previous posting I gave the syntax you will need with mfm_util to
decode the data to check you got all tracks. You can't use analyize.

If you have enough programming skills to deal with my code you can use the
code in emu_tran_file.c to read the files and write out one merged one.

use tran_file_read_header to read the header. For the first file use
tran_file_write_header to write out the header. For the rest don't.
use tran_file_read_track_deltas to read a track of deltas. Use
tran_file_write_track_deltas to write to new file.
call tran_file_close when done to write end of file to output file.

You will need to either make tran_file_read_track_deltas not exit
when it does a short read but return error or see how many
tran_file_read_track_deltas work for each file any only do that many reads.

I'm busy for a week and a half so probably won't have time to do this myself
until after that.
> To view this discussion visit https://groups.google.com/d/msgid/mfm-discuss/24961983-b4ce-4f09-a259-705a07b880b0n%40googlegroups.com.

Alexey Pavlenko

unread,
Aug 13, 2025, 9:15:38 PMAug 13
to MFM Discuss
Thank you for the pointers.

I've managed to put together a merged transitions file  - I was able to create a working emulation file, that boots the Wang MicroVP system with what was on the physical drive.

For booting I also needed to create/fill the missing cylinders for the system not give a format/disk error when part way through startup.



My notes, might be useful for someone in the future:

I wasn't able to get the emulator to read those missing cylinders with multiple runs, there were 3 in my case, 288, 470, 957 

I created the separate files using mfm_read, for each one created running mfm_util to see the last OK cylinder - updating the code to start from the 1 after the unreadable cylinder,
then created 3 files for those missing cylinders to add to the merge, in between the 4 separate mfm_read output files

I was then able to use mfm_util to create an emu file

I did use an LLM to create most of the code I needed, as my C and HDD knowledge is lacking, 1 util for merging the files and 1 util for creating a cylinder with the correct headers to replace the missing ones

(Not sure if there's a policy on this, I can add those utils here if OK - not sure about their quality but it did work...)

There is missing data for those 3 cylinders of course, but there doesn't seem to be anything critical for the system to run though, which I'm happy with.

d...@pdp8online.com

unread,
Aug 16, 2025, 7:37:47 AMAug 16
to MFM Discuss
Been busy. Good to hear you got a usable image. I have a contrib directory I can put the code in. You can upload a zip/tar file here or send me a link to files. Will be interesting to see what the LLM did. Only played with them a little.

Alexey Pavlenko

unread,
Aug 17, 2025, 5:25:29 AMAug 17
to MFM Discuss
I've uploaded a zip with the 2 files via the link. 
Thank you again for the help!
Reply all
Reply to author
Forward
0 new messages