« Return to Thread: Constructing a PLL for MFM-reading

Constructing a PLL for MFM-reading

by Rikard Bosnjakovic-2 :: Rate this Message:

Reply to Author | View in Thread

I'm going to extract raw-data from an old Amiga floppydrive without
using a floppy disk controller. That is, I'm reading the data-gate on
the floppy drive feeding it into a microcontroller and then perform
the MFM-decoding of the data myself.

There's not a lot of documentation available, but what I've been able
to dig out is this:

* How the MFM-data is laid out. The data itself is twice as large as
the actual data: '1' is encoded as 01, '0' is encoded as 10 (if
following a '0') or 00 (if following a '1'), according to the Amiga
Hardware reference manual. However,
http://au.geocities.com/redskulldc/transactor/disksys.pdf claims that
both data and clock bits are interleaved together in the stream, like
this:

  Number 18:    1   0   0   1   0
  Clock bits: 0   0   1   0   0
  MFM:        0 1 0 0 1 0 0 1 0 0

Extending this example to the number 89 I get this:

  Number 89:  1   0   1   1   0   0   1
  Clock:    0   0   0   0   0   1   0
  MFM:      0 1 0 0 0 1 0 1 0 0 1 0 0 1

I.e. the clock is not predeterminable (or whatever the word for it is).

* Each bitcell on the floppy is 2us big (or wide, or whatever you would call it)

* There's a "sync-word" (0x4489 which cannot be replicated by using
standard data-encoding) that starts each track.

Now, the implementations I've read about is that the Amiga uses a PLL
to sync the floppy-reads. I have little knowledge of PLL:s, just a
vague theorethical hint of how they work, but since the clock stream
is not a plain "010101010101..." one I cannot think of a way to
determine how to implement this, or why.

Half the bits (every second) need to get ridden of. How do I make sure
if bit 0 in the read stream is clock or data? Somehow by using the
syncword, but I cannot find any more in-depth documentation about
this. I guess that the syncword is some sort of a trigger for the PLL
to set up a proper clock generator. If anyone could shed some light of
how a PLL does its work in this situation I'd be grateful.

What other questions should I ask?


--
- Rikard - http://bos.hack.org/cv/
--
http://www.piclist.com PIC/SX FAQ & list archive
View/change your membership options at
http://mailman.mit.edu/mailman/listinfo/piclist

 « Return to Thread: Constructing a PLL for MFM-reading