
     messydisk.device()    Amiga Programmer's Manual     messydisk.device()



     1mSYNOPSYS 
          0m#include <exec/io.h>
          #include <devices/trackdisk.h>
          #include <dev.h>

          OpenDevice("messydisk.device", Unit, IOExtTD, Flags);
          BeginIO(IOExtTD);
          CloseDevice(IOExtTD);

     1mUSAGE 
          0mMessydisk.device  can  be  used instead of trackdisk.device.
          All current trackdisk.device commands are  supported.    The
          only  functional difference is the format of the disk, which
          is compatible with messydos systems.  

     1mCOMMANDS 
          0mSupported commands are: 

          = CMD_INVALID     = CMD_RESET       * CMD_READ
          * CMD_WRITE       * CMD_UPDATE      = CMD_CLEAR
          = CMD_STOP        = CMD_START       = CMD_FLUSH
            TD_MOTOR        = TD_SEEK         * TD_FORMAT
            TD_REMOVE         TD_CHANGENUM      TD_CHANGESTATE
            TD_PROTSTATUS     TD_RAWREAD        TD_RAWWRITE
            TD_GETDRIVETYPE   TD_GETNUMTRACKS = TD_ADDCHANGEINT
          = TD_REMCHANGEINT * ETD_WRITE       * ETD_READ
            ETD_MOTOR       = ETD_SEEK        * ETD_FORMAT
          * ETD_UPDATE      = ETD_CLEAR         ETD_RAWREAD
            ETD_RAWWRITE

          The commands marked with * are handled in its own format  by
          messydisk.   The  commands  marked  with  =  are  handled by
          messydisk in the same way as trackdisk supposed  is  to  do.
          The  other  commands  are sent straight through to trackdisk
          and are subject to all its flaws and features.  

     1mOPENDEVICE FLAGS 
          0mTDF_ALLOW_NON_3_5: Allows opening 40 track drives.  Ignored,
          since it is the default behaviour which cannot be disabled.  

     1mIO REQUEST FLAGS 
          0mThe io_Flags field of an IOStdReq or IOExtTD  structure  may
          contain the following flags: 

          IOF_QUICK: This flag is supported for only a few commands.  

          IOTDF_INDEXSYNC: For ETD/CMD_RAWREAD and _WRITE.  

          IOMDF_40TRACKS:  This  flag  is  for  ETD/CMD_READ,  _WRITE,
          _FORMAT, and _SEEK.  If set, treat the disk as  40  cylinder
          media.   If  it happens to be in an 80 cylinder drive, every
          other cylinder will be skipped to use the same  cylinders  a
          40-cylinder drive  would.    Normally  you set or clear this
          flag once at the time you read the bootblock and examine its
          layout information.  It is guaranteed that  messydisk  won't
          change this  flag.    IOMDF_40TRACKS  is  not  supported for
          ETD/TD_RAWREAD and _RAWWRITE, since these are considered  to


     KosmoSoft                        -1-                      Version 34.5


     messydisk.device()    Amiga Programmer's Manual     messydisk.device()


          be  "diagnostic" functions and therefore should be as raw as
          possible.  

     1mDISK FORMAT 
          0mThe disk format used is compatible  with  messydos  systems.
          Both 40  and  80  cylinder  media  are supported.  There are
          normally 9 sectors per track and two  tracks  per  cylinder.
          (Outdated)  single-sided  disks  can  only  be  read  if the
          driving  software  is  prepared  to  treat  them  as  normal
          double-sided disks, and skip the sides that are not actually
          present.  On the other hand, the number of sectors per track
          may vary from 8 to 10. If the number of sectors is different
          from  the  default value (9), then track 0 on side 0 must be
          read first before this is recognized.  It  is  then  assumed
          that  all  tracks on the entire disk have the same number of
          sectors.  So, all position calculations  are  based  on  the
          layout of the very first track.  

          --- Index pulse  ------------------------------------.
                                                               |
              60 * $4e    GAP 1   ($9254 encoded)              |
                                                               |
          --- First Sector -----------------------------.      |
                                                        |      |
              12 * $00    GAP 2   ($AAAA encoded)       |      |
           |   3 * $a1    SYNC    ($4489 encoded)       |      |
           |                                            |      |
           |   1 * $fe    ID-Address Mark   -. ($5554)  |      |
           |  track                          |          |      |
           |  side                           |          |      |
           |  sector                          > ID      |      |
           |  length (0=128,1=256,2=512 etc.)|  Field   |  S   |
           -> CRC 1                          |          |  e   |  T
           -> CRC 2                         -'          |  c   |  r
                                                         > t    > a
              22 * $4e    GAP 1   ($9254 encoded)       |  o   |  c
              12 * $00    GAP 2   ($AAAA encoded)       |  r   |  k
           |   3 * $a1    SYNC    ($4489 encoded)       |      |
           |                                            |      |
           |   1 * $fb    DATA-Adress Mark  -. ($5545)  |      |
           |  512 bytes data                  > DATA    |      |
           -> CRC 1                          |  Field   |      |
           -> CRC 2                         -'          |      |
                                                        |      |
                                                        |      |
              80 * $4e    GAP 3   ($9254 encoded)       |      |
          ----------------------------------------------'      |
                                                               |
           ...... 8 more sectors .......                       |
                                                               |
              rest  $4e           ($9254 encoded)              |
          -----------------------------------------------------'

     1mDEVIATIONS 
          0mThe TD_REMCHANGEINT command works.  (It doesn't with the 1.2
          or 1.3 trackdisk.device).  




     KosmoSoft                        -2-                      Version 34.5


     messydisk.device()    Amiga Programmer's Manual     messydisk.device()


          The   messydisk   Unit   structure   does   not   look  like
          TDU_PublicUnit at all.  

          In some situations, error returns may be different  or  less
          specific.  

          Data  buffers  to be read or written currently don't need to
          be in Chip memory.  This might change in the  future.    For
          future  compatibility  and  with  the  trackdisk.device  you
          should not depend on this.  

          In order to be able to format a  track  with  a  nonstandard
          number of sectors (from 8 to 10), you must use the TD_FORMAT
          command  with  less than 40 sectors (20480 bytes) at a time.
          Since you must always format entire tracks at a  time,  this
          uniquely  determines  the number of sectors you want on each
          track.  The current number of sectors per track, which  will
          be  used  later  when reading from the same disk, is updated
          accordingly.   If  you   specify   40   sectors   or   more,
          messydisk.device does not attempt to guess what you want but
          simply uses  the  value  that  was already set.  So, you may
          choose to first  format  a  single  track  to  indicate  the
          desired  number  of  sectors per track, and then in one call
          format the entire rest of the disk.  

          When a disk with more or less than 9 sectors  per  track  is
          read,  you must first issue a CMD_READ command for the first
          sector(s) of  the   disk.      When   track   0   is   read,
          messydisk.device  determines how many sectors there are on a
          track.  This number is then used afterwards when calculating
          the tracks and sides of other sectors.   So,  this  is  very
          important.  But for those (virtually impossible) cases where
          not  all tracks have the same number of sectors, all sectors
          that  were  read  on  any  track  will  be   written   back.
          Fortunately,   all  currently  known  file  systems  have  a
          bootblock  at  track  0,  side  0,   so   they   all   adapt
          transparently.  

     1mCAVEATS 
          0mThe (outdated) TD_REMOVE command is routed to trackdisk.  As
          a  result of this, only one disk remove interrupt (per unit)
          may  be  installed  (with  this  command),  whether  through
          trackdisk or  messydisk.    (This  seems  to  have  been the
          original  intention  of  TD_REMOVE.)  Of   course,   current
          programs should use TD_ADDCHANGEINT.  

     1mUTILITIES 
          0mA  separate  program  called  Ignore  is supplied, which may
          suppress the CRC check in any currently open unit.  When the
          unit is definitively closed and later reopened, ignoring CRC
          mismatches again has its default value of No.  

          Usage: ignore <unitnr> <YES/NO>

          If you only give the unit number, ignore will output  either
          Yes  or  No, reflecting whether CRC mismatches currently are
          ignored.  



     KosmoSoft                        -3-                      Version 34.5


     messydisk.device()    Amiga Programmer's Manual     messydisk.device()


          This program can be useful when you  wish  to  recover  data
          from a  damaged  or marginal disk.  Sometimes text files may
          be usable even if there are a few errors in them.  

     1mAUTHORS 
          0mMessydisk is written by 3mSourcerer 0mOlaf 3mRhialto 0mSeibert.  The
          low-level   writing  part  was  originally  done  by  Werner
          Gόnther. Used with permission.  




















































     KosmoSoft                        -4-                      Version 34.5

