home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD v1.2 / amidev_cd_12.iso / inc&ad2.0 / includes / devices / trackdisk.i < prev   
Text File  |  1992-09-01  |  7KB  |  251 lines

  1.     IFND    DEVICES_TRACKDISK_I
  2. DEVICES_TRACKDISK_I    SET    1
  3.  
  4. **
  5. **    $Filename: devices/trackdisk.i $
  6. **    $Release: 2.04 Includes, V37.4 $
  7. **    $Revision: 33.12 $
  8. **    $Date: 90/11/28 $
  9. **
  10. **    trackdisk device structure and value definitions
  11. **
  12. **    (C) Copyright 1985-1991 Commodore-Amiga, Inc.
  13. **        All Rights Reserved
  14. **
  15.  
  16.     IFND    EXEC_IO_I
  17.     INCLUDE    "exec/io.i"
  18.     ENDC    !EXEC_IO_I
  19.  
  20.     IFND    EXEC_DEVICES_I
  21.     INCLUDE    "exec/devices.i"
  22.     ENDC    !EXEC_DEVICES_I
  23.  
  24. *--------------------------------------------------------------------
  25. *
  26. * Physical drive constants
  27. *
  28. *--------------------------------------------------------------------
  29.  
  30.  
  31. * OBSOLETE -- only valid for 3 1/4" drives.  Use the TD_GETNUMTRACKS command!
  32. *
  33. *NUMCYLS        EQU    80        ; normal # of cylinders
  34. *MAXCYLS        EQU    NUMCYLS+20    ; max # of cyls to look for
  35. *                        ;    during a calibrate
  36. *NUMHEADS    EQU    2
  37. *NUMTRACKS    EQU    NUMCYLS*NUMHEADS
  38.  
  39. NUMSECS        EQU    11
  40. NUMUNITS    EQU    4
  41.  
  42. *--------------------------------------------------------------------
  43. *
  44. * Useful constants
  45. *
  46. *--------------------------------------------------------------------
  47.  
  48.  
  49. *-- sizes before mfm encoding
  50. TD_SECTOR    EQU    512
  51. TD_SECSHIFT    EQU    9            ; log TD_SECTOR
  52. *                        ;    2
  53.  
  54.  
  55. *--------------------------------------------------------------------
  56. *
  57. * Driver Specific Commands
  58. *
  59. *--------------------------------------------------------------------
  60.  
  61. *-- TD_NAME is a generic macro to get the name of the driver.  This
  62. *-- way if the name is ever changed you will pick up the change
  63. *-- automatically.
  64. *--
  65. *-- Normal usage would be:
  66. *--
  67. *-- internalName:    TD_NAME
  68. *--
  69.  
  70. TD_NAME:    MACRO
  71.         DC.B    'trackdisk.device',0
  72.         DS.W    0
  73.         ENDM
  74.  
  75.     BITDEF    TD,EXTCOM,15
  76.  
  77.     DEVINIT
  78.     DEVCMD    TD_MOTOR        ; control the disk's motor
  79.     DEVCMD    TD_SEEK            ; explicit seek (for testing)
  80.     DEVCMD    TD_FORMAT        ; format disk
  81.     DEVCMD    TD_REMOVE        ; notify when disk changes
  82.     DEVCMD    TD_CHANGENUM        ; number of disk changes
  83.     DEVCMD    TD_CHANGESTATE        ; is there a disk in the drive?
  84.     DEVCMD    TD_PROTSTATUS        ; is the disk write protected?
  85.     DEVCMD    TD_RAWREAD        ; read raw bits from the disk
  86.     DEVCMD    TD_RAWWRITE        ; write raw bits to the disk
  87.     DEVCMD    TD_GETDRIVETYPE        ; get the type of the disk drive
  88.     DEVCMD    TD_GETNUMTRACKS        ; get the # of tracks on this disk
  89.     DEVCMD    TD_ADDCHANGEINT        ; TD_REMOVE done right
  90.     DEVCMD    TD_REMCHANGEINT        ; removes softint set by ADDCHANGEINT
  91.     DEVCMD    TD_GETGEOMETRY        ; gets the disk geometry table
  92.     DEVCMD    TD_EJECT        ; for those drives that support it
  93.     DEVCMD    TD_LASTCOMM        ; dummy placeholder for end of list
  94.  
  95.  
  96. *
  97. *
  98. * The disk driver has an "extended command" facility.  These commands
  99. * take a superset of the normal IO Request block.
  100. *
  101. ETD_WRITE    EQU    (CMD_WRITE!TDF_EXTCOM)
  102. ETD_READ    EQU    (CMD_READ!TDF_EXTCOM)
  103. ETD_MOTOR    EQU    (TD_MOTOR!TDF_EXTCOM)
  104. ETD_SEEK    EQU    (TD_SEEK!TDF_EXTCOM)
  105. ETD_FORMAT    EQU    (TD_FORMAT!TDF_EXTCOM)
  106. ETD_UPDATE    EQU    (CMD_UPDATE!TDF_EXTCOM)
  107. ETD_CLEAR    EQU    (CMD_CLEAR!TDF_EXTCOM)
  108. ETD_RAWREAD    EQU    (TD_RAWREAD!TDF_EXTCOM)
  109. ETD_RAWWRITE    EQU    (TD_RAWWRITE!TDF_EXTCOM)
  110.  
  111.  
  112. *
  113. * extended IO has a larger than normal io request block.
  114. *
  115.  
  116.  STRUCTURE IOEXTTD,IOSTD_SIZE
  117.     ULONG    IOTD_COUNT    ; removal/insertion count
  118.     ULONG    IOTD_SECLABEL    ; sector label data region
  119.     LABEL    IOTD_SIZE
  120.  
  121.  
  122. *
  123. *  This is the structure returned by TD_DRIVEGEOMETRY
  124. *  Note that the layout can be defined three ways:
  125. *
  126. *  1. TotalSectors
  127. *  2. Cylinders and CylSectors
  128. *  3. Cylinders, Heads, and TrackSectors.
  129. *
  130. *  #1 is most accurate, #2 is less so, and #3 is least accurate.  All
  131. *  are usable, though #2 and #3 may waste some portion of the available
  132. *  space on some drives. 
  133. *
  134.  
  135.  STRUCTURE DriveGeometry,0
  136.     ULONG    dg_SectorSize        ; in bytes 
  137.     ULONG    dg_TotalSectors        ; total # of sectors on drive 
  138.     ULONG    dg_Cylinders        ; number of cylinders 
  139.     ULONG    dg_CylSectors        ; number of sectors/cylinder 
  140.     ULONG    dg_Heads        ; number of surfaces 
  141.     ULONG    dg_TrackSectors        ; number of sectors/track 
  142.     ULONG    dg_BufMemType        ; preferred buffer memory type 
  143.                     ; (usually MEMF_PUBLIC)
  144.     UBYTE    dg_DeviceType        ; codes as defined in the SCSI-2 spec
  145.     UBYTE    dg_Flags        ; flags, including removable 
  146.     UWORD    dg_Reserved
  147.  LABEL dg_SIZEOF
  148.  
  149. * device types
  150. DG_DIRECT_ACCESS    EQU    0
  151. DG_SEQUENTIAL_ACCESS    EQU    1
  152. DG_PRINTER        EQU    2
  153. DG_PROCESSOR        EQU    3
  154. DG_WORM            EQU    4
  155. DG_CDROM        EQU    5
  156. DG_SCANNER        EQU    6
  157. DG_OPTICAL_DISK        EQU    7
  158. DG_MEDIUM_CHANGER    EQU    8
  159. DG_COMMUNICATION    EQU    9
  160. DG_UNKNOWN        EQU    31
  161.  
  162. * flags
  163.  BITDEF DG,REMOVABLE,0
  164.  
  165.  
  166. *
  167. * raw read and write can be synced with the index pulse.  This flag
  168. * in io request's IO_FLAGS field tells the driver that you want this.
  169. *
  170.     BITDEF    IOTD,INDEXSYNC,4
  171. *
  172. * raw read and write can be synced with a $4489 sync pattern.  This flag
  173. * in io request's IO_FLAGS field tells the driver that you want this.
  174. *
  175.     BITDEF    IOTD,WORDSYNC,5
  176.  
  177. * labels are TD_LABELSIZE bytes per sector
  178.  
  179. TD_LABELSIZE    EQU    16
  180.  
  181. *
  182. * This is a bit in the FLAGS field of OpenDevice.  If it is set, then
  183. * the driver will allow you to open all the disks that the trackdisk
  184. * driver understands.  Otherwise only 3.5" disks will succeed.
  185. *
  186. *
  187.     BITDEF    TD,ALLOW_NON_3_5,0
  188.  
  189. *
  190. *  If you set the TDB_ALLOW_NON_3_5 bit in OpenDevice, then you don't
  191. *  know what type of disk you really got.  These defines are for the
  192. *  TD_GETDRIVETYPE command.  In addition, you can find out how many
  193. *  tracks are supported via the TD_GETNUMTRACKS command.
  194. *
  195. DRIVE3_5    EQU    1
  196. DRIVE5_25    EQU    2
  197. DRIVE3_5_150RPM    EQU    3
  198.  
  199. *--------------------------------------------------------------------
  200. *
  201. * Driver error defines
  202. *
  203. *--------------------------------------------------------------------
  204.  
  205. TDERR_NotSpecified    EQU    20    ; general catchall
  206. TDERR_NoSecHdr        EQU    21    ; couldn't even find a sector
  207. TDERR_BadSecPreamble    EQU    22    ; sector looked wrong
  208. TDERR_BadSecID        EQU    23    ; ditto
  209. TDERR_BadHdrSum        EQU    24    ; header had incorrect checksum
  210. TDERR_BadSecSum        EQU    25    ; data had incorrect checksum
  211. TDERR_TooFewSecs    EQU    26    ; couldn't find enough sectors
  212. TDERR_BadSecHdr        EQU    27    ; another "sector looked wrong"
  213. TDERR_WriteProt        EQU    28    ; can't write to a protected disk
  214. TDERR_DiskChanged    EQU    29    ; no disk in the drive
  215. TDERR_SeekError        EQU    30    ; couldn't find track 0
  216. TDERR_NoMem        EQU    31    ; ran out of memory
  217. TDERR_BadUnitNum    EQU    32    ; asked for a unit > NUMUNITS
  218. TDERR_BadDriveType    EQU    33    ; not a drive that trackdisk groks
  219. TDERR_DriveInUse    EQU    34    ; someone else allocated the drive
  220. TDERR_PostReset        EQU    35    ; user hit reset; awaiting doom
  221.  
  222. *--------------------------------------------------------------------
  223. *
  224. * Public portion of unit structure
  225. *
  226. *--------------------------------------------------------------------
  227.  
  228.  STRUCTURE TDU_PUBLICUNIT,UNIT_SIZE
  229.     UWORD    TDU_COMP01TRACK        ; track for first precomp
  230.     UWORD    TDU_COMP10TRACK        ; track for second precomp
  231.     UWORD    TDU_COMP11TRACK        ; track for third precomp
  232.     ULONG    TDU_STEPDELAY        ; time to wait after stepping
  233.     ULONG    TDU_SETTLEDELAY        ; time to wait after seeking
  234.     UBYTE    TDU_RETRYCNT        ; # of times to retry
  235.     UBYTE    TDU_PUBFLAGS        ; public flags, see below
  236.     UWORD    TDU_CURRTRK        ; track heads are over
  237.                     ;  (ONLY ACCESS WHILE UNIT IS STOPPED!)
  238.     ULONG    TDU_CALIBRATEDELAY    ; time to wait after stepping
  239.                     ; for recalibrate
  240.     ULONG    TDU_COUNTER        ; counter for disk changes
  241.                     ;  (ONLY ACCESS WHILE UNIT IS STOPPED!)
  242.     LABEL    TDU_PUBLICUNITSIZE
  243.  
  244.  
  245. *
  246. * Flags for TDU_PUBFLAGS:
  247. *
  248.     BITDEF    TDP,NOCLICK,0        ; set to enable noclickstart
  249.  
  250.     ENDC    ; DEVICE_TRACKDISK_I
  251.