[comp.sys.mac.programmer] Recognizing SuperDrives

thecloud@dhw68k.cts.com (Ken McLeod) (07/02/89)

  Question: how can I determine whether a given floppy disk drive, which
is physically attached and in the drive queue (and which may or may not
contain a disk) is a SuperDrive?
  Using the Sony equates file from MPW 3.0, I developed a Pascal interface
to the Sony driver vars (a portion of which follows). Unfortunately, when
tested on a IIx with a SuperDrive, the 'mfmDrive' byte was $00. A dump of
the record I was examining showed that all other values seemed to be correct.
Obviously, hardware interfaces are 'unsupported' and in flux, but if there's
a way to get this info, I'd appreciate any help.
  Here's the interesting portion:

DrvStsRec   =   RECORD          { length = 66 }
    track       : integer;      { current track location (used for spd) }
    writeProt   : SignedByte;   { * bit7=1=write-protected }
    diskInPlace : SignedByte;   { * $FC-$FF= just ejected,
                                ; 0=no disk in place,1=DIP,2=clamped }
    installed   : SignedByte;   { * 0=don't know, 1=inst., $FF=not inst. }
    sides       : SignedByte;   { * bit7=0=1 sided }
    driveQLink  : QElemPtr;     { next drive queue element }
    driveQType  : integer;
    driveQDrive : integer;      { drive number }
    driveQRefnum: integer;
    driveQFSID  : integer;
    twoSideFmt  : SignedByte;   { * non-zero if 2-sided format
                             ; only valid when diskInPlace=2; see IM II-215 }
  { driveSize  EQU  twoSideFmt  ; drive block size (DCD only!) }

    newIntf      : SignedByte;  { $FF if new interface, $00 for old }
    driveErrs   : integer;      { drive soft errs
                                ; drive block size (high word)  }

    mfmDrive    : SignedByte;   { $FF=SuperDrive, $00=400K or 800K GCR }
    mfmDisk     : SignedByte;   { $FF=MFM, $00=GCR or unformatted }
    twoMegFmt   : SignedByte;   { $FF=2 meg MFM (1440K), $00=1 meg (720K) }
    driveManf   : SignedByte;
{ trkSpeedTbl   EQU         26  ; 5-entry track speed table }
    tSTblCode1  : integer;      { first is speed code }
    tSTblDelta1 : integer;      { 2% speed code delta }
    tSTblTicks1 : longint;      { longword last time checked tick cnt }
{ ... rest of record ... }
---

-- 
==========     .......     =============================================
Ken McLeod    :.     .:    UUCP: ...{spsd,zardoz,felix}!dhw68k!thecloud
==========   :::.. ..:::   INTERNET: thecloud@dhw68k.cts.com
                ////       =============================================