home *** CD-ROM | disk | FTP | other *** search
-
- ;************************************************************************
- ; ;
- ; Copyright (C) 1985, Commodore Amiga Inc. All rights reserved. ;
- ; ;
- ;************************************************************************
-
-
- ;************************************************************************
- ;
- ; trackdisk.i
- ;
- ; Source Control
- ; ------ -------
- ;
- ; $Header: trackdisk.i,v 33.3 86/04/10 00:57:43 neil Exp $
- ;
- ; $Locker: $
- ;
- ;************************************************************************
-
- IFND DEVICES_TRACKDISK_I@
- DEVICES_TRACKDISK_I@ = 1
-
- IFND EXEC_IO_I@
- INCLUDE "exec/io.i"
- ENDIF
-
- IFND EXEC_DEVICES_I@
- INCLUDE "exec/devices.i"
- ENDIF
-
- ;--------------------------------------------------------------------
- ;
- ; 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
- TDB_EXTCOM = 15
- TDF_EXTCOM = 1<<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_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
-
- ;
- ; 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
- IOTDB_INDEXSYNC = 4
- IOTDF_INDEXSYNC = 1<<4
-
- ; 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
- TDB_ALLOW_NON_3_5 = 0
- TDF_ALLOW_NON_3_5 = 1<<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
-
- ;--------------------------------------------------------------------
- ;
- ; 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
- LABEL TDU_PUBLICUNITSIZE
-
- ENDIF DEVICE_TRACKDISK_I
- END
-