My interest is solely for its capture and analysis capability, but its emulation capabilities are worth commenting on in passing. With one of these you can keep a disk image as a disk file. These old drives were 10, 20, or 40 megabytes commonly. This is a fairly trivial file size on a modern disk. Being able to keep different disk images, swap them around, even send them to collaborators is a unique ability.
The emulator is based on the BBB (Beaglebone Black) and uses one of the PRU on the BBB to capture the raw MFM bit stream. It can use a BBG (green) as well as a BBB (black).
My friend AJ loaned me one of his that was temporarily collecting dust. Let's see if we can get it set up and reading data from a disk.
David's instructions say to put his prebuilt image onto an SD card and then use it to reflash the BBB. Let us see if we can manage that. We will need a power supply, serial cable, and blank SD card. His prebuild image is 143M in size and downloads in the time it takes to type this sentence.
I find a new micro-SD card, put it into my card reader and plug it in. Linux sets it up as /dev/sdg (be careful to get this right, as copying the BBB to the wrong device can nuke your linux desktop!). Now I do:
unxz BBB-mfm-emu_v2.39.img.xz su dd bs=64M if=BBB-mfm-emu_v2.39.img of=/dev/sdg exit xz BBB-mfm-emu_v2.39.imgNow, I plug the SD card into the BBB, connect my usb to serial gadget to the console. Fire up picocom at 115200 baud and hook up a 5v/2a power dingus. It dives right in and starts flashing. The four blue LED next to the network connector are running back and forth the whole time and there are plenty of messages on the serial console.
##enable BBB: eMMC Flasher: #cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3.sh 100000+0 records in 100000+0 records out 51200000 bytes (51 MB) copied, 3.07247 s, 16.7 MB/s Syncing: /dev/mmcblk1 complete ----------------------------- ....... ....... eMMC has been flashed: please wait for device to power down. ....... ....... INIT: version 2.88 booting DHCPREQUEST on eth0 to 255.255.255.255 port 67 DHCPREQUEST on eth0 to 255.255.255.255 port 67 No DHCPOFFERS received. Trying recorded lease 192.168.2.133 PING 192.168.2.10 (192.168.2.10) 56(84) bytes of data. default username:password is [debian:temppwd] The IP Address for eth0 is: 192.168.2.136 The IP Address for usb0 is: 192.168.7.2 [ 261.934644] Disabling non-boot CPUs ... [ 261.939272] System halted.It all takes less than 5 minutes. Near the end all 4 blue LED are on solid, then finally the lights all go out and it is done.
I remove the SD card, connect a network cable, and power cycle the unit. I see the usual semi-random activity on the LED, and finally on the console, I see:
default username:password is [debian:temppwd] The IP Address for eth0 is: 192.168.2.136 The IP Address for usb0 is: 192.168.7.2 beaglebone login:I thought that the 192.168.2.x address business was going to be a headache, but that apparently is just misleading. Typing ifconfig -a shows the IP to be 192.168.0.126 on my local network. This is in my DHCP range. I set up an alias "mfm" in my /etc/hosts and:
ssh debian@mfm suIt won't let me do "su" over an ssh connection, but it is OK from the serial console. So let me set some passwords for tom and root. I will leave debian alone.
su useradd tom mkdir /home/tom cd /home chown tom:tom tom passwd tom passwd sync haltHalt gives me a kernel panic, but I am quite used to seeing that on BBB, and what can you do about it anyhow, it is somebody elses problem.
Now the BBB gets mated to the Gesswein board. No way to hook up a serial console now! Also careful reading of David's instructions state:
Don't use the barrel jack when the MFM board is installed if the DC/DC converter U12 is also installed on the MFM board.That is interesting and not what I would have expected. Apparently the BBB will get powered from the Gesswein board via the power on the molex connector. A little DC/DC board is indeed installed on the Gesswein board AJ loaned me. Good thing I didn't rush along and try to power it from the barrel jack. I can put that power supply away.
I hook up a network cable and power via the usual drive molex and away we go again. I ssh in, the date looks correct.
I am trying to follow the test instructions and I am told to try a powerfail script. After a bit of searching, I find it at /root/powerfail.
su cd /root/powerfail ./powerfail --debug --powercmd true --threshold 0 Unable to open A/D device /sys/bus/iio/devices/iio:device0/in_voltage0_raw: No such file or directory echo cape-bone-iio > /sys/devices/bone_capemgr.*/slots ./powerfail --debug --powercmd true --threshold 0 Average 12.41V max 12.42V min 12.41V poweroff -fIt just powers down once and for all, which is OK by me. My ssh connection is dead, but the big red light on the emulator is on forever thanks to the big capacitors. For my purposes, I don't think it matters if it works or not and I move along.
I drag out an ST225 drive I bought at a surplus store for just this purpose and the cables I intend to use. I use some paint thinner to clean sticky tape residue off my cables and I am ready to go. Now some questions.
Apparently J3 and J4 are the connectors I want for reading. I find a 34 pin cable without a twist, so I can eliminate that question. My 20 pin cable has a hole obstructed by a plastic key, so I will need to extract that somehow to plug it into the emulator. This turns out to be an easy 10 second operation with a pin probe and I am now all cabled up.
I verify that the write enable jumper P1 is removed. He also recommends powering up the drive after the BBB is booted and the script "setup_mfm_read" has been run. This won't be easy with the drive and the emulator powered from the same supply.
I apply power. No smoke or fire. The disk sounds as such a disk usually does and the BBB boots up powered from the emulator.
ssh mfm su - cd mfm ./mfm_read Unable to open pin 61, did you run the setup script?Nope, I didn't. I get the feeling there must be some documentation somewhere I missed out on. (And there is, see "example usage" below).
root@beaglebone:~/mfm# ./setup_mfm_read Rev B Board oot@beaglebone:~/mfm# ./mfm_read Board revision A detected Drive must be between 1 and 4I create a bash script to hold the long command line and call it "zrun". I put this inside:
#!/bin/bash ./mfm_read --drive 1 --analyze --emulation_file ../emu1 --extracted_data_file ../stdataThen I type:
root@beaglebone:~/mfm# ./zrun Board revision A detected Found drive at select 2 Drive RPM 3599.9 Primary transition period 140 ns, should be around 200 Primary transition period 140 ns, should be around 200 Retrying on cylinder 0 head 1 Primary transition period 140 ns, should be around 200 Unable to determine drive formatWell, we learned the drive is jumpered for drive select 2 anyway.
Ah -- there is a link "example usage" which turns out to be the gold mine about how to actually use the board:
The ST225 has 615 cylinders, 4 heads (2 disks), 17 sectors per track. Precomp at 300. 512 bytes per sector. Landing zone at 670.So, away we go using the second method as per the documentation I found. It goes fast reporting cylinders on multiples of 5.
./mfm_read --emulation_file ../emu1 --cylinders 615 --heads 4 --drive 2 Board revision A detected Track read time in ms min 21.254209 max 3576.761833 avg 41.245358For fun, I run this a second time, but let it put data in a file "emu2". When this finishes, I see:
ls -l -rw-r--r-- 1 root root 51286213 May 23 22:56 emu1Heck with this drive, let's get brave and try the Callan drive which is what I am really interested in. (It looks like this ST225 may have been wiped clean, i.e deformatted -- maybe)
root@beaglebone: ./mfm_read --analyze --emulation_file ../callan_emu1 --extracted_data_file ../callan_data1 Board revision A detected Found drive at select 1 Drive RPM 3604.0 Matches count 34 for controller WD_1006 Header CRC: Polynomial 0x1021 length 16 initial value 0xffff Sector length 512 Data CRC: Polynomial 0x140a0445 length 32 initial value 0xffffffff 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 17 first sector 0 Interleave (not checked): 0 9 1 10 2 11 3 12 4 13 5 14 6 15 7 16 8 Drive supports buffered seeks (ST412) Found cylinder 0 expected 256 Found cylinder 1 expected 257 Stopping end of disk search due to mismatching cylinder count Number of cylinders 256, 17.8 MB Command line to read disk: --format WD_1006 --sectors 17,0 --heads 8 --cylinders 256 --header_crc 0xffff,0x1021,16,0 --data_crc 0xffffffff,0x140a0445,32,6 --sector_length 512 --retries 50,4 --drive 1 Expected sector size 512 header says 256 cyl 0 head 0 sector 0 Expected sector size 512 header says 256 cyl 0 head 0 sector 6 Expected sector size 512 header says 256 cyl 0 head 0 sector 12 Expected sector size 512 header says 256 cyl 0 head 0 sector 1 Expected sector size 512 header says 256 cyl 0 head 0 sector 7 Expected sector size 512 header says 256 cyl 0 head 0 sector 13 Expected sector size 512 header says 256 cyl 0 head 0 sector 2 Expected sector size 512 header says 256 cyl 0 head 0 sector 8 Expected sector size 512 header says 256 cyl 0 head 0 sector 14 .... Expected sector size 512 header says 256 cyl 255 head 7 sector 8 Found cyl 0 to 255, head 0 to 7, sector 0 to 16 Expected 34816 sectors got 34814 good sectors, 0 bad header, 2 bad data 0 sectors marked bad or spare 1 sectors corrected with ECC. Max bits in burst corrected 1 Track read time in ms min 29.197292 max 3488.321875 avg 42.575290The disk is in fact a Rodime 204 with 4 physical disks (hence 8 heads), formatted with 256 byte sectors (32 per track), and it has 320 cylinders.
Next I did this:
./mfm_read --transitions_file ../callan_raw1 --drive 1 --heads 8 --cylinders 320 ./mfm_read --transitions_file ../callan_raw2 --drive 1 --heads 8 --cylinders 320These ran fine with no errors reported.
Tom's Computer Info / [email protected]