[comp.sys.amiga.hardware] Decoding MFM

la@doc.ic.ac.uk (Liaket Ali) (01/25/91)

Hi Amiga Fans!

Could anyone offer some help (info/source) on how to convert raw MFM data into
intelligible information. In the RKM Libs&Devs, mention is made of the use of
the blitter in this task but I could not find any further info on it. Also is
it possible to use the CPU to do the decoding.

Any help would be appreciated.

==============================================================================

LIAKET ALI     a.k.a.     la@doc.ic.ac.uk

v089pfrb@ubvmsd.cc.buffalo.edu (Jeffrey C Murphy) (01/27/91)

In article <2786@gould.doc.ic.ac.uk>, la@doc.ic.ac.uk (Liaket Ali) writes...
>Hi Amiga Fans!
> 
>Could anyone offer some help (info/source) on how to convert raw MFM data into
>[del...snip....del...cut..]

 With MFM every data bit is followed by a clock bit (the clock bit is toggled
according to the status of the adjacent  clock bits: if an adjacent data bit
is set then the clock bit is reset and versa vice-a)

Data:    1 0 1 0 0 0 0 1
Clock:  0 0 0 0 1 1 1 0
MFM:    0100010010101001

To decode you can use this simple routine (assuming you already have the
data in memory):

 ... 
 MOVE.L (A0)+,D0     ; get first longword
 MOVE.L (A0)+,D1     ; get second
 ANDI.L #$55555555,D0 ;remove clock bits
 ANDI.L #$55555555,D1 ;for d1 too
 LSL.L #1,D1         ; Shift bits in D1 over one position
 OR.L D1,D0          ; Overlay D1 on D0 and put in D0
 ...

As far as the blitter goes, it can do this much faster than the cpu can
(unless you have a fast cpu) but requires you to set up structures for the
blitter (which I have not really learned about  yet....)

I got the decode routine from Amiga Disk Drives Inside and Out by Abacus,
which is about the worst proging book I have ever read (they repeatedly
refer to absolute memory addresses! and routines that are not always at the
addresses that they say.) This is because they get the book from Data Becker,
a german company which thinks the amiga is really a C64 with everything 
permanently in rom. sigh... Anywaze... a pretty good book (although not the
best) is the amiga programmer's handbook by sybex. I don't know if it is
still available.

Hope this helps.

Jeff M. SUNYAB
v089pfrb@ubvmsd.bitnet

jesup@cbmvax.commodore.com (Randell Jesup) (01/27/91)

In article <2786@gould.doc.ic.ac.uk> la@doc.ic.ac.uk (Liaket Ali) writes:
>Hi Amiga Fans!
>
>Could anyone offer some help (info/source) on how to convert raw MFM data into
>intelligible information. In the RKM Libs&Devs, mention is made of the use of
>the blitter in this task but I could not find any further info on it. Also is
>it possible to use the CPU to do the decoding.

	Decode is easy.  take the two halves of the longword, and each of
them with $55555555, shift the even bits 1 left, and or them together.  Note
that in the headers, they are adjacent - in the data block, it goes <all the
odd bits> <all the even bits> (or vice versa, I forget at the moment).
There was stuff about this in the RKMs.

	Encoding isn't so simple.

-- 
Randell Jesup, Keeper of AmigaDos, Commodore Engineering.
{uunet|rutgers}!cbmvax!jesup, jesup@cbmvax.commodore.com  BIX: rjesup  
The compiler runs
Like a swift-flowing river
I wait in silence.  (From "The Zen of Programming")  ;-)

p554mve@mpirbn.mpifr-bonn.mpg.de (Michael van Elst) (01/29/91)

In article <18157@cbmvax.commodore.com> jesup@cbmvax.commodore.com (Randell Jesup) writes:
>	Decode is easy.  take the two halves of the longword, and each of
>them with $55555555, shift the even bits 1 left, and or them together.

That's true for the Amiga version of MFM. Plain IBM compatible controllers
(that use MFM as well) use a different scheme.

Regards,
-- 
Michael van Elst
UUCP:     universe!local-cluster!milky-way!sol!earth!uunet!unido!mpirbn!p554mve
Internet: p554mve@mpirbn.mpifr-bonn.mpg.de
                                "A potential Snark may lurk in every tree."

jesup@cbmvax.commodore.com (Randell Jesup) (01/30/91)

In article <1480@mpirbn.mpifr-bonn.mpg.de> p554mve@mpirbn.UUCP (Michael van Elst) writes:
>In article <18157@cbmvax.commodore.com> jesup@cbmvax.commodore.com (Randell Jesup) writes:
>>	Decode is easy.  take the two halves of the longword, and each of
>>them with $55555555, shift the even bits 1 left, and or them together.
>
>That's true for the Amiga version of MFM. Plain IBM compatible controllers
>(that use MFM as well) use a different scheme.

	True.  On IBM MFM, the data is stored in sequential order with
timing bits.  So to get 16 bits of data, you take a longword, remove every
other bit, then compress the remaining ones down to 16 bits. (Actually more
likely you do a series of lsr #2,dn; ror #1,dm after a single lsr #1,dn;
ror #1,dm, or use a table-based routine).

	IBM format also uses gaps inbetween each sector header and sector
data, and gaps inbetween sector data and the next sector header, 3 sync
marks instead of 2, a different sector format type (amiga is 0xff), and of
course CRCs instead of checksums.

-- 
Randell Jesup, Keeper of AmigaDos, Commodore Engineering.
{uunet|rutgers}!cbmvax!jesup, jesup@cbmvax.commodore.com  BIX: rjesup  
The compiler runs
Like a swift-flowing river
I wait in silence.  (From "The Zen of Programming")  ;-)

rbabel@babylon.rmt.sub.org (Ralph Babel) (02/12/91)

In article <1991Feb12.075454.6227@Neon.Stanford.EDU>
frankjr@Neon.Stanford.EDU (Frank AnthonyJr Busalacchi) writes:

> Really good book as all ABACUS books seem to be.

British culture; military justice; governmental restraint;
civil war; jumbo shrimp; American history; a good Abacus
book --- What do all these have in common?

s1013734@usage.csd.oz (Peter Urbanec,5SK,6621322,6621322) (02/12/91)

From article <2786@gould.doc.ic.ac.uk>, by la@doc.ic.ac.uk (Liaket Ali):
> 
> Could anyone offer some help (info/source) on how to convert raw MFM data into
> intelligible information. In the RKM Libs&Devs, mention is made of the use of
> the blitter in this task but I could not find any further info on it. Also is
> it possible to use the CPU to do the decoding.
>

Sure you can do encoding and decoding using the CPU, just write a program that
will do exactly the kind bit of decode described in RKM (11->01 type of thing)
Programing the blitter to do it is rather tricky, but I know that people have
done it in the past. The Abacus book `Amiga DiskDrives inside and out' might have
routines that do it, but I think they would be processor based.

	BUT!!!!

Why the hell would you want to do it by yourself? You can get the trackdisk device
to give you your data in the proper form.

	+------------------------------------------------------+
	|   Peter Urbanec    s1013734@spectrum.cs.unsw.oz.au   |
	|   University of New South Wales, Sydney, Australia   |
	+------------------------------------------------------+
        |         The only sin is stupidity                    |
	|                                   - Unknown.         |
	+------------------------------------------------------+

 

frankjr@Neon.Stanford.EDU (Frank AnthonyJr Busalacchi) (02/12/91)

s1013734@usage.csd.oz (Peter Urbanec,5SK,6621322,6621322) writes:

>From article <2786@gould.doc.ic.ac.uk>, by la@doc.ic.ac.uk (Liaket Ali):
>> 
>> Could anyone offer some help (info/source) on how to convert raw MFM data into
>> intelligible information. In the RKM Libs&Devs, mention is made of the use of
>> the blitter in this task but I could not find any further info on it. Also is
>> it possible to use the CPU to do the decoding.
>>

>Sure you can do encoding and decoding using the CPU, just write a program that
>will do exactly the kind bit of decode described in RKM (11->01 type of thing)
>Programing the blitter to do it is rather tricky, but I know that people have
>done it in the past. The Abacus book `Amiga DiskDrives inside and out' might have
>routines that do it, but I think they would be processor based.

>	BUT!!!!

>Why the hell would you want to do it by yourself? You can get the trackdisk device
>to give you your data in the proper form.

The routines are actually in the ROMS I think.  The abacus book on disk drives
#9 has the routines printed out and documented.  I suggest that you get ahold
of the book.  Really good book as all ABACUS books seem to be.

Abacus #6- Amiga System Programmer's Guide is an excellent book if you are
interested in how the custom chips do their work etc.  It basically teaches
you how to be a bad amiga programmer, and go straight to the chips to do
things like sprites bobs, blitter, scrolling reading joysticks mice etc.

Frank Busalacchi Jr
Stanford University Undergraduate Computer Science Department
Unix Consultant
Software Alchemy

dave@cs.arizona.edu (Dave P. Schaumann) (02/13/91)

In article <05995.AA05995@babylon.rmt.sub.org> cbmvax.commodore.com!cbmehq!babylon!rbabel (Ralph Babel) writes:
|In article <1991Feb12.075454.6227@Neon.Stanford.EDU>
|frankjr@Neon.Stanford.EDU (Frank AnthonyJr Busalacchi) writes:
|
|| Really good book as all ABACUS books seem to be.
|
|British culture; military justice; governmental restraint;
|civil war; jumbo shrimp; American history; a good Abacus
|book --- What do all these have in common?

You forgot my two favorites: pretty ugly and awfully nice. ;-)
BTW, I would also have to agree with the characterization.
-- 
Dave Schaumann      | DANGER: Access holes may tear easily.  Use of the access
		    | holes for lifting or carrying may result in damage to the
dave@cs.arizona.edu | carton and subsequent injury to the user.

jesup@cbmvax.commodore.com (Randell Jesup) (02/15/91)

In article <1991Feb12.075454.6227@Neon.Stanford.EDU> frankjr@Neon.Stanford.EDU (Frank AnthonyJr Busalacchi) writes:
>>Why the hell would you want to do it by yourself? You can get the trackdisk device
>>to give you your data in the proper form.
>
>The routines are actually in the ROMS I think.  The abacus book on disk drives
>#9 has the routines printed out and documented.  I suggest that you get ahold
>of the book.  Really good book as all ABACUS books seem to be.

	Cough, hack, choke...  Uh, a word of warning: the Abacus disk book
advocates illegal programming technique (and in fact many of the examples 
and programs in it only work with _1.2_ ROMs!)  It encourages direct ROM-
jumping (explicitly disallowed), and mucks with the internals of another
tasks' private data (in a manner which may fail, as well, causing trashed
disks).

	Note these are private comments and not the formal opinions of
Commodore-Amiga Inc (as usual).
-- 
Randell Jesup, Keeper of AmigaDos, Commodore Engineering.
{uunet|rutgers}!cbmvax!jesup, jesup@cbmvax.commodore.com  BIX: rjesup  
The compiler runs
Like a swift-flowing river
I wait in silence.  (From "The Zen of Programming")  ;-)