IFND DEVICES_TRACKDISK_I DEVICES_TRACKDISK_I SET 1 ** ** $Filename: devices/trackdisk.i $ ** $Release: 2.04 Includes, V37.4 $ ** $Revision: 33.12 $ ** $Date: 90/11/28 $ ** ** trackdisk device structure and value definitions ** ** (C) Copyright 1985-1999 Amiga, Inc. ** All Rights Reserved ** IFND EXEC_IO_I INCLUDE "exec/io.i" ENDC !EXEC_IO_I IFND EXEC_DEVICES_I INCLUDE "exec/devices.i" ENDC !EXEC_DEVICES_I *-------------------------------------------------------------------- * * Physical drive constants * *-------------------------------------------------------------------- * OBSOLETE -- only valid for 3 1/4" drives. Use the TD_GETNUMTRACKS command! * *NUMCYLS EQU 80 ; normal # of cylinders *MAXCYLS EQU NUMCYLS+20 ; max # of cyls to look for * ; during a calibrate *NUMHEADS EQU 2 *NUMTRACKS EQU NUMCYLS*NUMHEADS NUMSECS EQU 11 NUMUNITS EQU 4 *-------------------------------------------------------------------- * * Useful constants * *-------------------------------------------------------------------- *-- sizes before mfm encoding TD_SECTOR EQU 512 TD_SECSHIFT EQU 9 ; log TD_SECTOR * ; 2 *-------------------------------------------------------------------- * * Driver Specific Commands * *-------------------------------------------------------------------- *-- TD_NAME is a generic macro to get the name of the driver. This *-- way if the name is ever changed you will pick up the change *-- automatically. *-- *-- Normal usage would be: *-- *-- internalName: TD_NAME *-- TD_NAME: MACRO DC.B 'trackdisk.device',0 DS.W 0 ENDM BITDEF TD,EXTCOM,15 DEVINIT DEVCMD TD_MOTOR ; control the disk's motor DEVCMD TD_SEEK ; explicit seek (for testing) DEVCMD TD_FORMAT ; format disk DEVCMD TD_REMOVE ; notify when disk changes DEVCMD TD_CHANGENUM ; number of disk changes DEVCMD TD_CHANGESTATE ; is there a disk in the drive? DEVCMD TD_PROTSTATUS ; is the disk write protected? DEVCMD TD_RAWREAD ; read raw bits from the disk DEVCMD TD_RAWWRITE ; write raw bits to the disk DEVCMD TD_GETDRIVETYPE ; get the type of the disk drive DEVCMD TD_GETNUMTRACKS ; get the # of tracks on this disk DEVCMD TD_ADDCHANGEINT ; TD_REMOVE done right DEVCMD TD_REMCHANGEINT ; removes softint set by ADDCHANGEINT DEVCMD TD_GETGEOMETRY ; gets the disk geometry table DEVCMD TD_EJECT ; for those drives that support it DEVCMD TD_LASTCOMM ; dummy placeholder for end of list * * * The disk driver has an "extended command" facility. These commands * take a superset of the normal IO Request block. * ETD_WRITE EQU (CMD_WRITE!TDF_EXTCOM) ETD_READ EQU (CMD_READ!TDF_EXTCOM) ETD_MOTOR EQU (TD_MOTOR!TDF_EXTCOM) ETD_SEEK EQU (TD_SEEK!TDF_EXTCOM) ETD_FORMAT EQU (TD_FORMAT!TDF_EXTCOM) ETD_UPDATE EQU (CMD_UPDATE!TDF_EXTCOM) ETD_CLEAR EQU (CMD_CLEAR!TDF_EXTCOM) ETD_RAWREAD EQU (TD_RAWREAD!TDF_EXTCOM) ETD_RAWWRITE EQU (TD_RAWWRITE!TDF_EXTCOM) * * extended IO has a larger than normal io request block. * STRUCTURE IOEXTTD,IOSTD_SIZE ULONG IOTD_COUNT ; removal/insertion count ULONG IOTD_SECLABEL ; sector label data region LABEL IOTD_SIZE * * This is the structure returned by TD_DRIVEGEOMETRY * Note that the layout can be defined three ways: * * 1. TotalSectors * 2. Cylinders and CylSectors * 3. Cylinders, Heads, and TrackSectors. * * #1 is most accurate, #2 is less so, and #3 is least accurate. All * are usable, though #2 and #3 may waste some portion of the available * space on some drives. * STRUCTURE DriveGeometry,0 ULONG dg_SectorSize ; in bytes ULONG dg_TotalSectors ; total # of sectors on drive ULONG dg_Cylinders ; number of cylinders ULONG dg_CylSectors ; number of sectors/cylinder ULONG dg_Heads ; number of surfaces ULONG dg_TrackSectors ; number of sectors/track ULONG dg_BufMemType ; preferred buffer memory type ; (usually MEMF_PUBLIC) UBYTE dg_DeviceType ; codes as defined in the SCSI-2 spec UBYTE dg_Flags ; flags, including removable UWORD dg_Reserved LABEL dg_SIZEOF * device types DG_DIRECT_ACCESS EQU 0 DG_SEQUENTIAL_ACCESS EQU 1 DG_PRINTER EQU 2 DG_PROCESSOR EQU 3 DG_WORM EQU 4 DG_CDROM EQU 5 DG_SCANNER EQU 6 DG_OPTICAL_DISK EQU 7 DG_MEDIUM_CHANGER EQU 8 DG_COMMUNICATION EQU 9 DG_UNKNOWN EQU 31 * flags BITDEF DG,REMOVABLE,0 * * raw read and write can be synced with the index pulse. This flag * in io request's IO_FLAGS field tells the driver that you want this. * BITDEF IOTD,INDEXSYNC,4 * * raw read and write can be synced with a $4489 sync pattern. This flag * in io request's IO_FLAGS field tells the driver that you want this. * BITDEF IOTD,WORDSYNC,5 * labels are TD_LABELSIZE bytes per sector TD_LABELSIZE EQU 16 * * This is a bit in the FLAGS field of OpenDevice. If it is set, then * the driver will allow you to open all the disks that the trackdisk * driver understands. Otherwise only 3.5" disks will succeed. * * BITDEF TD,ALLOW_NON_3_5,0 * * If you set the TDB_ALLOW_NON_3_5 bit in OpenDevice, then you don't * know what type of disk you really got. These defines are for the * TD_GETDRIVETYPE command. In addition, you can find out how many * tracks are supported via the TD_GETNUMTRACKS command. * DRIVE3_5 EQU 1 DRIVE5_25 EQU 2 DRIVE3_5_150RPM EQU 3 *-------------------------------------------------------------------- * * Driver error defines * *-------------------------------------------------------------------- TDERR_NotSpecified EQU 20 ; general catchall TDERR_NoSecHdr EQU 21 ; couldn't even find a sector TDERR_BadSecPreamble EQU 22 ; sector looked wrong TDERR_BadSecID EQU 23 ; ditto TDERR_BadHdrSum EQU 24 ; header had incorrect checksum TDERR_BadSecSum EQU 25 ; data had incorrect checksum TDERR_TooFewSecs EQU 26 ; couldn't find enough sectors TDERR_BadSecHdr EQU 27 ; another "sector looked wrong" TDERR_WriteProt EQU 28 ; can't write to a protected disk TDERR_DiskChanged EQU 29 ; no disk in the drive TDERR_SeekError EQU 30 ; couldn't find track 0 TDERR_NoMem EQU 31 ; ran out of memory TDERR_BadUnitNum EQU 32 ; asked for a unit > NUMUNITS TDERR_BadDriveType EQU 33 ; not a drive that trackdisk groks TDERR_DriveInUse EQU 34 ; someone else allocated the drive TDERR_PostReset EQU 35 ; user hit reset; awaiting doom *-------------------------------------------------------------------- * * Public portion of unit structure * *-------------------------------------------------------------------- STRUCTURE TDU_PUBLICUNIT,UNIT_SIZE UWORD TDU_COMP01TRACK ; track for first precomp UWORD TDU_COMP10TRACK ; track for second precomp UWORD TDU_COMP11TRACK ; track for third precomp ULONG TDU_STEPDELAY ; time to wait after stepping ULONG TDU_SETTLEDELAY ; time to wait after seeking UBYTE TDU_RETRYCNT ; # of times to retry UBYTE TDU_PUBFLAGS ; public flags, see below UWORD TDU_CURRTRK ; track heads are over ; (ONLY ACCESS WHILE UNIT IS STOPPED!) ULONG TDU_CALIBRATEDELAY ; time to wait after stepping ; for recalibrate ULONG TDU_COUNTER ; counter for disk changes ; (ONLY ACCESS WHILE UNIT IS STOPPED!) LABEL TDU_PUBLICUNITSIZE * * Flags for TDU_PUBFLAGS: * BITDEF TDP,NOCLICK,0 ; set to enable noclickstart ENDC ; DEVICE_TRACKDISK_I