On Mon, Jan 30, 2012 at 6:12 PM, Fred Cisin <cisin at xenosoft.com> wrote:
FM and MFM CAN be done without them, particularly if
it reads track at a
time.
What does tyhe Amiga do?
The Amiga does an entire track of raw data to and from GCR in memory
(via logical terms applied by the custom chipset) and slurps in or
spews out an entire track of GCR-encoded data via an
8000-plus-bit-long shift register (in the Paula/sound chip). On
reads, the shift register pulls in about 1.1 revolutions worth of data
and lets the logical terms do the GCR decoding on the entire buffer.
For writes, I think it writes nulls for a portion of a revolution, to
clear out old data, then it emits the GCR-encoded data as one write,
overlapping an unknown number of nulls (and by "null", I don't know if
it's binary 00000000; it could be a GCR-encoded "null" - I haven't had
to do that level of disk reads myself so I'm a little fuzzy at that
layer).
Unlike sector-at-a-time formats, the sector-to-sector gap on Amigas is
fixed and only as many bytes as required to wrap up one sector and
start another. The real "gap" is at the end of the track and is of
variable length depending on how many millimeters long the specific
track is and how many bits it holds.
The hardware is not *required* to do it that way, since Amigas can
read IBM-formatted floppies (DD or HD, if your Amiga is equipped with
a drive that rotates at half-speed for HD disks (since the shift
register can only go so fast)), but "Amiga Format" is always done with
the sectors jammed up against each other a track at a time.
Phrased differently (and perhaps more succinctly), Amigas do the
sector separation in software with a hardware assist from the graphics
chips to do it in fewer machine cycles (it's why floppy buffers have
to allocated in CHIP RAM that can slow the machine down due to
contention when elaborate screen modes are being displayed)
The whole ugly mess is largely documented in the Rom Kernel Modules,
but in practice, unless you happen to be writing GCR disk utilities,
most Amiga programmers don't do more than allocate buffers and call
system library routines to invoke hidden magic.
-ethan