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